From ae770e0df5b64e2da3b92d8126eb9dbdc72118dc Mon Sep 17 00:00:00 2001 From: n64 Date: Thu, 17 Aug 2023 08:56:02 -0400 Subject: [PATCH] Refresh 16 --- CHANGES | 26 + Dockerfile | 3 +- Jenkinsfile | 16 +- Makefile | 271 +- Makefile.split | 3 + README.md | 27 +- actors/amp/geo.inc.c | 100 +- actors/bird/geo.inc.c | 40 +- actors/blargg/geo.inc.c | 30 +- actors/blue_coin_switch/geo.inc.c | 14 +- actors/blue_fish/geo.inc.c | 46 +- actors/bobomb/geo.inc.c | 172 +- actors/bomb/geo.inc.c | 24 +- actors/boo/geo.inc.c | 28 +- actors/boo_castle/geo.inc.c | 28 +- actors/book/geo.inc.c | 10 +- actors/bookend/geo.inc.c | 40 +- actors/bowling_ball/geo.inc.c | 32 +- actors/bowser/flames_data.inc.c | 184 +- actors/bowser/geo.inc.c | 660 +- actors/bowser_flame/geo.inc.c | 42 +- actors/bowser_key/geo.inc.c | 44 +- actors/breakable_box/geo.inc.c | 42 +- actors/bub/geo.inc.c | 34 +- actors/bubba/geo.inc.c | 18 +- actors/bubble/geo.inc.c | 20 +- actors/bullet_bill/geo.inc.c | 16 +- actors/bully/geo.inc.c | 156 +- actors/burn_smoke/geo.inc.c | 10 +- actors/butterfly/geo.inc.c | 40 +- actors/cannon_barrel/geo.inc.c | 10 +- actors/cannon_base/geo.inc.c | 10 +- actors/capswitch/geo.inc.c | 24 +- actors/chain_ball/geo.inc.c | 10 +- actors/chain_chomp/geo.inc.c | 38 +- actors/chair/geo.inc.c | 48 +- actors/checkerboard_platform/geo.inc.c | 10 +- actors/chillychief/geo.inc.c | 156 +- actors/chuckya/geo.inc.c | 204 +- actors/clam_shell/geo.inc.c | 30 +- actors/coin/geo.inc.c | 180 +- actors/cyan_fish/geo.inc.c | 26 +- actors/dirt/geo.inc.c | 50 +- actors/door/geo.inc.c | 510 +- actors/dorrie/geo.inc.c | 94 +- actors/exclamation_box/geo.inc.c | 28 +- actors/exclamation_box_outline/geo.inc.c | 30 +- actors/explosion/geo.inc.c | 32 +- actors/eyerok/geo.inc.c | 232 +- actors/flame/geo.inc.c | 70 +- actors/flyguy/geo.inc.c | 48 +- actors/fwoosh/geo.inc.c | 10 +- actors/goomba/geo.inc.c | 60 +- actors/haunted_cage/geo.inc.c | 20 +- actors/heart/geo.inc.c | 10 +- actors/heave_ho/geo.inc.c | 108 +- actors/hoot/geo.inc.c | 114 +- actors/impact_ring/geo.inc.c | 12 +- actors/impact_smoke/geo.inc.c | 26 +- actors/king_bobomb/geo.inc.c | 200 +- actors/klepto/geo.inc.c | 178 +- actors/koopa/geo.inc.c | 176 +- actors/koopa_flag/geo.inc.c | 50 +- actors/koopa_shell/geo.inc.c | 48 +- actors/lakitu_cameraman/geo.inc.c | 72 +- actors/lakitu_enemy/geo.inc.c | 58 +- actors/leaves/geo.inc.c | 10 +- actors/mad_piano/geo.inc.c | 32 +- actors/manta/geo.inc.c | 106 +- actors/mario/geo.inc.c | 3064 +++--- actors/mario_cap/geo.inc.c | 124 +- actors/metal_box/geo.inc.c | 16 +- actors/mips/geo.inc.c | 98 +- actors/mist/geo.inc.c | 24 +- actors/moneybag/geo.inc.c | 92 +- actors/monty_mole/geo.inc.c | 72 +- actors/mr_i_eyeball/geo.inc.c | 10 +- actors/mr_i_iris/geo.inc.c | 54 +- actors/mushroom_1up/geo.inc.c | 10 +- actors/number/geo.inc.c | 34 +- actors/peach/geo.inc.c | 262 +- actors/penguin/geo.inc.c | 48 +- actors/piranha_plant/geo.inc.c | 76 +- actors/pokey/geo.inc.c | 28 +- actors/poundable_pole/geo.inc.c | 10 +- actors/power_meter/model.inc.c | 17 + actors/purple_switch/geo.inc.c | 10 +- actors/scuttlebug/geo.inc.c | 206 +- actors/seaweed/geo.inc.c | 30 +- actors/skeeter/geo.inc.c | 180 +- actors/small_key/geo.inc.c | 16 +- actors/snowman/geo.inc.c | 92 +- actors/snufit/geo.inc.c | 44 +- actors/sparkle/geo.inc.c | 32 +- actors/sparkle_animation/geo.inc.c | 26 +- actors/spindrift/geo.inc.c | 60 +- actors/spiny/geo.inc.c | 104 +- actors/spiny_egg/geo.inc.c | 36 +- actors/springboard/geo.inc.c | 30 +- actors/star/geo.inc.c | 18 +- actors/stomp_smoke/geo.inc.c | 42 +- actors/sushi/geo.inc.c | 46 +- actors/swoop/geo.inc.c | 52 +- actors/thwomp/geo.inc.c | 10 +- actors/toad/geo.inc.c | 226 +- actors/tornado/geo.inc.c | 2 +- actors/transparent_star/geo.inc.c | 16 +- actors/treasure_chest/geo.inc.c | 20 +- actors/tree/geo.inc.c | 50 +- actors/ukiki/geo.inc.c | 172 +- actors/unagi/geo.inc.c | 92 +- actors/walk_smoke/geo.inc.c | 22 +- actors/warp_pipe/geo.inc.c | 12 +- actors/water_bubble/geo.inc.c | 24 +- actors/water_mine/geo.inc.c | 18 +- actors/water_ring/geo.inc.c | 18 +- actors/water_splash/geo.inc.c | 24 +- actors/water_wave/geo.inc.c | 44 +- actors/white_particle/geo.inc.c | 10 +- actors/whomp/geo.inc.c | 98 +- actors/wiggler_body/geo.inc.c | 54 +- actors/wiggler_head/geo.inc.c | 112 +- actors/wooden_signpost/geo.inc.c | 18 +- actors/yellow_sphere/geo.inc.c | 16 +- actors/yellow_sphere_small/geo.inc.c | 10 +- actors/yoshi/geo.inc.c | 136 +- actors/yoshi_egg/geo.inc.c | 30 +- asm/boot.s | 484 +- asm/decompress.s | 5 +- asm/entry.s | 21 +- asm/ipl3_font.s | 56 + asm/rom_header.s | 8 + assets.json | 5359 ++++++--- assets/demo_data.json | 4 +- bin/segment2.c | 9744 ++++++++++++++++- bin/title_screen_bg.c | 48 +- charmap.txt | 1673 ++- charmap_menu.txt | 4 +- data/behavior_data.c | 198 +- diff_settings.py | 2 + enhancements/README.md | 4 +- enhancements/crash.patch | 18 +- enhancements/ique_support.patch | 312 - enhancements/mem_error_screen.patch | 34 +- extract_assets.py | 20 +- first-diff.py | 9 +- include/PR/abi.h | 4 +- include/PR/ique.h | 37 + include/PR/libaudio.h | 6 +- include/PR/os.h | 112 +- include/PR/os_cont.h | 8 +- include/PR/os_libc.h | 8 + include/PR/os_message.h | 15 +- include/PR/os_motor.h | 75 + include/PR/os_pfs.h | 123 + include/PR/os_pi.h | 2 +- include/PR/os_thread.h | 4 + include/PR/os_time.h | 2 +- include/PR/os_vi.h | 22 +- include/PR/rcp.h | 1 + include/PR/rdb.h | 94 + include/PR/sptask.h | 2 +- include/PR/ultratypes.h | 4 + include/behavior_data.h | 137 +- include/config.h | 29 +- include/dialog_ids.h | 2 +- include/geo_commands.h | 4 +- include/level_commands.h | 22 +- include/level_misc_macros.h | 6 +- include/libc/stdarg.h | 247 +- include/macro_preset_names.h | 373 - include/macro_presets.h | 744 +- include/macro_presets.inc.c | 379 + include/macros.h | 19 + include/macros.inc | 10 +- include/model_ids.h | 5 - include/object_constants.h | 482 +- include/object_fields.h | 68 +- include/segment_symbols.h | 7 + include/segments.h | 50 +- include/seq_macros.inc | 4 +- include/sounds.h | 2 +- include/special_preset_names.h | 93 - include/special_presets.h | 188 +- include/special_presets.inc.c | 104 + include/surface_terrains.h | 6 +- include/text_menu_strings.h.in | 4 +- include/text_strings.h.in | 117 +- include/types.h | 25 +- include/ultra64.h | 2 + levels/bbh/areas/1/geo.inc.c | 786 +- levels/bbh/areas/1/macro.inc.c | 68 +- levels/bbh/areas/1/room.inc.c | 2 +- levels/bbh/coffin/geo.inc.c | 10 +- levels/bbh/header.h | 2 +- levels/bbh/leveldata.c | 4 +- levels/bbh/merry_go_round/geo.inc.c | 10 +- levels/bbh/mesh_elevator/geo.inc.c | 10 +- levels/bbh/moving_bookshelf/geo.inc.c | 10 +- levels/bbh/script.c | 112 +- levels/bbh/staircase_step/geo.inc.c | 10 +- levels/bbh/tilting_trap_platform/geo.inc.c | 10 +- levels/bbh/tumbling_platform_far/geo.inc.c | 10 +- levels/bbh/tumbling_platform_near/geo.inc.c | 10 +- levels/bitdw/areas/1/geo.inc.c | 42 +- levels/bitdw/areas/1/large_platform/geo.inc.c | 10 +- levels/bitdw/areas/1/macro.inc.c | 118 +- .../areas/1/narrow_path_platform/geo.inc.c | 10 +- .../areas/1/octogonal_platform/geo.inc.c | 10 +- .../areas/1/platform_with_hill/geo.inc.c | 10 +- .../areas/1/platforms_and_tilting/geo.inc.c | 10 +- .../areas/1/platforms_and_tilting_2/geo.inc.c | 10 +- levels/bitdw/areas/1/quartz_crystal/geo.inc.c | 10 +- levels/bitdw/areas/1/quartzy_path_1/geo.inc.c | 10 +- levels/bitdw/areas/1/quartzy_path_2/geo.inc.c | 10 +- .../areas/1/quartzy_path_fences/geo.inc.c | 10 +- .../1/staircase_slope_and_platform/geo.inc.c | 10 +- .../bitdw/areas/1/starting_platform/geo.inc.c | 10 +- .../1/track_for_pyramid_platforms/geo.inc.c | 10 +- .../1/wooden_bridge_and_fences/geo.inc.c | 10 +- .../bitdw/areas/1/wooden_platform/geo.inc.c | 10 +- levels/bitdw/collapsing_stairs_1/geo.inc.c | 10 +- levels/bitdw/collapsing_stairs_2/geo.inc.c | 10 +- levels/bitdw/collapsing_stairs_3/geo.inc.c | 10 +- levels/bitdw/collapsing_stairs_4/geo.inc.c | 10 +- levels/bitdw/collapsing_stairs_5/geo.inc.c | 10 +- levels/bitdw/ferris_platform/geo.inc.c | 10 +- levels/bitdw/ferris_wheel_axle/geo.inc.c | 10 +- levels/bitdw/leveldata.c | 4 +- levels/bitdw/script.c | 62 +- levels/bitdw/seesaw_platform/geo.inc.c | 10 +- levels/bitdw/sliding_platform/geo.inc.c | 10 +- levels/bitdw/square_platform/geo.inc.c | 10 +- levels/bitfs/areas/1/10/geo.inc.c | 10 +- levels/bitfs/areas/1/11/geo.inc.c | 10 +- levels/bitfs/areas/1/12/geo.inc.c | 10 +- levels/bitfs/areas/1/13/geo.inc.c | 10 +- levels/bitfs/areas/1/14/geo.inc.c | 10 +- levels/bitfs/areas/1/15/geo.inc.c | 10 +- levels/bitfs/areas/1/16/geo.inc.c | 10 +- levels/bitfs/areas/1/17/geo.inc.c | 10 +- levels/bitfs/areas/1/18/geo.inc.c | 10 +- levels/bitfs/areas/1/19/geo.inc.c | 10 +- levels/bitfs/areas/1/2/geo.inc.c | 10 +- levels/bitfs/areas/1/20/geo.inc.c | 10 +- levels/bitfs/areas/1/3/geo.inc.c | 10 +- levels/bitfs/areas/1/4/geo.inc.c | 10 +- levels/bitfs/areas/1/5/geo.inc.c | 10 +- levels/bitfs/areas/1/6/geo.inc.c | 10 +- levels/bitfs/areas/1/7/geo.inc.c | 10 +- levels/bitfs/areas/1/8/geo.inc.c | 10 +- levels/bitfs/areas/1/9/geo.inc.c | 10 +- levels/bitfs/areas/1/geo.inc.c | 50 +- levels/bitfs/areas/1/macro.inc.c | 80 +- levels/bitfs/elevator/geo.inc.c | 10 +- levels/bitfs/leveldata.c | 4 +- levels/bitfs/moving_square_platform/geo.inc.c | 10 +- levels/bitfs/platform_on_track/geo.inc.c | 10 +- levels/bitfs/script.c | 80 +- levels/bitfs/seesaw_platform/geo.inc.c | 10 +- levels/bitfs/sinking_cage_platform/geo.inc.c | 10 +- levels/bitfs/sinking_cage_pole/geo.inc.c | 10 +- levels/bitfs/sinking_platforms/geo.inc.c | 10 +- levels/bitfs/sliding_platform/geo.inc.c | 10 +- levels/bitfs/stretching_platform/geo.inc.c | 12 +- .../bitfs/tilting_square_platform/geo.inc.c | 10 +- levels/bitfs/tumbling_platform_far/geo.inc.c | 10 +- levels/bitfs/tumbling_platform_near/geo.inc.c | 10 +- levels/bits/areas/1/10/geo.inc.c | 10 +- levels/bits/areas/1/11/geo.inc.c | 10 +- levels/bits/areas/1/12/geo.inc.c | 10 +- levels/bits/areas/1/13/geo.inc.c | 10 +- levels/bits/areas/1/14/geo.inc.c | 10 +- levels/bits/areas/1/15/geo.inc.c | 10 +- levels/bits/areas/1/16/geo.inc.c | 10 +- levels/bits/areas/1/17/geo.inc.c | 10 +- levels/bits/areas/1/18/geo.inc.c | 10 +- levels/bits/areas/1/19/geo.inc.c | 10 +- levels/bits/areas/1/2/geo.inc.c | 10 +- levels/bits/areas/1/20/geo.inc.c | 10 +- levels/bits/areas/1/21/geo.inc.c | 10 +- levels/bits/areas/1/22/geo.inc.c | 10 +- levels/bits/areas/1/23/geo.inc.c | 10 +- levels/bits/areas/1/24/geo.inc.c | 10 +- levels/bits/areas/1/25/geo.inc.c | 10 +- levels/bits/areas/1/26/geo.inc.c | 10 +- levels/bits/areas/1/27/geo.inc.c | 10 +- levels/bits/areas/1/28/geo.inc.c | 10 +- levels/bits/areas/1/29/geo.inc.c | 10 +- levels/bits/areas/1/3/geo.inc.c | 10 +- levels/bits/areas/1/30/geo.inc.c | 10 +- levels/bits/areas/1/31/geo.inc.c | 10 +- levels/bits/areas/1/32/geo.inc.c | 10 +- levels/bits/areas/1/4/geo.inc.c | 10 +- levels/bits/areas/1/5/geo.inc.c | 10 +- levels/bits/areas/1/6/geo.inc.c | 10 +- levels/bits/areas/1/7/geo.inc.c | 10 +- levels/bits/areas/1/8/geo.inc.c | 10 +- levels/bits/areas/1/9/geo.inc.c | 10 +- levels/bits/areas/1/geo.inc.c | 42 +- levels/bits/areas/1/macro.inc.c | 112 +- levels/bits/leveldata.c | 4 +- levels/bits/script.c | 68 +- levels/bob/areas/1/geo.inc.c | 60 +- levels/bob/areas/1/macro.inc.c | 176 +- levels/bob/chain_chomp_gate/geo.inc.c | 10 +- levels/bob/grate_door/geo.inc.c | 10 +- levels/bob/level.yaml | 4 +- levels/bob/leveldata.c | 4 +- levels/bob/script.c | 92 +- levels/bob/seesaw_platform/geo.inc.c | 10 +- levels/bowser_1/areas/1/geo.inc.c | 42 +- levels/bowser_1/leveldata.c | 4 +- levels/bowser_1/script.c | 12 +- levels/bowser_2/areas/1/geo.inc.c | 42 +- levels/bowser_2/leveldata.c | 4 +- levels/bowser_2/script.c | 30 +- levels/bowser_2/tilting_platform/geo.inc.c | 10 +- levels/bowser_3/areas/1/bomb_stand/geo.inc.c | 10 +- levels/bowser_3/areas/1/geo.inc.c | 42 +- levels/bowser_3/falling_platform_1/geo.inc.c | 10 +- levels/bowser_3/falling_platform_10/geo.inc.c | 10 +- levels/bowser_3/falling_platform_2/geo.inc.c | 10 +- levels/bowser_3/falling_platform_3/geo.inc.c | 10 +- levels/bowser_3/falling_platform_4/geo.inc.c | 10 +- levels/bowser_3/falling_platform_5/geo.inc.c | 10 +- levels/bowser_3/falling_platform_6/geo.inc.c | 10 +- levels/bowser_3/falling_platform_7/geo.inc.c | 10 +- levels/bowser_3/falling_platform_8/geo.inc.c | 10 +- levels/bowser_3/falling_platform_9/geo.inc.c | 10 +- levels/bowser_3/leveldata.c | 4 +- levels/bowser_3/script.c | 40 +- .../castle_courtyard/areas/1/collision.inc.c | 2 +- levels/castle_courtyard/areas/1/geo.inc.c | 50 +- levels/castle_courtyard/areas/1/macro.inc.c | 8 +- .../castle_courtyard/areas/1/spire/geo.inc.c | 10 +- levels/castle_courtyard/leveldata.c | 4 +- levels/castle_courtyard/script.c | 42 +- levels/castle_grounds/areas/1/11/geo.inc.c | 44 +- levels/castle_grounds/areas/1/3/geo.inc.c | 10 +- levels/castle_grounds/areas/1/7/geo.inc.c | 10 +- levels/castle_grounds/areas/1/8/geo.inc.c | 10 +- levels/castle_grounds/areas/1/collision.inc.c | 6 +- levels/castle_grounds/areas/1/geo.inc.c | 68 +- levels/castle_grounds/areas/1/macro.inc.c | 34 +- levels/castle_grounds/leveldata.c | 4 +- levels/castle_grounds/script.c | 142 +- levels/castle_inside/areas/1/collision.inc.c | 6 +- levels/castle_inside/areas/1/geo.inc.c | 456 +- levels/castle_inside/areas/1/macro.inc.c | 24 +- levels/castle_inside/areas/1/room.inc.c | 2 +- levels/castle_inside/areas/2/geo.inc.c | 302 +- levels/castle_inside/areas/2/macro.inc.c | 2 +- .../castle_inside/areas/2/pendulum/geo.inc.c | 10 +- levels/castle_inside/areas/2/room.inc.c | 2 +- levels/castle_inside/areas/3/collision.inc.c | 2 +- levels/castle_inside/areas/3/geo.inc.c | 280 +- levels/castle_inside/areas/3/macro.inc.c | 12 +- levels/castle_inside/areas/3/room.inc.c | 2 +- .../castle_inside/clock_hour_hand/geo.inc.c | 10 +- .../castle_inside/clock_minute_hand/geo.inc.c | 10 +- levels/castle_inside/header.h | 6 +- levels/castle_inside/leveldata.c | 4 +- levels/castle_inside/painting.inc.c | 2 +- levels/castle_inside/script.c | 434 +- levels/castle_inside/star_door/geo.inc.c | 10 +- levels/castle_inside/trap_door/geo.inc.c | 10 +- .../water_level_pillar/geo.inc.c | 10 +- levels/ccm/areas/1/10/geo.inc.c | 20 +- levels/ccm/areas/1/6/geo.inc.c | 18 +- levels/ccm/areas/1/7/geo.inc.c | 20 +- levels/ccm/areas/1/8/geo.inc.c | 16 +- levels/ccm/areas/1/9/geo.inc.c | 16 +- levels/ccm/areas/1/collision.inc.c | 2 +- levels/ccm/areas/1/geo.inc.c | 62 +- levels/ccm/areas/1/macro.inc.c | 74 +- levels/ccm/areas/2/collision.inc.c | 2 +- levels/ccm/areas/2/geo.inc.c | 54 +- levels/ccm/areas/2/macro.inc.c | 82 +- levels/ccm/level.yaml | 4 +- levels/ccm/leveldata.c | 4 +- levels/ccm/ropeway_lift/geo.inc.c | 12 +- levels/ccm/script.c | 82 +- levels/ccm/snowman_base/geo.inc.c | 10 +- levels/ccm/snowman_head/geo.inc.c | 12 +- levels/cotmc/areas/1/geo.inc.c | 50 +- levels/cotmc/areas/1/macro.inc.c | 42 +- levels/cotmc/leveldata.c | 4 +- levels/cotmc/script.c | 34 +- levels/course_defines.h | 16 +- levels/ddd/areas/1/geo.inc.c | 52 +- levels/ddd/areas/1/macro.inc.c | 36 +- levels/ddd/areas/2/geo.inc.c | 56 +- levels/ddd/areas/2/macro.inc.c | 92 +- levels/ddd/leveldata.c | 4 +- levels/ddd/pole/geo.inc.c | 16 +- levels/ddd/script.c | 84 +- levels/ddd/sub_door/geo.inc.c | 14 +- levels/ddd/submarine/geo.inc.c | 12 +- levels/ending/geo.c | 38 +- levels/ending/leveldata.c | 4 + levels/hmc/areas/1/geo.inc.c | 516 +- levels/hmc/areas/1/grill_door/geo.inc.c | 10 +- levels/hmc/areas/1/macro.inc.c | 168 +- levels/hmc/areas/1/painting.inc.c | 2 +- levels/hmc/areas/1/room.inc.c | 2 +- levels/hmc/arrow_platform/geo.inc.c | 10 +- levels/hmc/arrow_platform_button/geo.inc.c | 10 +- levels/hmc/elevator_platform/geo.inc.c | 10 +- levels/hmc/header.h | 2 +- levels/hmc/leveldata.c | 4 +- levels/hmc/rolling_rock/geo.inc.c | 16 +- levels/hmc/rolling_rock_fragment_1/geo.inc.c | 10 +- levels/hmc/rolling_rock_fragment_2/geo.inc.c | 10 +- levels/hmc/script.c | 102 +- levels/intro/geo.c | 198 +- levels/intro/leveldata.c | 5389 ++++++++- levels/intro/script.c | 10 +- levels/jrb/areas/1/geo.inc.c | 68 +- levels/jrb/areas/1/macro.inc.c | 124 +- levels/jrb/areas/2/geo.inc.c | 50 +- levels/jrb/areas/2/macro.inc.c | 2 +- levels/jrb/falling_pillar/geo.inc.c | 10 +- levels/jrb/falling_pillar_base/geo.inc.c | 10 +- levels/jrb/floating_platform/geo.inc.c | 10 +- levels/jrb/leveldata.c | 4 +- levels/jrb/rock/geo.inc.c | 10 +- levels/jrb/script.c | 186 +- levels/jrb/sliding_box/geo.inc.c | 10 +- levels/jrb/wooden_ship/geo.inc.c | 64 +- levels/level_defines.h | 10 +- levels/lll/areas/1/10/geo.inc.c | 10 +- levels/lll/areas/1/11/geo.inc.c | 10 +- levels/lll/areas/1/12/geo.inc.c | 10 +- levels/lll/areas/1/13/geo.inc.c | 10 +- levels/lll/areas/1/14/geo.inc.c | 10 +- levels/lll/areas/1/15/geo.inc.c | 10 +- levels/lll/areas/1/4/geo.inc.c | 10 +- levels/lll/areas/1/5/geo.inc.c | 10 +- levels/lll/areas/1/6/geo.inc.c | 10 +- levels/lll/areas/1/7/geo.inc.c | 10 +- levels/lll/areas/1/8/geo.inc.c | 12 +- levels/lll/areas/1/9/geo.inc.c | 10 +- levels/lll/areas/1/geo.inc.c | 50 +- levels/lll/areas/1/macro.inc.c | 102 +- levels/lll/areas/2/geo.inc.c | 56 +- levels/lll/areas/2/macro.inc.c | 8 +- .../lll/collapsing_wooden_platform/geo.inc.c | 10 +- levels/lll/drawbridge_part/geo.inc.c | 10 +- levels/lll/leveldata.c | 4 +- levels/lll/long_wooden_bridge/geo.inc.c | 10 +- .../moving_octagonal_mesh_platform/geo.inc.c | 10 +- levels/lll/puzzle_piece/geo.inc.c | 168 +- levels/lll/rolling_log/geo.inc.c | 10 +- levels/lll/rotating_block_fire_bars/geo.inc.c | 10 +- levels/lll/rotating_hexagonal_ring/geo.inc.c | 10 +- levels/lll/script.c | 184 +- .../sinking_rectangular_platform/geo.inc.c | 10 +- levels/lll/sinking_rock_block/geo.inc.c | 10 +- levels/lll/sinking_square_platform/geo.inc.c | 10 +- levels/lll/tilting_square_platform/geo.inc.c | 10 +- levels/lll/volcano_falling_trap/geo.inc.c | 10 +- levels/lll/wooden_float_large/geo.inc.c | 10 +- levels/lll/wooden_float_small/geo.inc.c | 10 +- levels/menu/geo.c | 260 +- levels/menu/leveldata.c | 12 + levels/menu/script.c | 8 +- levels/pss/areas/1/geo.inc.c | 54 +- levels/pss/areas/1/macro.inc.c | 82 +- levels/pss/level.yaml | 2 +- levels/pss/leveldata.c | 4 +- levels/pss/script.c | 22 +- levels/rr/areas/1/10/geo.inc.c | 10 +- levels/rr/areas/1/11/geo.inc.c | 12 +- levels/rr/areas/1/12/geo.inc.c | 10 +- levels/rr/areas/1/13/geo.inc.c | 10 +- levels/rr/areas/1/14/geo.inc.c | 10 +- levels/rr/areas/1/15/geo.inc.c | 10 +- levels/rr/areas/1/16/geo.inc.c | 10 +- levels/rr/areas/1/17/geo.inc.c | 10 +- levels/rr/areas/1/18/geo.inc.c | 10 +- levels/rr/areas/1/19/geo.inc.c | 10 +- levels/rr/areas/1/2/geo.inc.c | 10 +- levels/rr/areas/1/20/geo.inc.c | 10 +- levels/rr/areas/1/21/geo.inc.c | 10 +- levels/rr/areas/1/3/geo.inc.c | 10 +- levels/rr/areas/1/4/geo.inc.c | 10 +- levels/rr/areas/1/5/geo.inc.c | 10 +- levels/rr/areas/1/6/geo.inc.c | 10 +- levels/rr/areas/1/7/geo.inc.c | 10 +- levels/rr/areas/1/8/geo.inc.c | 10 +- levels/rr/areas/1/9/geo.inc.c | 10 +- levels/rr/areas/1/geo.inc.c | 52 +- levels/rr/areas/1/macro.inc.c | 122 +- levels/rr/cruiser_wing/geo.inc.c | 10 +- levels/rr/donut_block/geo.inc.c | 12 +- levels/rr/elevator_platform/geo.inc.c | 10 +- levels/rr/flying_carpet/geo.inc.c | 10 +- levels/rr/l_platform/geo.inc.c | 10 +- levels/rr/leveldata.c | 4 +- levels/rr/octagonal_platform/geo.inc.c | 10 +- levels/rr/pyramid_platform/geo.inc.c | 10 +- levels/rr/rotating_bridge_platform/geo.inc.c | 10 +- levels/rr/script.c | 112 +- levels/rr/seesaw_platform/geo.inc.c | 10 +- levels/rr/sliding_platform/geo.inc.c | 10 +- levels/rr/swinging_platform/geo.inc.c | 10 +- levels/rr/tricky_triangles_1/geo.inc.c | 10 +- levels/rr/tricky_triangles_2/geo.inc.c | 10 +- levels/rr/tricky_triangles_3/geo.inc.c | 10 +- levels/rr/tricky_triangles_4/geo.inc.c | 10 +- levels/rr/tricky_triangles_5/geo.inc.c | 10 +- levels/sa/areas/1/geo.inc.c | 44 +- levels/sa/areas/1/macro.inc.c | 34 +- levels/sa/leveldata.c | 4 +- levels/sa/script.c | 30 +- levels/scripts.c | 32 +- levels/sl/areas/1/geo.inc.c | 66 +- levels/sl/areas/1/macro.inc.c | 94 +- levels/sl/areas/2/geo.inc.c | 48 +- levels/sl/areas/2/macro.inc.c | 2 +- levels/sl/leveldata.c | 4 +- levels/sl/script.c | 84 +- levels/sl/snow_mound/geo.inc.c | 10 +- levels/sl/unused_cracked_ice/geo.inc.c | 10 +- levels/sl/unused_ice_shard/geo.inc.c | 10 +- levels/ssl/areas/1/5/geo.inc.c | 10 +- levels/ssl/areas/1/geo.inc.c | 70 +- levels/ssl/areas/1/macro.inc.c | 92 +- levels/ssl/areas/2/4/geo.inc.c | 24 +- levels/ssl/areas/2/geo.inc.c | 56 +- levels/ssl/areas/2/macro.inc.c | 100 +- levels/ssl/areas/3/geo.inc.c | 44 +- levels/ssl/eyerok_col/geo.inc.c | 1 - levels/ssl/grindel/geo.inc.c | 18 +- levels/ssl/leveldata.c | 5 +- levels/ssl/moving_pyramid_wall/geo.inc.c | 10 +- levels/ssl/pyramid_elevator/geo.inc.c | 12 +- levels/ssl/pyramid_top/geo.inc.c | 10 +- levels/ssl/script.c | 118 +- levels/ssl/spindel/geo.inc.c | 18 +- levels/ssl/tox_box/geo.inc.c | 10 +- levels/thi/areas/1/6/geo.inc.c | 26 +- levels/thi/areas/1/7/geo.inc.c | 10 +- levels/thi/areas/1/geo.inc.c | 62 +- levels/thi/areas/1/macro.inc.c | 80 +- levels/thi/areas/2/geo.inc.c | 60 +- levels/thi/areas/2/macro.inc.c | 70 +- levels/thi/areas/3/geo.inc.c | 48 +- levels/thi/leveldata.c | 4 +- levels/thi/script.c | 130 +- levels/totwc/areas/1/geo.inc.c | 46 +- levels/totwc/areas/1/macro.inc.c | 56 +- levels/totwc/cloud/geo.inc.c | 16 +- levels/totwc/leveldata.c | 4 +- levels/totwc/script.c | 28 +- levels/ttc/areas/1/geo.inc.c | 52 +- levels/ttc/areas/1/macro.inc.c | 220 +- levels/ttc/clock_hand/geo.inc.c | 10 +- levels/ttc/elevator_platform/geo.inc.c | 10 +- levels/ttc/large_gear/geo.inc.c | 10 +- levels/ttc/large_treadmill/geo.inc.c | 12 +- levels/ttc/leveldata.c | 4 +- levels/ttc/pendulum/geo.inc.c | 10 +- levels/ttc/pit_block/geo.inc.c | 10 +- levels/ttc/pit_block_2/geo.inc.c | 10 +- levels/ttc/push_block/geo.inc.c | 10 +- levels/ttc/rotating_cube/geo.inc.c | 10 +- levels/ttc/rotating_hexagon/geo.inc.c | 10 +- levels/ttc/rotating_prism/geo.inc.c | 10 +- levels/ttc/rotating_triangle/geo.inc.c | 10 +- levels/ttc/script.c | 36 +- levels/ttc/small_gear/geo.inc.c | 10 +- levels/ttc/small_treadmill/geo.inc.c | 12 +- levels/ttc/spinner/geo.inc.c | 10 +- levels/ttm/areas/1/10/geo.inc.c | 16 +- levels/ttm/areas/1/11/geo.inc.c | 16 +- levels/ttm/areas/1/12/geo.inc.c | 16 +- levels/ttm/areas/1/13/geo.inc.c | 16 +- levels/ttm/areas/1/14/geo.inc.c | 18 +- levels/ttm/areas/1/15/geo.inc.c | 16 +- levels/ttm/areas/1/16/geo.inc.c | 12 +- levels/ttm/areas/1/17/geo.inc.c | 18 +- levels/ttm/areas/1/18/geo.inc.c | 18 +- levels/ttm/areas/1/19/geo.inc.c | 16 +- levels/ttm/areas/1/20/geo.inc.c | 16 +- levels/ttm/areas/1/21/geo.inc.c | 18 +- levels/ttm/areas/1/3/geo.inc.c | 18 +- levels/ttm/areas/1/4/geo.inc.c | 18 +- levels/ttm/areas/1/5/geo.inc.c | 18 +- levels/ttm/areas/1/6/geo.inc.c | 18 +- levels/ttm/areas/1/7/geo.inc.c | 16 +- levels/ttm/areas/1/8/geo.inc.c | 16 +- levels/ttm/areas/1/9/geo.inc.c | 16 +- levels/ttm/areas/1/geo.inc.c | 70 +- levels/ttm/areas/1/macro.inc.c | 78 +- levels/ttm/areas/2/geo.inc.c | 44 +- levels/ttm/areas/2/macro.inc.c | 22 +- levels/ttm/areas/3/geo.inc.c | 46 +- levels/ttm/areas/4/geo.inc.c | 44 +- levels/ttm/blue_smiley/geo.inc.c | 22 +- levels/ttm/level.yaml | 4 +- levels/ttm/leveldata.c | 4 +- levels/ttm/moon_smiley/geo.inc.c | 22 +- levels/ttm/rolling_log/geo.inc.c | 10 +- levels/ttm/script.c | 136 +- levels/ttm/slide_exit_podium/geo.inc.c | 10 +- levels/ttm/star_cage/geo.inc.c | 12 +- levels/ttm/star_smiley/geo.inc.c | 22 +- levels/ttm/yellow_smiley/geo.inc.c | 22 +- levels/vcutm/areas/1/geo.inc.c | 48 +- levels/vcutm/areas/1/macro.inc.c | 62 +- levels/vcutm/level.yaml | 2 +- levels/vcutm/leveldata.c | 4 +- levels/vcutm/script.c | 38 +- levels/vcutm/seesaw/geo.inc.c | 10 +- levels/wdw/areas/1/geo.inc.c | 62 +- levels/wdw/areas/1/macro.inc.c | 122 +- levels/wdw/areas/2/geo.inc.c | 50 +- levels/wdw/areas/2/macro.inc.c | 82 +- levels/wdw/arrow_lift/geo.inc.c | 16 +- levels/wdw/express_elevator/geo.inc.c | 10 +- levels/wdw/hidden_platform/geo.inc.c | 16 +- levels/wdw/level.yaml | 4 +- levels/wdw/leveldata.c | 4 +- .../rectangular_floating_platform/geo.inc.c | 10 +- levels/wdw/rotating_platform/geo.inc.c | 10 +- levels/wdw/script.c | 110 +- levels/wdw/square_floating_platform/geo.inc.c | 10 +- levels/wdw/water_level_diamond/geo.inc.c | 16 +- levels/wf/areas/1/10/geo.inc.c | 24 +- levels/wf/areas/1/11/geo.inc.c | 10 +- levels/wf/areas/1/12/geo.inc.c | 24 +- levels/wf/areas/1/13/geo.inc.c | 10 +- levels/wf/areas/1/14/geo.inc.c | 10 +- levels/wf/areas/1/15/geo.inc.c | 26 +- levels/wf/areas/1/16/geo.inc.c | 10 +- levels/wf/areas/1/17/geo.inc.c | 10 +- levels/wf/areas/1/18/geo.inc.c | 10 +- levels/wf/areas/1/19/geo.inc.c | 10 +- levels/wf/areas/1/5/geo.inc.c | 24 +- levels/wf/areas/1/6/geo.inc.c | 24 +- levels/wf/areas/1/7/geo.inc.c | 10 +- levels/wf/areas/1/8/geo.inc.c | 10 +- levels/wf/areas/1/9/geo.inc.c | 10 +- levels/wf/areas/1/geo.inc.c | 60 +- levels/wf/areas/1/macro.inc.c | 86 +- levels/wf/beta_extending_platform/geo.inc.c | 10 +- levels/wf/breakable_wall_left/geo.inc.c | 10 +- levels/wf/breakable_wall_right/geo.inc.c | 10 +- levels/wf/extending_platform/geo.inc.c | 42 +- levels/wf/kickable_board/geo.inc.c | 22 +- levels/wf/large_bomp/geo.inc.c | 10 +- levels/wf/leveldata.c | 4 +- levels/wf/rotating_wooden_platform/geo.inc.c | 24 +- levels/wf/script.c | 148 +- levels/wf/sliding_platform/geo.inc.c | 10 +- levels/wf/small_bomp/geo.inc.c | 24 +- levels/wf/tower_door/geo.inc.c | 10 +- levels/wf/tumbling_bridge_far/geo.inc.c | 10 +- levels/wf/tumbling_bridge_near/geo.inc.c | 10 +- levels/wmotr/areas/1/geo.inc.c | 54 +- levels/wmotr/areas/1/macro.inc.c | 52 +- levels/wmotr/level.yaml | 4 +- levels/wmotr/leveldata.c | 4 +- levels/wmotr/script.c | 42 +- lib/asm/__osDisableInt.s | 38 +- lib/asm/__osExceptionPreamble.s | 787 +- lib/asm/__osGetCause.s | 1 - lib/asm/__osGetSR.s | 1 - lib/asm/__osProbeTLB.s | 7 +- lib/asm/__osRestoreInt.s | 9 +- lib/asm/__osSetCompare.s | 58 +- lib/asm/__osSetFpcCsr.s | 1 - lib/asm/__osSetSR.s | 1 - lib/asm/__osSetWatchLo.s | 13 + lib/asm/__os_eu_802ef550.s | 3 +- lib/asm/bcopy.s | 208 +- lib/asm/bzero.s | 51 +- lib/asm/guMtxF2L.s | 46 + lib/asm/guMtxIdentF.s | 32 + lib/asm/guNormalize.s | 33 + lib/asm/guScale.s | 55 + lib/asm/guTranslate.s | 65 + lib/asm/iQueKernelCalls.s | 42 + lib/asm/llmuldiv_gcc.s | 5 +- lib/asm/osGetCount.s | 72 +- lib/asm/osInvalDCache.s | 26 +- lib/asm/osInvalICache.s | 6 +- lib/asm/osMapTLB.s | 1 - lib/asm/osMapTLBRdb.s | 1 - lib/asm/osSetIntMask.s | 41 +- lib/asm/osUnmapTLBAll.s | 14 +- lib/asm/osWritebackDCache.s | 6 +- lib/asm/osWritebackDCacheAll.s | 1 - lib/asm/parameters.s | 10 +- lib/asm/sqrtf.s | 1 - lib/src/D_802F4380.c | 147 - lib/src/EU_D_802f4330.c | 12 - lib/src/_Ldtob.c | 49 +- lib/src/_Litob.c | 10 +- lib/src/_Printf.c | 44 +- lib/src/__osAiDeviceBusy.c | 6 +- lib/src/__osDequeueThread.c | 14 +- lib/src/__osDevMgrMain.c | 101 +- lib/src/__osEPiRawReadIo.c | 11 - lib/src/__osEPiRawWriteIo.c | 35 - lib/src/__osGetCurrFaultedThread.c | 2 +- lib/src/__osPiCreateAccessQueue.c | 4 +- lib/src/__osResetGlobalIntMask.c | 2 +- lib/src/__osSetGlobalIntMask.c | 11 +- lib/src/__osSetHWintrRoutine.c | 10 + lib/src/__osSiCreateAccessQueue.c | 4 +- lib/src/__osSiDeviceBusy.c | 6 +- lib/src/__osSiRawReadIo.c | 6 +- lib/src/__osSiRawStartDma.c | 22 +- lib/src/__osSiRawWriteIo.c | 6 +- lib/src/__osSpDeviceBusy.c | 6 +- lib/src/__osSpGetStatus.c | 4 +- lib/src/__osSpRawStartDma.c | 12 +- lib/src/__osSpSetPc.c | 6 +- lib/src/__osSpSetStatus.c | 4 +- lib/src/__osSyncPutChars.c | 43 +- lib/src/__osViInit.c | 91 +- lib/src/__osViSwapContext.c | 64 +- lib/src/contramread.c | 13 +- lib/src/contramwrite.c | 19 +- lib/src/controller.h | 38 +- lib/src/epidma.c | 2 +- lib/src/func_802F4A20.c | 40 - lib/src/func_802F71F0.c | 8 - lib/src/guMtxF2L.c | 4 + lib/src/guNormalize.c | 4 + lib/src/guRotateF.c | 72 +- lib/src/guScaleF.c | 4 + lib/src/guTranslateF.c | 4 + lib/src/hardware.h | 127 - lib/src/kdebugserver.c | 102 +- lib/src/kdebugserver_stack.c | 2 +- lib/src/ldiv.c | 19 + lib/src/leointerrupt.c | 130 +- lib/src/libgcc/_cmpdi2.c | 2 + lib/src/libgcc/_divdi3.c | 2 + lib/src/libgcc/_fixdfdi.c | 2 + lib/src/libgcc/_fixsfdi.c | 2 + lib/src/libgcc/_fixunsdfdi.c | 2 + lib/src/libgcc/_fixunssfdi.c | 2 + lib/src/libgcc/_floatdidf.c | 2 + lib/src/libgcc/_floatdisf.c | 2 + lib/src/libgcc/_moddi3.c | 2 + lib/src/libgcc/_udivdi3.c | 2 + lib/src/libgcc/_umoddi3.c | 2 + lib/src/libgcc/libgcc2.inc | 4021 +++++++ lib/src/libgcc/longlong.h | 242 + lib/src/libultra_internal.h | 39 +- lib/src/math/cosf.c | 9 +- lib/src/math/llmuldiv.c | 10 +- lib/src/math/sinf.c | 4 +- lib/src/motor.c | 29 +- lib/src/new_func.h | 20 +- lib/src/osAiGetLength.c | 5 +- lib/src/osAiSetFrequency.c | 36 +- lib/src/osAiSetNextBuffer.c | 45 +- lib/src/osCartRomInit.c | 96 +- lib/src/osContInit.c | 86 +- lib/src/osContInternal.h | 12 - lib/src/osContStartReadData.c | 83 +- lib/src/osCreateMesgQueue.c | 5 +- lib/src/osCreatePiManager.c | 46 +- lib/src/osCreateThread.c | 23 +- lib/src/osCreateViManager.c | 9 +- lib/src/osDestroyThread.c | 26 +- lib/src/osEPiRawReadIo.c | 20 + lib/src/osEPiRawStartDma.c | 136 +- lib/src/osEPiRawWriteIo.c | 20 + lib/src/osEepromLongRead.c | 23 +- lib/src/osEepromLongWrite.c | 23 +- lib/src/osEepromProbe.c | 34 +- lib/src/osEepromRead.c | 185 +- lib/src/osEepromWrite.c | 266 +- lib/src/osGetThreadPri.c | 2 +- lib/src/osInitialize.c | 211 +- lib/src/osInitializeIQueWrapper.c | 21 + lib/src/osJamMesg.c | 4 +- lib/src/osLeoDiskInit.c | 49 +- lib/src/osPfsIsPlug.c | 15 +- lib/src/osPiGetCmdQueue.c | 5 +- lib/src/osPiRawReadIo.c | 15 +- lib/src/osPiRawStartDma.c | 53 +- lib/src/osPiStartDma.c | 7 +- lib/src/osRecvMesg.c | 9 +- lib/src/osSendMesg.c | 8 +- lib/src/osSetEventMesg.c | 28 +- lib/src/osSetThreadPri.c | 10 +- lib/src/osSetTimer.c | 52 +- lib/src/osSpTaskLoadGo.c | 11 +- lib/src/osSpTaskYielded.c | 6 +- lib/src/osStartThread.c | 42 +- lib/src/osSyncPrintf.c | 11 + lib/src/osTimer.c | 43 +- lib/src/osViData.c | 140 +- lib/src/osViSetMode.c | 7 + lib/src/osViTable.c | 319 +- lib/src/osVirtualToPhysical.c | 9 +- lib/src/osYieldThread.c | 8 + lib/src/osint.h | 12 +- lib/src/pfsgetstatus.c | 62 +- lib/src/piint.h | 96 +- lib/src/printf.h | 12 +- lib/src/string.c | 27 + lib/src/unk_shindou_file_3.c | 26 - rsp/audio.s | 98 +- sm64.cn.sha1 | 1 + sm64.ld | 2184 ++-- sound/sequences.json | 2 +- sound/sequences/00_sound_player.s | 24 +- sound/sound_banks/07.json | 2 +- sound/sound_banks/08_mario.json | 24 +- sound/sound_banks/0A_mario_peach.json | 18 +- sound/sound_banks/0B.json | 14 +- sound/sound_banks/0C.json | 44 +- sound/sound_banks/0D.json | 18 +- sound/sound_banks/0E.json | 28 +- sound/sound_banks/0F.json | 12 +- sound/sound_banks/10.json | 12 +- sound/sound_banks/11.json | 14 +- sound/sound_banks/12.json | 16 +- sound/sound_banks/13.json | 18 +- sound/sound_banks/14_piranha_music_box.json | 12 +- sound/sound_banks/15.json | 12 +- sound/sound_banks/16_course_start.json | 6 +- sound/sound_banks/17.json | 22 +- sound/sound_banks/18.json | 8 +- sound/sound_banks/19.json | 24 +- sound/sound_banks/1A.json | 14 +- sound/sound_banks/1B.json | 16 +- sound/sound_banks/1C_endless_stairs.json | 18 +- sound/sound_banks/1D_bowser_organ.json | 24 +- sound/sound_banks/1E.json | 16 +- sound/sound_banks/1F.json | 4 +- sound/sound_banks/20.json | 10 +- sound/sound_banks/21.json | 6 +- sound/sound_banks/22.json | 8 +- sound/sound_banks/23.json | 24 +- sound/sound_banks/24.json | 10 +- sound/sound_banks/25.json | 28 +- sound/sound_data.c | 2 +- src/audio/audio_session_presets_sh.c | 2 +- src/audio/data.c | 26 +- src/audio/data.h | 20 +- src/audio/effects.c | 60 +- src/audio/effects.h | 2 +- src/audio/external.c | 108 +- src/audio/heap.c | 137 +- src/audio/heap.h | 12 +- src/audio/internal.h | 76 +- src/audio/load.c | 4 +- src/audio/load.h | 14 +- src/audio/load_sh.c | 4 +- src/audio/playback.c | 126 +- src/audio/port_sh.c | 4 +- src/audio/seqplayer.c | 255 +- src/audio/shindou_debug_prints.c | 2 +- src/audio/synthesis.c | 2 +- src/audio/synthesis.h | 18 +- src/audio/synthesis_sh.c | 2 +- src/buffers/buffers.c | 39 +- src/buffers/gfx_output_buffer.c | 10 +- src/buffers/gfx_output_buffer.h | 10 +- src/buffers/zbuffer.h | 1 + src/engine/behavior_script.c | 2 +- src/engine/graph_node.c | 6 +- src/engine/level_script.c | 5 + src/engine/stub.c | 4 + src/engine/surface_collision.c | 30 +- src/engine/surface_collision.h | 2 +- src/engine/surface_load.c | 79 +- src/engine/surface_load.h | 4 +- src/game/area.c | 13 +- src/game/area.h | 4 +- src/game/behavior_actions.c | 13 +- src/game/behavior_actions.h | 8 +- src/game/behaviors/activated_bf_plat.inc.c | 10 +- src/game/behaviors/amp.inc.c | 4 +- .../behaviors/animated_floor_switch.inc.c | 10 +- src/game/behaviors/bbh_tilting_trap.inc.c | 4 +- src/game/behaviors/bird.inc.c | 6 +- src/game/behaviors/bobomb.inc.c | 10 +- src/game/behaviors/boo.inc.c | 64 +- src/game/behaviors/bowling_ball.inc.c | 24 +- src/game/behaviors/bowser.inc.c | 42 +- .../behaviors/bowser_falling_platform.inc.c | 28 +- src/game/behaviors/bowser_flame.inc.c | 10 +- src/game/behaviors/bowser_key_cutscene.inc.c | 4 +- src/game/behaviors/bowser_puzzle_piece.inc.c | 4 +- src/game/behaviors/breakable_wall.inc.c | 2 +- src/game/behaviors/bully.inc.c | 20 +- src/game/behaviors/camera_lakitu.inc.c | 6 +- src/game/behaviors/cannon.inc.c | 16 +- src/game/behaviors/cannon_door.inc.c | 2 +- src/game/behaviors/capswitch.inc.c | 12 +- src/game/behaviors/chain_chomp.inc.c | 10 +- .../behaviors/checkerboard_platform.inc.c | 14 +- src/game/behaviors/chuckya.inc.c | 10 +- src/game/behaviors/cloud.inc.c | 16 +- src/game/behaviors/coffin.inc.c | 2 +- src/game/behaviors/coin.inc.c | 151 +- .../behaviors/controllable_platform.inc.c | 14 +- src/game/behaviors/corkbox.inc.c | 4 +- src/game/behaviors/cruiser.inc.c | 2 +- src/game/behaviors/ddd_pole.inc.c | 2 +- src/game/behaviors/ddd_warp.inc.c | 2 +- src/game/behaviors/donut_platform.inc.c | 2 +- src/game/behaviors/dorrie.inc.c | 2 +- src/game/behaviors/drawbridge.inc.c | 4 +- src/game/behaviors/elevator.inc.c | 10 +- src/game/behaviors/exclamation_box.inc.c | 92 +- src/game/behaviors/eyerok.inc.c | 34 +- src/game/behaviors/falling_pillar.inc.c | 2 +- .../behaviors/falling_rising_platform.inc.c | 16 +- src/game/behaviors/ferris_wheel.inc.c | 8 +- src/game/behaviors/fire_piranha_plant.inc.c | 8 +- src/game/behaviors/fish.inc.c | 10 +- src/game/behaviors/flame.inc.c | 2 +- src/game/behaviors/flamethrower.inc.c | 12 +- src/game/behaviors/fly_guy.inc.c | 2 +- .../behaviors/flying_bookend_switch.inc.c | 2 +- src/game/behaviors/goomba.inc.c | 14 +- src/game/behaviors/grill_door.inc.c | 28 +- src/game/behaviors/ground_particles.inc.c | 6 +- src/game/behaviors/heave_ho.inc.c | 6 +- src/game/behaviors/hidden_star.inc.c | 2 +- src/game/behaviors/hoot.inc.c | 2 +- src/game/behaviors/intro_lakitu.inc.c | 4 +- src/game/behaviors/jrb_ship.inc.c | 16 +- src/game/behaviors/king_bobomb.inc.c | 12 +- src/game/behaviors/klepto.inc.c | 4 +- src/game/behaviors/koopa.inc.c | 12 +- .../behaviors/lll_floating_wood_piece.inc.c | 8 +- .../lll_octagonal_rotating_mesh.inc.c | 2 +- .../behaviors/lll_rotating_hex_flame.inc.c | 18 +- .../behaviors/lll_sinking_rectangle.inc.c | 8 +- src/game/behaviors/manta_ray.inc.c | 19 +- src/game/behaviors/mips.inc.c | 18 +- src/game/behaviors/monty_mole.inc.c | 10 +- src/game/behaviors/mr_blizzard.inc.c | 8 +- src/game/behaviors/mr_i.inc.c | 8 +- src/game/behaviors/mushroom_1up.inc.c | 26 +- src/game/behaviors/orange_number.inc.c | 2 +- src/game/behaviors/platform_on_track.inc.c | 18 +- src/game/behaviors/pokey.inc.c | 24 +- src/game/behaviors/pole.inc.c | 4 +- src/game/behaviors/purple_switch.inc.c | 24 +- src/game/behaviors/pyramid_elevator.inc.c | 16 +- src/game/behaviors/pyramid_top.inc.c | 2 +- src/game/behaviors/pyramid_wall.inc.c | 4 +- src/game/behaviors/racing_penguin.inc.c | 16 +- .../behaviors/rotating_octagonal_plat.inc.c | 4 +- src/game/behaviors/rotating_platform.inc.c | 24 +- src/game/behaviors/seesaw_platform.inc.c | 4 +- src/game/behaviors/sliding_platform.inc.c | 2 +- src/game/behaviors/sliding_platform_2.inc.c | 8 +- src/game/behaviors/snow_mound.inc.c | 8 +- src/game/behaviors/snowman.inc.c | 3 +- src/game/behaviors/snufit.inc.c | 4 +- src/game/behaviors/sound_birds.inc.c | 2 +- src/game/behaviors/sparkle_spawn_star.inc.c | 22 +- src/game/behaviors/spawn_star.inc.c | 48 +- .../behaviors/square_platform_cycle.inc.c | 2 +- src/game/behaviors/strong_wind_particle.inc.c | 2 +- .../behaviors/switch_hidden_objects.inc.c | 62 +- src/game/behaviors/thi_top.inc.c | 6 +- src/game/behaviors/thwomp.inc.c | 40 +- .../behaviors/tilting_inverted_pyramid.inc.c | 4 +- src/game/behaviors/tower_platform.inc.c | 16 +- src/game/behaviors/tox_box.inc.c | 131 +- src/game/behaviors/treasure_chest.inc.c | 12 +- src/game/behaviors/triplet_butterfly.inc.c | 28 +- src/game/behaviors/ttc_2d_rotator.inc.c | 6 +- src/game/behaviors/ttc_cog.inc.c | 4 +- src/game/behaviors/ttc_elevator.inc.c | 4 +- src/game/behaviors/ttc_moving_bar.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 | 3 +- src/game/behaviors/tumbling_bridge.inc.c | 36 +- src/game/behaviors/tuxie.inc.c | 9 +- src/game/behaviors/tweester.inc.c | 4 +- src/game/behaviors/ukiki.inc.c | 20 +- src/game/behaviors/unagi.inc.c | 12 +- src/game/behaviors/warp.inc.c | 16 +- src/game/behaviors/water_bomb.inc.c | 6 +- src/game/behaviors/water_bomb_cannon.inc.c | 2 +- src/game/behaviors/white_puff_explode.inc.c | 2 +- src/game/behaviors/whomp.inc.c | 14 +- src/game/behaviors/wiggler.inc.c | 6 +- src/game/camera.c | 260 +- src/game/cn_common_syms_1.c | 29 + src/game/cn_common_syms_2.c | 103 + src/game/crash_screen.c | 8 +- src/game/envfx_snow.c | 2 +- src/game/game_init.c | 11 +- src/game/geo_misc.c | 5 +- src/game/hud.c | 39 +- src/game/ingame_menu.c | 1102 +- src/game/ingame_menu.h | 43 +- src/game/interaction.c | 41 +- src/game/level_update.c | 94 +- src/game/level_update.h | 73 +- src/game/macro_special_objects.c | 88 +- src/game/macro_special_objects.h | 2 +- src/game/main.c | 11 +- src/game/main.h | 35 +- src/game/mario.c | 16 +- src/game/mario_actions_airborne.c | 4 +- src/game/mario_actions_automatic.c | 9 +- src/game/mario_actions_cutscene.c | 36 +- src/game/mario_actions_moving.c | 2 +- src/game/mario_misc.c | 32 +- src/game/mario_step.c | 2 +- src/game/memory.c | 38 +- src/game/memory.h | 2 +- src/game/moving_texture.c | 13 +- src/game/obj_behaviors.c | 7 +- src/game/obj_behaviors.h | 2 +- src/game/obj_behaviors_2.c | 11 +- src/game/object_helpers.c | 138 +- src/game/object_helpers.h | 20 +- src/game/object_list_processor.c | 8 +- src/game/object_list_processor.h | 4 +- src/game/paintings.c | 18 +- src/game/paintings.h | 2 +- src/game/print.c | 84 +- src/game/rendering_graph_node.c | 4 + src/game/rumble_init.c | 62 +- src/game/rumble_init.h | 32 +- src/game/segment7.h | 4 +- src/game/sound_init.c | 2 +- src/goddard/draw_objects.c | 6 +- src/goddard/dynlist_proc.c | 4 +- src/goddard/dynlists/dynlist_macros.h | 4 +- src/goddard/dynlists/dynlist_mario_face.c | 4 +- src/goddard/dynlists/dynlist_mario_master.c | 2 +- src/goddard/gd_macros.h | 2 +- src/goddard/gd_math.c | 8 +- src/goddard/gd_math.h | 2 +- src/goddard/gd_types.h | 4 +- src/goddard/joints.c | 2 +- src/goddard/objects.c | 7 +- src/goddard/renderer.c | 16 +- src/goddard/shape_helper.c | 2 +- src/goddard/skin_movement.c | 4 + src/menu/file_select.c | 645 +- src/menu/intro_geo.c | 92 +- src/menu/intro_geo.h | 2 +- src/menu/star_select.c | 47 +- text/cn/courses.h | 80 + text/cn/dialogs.h | 2306 ++++ text/de/dialogs.h | 10 +- text/debug_text.inc.c | 36 + text/define_text.inc.c | 38 - text/fr/dialogs.h | 14 +- text/us/dialogs.h | 16 +- tools/.gitignore | 4 - tools/Makefile | 28 +- tools/asm-processor/.gitignore | 2 + tools/asm-processor/LICENSE | 24 + tools/asm-processor/README.md | 112 + tools/asm-processor/add-test.sh | 5 + .../asm_processor.py} | 594 +- tools/asm-processor/build.py | 114 + tools/asm-processor/compile-test.sh | 26 + tools/asm-processor/prelude.inc | 43 + tools/asm-processor/run-tests.sh | 6 + tools/asm-processor/tests/ascii.c | 19 + tools/asm-processor/tests/ascii.objdump | 29 + tools/asm-processor/tests/comments.c | 6 + tools/asm-processor/tests/comments.objdump | 21 + tools/asm-processor/tests/force.c | 17 + tools/asm-processor/tests/force.objdump | 47 + tools/asm-processor/tests/kpic-o1.c | 93 + tools/asm-processor/tests/kpic-o1.objdump | 46 + tools/asm-processor/tests/kpic-o2.c | 92 + tools/asm-processor/tests/kpic-o2.objdump | 46 + tools/asm-processor/tests/label-sameline.c | 7 + .../tests/label-sameline.objdump | 25 + tools/asm-processor/tests/large.c | 164 + tools/asm-processor/tests/large.objdump | 58 + tools/asm-processor/tests/late_rodata_align.c | 80 + .../tests/late_rodata_align.objdump | 51 + .../asm-processor/tests/late_rodata_doubles.c | 83 + .../tests/late_rodata_doubles.objdump | 55 + .../tests/late_rodata_doubles_mips1.c | 86 + .../tests/late_rodata_doubles_mips1.objdump | 52 + tools/asm-processor/tests/late_rodata_jtbl.c | 153 + .../tests/late_rodata_jtbl.objdump | 110 + .../tests/late_rodata_jtbl_mips1.c | 155 + .../tests/late_rodata_jtbl_mips1.objdump | 110 + .../tests/late_rodata_misaligned_doubles.c | 77 + .../late_rodata_misaligned_doubles.objdump | 56 + .../tests/line-continuation-separate-file.s | 4 + .../tests/line-continuation.asmproc.d | 3 + tools/asm-processor/tests/line-continuation.c | 22 + .../tests/line-continuation.objdump | 30 + tools/asm-processor/tests/o0.c | 28 + tools/asm-processor/tests/o0.objdump | 44 + tools/asm-processor/tests/o2.c | 26 + tools/asm-processor/tests/o2.objdump | 40 + tools/asm-processor/tests/pascal.objdump | 137 + tools/asm-processor/tests/pascal.p | 95 + tools/asm-processor/tests/static-global.c | 33 + .../asm-processor/tests/static-global.objdump | 58 + tools/asm-processor/tests/static.c | 32 + tools/asm-processor/tests/static.objdump | 58 + tools/asm-processor/tests/test1.c | 71 + tools/asm-processor/tests/test1.objdump | 54 + tools/asm-processor/tests/test2.c | 69 + tools/asm-processor/tests/test2.objdump | 76 + tools/asm-processor/tests/test3.c | 70 + tools/asm-processor/tests/test3.objdump | 64 + tools/asm_processor/build.py | 36 - tools/asm_processor/prelude.inc | 5 - tools/assemble_sound.py | 2 +- tools/create_patch.sh | 2 +- tools/gen_asset_list.cpp | 2 +- tools/ido-static-recomp/.clang-format | 23 + tools/ido-static-recomp/.gitignore | 10 + tools/ido-static-recomp/DOCS.md | 19 + tools/ido-static-recomp/Makefile | 231 + tools/ido-static-recomp/README.md | 66 + .../elf.h | 0 .../header.h | 6 - .../helpers.h | 2 + .../libc_impl.c | 1272 ++- .../libc_impl.h | 23 +- tools/ido-static-recomp/recomp.cpp | 3813 +++++++ .../tools/rabbitizer/.clang-format | 23 + .../tools/rabbitizer/.clang-tidy | 9 + .../tools/rabbitizer/.gitattributes | 2 + .../tools/rabbitizer/.github/workflows/ci.yml | 54 + .../rabbitizer/.github/workflows/make.yml | 14 + .../tools/rabbitizer/.gitignore | 215 + .../tools/rabbitizer/.gitrepo | 12 + .../tools/rabbitizer/LICENSE | 21 + .../tools/rabbitizer/MANIFEST.in | 6 + .../tools/rabbitizer/Makefile | 140 + .../tools/rabbitizer/README.md | 55 + .../include/analysis/LoPairingInfo.hpp | 36 + .../include/analysis/RegistersTracker.hpp | 49 + .../include/instructions/InstrId.hpp | 38 + .../include/instructions/InstructionBase.hpp | 253 + .../include/instructions/InstructionCpu.hpp | 20 + .../include/instructions/InstructionR5900.hpp | 41 + .../include/instructions/InstructionRsp.hpp | 40 + .../include/instructions/OperandType.hpp | 27 + .../include/instructions/Registers.hpp | 94 + .../cplusplus/include/rabbitizer.hpp | 26 + .../cplusplus/src/analysis/LoPairingInfo.cpp | 34 + .../src/analysis/RegistersTracker.cpp | 64 + .../cplusplus/src/instructions/InstrId.cpp | 14 + .../src/instructions/InstructionBase.cpp | 1036 ++ .../src/instructions/InstructionCpu.cpp | 15 + .../src/instructions/InstructionR5900.cpp | 118 + .../src/instructions/InstructionRsp.cpp | 128 + .../analysis/RabbitizerLoPairingInfo.h | 34 + .../analysis/RabbitizerRegistersTracker.h | 65 + .../analysis/RabbitizerTrackedRegisterState.h | 80 + .../tools/rabbitizer/include/common/Abi.inc | 7 + .../include/common/RabbitizerConfig.h | 83 + .../include/common/RabbitizerVersion.h | 33 + .../tools/rabbitizer/include/common/Utils.h | 116 + .../include/instructions/InstrCategory.inc | 6 + .../instructions/RabbitizerInstrDescriptor.h | 141 + .../include/instructions/RabbitizerInstrId.h | 46 + .../instructions/RabbitizerInstrSuffix.h | 36 + .../instructions/RabbitizerInstruction.h | 263 + .../instructions/RabbitizerInstructionR5900.h | 87 + .../instructions/RabbitizerInstructionRsp.h | 70 + .../instructions/RabbitizerOperandType.h | 33 + .../include/instructions/RabbitizerRegister.h | 143 + .../instr_id/RabbitizerInstrId_cpu.inc | 40 + .../instr_id/RabbitizerInstrId_r5900.inc | 46 + .../instr_id/RabbitizerInstrId_rsp.inc | 41 + .../instructions/instr_id/cpu/cpu_cop0.inc | 10 + .../instr_id/cpu/cpu_cop0_bc0.inc | 8 + .../instr_id/cpu/cpu_cop0_tlb.inc | 12 + .../instructions/instr_id/cpu/cpu_cop1.inc | 12 + .../instr_id/cpu/cpu_cop1_bc1.inc | 8 + .../instr_id/cpu/cpu_cop1_fpu_d.inc | 48 + .../instr_id/cpu/cpu_cop1_fpu_l.inc | 6 + .../instr_id/cpu/cpu_cop1_fpu_s.inc | 48 + .../instr_id/cpu/cpu_cop1_fpu_w.inc | 6 + .../instructions/instr_id/cpu/cpu_normal.inc | 83 + .../instructions/instr_id/cpu/cpu_regimm.inc | 25 + .../instructions/instr_id/cpu/cpu_special.inc | 93 + .../instr_id/r5900/r5900_cop0_tlb.inc | 23 + .../instr_id/r5900/r5900_cop1_fpu_s.inc | 46 + .../instr_id/r5900/r5900_cop2.inc | 21 + .../instr_id/r5900/r5900_cop2_bc2.inc | 21 + .../instr_id/r5900/r5900_cop2_special1.inc | 82 + .../instr_id/r5900/r5900_cop2_special2.inc | 125 + .../instructions/instr_id/r5900/r5900_mmi.inc | 49 + .../instr_id/r5900/r5900_mmi_0.inc | 50 + .../instr_id/r5900/r5900_mmi_1.inc | 43 + .../instr_id/r5900/r5900_mmi_2.inc | 48 + .../instr_id/r5900/r5900_mmi_3.inc | 37 + .../instr_id/r5900/r5900_normal.inc | 31 + .../instr_id/r5900/r5900_regimm.inc | 20 + .../instr_id/r5900/r5900_special.inc | 27 + .../instructions/instr_id/rsp/rsp_cop0.inc | 6 + .../instructions/instr_id/rsp/rsp_cop2.inc | 10 + .../instructions/instr_id/rsp/rsp_cop2_vu.inc | 53 + .../instructions/instr_id/rsp/rsp_normal.inc | 53 + .../instr_id/rsp/rsp_normal_lwc2.inc | 15 + .../instr_id/rsp/rsp_normal_swc2.inc | 17 + .../instructions/instr_id/rsp/rsp_regimm.inc | 14 + .../instructions/instr_id/rsp/rsp_special.inc | 49 + .../operands/RabbitizerOperandType_cpu.inc | 25 + .../operands/RabbitizerOperandType_r5900.inc | 33 + .../operands/RabbitizerOperandType_rsp.inc | 24 + .../registers/RabbitizerRegister_Cop0.inc | 35 + .../RabbitizerRegister_Cop1Control.inc | 35 + .../registers/RabbitizerRegister_Cop1N32.inc | 35 + .../registers/RabbitizerRegister_Cop1N64.inc | 35 + .../registers/RabbitizerRegister_Cop1O32.inc | 35 + .../registers/RabbitizerRegister_Cop2.inc | 35 + .../registers/RabbitizerRegister_GprN32.inc | 35 + .../registers/RabbitizerRegister_GprO32.inc | 35 + .../registers/RabbitizerRegister_R5900VF.inc | 35 + .../registers/RabbitizerRegister_R5900VI.inc | 35 + .../registers/RabbitizerRegister_RspCop0.inc | 19 + .../registers/RabbitizerRegister_RspCop2.inc | 35 + .../RabbitizerRegister_RspCop2Control.inc | 35 + .../registers/RabbitizerRegister_RspGpr.inc | 35 + .../RabbitizerRegister_RspVector.inc | 35 + .../tools/rabbitizer/include/rabbitizer.h | 25 + .../tools/rabbitizer/pyproject.toml | 9 + .../tools/rabbitizer/r5900test.c | 47 + .../tools/rabbitizer/rabbitizer/Config.pyi | 46 + .../tools/rabbitizer/rabbitizer/Enum.pyi | 24 + .../rabbitizer/rabbitizer/InstrCategory.pyi | 15 + .../tools/rabbitizer/rabbitizer/InstrId.pyi | 631 ++ .../rabbitizer/rabbitizer/LoPairingInfo.pyi | 16 + .../tools/rabbitizer/rabbitizer/RegGprN32.pyi | 43 + .../tools/rabbitizer/rabbitizer/RegGprO32.pyi | 43 + .../rabbitizer/RegistersTracker.pyi | 28 + .../rabbitizer/TrackedRegisterState.pyi | 24 + .../tools/rabbitizer/rabbitizer/Utils.pyi | 14 + .../tools/rabbitizer/rabbitizer/__init__.pyi | 21 + .../rabbitizer/rabbitizer/enums/enums_utils.c | 38 + .../rabbitizer/rabbitizer/enums/enums_utils.h | 85 + .../rabbitizer/enums/rabbitizer_enum_Abi.c | 48 + .../enums/rabbitizer_enum_InstrCategory.c | 23 + .../enums/rabbitizer_enum_InstrId.c | 29 + .../rabbitizer/enums/rabbitizer_type_Enum.c | 211 + .../enums/registers/rabbitizer_enum_GprN32.c | 28 + .../enums/registers/rabbitizer_enum_GprO32.c | 28 + .../tools/rabbitizer/rabbitizer/py.typed | 0 .../rabbitizer/rabbitizer/rabbitizer.pyi | 99 + .../rabbitizer/rabbitizer_global_config.c | 165 + .../rabbitizer/rabbitizer/rabbitizer_module.c | 142 + .../rabbitizer/rabbitizer/rabbitizer_module.h | 54 + .../rabbitizer/rabbitizer_submodule_Utils.c | 81 + .../rabbitizer/rabbitizer_type_Instruction.c | 436 + .../rabbitizer_type_LoPairingInfo.c | 50 + .../rabbitizer_type_RegistersTracker.c | 320 + .../rabbitizer_type_TrackedRegisterState.c | 102 + .../tools/rabbitizer/registersTrackerTest.c | 41 + .../tools/rabbitizer/rsptest.c | 44 + .../tools/rabbitizer/setup.cfg | 24 + .../tools/rabbitizer/setup.py | 28 + .../src/analysis/RabbitizerLoPairingInfo.c | 14 + .../src/analysis/RabbitizerRegistersTracker.c | 425 + .../analysis/RabbitizerTrackedRegisterState.c | 142 + .../rabbitizer/src/common/RabbitizerConfig.c | 50 + .../rabbitizer/src/common/RabbitizerVersion.c | 10 + .../tools/rabbitizer/src/common/Utils.c | 78 + .../instructions/RabbitizerInstrDescriptor.c | 104 + .../src/instructions/RabbitizerInstrId.c | 28 + .../src/instructions/RabbitizerInstrSuffix.c | 62 + .../RabbitizerInstruction.c | 368 + .../RabbitizerInstruction_Disassemble.c | 986 ++ .../RabbitizerInstruction_Examination.c | 840 ++ .../RabbitizerInstruction_ProcessUniqueId.c | 319 + .../RabbitizerInstructionR5900.c | 17 + ...bbitizerInstructionR5900_ProcessUniqueId.c | 328 + .../RabbitizerInstructionRsp.c | 56 + ...RabbitizerInstructionRsp_ProcessUniqueId.c | 233 + .../src/instructions/RabbitizerRegister.c | 181 + .../ido-static-recomp/tools/rabbitizer/test.c | 40 + .../tools/rabbitizer/tests/cplusplus/test.cpp | 16 + tools/ido5.3_recomp/.gitignore | 16 - tools/ido5.3_recomp/Makefile | 37 - tools/ido5.3_recomp/recomp.cpp | 2938 ----- tools/ique_egcs/as | Bin 0 -> 1148960 bytes tools/ique_egcs/cc1 | Bin 0 -> 3366916 bytes tools/ique_egcs/cpp | Bin 0 -> 1015916 bytes tools/ique_egcs/gcc | Bin 0 -> 840332 bytes tools/ique_ld/mips64-elf-ld | Bin 0 -> 2030440 bytes tools/rasm2armips.py | 20 + tools/sdk-tools/adpcm/vadpcm_enc.c | 9 + tools/seq_decoder.py | 2 +- tools/skyconv.c | 36 +- tools/sm64tools/.gitignore | 4 + tools/sm64tools/Makefile | 39 + tools/{ => sm64tools}/libmio0.c | 0 tools/{ => sm64tools}/libmio0.h | 0 tools/{ => sm64tools}/n64cksum.c | 0 tools/{ => sm64tools}/n64cksum.h | 0 tools/{ => sm64tools}/n64graphics.c | 0 tools/{ => sm64tools}/n64graphics.h | 0 .../n64graphics_ci_dir/LICENSE | 0 .../n64graphics_ci_dir/README.md | 0 .../n64graphics_ci_dir/exoquant/exoquant.c | 0 .../n64graphics_ci_dir/exoquant/exoquant.h | 0 .../n64graphics_ci_dir/n64graphics_ci.c | 0 .../n64graphics_ci_dir/n64graphics_ci.h | 0 .../n64graphics_ci_dir/utils.c | 0 .../n64graphics_ci_dir/utils.h | 0 tools/{ => sm64tools}/sm64tools.LICENSE | 0 tools/{ => sm64tools}/stb/stb_image.h | 0 tools/{ => sm64tools}/stb/stb_image_write.h | 0 tools/{ => sm64tools}/utils.c | 0 tools/{ => sm64tools}/utils.h | 0 tools/textconv.c | 77 +- undefined_syms.txt | 17 +- 1326 files changed, 73566 insertions(+), 26397 deletions(-) create mode 100644 asm/ipl3_font.s delete mode 100644 enhancements/ique_support.patch create mode 100644 include/PR/ique.h create mode 100644 include/PR/os_motor.h create mode 100644 include/PR/os_pfs.h create mode 100644 include/PR/rdb.h delete mode 100644 include/macro_preset_names.h create mode 100644 include/macro_presets.inc.c delete mode 100644 include/special_preset_names.h create mode 100644 include/special_presets.inc.c create mode 100644 lib/asm/__osSetWatchLo.s create mode 100644 lib/asm/guMtxF2L.s create mode 100644 lib/asm/guMtxIdentF.s create mode 100644 lib/asm/guNormalize.s create mode 100644 lib/asm/guScale.s create mode 100644 lib/asm/guTranslate.s create mode 100644 lib/asm/iQueKernelCalls.s delete mode 100644 lib/src/D_802F4380.c delete mode 100644 lib/src/EU_D_802f4330.c delete mode 100644 lib/src/__osEPiRawReadIo.c delete mode 100644 lib/src/__osEPiRawWriteIo.c create mode 100644 lib/src/__osSetHWintrRoutine.c delete mode 100644 lib/src/func_802F4A20.c delete mode 100644 lib/src/func_802F71F0.c delete mode 100644 lib/src/hardware.h create mode 100644 lib/src/libgcc/_cmpdi2.c create mode 100644 lib/src/libgcc/_divdi3.c create mode 100644 lib/src/libgcc/_fixdfdi.c create mode 100644 lib/src/libgcc/_fixsfdi.c create mode 100644 lib/src/libgcc/_fixunsdfdi.c create mode 100644 lib/src/libgcc/_fixunssfdi.c create mode 100644 lib/src/libgcc/_floatdidf.c create mode 100644 lib/src/libgcc/_floatdisf.c create mode 100644 lib/src/libgcc/_moddi3.c create mode 100644 lib/src/libgcc/_udivdi3.c create mode 100644 lib/src/libgcc/_umoddi3.c create mode 100644 lib/src/libgcc/libgcc2.inc create mode 100644 lib/src/libgcc/longlong.h create mode 100644 lib/src/osEPiRawReadIo.c create mode 100644 lib/src/osEPiRawWriteIo.c create mode 100644 lib/src/osInitializeIQueWrapper.c create mode 100644 lib/src/osSyncPrintf.c create mode 100644 lib/src/osYieldThread.c delete mode 100644 lib/src/unk_shindou_file_3.c create mode 100644 sm64.cn.sha1 create mode 100644 src/engine/stub.c create mode 100644 src/game/cn_common_syms_1.c create mode 100644 src/game/cn_common_syms_2.c create mode 100644 text/cn/courses.h create mode 100644 text/cn/dialogs.h create mode 100644 text/debug_text.inc.c create mode 100644 tools/asm-processor/.gitignore create mode 100644 tools/asm-processor/LICENSE create mode 100644 tools/asm-processor/README.md create mode 100644 tools/asm-processor/add-test.sh rename tools/{asm_processor/asm-processor.py => asm-processor/asm_processor.py} (63%) create mode 100644 tools/asm-processor/build.py create mode 100644 tools/asm-processor/compile-test.sh create mode 100644 tools/asm-processor/prelude.inc create mode 100644 tools/asm-processor/run-tests.sh create mode 100644 tools/asm-processor/tests/ascii.c create mode 100644 tools/asm-processor/tests/ascii.objdump create mode 100644 tools/asm-processor/tests/comments.c create mode 100644 tools/asm-processor/tests/comments.objdump create mode 100644 tools/asm-processor/tests/force.c create mode 100644 tools/asm-processor/tests/force.objdump create mode 100644 tools/asm-processor/tests/kpic-o1.c create mode 100644 tools/asm-processor/tests/kpic-o1.objdump create mode 100644 tools/asm-processor/tests/kpic-o2.c create mode 100644 tools/asm-processor/tests/kpic-o2.objdump create mode 100644 tools/asm-processor/tests/label-sameline.c create mode 100644 tools/asm-processor/tests/label-sameline.objdump create mode 100644 tools/asm-processor/tests/large.c create mode 100644 tools/asm-processor/tests/large.objdump create mode 100644 tools/asm-processor/tests/late_rodata_align.c create mode 100644 tools/asm-processor/tests/late_rodata_align.objdump create mode 100644 tools/asm-processor/tests/late_rodata_doubles.c create mode 100644 tools/asm-processor/tests/late_rodata_doubles.objdump create mode 100644 tools/asm-processor/tests/late_rodata_doubles_mips1.c create mode 100644 tools/asm-processor/tests/late_rodata_doubles_mips1.objdump create mode 100644 tools/asm-processor/tests/late_rodata_jtbl.c create mode 100644 tools/asm-processor/tests/late_rodata_jtbl.objdump create mode 100644 tools/asm-processor/tests/late_rodata_jtbl_mips1.c create mode 100644 tools/asm-processor/tests/late_rodata_jtbl_mips1.objdump create mode 100644 tools/asm-processor/tests/late_rodata_misaligned_doubles.c create mode 100644 tools/asm-processor/tests/late_rodata_misaligned_doubles.objdump create mode 100644 tools/asm-processor/tests/line-continuation-separate-file.s create mode 100644 tools/asm-processor/tests/line-continuation.asmproc.d create mode 100644 tools/asm-processor/tests/line-continuation.c create mode 100644 tools/asm-processor/tests/line-continuation.objdump create mode 100644 tools/asm-processor/tests/o0.c create mode 100644 tools/asm-processor/tests/o0.objdump create mode 100644 tools/asm-processor/tests/o2.c create mode 100644 tools/asm-processor/tests/o2.objdump create mode 100644 tools/asm-processor/tests/pascal.objdump create mode 100644 tools/asm-processor/tests/pascal.p create mode 100644 tools/asm-processor/tests/static-global.c create mode 100644 tools/asm-processor/tests/static-global.objdump create mode 100644 tools/asm-processor/tests/static.c create mode 100644 tools/asm-processor/tests/static.objdump create mode 100644 tools/asm-processor/tests/test1.c create mode 100644 tools/asm-processor/tests/test1.objdump create mode 100644 tools/asm-processor/tests/test2.c create mode 100644 tools/asm-processor/tests/test2.objdump create mode 100644 tools/asm-processor/tests/test3.c create mode 100644 tools/asm-processor/tests/test3.objdump delete mode 100644 tools/asm_processor/build.py delete mode 100644 tools/asm_processor/prelude.inc create mode 100644 tools/ido-static-recomp/.clang-format create mode 100644 tools/ido-static-recomp/.gitignore create mode 100644 tools/ido-static-recomp/DOCS.md create mode 100644 tools/ido-static-recomp/Makefile create mode 100644 tools/ido-static-recomp/README.md rename tools/{ido5.3_recomp => ido-static-recomp}/elf.h (100%) rename tools/{ido5.3_recomp => ido-static-recomp}/header.h (91%) rename tools/{ido5.3_recomp => ido-static-recomp}/helpers.h (79%) rename tools/{ido5.3_recomp => ido-static-recomp}/libc_impl.c (60%) rename tools/{ido5.3_recomp => ido-static-recomp}/libc_impl.h (93%) create mode 100644 tools/ido-static-recomp/recomp.cpp create mode 100644 tools/ido-static-recomp/tools/rabbitizer/.clang-format create mode 100644 tools/ido-static-recomp/tools/rabbitizer/.clang-tidy create mode 100644 tools/ido-static-recomp/tools/rabbitizer/.gitattributes create mode 100644 tools/ido-static-recomp/tools/rabbitizer/.github/workflows/ci.yml create mode 100644 tools/ido-static-recomp/tools/rabbitizer/.github/workflows/make.yml create mode 100644 tools/ido-static-recomp/tools/rabbitizer/.gitignore create mode 100644 tools/ido-static-recomp/tools/rabbitizer/.gitrepo create mode 100644 tools/ido-static-recomp/tools/rabbitizer/LICENSE create mode 100644 tools/ido-static-recomp/tools/rabbitizer/MANIFEST.in create mode 100644 tools/ido-static-recomp/tools/rabbitizer/Makefile create mode 100644 tools/ido-static-recomp/tools/rabbitizer/README.md create mode 100644 tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/analysis/LoPairingInfo.hpp create mode 100644 tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/analysis/RegistersTracker.hpp create mode 100644 tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/InstrId.hpp create mode 100644 tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/InstructionBase.hpp create mode 100644 tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/InstructionCpu.hpp create mode 100644 tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/InstructionR5900.hpp create mode 100644 tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/InstructionRsp.hpp create mode 100644 tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/OperandType.hpp create mode 100644 tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/Registers.hpp create mode 100644 tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/rabbitizer.hpp create mode 100644 tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/analysis/LoPairingInfo.cpp create mode 100644 tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/analysis/RegistersTracker.cpp create mode 100644 tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/instructions/InstrId.cpp create mode 100644 tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/instructions/InstructionBase.cpp create mode 100644 tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/instructions/InstructionCpu.cpp create mode 100644 tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/instructions/InstructionR5900.cpp create mode 100644 tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/instructions/InstructionRsp.cpp create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/analysis/RabbitizerLoPairingInfo.h create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/analysis/RabbitizerRegistersTracker.h create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/analysis/RabbitizerTrackedRegisterState.h create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/common/Abi.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/common/RabbitizerConfig.h create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/common/RabbitizerVersion.h create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/common/Utils.h create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/InstrCategory.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerInstrDescriptor.h create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerInstrId.h create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerInstrSuffix.h create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerInstruction.h create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerInstructionR5900.h create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerInstructionRsp.h create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerOperandType.h create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerRegister.h create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/RabbitizerInstrId_cpu.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/RabbitizerInstrId_r5900.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/RabbitizerInstrId_rsp.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop0.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop0_bc0.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop0_tlb.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_bc1.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_d.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_l.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_s.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_w.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_normal.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_regimm.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_special.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_cop0_tlb.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_cop1_fpu_s.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2_bc2.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2_special1.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2_special2.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_0.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_1.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_2.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_3.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_normal.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_regimm.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_special.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_cop0.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_cop2.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_cop2_vu.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_normal.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_normal_lwc2.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_normal_swc2.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_regimm.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_special.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/operands/RabbitizerOperandType_cpu.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/operands/RabbitizerOperandType_r5900.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/operands/RabbitizerOperandType_rsp.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop0.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1Control.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1N32.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1N64.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1O32.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop2.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_GprN32.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_GprO32.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_R5900VF.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_R5900VI.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_RspCop0.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_RspCop2.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_RspCop2Control.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_RspGpr.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_RspVector.inc create mode 100644 tools/ido-static-recomp/tools/rabbitizer/include/rabbitizer.h create mode 100644 tools/ido-static-recomp/tools/rabbitizer/pyproject.toml create mode 100644 tools/ido-static-recomp/tools/rabbitizer/r5900test.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/Config.pyi create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/Enum.pyi create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/InstrCategory.pyi create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/InstrId.pyi create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/LoPairingInfo.pyi create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/RegGprN32.pyi create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/RegGprO32.pyi create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/RegistersTracker.pyi create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/TrackedRegisterState.pyi create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/Utils.pyi create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/__init__.pyi create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/enums_utils.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/enums_utils.h create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/rabbitizer_enum_Abi.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/rabbitizer_enum_InstrCategory.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/rabbitizer_enum_InstrId.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/rabbitizer_type_Enum.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/registers/rabbitizer_enum_GprN32.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/registers/rabbitizer_enum_GprO32.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/py.typed create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer.pyi create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_global_config.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_module.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_module.h create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_submodule_Utils.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_type_Instruction.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_type_LoPairingInfo.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_type_RegistersTracker.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_type_TrackedRegisterState.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/registersTrackerTest.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/rsptest.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/setup.cfg create mode 100644 tools/ido-static-recomp/tools/rabbitizer/setup.py create mode 100644 tools/ido-static-recomp/tools/rabbitizer/src/analysis/RabbitizerLoPairingInfo.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/src/analysis/RabbitizerRegistersTracker.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/src/analysis/RabbitizerTrackedRegisterState.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/src/common/RabbitizerConfig.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/src/common/RabbitizerVersion.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/src/common/Utils.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstrDescriptor.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstrId.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstrSuffix.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction_Disassemble.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction_Examination.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction_ProcessUniqueId.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstructionR5900/RabbitizerInstructionR5900.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstructionR5900/RabbitizerInstructionR5900_ProcessUniqueId.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstructionRsp/RabbitizerInstructionRsp.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstructionRsp/RabbitizerInstructionRsp_ProcessUniqueId.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerRegister.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/test.c create mode 100644 tools/ido-static-recomp/tools/rabbitizer/tests/cplusplus/test.cpp delete mode 100644 tools/ido5.3_recomp/.gitignore delete mode 100644 tools/ido5.3_recomp/Makefile delete mode 100644 tools/ido5.3_recomp/recomp.cpp create mode 100755 tools/ique_egcs/as create mode 100755 tools/ique_egcs/cc1 create mode 100755 tools/ique_egcs/cpp create mode 100755 tools/ique_egcs/gcc create mode 100755 tools/ique_ld/mips64-elf-ld create mode 100644 tools/sm64tools/.gitignore create mode 100644 tools/sm64tools/Makefile rename tools/{ => sm64tools}/libmio0.c (100%) rename tools/{ => sm64tools}/libmio0.h (100%) rename tools/{ => sm64tools}/n64cksum.c (100%) rename tools/{ => sm64tools}/n64cksum.h (100%) rename tools/{ => sm64tools}/n64graphics.c (100%) rename tools/{ => sm64tools}/n64graphics.h (100%) rename tools/{ => sm64tools}/n64graphics_ci_dir/LICENSE (100%) rename tools/{ => sm64tools}/n64graphics_ci_dir/README.md (100%) rename tools/{ => sm64tools}/n64graphics_ci_dir/exoquant/exoquant.c (100%) rename tools/{ => sm64tools}/n64graphics_ci_dir/exoquant/exoquant.h (100%) rename tools/{ => sm64tools}/n64graphics_ci_dir/n64graphics_ci.c (100%) rename tools/{ => sm64tools}/n64graphics_ci_dir/n64graphics_ci.h (100%) rename tools/{ => sm64tools}/n64graphics_ci_dir/utils.c (100%) rename tools/{ => sm64tools}/n64graphics_ci_dir/utils.h (100%) rename tools/{ => sm64tools}/sm64tools.LICENSE (100%) rename tools/{ => sm64tools}/stb/stb_image.h (100%) rename tools/{ => sm64tools}/stb/stb_image_write.h (100%) rename tools/{ => sm64tools}/utils.c (100%) rename tools/{ => sm64tools}/utils.h (100%) diff --git a/CHANGES b/CHANGES index 7b81e757..bec290fb 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,29 @@ +Refresh 16 (Two years later...) +1.) remove capstone from readme, slight update (#1212) +2.) Update ido static recomp (#1211) +3.) Fix misleading pointer (#1209) +4.) update outdated link (#1208) +5.) Match iQue (#1207) +6.) iQue matching except BSS (#1124) +7.) Create LICENSE.md +8.) Reorganize and apply licenses to some of the tools/ programs per discussions with their author(s). (#1203) +9.) Fix rumble_init libultra includes and checks (#1195) +10.) Stacksize moved to defines (#1199) +11.) Renamings we were too lazy to make a PR for for 3 years (#1198) +12.) Fix spelling error in sound.h comment (#1197) +13.) Update instrument sample names (#1196) +14.) Object Labeling, Behavior Params, and Cleanup (#1193) +15.) Significantly more Libultra Cleanup (#1192) +16.) Typedefs for area Terrain Data and Rooms (#1178) +17.) Allow spaces in filename for vadpcm_enc (#1175) +18.) Label all warp nodes (#1191) +19.) Remove hardware.h (#1190) +20.) Document __osSetHWintrRoutine (#1186) +21.) Change 3 space indent to 4 space indent and cleanup (#1189) +22.) Libultra cleanup and labelling (#1188) +23.) in-game menu renaming (#1187) +24.) AVOID_UB fixes and cleanup (#1185) + Refresh 15 (mostly a hotfix for RSP microcode selection) 1.) Renamed frame_buffer funcs and _ZBUFFER (#1184) diff --git a/Dockerfile b/Dockerfile index f36f10e3..40af996f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,9 +3,8 @@ FROM ubuntu:18.04 as build RUN apt-get update && \ apt-get install -y \ binutils-mips-linux-gnu \ - bsdmainutils \ build-essential \ - libcapstone-dev \ + git \ pkgconf \ python3 diff --git a/Jenkinsfile b/Jenkinsfile index c31671ca..454cfa98 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -12,32 +12,38 @@ pipeline { sh 'ln -s "$ROMS_DIR/Super Mario 64 (U) [!].z64" baserom.us.z64' sh 'ln -s "$ROMS_DIR/Super Mario 64 (E) (M3) [!].z64" baserom.eu.z64' sh 'ln -s "$ROMS_DIR/Super Mario 64 - Shindou Edition (J) [!].z64" baserom.sh.z64' + sh 'ln -s "$ROMS_DIR/Super Mario 64 - iQue (Ch).z64" baserom.cn.z64' // verify no assets were committed to repo sh '[ -z "$(find {actors,levels,textures}/ -name \'*.png\')" ]' sh '[ -z "$(find assets/ -name \'*.m64\' -or \'*.bin\')" ]' - sh './extract_assets.py jp us eu sh' + sh './extract_assets.py jp us eu sh cn' } } - stage('Build U Source') { + stage('Build US Source') { steps { sh 'make -j4 VERSION=us VERBOSE=1 COLOR=0' } } - stage('Build S Source') { + stage('Build SH Source') { steps { sh 'make -j4 VERSION=sh VERBOSE=1 COLOR=0' } } - stage('Build E Source') { + stage('Build EU Source') { steps { sh 'make -j4 VERSION=eu VERBOSE=1 COLOR=0' } } - stage('Build J Source') { + stage('Build JP Source') { steps { sh 'make -j4 VERSION=jp VERBOSE=1 COLOR=0' } } + stage('Build CN Source') { + steps { + sh 'make -j4 VERSION=cn VERBOSE=1 COLOR=0 COMPARE=0' + } + } stage('Test Enhancements') { steps { sh ''' diff --git a/Makefile b/Makefile index 5373691a..b267233e 100644 --- a/Makefile +++ b/Makefile @@ -32,29 +32,40 @@ $(eval $(call validate-option,COMPILER,ido gcc)) # us - builds the 1996 North American version # eu - builds the 1997 PAL version # sh - builds the 1997 Japanese Shindou version, with rumble pak support +# cn - builds the 2003 Chinese iQue version VERSION ?= us -$(eval $(call validate-option,VERSION,jp us eu sh)) +$(eval $(call validate-option,VERSION,jp us eu sh cn)) ifeq ($(VERSION),jp) DEFINES += VERSION_JP=1 OPT_FLAGS := -g GRUCODE ?= f3d_old VERSION_JP_US ?= true + VERSION_SH_CN ?= false else ifeq ($(VERSION),us) DEFINES += VERSION_US=1 OPT_FLAGS := -g GRUCODE ?= f3d_old VERSION_JP_US ?= true + VERSION_SH_CN ?= false else ifeq ($(VERSION),eu) DEFINES += VERSION_EU=1 OPT_FLAGS := -O2 GRUCODE ?= f3d_new VERSION_JP_US ?= false + VERSION_SH_CN ?= false else ifeq ($(VERSION),sh) DEFINES += VERSION_SH=1 OPT_FLAGS := -O2 GRUCODE ?= f3d_new VERSION_JP_US ?= false + VERSION_SH_CN ?= true +else ifeq ($(VERSION),cn) + DEFINES += VERSION_CN=1 + OPT_FLAGS := -O2 + GRUCODE ?= f3d_new + VERSION_JP_US ?= false + VERSION_SH_CN ?= true endif TARGET := sm64.$(VERSION) @@ -129,7 +140,7 @@ $(eval $(call validate-option,COMPARE,0 1)) TARGET_STRING := sm64.$(VERSION).$(GRUCODE) # If non-default settings were chosen, disable COMPARE -ifeq ($(filter $(TARGET_STRING), sm64.jp.f3d_old sm64.us.f3d_old sm64.eu.f3d_new sm64.sh.f3d_new),) +ifeq ($(filter $(TARGET_STRING), sm64.jp.f3d_old sm64.us.f3d_old sm64.eu.f3d_new sm64.sh.f3d_new sm64.cn.f3d_new),) COMPARE := 0 endif @@ -161,6 +172,7 @@ ifeq ($(filter clean distclean,$(MAKECMDGOALS)),) $(info =======================) endif +DEFINES += _FINALROM=1 #==============================================================================# # Universal Dependencies # @@ -186,11 +198,16 @@ ifeq ($(filter clean distclean print-%,$(MAKECMDGOALS)),) endif # Make tools if out of date - $(info Building tools...) + $(info Building general tools...) DUMMY != $(MAKE) -s -C $(TOOLS_DIR) $(if $(filter-out ido0,$(COMPILER)$(USE_QEMU_IRIX)),all-except-recomp,) >&2 || echo FAIL ifeq ($(DUMMY),FAIL) $(error Failed to build tools) endif + $(info Building sm64tools...) + DUMMY != $(MAKE) -s -C $(TOOLS_DIR)/sm64tools $(if $(filter-out ido0,$(COMPILER)$(USE_QEMU_IRIX)),) >&2 || echo FAIL + ifeq ($(DUMMY),FAIL) + $(error Failed to build tools) + endif $(info Building ROM...) endif @@ -207,6 +224,8 @@ ROM := $(BUILD_DIR)/$(TARGET).z64 ELF := $(BUILD_DIR)/$(TARGET).elf LIBULTRA := $(BUILD_DIR)/libultra.a LD_SCRIPT := sm64.ld +CHARMAP := charmap.txt +CHARMAP_DEBUG := charmap.debug.txt MIO0_DIR := $(BUILD_DIR)/bin SOUND_BIN_DIR := $(BUILD_DIR)/sound TEXTURE_DIR := textures @@ -217,6 +236,10 @@ LEVEL_DIRS := $(patsubst levels/%,%,$(dir $(wildcard levels/*/header.h))) SRC_DIRS := src src/engine src/game src/audio src/menu src/buffers actors levels bin data assets asm lib sound BIN_DIRS := bin bin/$(VERSION) +ifeq ($(VERSION),cn) + LIBGCC_SRC_DIRS += lib/src/libgcc +endif + ULTRA_SRC_DIRS := lib/src lib/src/math lib/asm lib/data ULTRA_BIN_DIRS := lib/bin @@ -232,6 +255,7 @@ S_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.s)) ULTRA_C_FILES := $(foreach dir,$(ULTRA_SRC_DIRS),$(wildcard $(dir)/*.c)) GODDARD_C_FILES := $(foreach dir,$(GODDARD_SRC_DIRS),$(wildcard $(dir)/*.c)) ULTRA_S_FILES := $(foreach dir,$(ULTRA_SRC_DIRS),$(wildcard $(dir)/*.s)) +LIBGCC_C_FILES := $(foreach dir,$(LIBGCC_SRC_DIRS),$(wildcard $(dir)/*.c)) GENERATED_C_FILES := $(BUILD_DIR)/assets/mario_anim_data.c $(BUILD_DIR)/assets/demo_data.c # Sound files @@ -240,7 +264,11 @@ 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)) SOUND_SAMPLE_AIFCS := $(foreach file,$(SOUND_SAMPLE_AIFFS),$(BUILD_DIR)/$(file:.aiff=.aifc)) -SOUND_SEQUENCE_DIRS := sound/sequences sound/sequences/$(VERSION) +ifeq ($(VERSION),cn) + SOUND_SEQUENCE_DIRS := sound/sequences sound/sequences/sh +else + SOUND_SEQUENCE_DIRS := sound/sequences sound/sequences/$(VERSION) +endif # all .m64 files in SOUND_SEQUENCE_DIRS, plus all .m64 files that are generated from .s files in SOUND_SEQUENCE_DIRS SOUND_SEQUENCE_FILES := \ $(foreach dir,$(SOUND_SEQUENCE_DIRS),\ @@ -258,16 +286,14 @@ ULTRA_O_FILES := $(foreach file,$(ULTRA_S_FILES),$(BUILD_DIR)/$(file:.s=.o)) \ GODDARD_O_FILES := $(foreach file,$(GODDARD_C_FILES),$(BUILD_DIR)/$(file:.c=.o)) +LIBGCC_O_FILES := $(foreach file,$(LIBGCC_C_FILES),$(BUILD_DIR)/$(file:.c=.o)) + # Automatic dependency files -DEP_FILES := $(O_FILES:.o=.d) $(ULTRA_O_FILES:.o=.d) $(GODDARD_O_FILES:.o=.d) $(BUILD_DIR)/$(LD_SCRIPT).d +DEP_FILES := $(O_FILES:.o=.d) $(ULTRA_O_FILES:.o=.d) $(GODDARD_O_FILES:.o=.d) $(LIBGCC_O_FILES:.o=.d) $(BUILD_DIR)/$(LD_SCRIPT).d # Files with GLOBAL_ASM blocks ifeq ($(NON_MATCHING),0) - ifeq ($(VERSION),sh) - GLOBAL_ASM_C_FILES != grep -rl 'GLOBAL_ASM(' $(wildcard src/**/*.c) $(wildcard lib/src/*.c) - else - GLOBAL_ASM_C_FILES != grep -rl 'GLOBAL_ASM(' $(wildcard src/**/*.c) - endif + GLOBAL_ASM_C_FILES != grep -rl 'GLOBAL_ASM(' $(wildcard src/**/*.c) GLOBAL_ASM_O_FILES = $(foreach file,$(GLOBAL_ASM_C_FILES),$(BUILD_DIR)/$(file:.c=.o)) GLOBAL_ASM_DEP = $(BUILD_DIR)/src/audio/non_matching_dep endif @@ -277,6 +303,9 @@ endif # Compiler Options # #==============================================================================# +IQUE_EGCS_PATH := $(TOOLS_DIR)/ique_egcs +IQUE_LD_PATH := $(TOOLS_DIR)/ique_ld + # detect prefix for MIPS toolchain ifneq ($(call find-command,mips-linux-gnu-ld),) CROSS := mips-linux-gnu- @@ -288,26 +317,30 @@ else $(error Unable to detect a suitable MIPS toolchain installed) endif -AS := $(CROSS)as +AS := $(CROSS)as ifeq ($(COMPILER),gcc) - CC := $(CROSS)gcc + CC := $(CROSS)gcc else ifeq ($(USE_QEMU_IRIX),1) IRIX_ROOT := $(TOOLS_DIR)/ido5.3_compiler - CC := $(QEMU_IRIX) -silent -L $(IRIX_ROOT) $(IRIX_ROOT)/usr/bin/cc - ACPP := $(QEMU_IRIX) -silent -L $(IRIX_ROOT) $(IRIX_ROOT)/usr/lib/acpp - COPT := $(QEMU_IRIX) -silent -L $(IRIX_ROOT) $(IRIX_ROOT)/usr/lib/copt + CC := $(QEMU_IRIX) -silent -L $(IRIX_ROOT) $(IRIX_ROOT)/usr/bin/cc + ACPP := $(QEMU_IRIX) -silent -L $(IRIX_ROOT) $(IRIX_ROOT)/usr/lib/acpp + COPT := $(QEMU_IRIX) -silent -L $(IRIX_ROOT) $(IRIX_ROOT)/usr/lib/copt else - IDO_ROOT := $(TOOLS_DIR)/ido5.3_recomp - CC := $(IDO_ROOT)/cc - ACPP := $(IDO_ROOT)/acpp - COPT := $(IDO_ROOT)/copt + IDO_ROOT := $(TOOLS_DIR)/ido-static-recomp/build/out + CC := $(IDO_ROOT)/cc + ACPP := $(IDO_ROOT)/acpp + COPT := $(IDO_ROOT)/copt endif endif -LD := $(CROSS)ld -AR := $(CROSS)ar -OBJDUMP := $(CROSS)objdump -OBJCOPY := $(CROSS)objcopy +ifeq ($(VERSION),cn) + LD := LD_LIBRARY_PATH=$(IQUE_LD_PATH) $(IQUE_LD_PATH)/mips64-elf-ld +else + LD := $(CROSS)ld +endif +AR := $(CROSS)ar +OBJDUMP := $(CROSS)objdump +OBJCOPY := $(CROSS)objcopy ifeq ($(TARGET_N64),1) TARGET_CFLAGS := -nostdinc -DTARGET_N64 -D_LANGUAGE_C @@ -322,13 +355,41 @@ endif C_DEFINES := $(foreach d,$(DEFINES),-D$(d)) DEF_INC_CFLAGS := $(foreach i,$(INCLUDE_DIRS),-I$(i)) $(C_DEFINES) +IQUE_AS := $(IQUE_EGCS_PATH)/as +IQUE_ASFLAGS = -mcpu=r4300 -mabi=32 $(MIPSISET) $(foreach i,$(INCLUDE_DIRS),-I$(i)) $(foreach d,$(DEFINES),--defsym $(d)) + +ifeq ($(VERSION),cn) + IQUE_REASSEMBLED_ASM_FILES := $(wildcard asm/*.s) $(wildcard lib/asm/*.s) + IQUE_REASSEMBLED_ASM_FILES := $(filter-out asm/ipl3_font.s,$(IQUE_REASSEMBLED_ASM_FILES)) + IQUE_REASSEMBLED := $(foreach file,$(IQUE_REASSEMBLED_ASM_FILES),$(BUILD_DIR)/$(file:.s=.o)) + $(IQUE_REASSEMBLED): AS := $(IQUE_AS) + $(IQUE_REASSEMBLED): MIPSISET := + $(IQUE_REASSEMBLED): ASFLAGS = $(IQUE_ASFLAGS) +endif + +IQUE_CC := COMPILER_PATH=$(IQUE_EGCS_PATH) $(IQUE_EGCS_PATH)/gcc +IQUE_CFLAGS = -G 0 $(TARGET_CFLAGS) $(OPT_FLAGS) -D__sgi -DBBPLAYER -mcpu=r4300 -mgp32 -fno-pic -Wa,--strip-local-absolute $(MIPSISET) $(DEF_INC_CFLAGS) + +# iQue recompiled some files with a different compiler +ifeq ($(VERSION),cn) + IQUE_RECOMPILED_SRC_GAME := $(addprefix $(BUILD_DIR)/src/game/,rumble_init.o level_update.o memory.o area.o print.o ingame_menu.o hud.o cn_common_syms_1.o cn_common_syms_2.o) $(addprefix $(BUILD_DIR)/src/menu/,title_screen.o intro_geo.o file_select.o star_select.o) + IQUE_RECOMPILED_LIB_SRC := $(ULTRA_O_FILES) + # osDriveRomInit is weird + IQUE_RECOMPILED_LIB_SRC := $(filter-out $(addprefix $(BUILD_DIR)/lib/src/,osDriveRomInit.o),$(IQUE_RECOMPILED_LIB_SRC)) + IQUE_RECOMPILED_LIBGCC_SRC := $(LIBGCC_O_FILES) + IQUE_RECOMPILED = $(IQUE_RECOMPILED_SRC_GAME) $(IQUE_RECOMPILED_LIB_SRC) $(IQUE_RECOMPILED_LIBGCC_SRC) + $(IQUE_RECOMPILED): CC := $(IQUE_CC) + $(IQUE_RECOMPILED): MIPSISET := + $(IQUE_RECOMPILED): CFLAGS = $(IQUE_CFLAGS) +endif + # Prefer clang as C preprocessor if installed on the system ifneq (,$(call find-command,clang)) CPP := clang - CPPFLAGS := -E -P -x c -Wno-trigraphs $(DEF_INC_CFLAGS) + CPPFLAGS := -E -P -x c -Wno-trigraphs -D_LANGUAGE_ASSEMBLY $(DEF_INC_CFLAGS) else CPP := cpp - CPPFLAGS := -P -Wno-trigraphs $(DEF_INC_CFLAGS) + CPPFLAGS := -P -Wno-trigraphs -D_LANGUAGE_ASSEMBLY $(DEF_INC_CFLAGS) endif # Check code syntax with host compiler @@ -343,7 +404,7 @@ else CFLAGS += -non_shared -Wab,-r4300_mul -Xcpluscomm -Xfullwarn -signed -32 endif -ASFLAGS := -march=vr4300 -mabi=32 $(foreach i,$(INCLUDE_DIRS),-I$(i)) $(foreach d,$(DEFINES),--defsym $(d)) +ASFLAGS := -march=vr4300 -mabi=32 $(foreach i,$(INCLUDE_DIRS),-I$(i)) $(foreach d,$(DEFINES),--defsym $(d)) RSPASMFLAGS := $(foreach d,$(DEFINES),-definelabel $(subst =, ,$(d))) ifeq ($(shell getconf LONG_BIT), 32) @@ -362,10 +423,10 @@ export LANG := C #==============================================================================# # N64 tools -MIO0TOOL := $(TOOLS_DIR)/mio0 -N64CKSUM := $(TOOLS_DIR)/n64cksum -N64GRAPHICS := $(TOOLS_DIR)/n64graphics -N64GRAPHICS_CI := $(TOOLS_DIR)/n64graphics_ci +MIO0TOOL := $(TOOLS_DIR)/sm64tools/mio0 +N64CKSUM := $(TOOLS_DIR)/sm64tools/n64cksum +N64GRAPHICS := $(TOOLS_DIR)/sm64tools/n64graphics +N64GRAPHICS_CI := $(TOOLS_DIR)/sm64tools/n64graphics_ci TEXTCONV := $(TOOLS_DIR)/textconv AIFF_EXTRACT_CODEBOOK := $(TOOLS_DIR)/aiff_extract_codebook VADPCM_ENC := $(TOOLS_DIR)/vadpcm_enc @@ -394,10 +455,13 @@ YELLOW := \033[0;33m BLINK := \033[33;5m endif -# Use Objcopy instead of extract_data_for_mio +# Use objcopy instead of extract_data_for_mio to get 16-byte aligned padding ifeq ($(COMPILER),gcc) EXTRACT_DATA_FOR_MIO := $(OBJCOPY) -O binary --only-section=.data endif +ifeq ($(VERSION),cn) + EXTRACT_DATA_FOR_MIO := $(OBJCOPY) -O binary --only-section=.data +endif # Common build print status function define print @@ -420,6 +484,7 @@ clean: distclean: clean $(PYTHON) extract_assets.py --clean $(MAKE) -C $(TOOLS_DIR) clean + $(MAKE) -C $(TOOLS_DIR)/sm64tools clean test: $(ROM) $(EMULATOR) $(EMU_FLAGS) $< @@ -430,13 +495,13 @@ load: $(ROM) libultra: $(BUILD_DIR)/libultra.a # Extra object file dependencies -$(BUILD_DIR)/asm/boot.o: $(IPL3_RAW_FILES) +$(BUILD_DIR)/asm/ipl3_font.o: $(IPL3_RAW_FILES) $(BUILD_DIR)/src/game/crash_screen.o: $(CRASH_TEXTURE_C_FILES) $(BUILD_DIR)/lib/rsp.o: $(BUILD_DIR)/rsp/rspboot.bin $(BUILD_DIR)/rsp/fast3d.bin $(BUILD_DIR)/rsp/audio.bin $(SOUND_BIN_DIR)/sound_data.o: $(SOUND_BIN_DIR)/sound_data.ctl.inc.c $(SOUND_BIN_DIR)/sound_data.tbl.inc.c $(SOUND_BIN_DIR)/sequences.bin.inc.c $(SOUND_BIN_DIR)/bank_sets.inc.c $(BUILD_DIR)/levels/scripts.o: $(BUILD_DIR)/include/level_headers.h -ifeq ($(VERSION),sh) +ifeq ($(VERSION_SH_CN),true) $(BUILD_DIR)/src/audio/load_sh.o: $(SOUND_BIN_DIR)/bank_sets.inc.c $(SOUND_BIN_DIR)/sequences_header.inc.c $(SOUND_BIN_DIR)/ctl_header.inc.c $(SOUND_BIN_DIR)/tbl_header.inc.c endif @@ -468,8 +533,9 @@ else $(BUILD_DIR)/bin/segment2.o: $(BUILD_DIR)/text/$(VERSION)/define_text.inc.c endif endif +$(BUILD_DIR)/bin/segment2.o: $(BUILD_DIR)/text/debug_text.raw.inc.c -ALL_DIRS := $(BUILD_DIR) $(addprefix $(BUILD_DIR)/,$(SRC_DIRS) $(GODDARD_SRC_DIRS) $(ULTRA_SRC_DIRS) $(ULTRA_BIN_DIRS) $(BIN_DIRS) $(TEXTURE_DIRS) $(TEXT_DIRS) $(SOUND_SAMPLE_DIRS) $(addprefix levels/,$(LEVEL_DIRS)) rsp include) $(MIO0_DIR) $(addprefix $(MIO0_DIR)/,$(VERSION)) $(SOUND_BIN_DIR) $(SOUND_BIN_DIR)/sequences/$(VERSION) +ALL_DIRS := $(BUILD_DIR) $(addprefix $(BUILD_DIR)/,$(SRC_DIRS) $(GODDARD_SRC_DIRS) $(ULTRA_SRC_DIRS) $(ULTRA_BIN_DIRS) $(LIBGCC_SRC_DIRS) $(BIN_DIRS) $(TEXTURE_DIRS) $(TEXT_DIRS) $(SOUND_SAMPLE_DIRS) $(addprefix levels/,$(LEVEL_DIRS)) rsp include) $(MIO0_DIR) $(addprefix $(MIO0_DIR)/,$(VERSION)) $(SOUND_BIN_DIR) $(SOUND_BIN_DIR)/sequences/$(VERSION) # Make sure build directory exists before compiling anything DUMMY != mkdir -p $(ALL_DIRS) @@ -608,18 +674,27 @@ $(BUILD_DIR)/assets/demo_data.c: assets/demo_data.json $(wildcard assets/demos/* $(V)$(PYTHON) $(TOOLS_DIR)/demo_data_converter.py assets/demo_data.json $(DEF_INC_CFLAGS) > $@ # Encode in-game text strings -$(BUILD_DIR)/include/text_strings.h: include/text_strings.h.in +$(BUILD_DIR)/$(CHARMAP): $(CHARMAP) + $(call print,Preprocessing charmap:,$<,$@) + $(V)$(CPP) $(CPPFLAGS) -DBUILD_DIR=$(BUILD_DIR) -MMD -MP -MT $@ -MF $@.d -o $@ $< +$(BUILD_DIR)/$(CHARMAP_DEBUG): $(CHARMAP) + $(call print,Preprocessing charmap:,$<,$@) + $(V)$(CPP) $(CPPFLAGS) -DCHARMAP_DEBUG -DBUILD_DIR=$(BUILD_DIR) -MMD -MP -MT $@ -MF $@.d -o $@ $< +$(BUILD_DIR)/include/text_strings.h: include/text_strings.h.in $(BUILD_DIR)/$(CHARMAP) $(call print,Encoding:,$<,$@) - $(V)$(TEXTCONV) charmap.txt $< $@ + $(V)$(TEXTCONV) $(BUILD_DIR)/$(CHARMAP) $< $@ $(BUILD_DIR)/include/text_menu_strings.h: include/text_menu_strings.h.in $(call print,Encoding:,$<,$@) $(V)$(TEXTCONV) charmap_menu.txt $< $@ $(BUILD_DIR)/text/%/define_courses.inc.c: text/define_courses.inc.c text/%/courses.h @$(PRINT) "$(GREEN)Preprocessing: $(BLUE)$@ $(NO_COL)\n" - $(V)$(CPP) $(CPPFLAGS) $< -o - -I text/$*/ | $(TEXTCONV) charmap.txt - $@ + $(V)$(CPP) $(CPPFLAGS) $< -o - -I text/$*/ | $(TEXTCONV) $(BUILD_DIR)/$(CHARMAP) - $@ $(BUILD_DIR)/text/%/define_text.inc.c: text/define_text.inc.c text/%/courses.h text/%/dialogs.h @$(PRINT) "$(GREEN)Preprocessing: $(BLUE)$@ $(NO_COL)\n" - $(V)$(CPP) $(CPPFLAGS) $< -o - -I text/$*/ | $(TEXTCONV) charmap.txt - $@ + $(V)$(CPP) $(CPPFLAGS) $< -o - -I text/$*/ | $(TEXTCONV) $(BUILD_DIR)/$(CHARMAP) - $@ +$(BUILD_DIR)/text/debug_text.raw.inc.c: text/debug_text.inc.c $(BUILD_DIR)/$(CHARMAP_DEBUG) + @$(PRINT) "$(GREEN)Preprocessing: $(BLUE)$@ $(NO_COL)\n" + $(V)$(CPP) $(CPPFLAGS) $< -o - -I text/$*/ | $(TEXTCONV) $(BUILD_DIR)/$(CHARMAP_DEBUG) - $@ # Level headers $(BUILD_DIR)/include/level_headers.h: levels/level_headers.h.in @@ -645,12 +720,18 @@ $(GLOBAL_ASM_DEP).$(NON_MATCHING): # Compile C code $(BUILD_DIR)/%.o: %.c $(call print,Compiling:,$<,$@) - @$(CC_CHECK) $(CC_CHECK_CFLAGS) -MMD -MP -MT $@ -MF $(BUILD_DIR)/$*.d $< + $(V)$(CC_CHECK) $(CC_CHECK_CFLAGS) -MMD -MP -MT $@ -MF $(BUILD_DIR)/$*.d $< $(V)$(CC) -c $(CFLAGS) -o $@ $< +ifeq ($(VERSION),cn) + $(V)$(TOOLS_DIR)/patch_elf_32bit $@ +endif $(BUILD_DIR)/%.o: $(BUILD_DIR)/%.c $(call print,Compiling:,$<,$@) - @$(CC_CHECK) $(CC_CHECK_CFLAGS) -MMD -MP -MT $@ -MF $(BUILD_DIR)/$*.d $< + $(V)$(CC_CHECK) $(CC_CHECK_CFLAGS) -MMD -MP -MT $@ -MF $(BUILD_DIR)/$*.d $< $(V)$(CC) -c $(CFLAGS) -o $@ $< +ifeq ($(VERSION),cn) + $(V)$(TOOLS_DIR)/patch_elf_32bit $@ +endif # Alternate compiler flags needed for matching ifeq ($(COMPILER),ido) @@ -659,6 +740,8 @@ ifeq ($(COMPILER),ido) $(BUILD_DIR)/bin/%.o: OPT_FLAGS := -g $(BUILD_DIR)/src/goddard/%.o: OPT_FLAGS := -g $(BUILD_DIR)/src/goddard/%.o: MIPSISET := -mips1 + $(BUILD_DIR)/lib/asm/__osDisableInt.o: MIPSISET := -mips2 + $(BUILD_DIR)/lib/asm/bcopy.o: MIPSISET := -mips2 $(BUILD_DIR)/lib/src/%.o: OPT_FLAGS := $(BUILD_DIR)/lib/src/math/%.o: OPT_FLAGS := -O2 $(BUILD_DIR)/lib/src/math/ll%.o: OPT_FLAGS := @@ -667,14 +750,97 @@ ifeq ($(COMPILER),ido) $(BUILD_DIR)/lib/src/string.o: OPT_FLAGS := -O2 $(BUILD_DIR)/lib/src/gu%.o: OPT_FLAGS := -O3 $(BUILD_DIR)/lib/src/al%.o: OPT_FLAGS := -O3 - - ifeq ($(VERSION),sh) + ifeq ($(VERSION_SH_CN),true) $(BUILD_DIR)/lib/src/_Ldtob.o: OPT_FLAGS := -O3 $(BUILD_DIR)/lib/src/_Litob.o: OPT_FLAGS := -O3 $(BUILD_DIR)/lib/src/_Printf.o: OPT_FLAGS := -O3 $(BUILD_DIR)/lib/src/sprintf.o: OPT_FLAGS := -O3 $(BUILD_DIR)/lib/src/osDriveRomInit.o: OPT_FLAGS := -g endif + ifeq ($(VERSION),cn) + $(BUILD_DIR)/lib/src/osAiSetFrequency.o: MIPSISET := -mips2 + $(BUILD_DIR)/lib/src/osVirtualToPhysical.o: OPT_FLAGS := -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osInitializeIQueWrapper.o: OPT_FLAGS := -O2 + $(BUILD_DIR)/lib/src/osAiGetLength.o: OPT_FLAGS := -O2 + $(BUILD_DIR)/lib/src/osAiSetFrequency.o: OPT_FLAGS := -O2 + $(BUILD_DIR)/lib/src/math/cosf.o: OPT_FLAGS := -O2 -mips2 + $(BUILD_DIR)/lib/src/guOrthoF.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/guPerspectiveF.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osAiSetNextBuffer.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osContStartReadData.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osContInit.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/math/sinf.o: OPT_FLAGS := -O2 -mips2 + $(BUILD_DIR)/lib/src/math/ll%.o: OPT_FLAGS := -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/string.o: OPT_FLAGS := -O2 -mips2 + $(BUILD_DIR)/lib/src/sprintf.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osSyncPrintf.o: OPT_FLAGS := -O2 + $(BUILD_DIR)/lib/src/_Printf.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osCreateMesgQueue.o: OPT_FLAGS := -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osRecvMesg.o: OPT_FLAGS := -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osSendMesg.o: OPT_FLAGS := -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osSetEventMesg.o: OPT_FLAGS := -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osSpTaskLoadGo.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osSpTaskYield.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osSpTaskYielded.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/__osSiRawStartDma.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/__osSiCreateAccessQueue.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osCreateThread.o: OPT_FLAGS := -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osSetThreadPri.o: OPT_FLAGS := -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osStartThread.o: OPT_FLAGS := -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/__osDequeueThread.o: OPT_FLAGS := -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/__osGetCurrFaultedThread.o: OPT_FLAGS := -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osGetTime.o: OPT_FLAGS := -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osSetTime.o: OPT_FLAGS := -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osSetTimer.o: OPT_FLAGS := -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osTimer.o: OPT_FLAGS := -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osCreateViManager.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osViSetEvent.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osViSetMode.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osViSetSpecialFeatures.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osViSwapBuffer.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/__osViSwapContext.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osViBlack.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/guRotateF.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osEepromProbe.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osEepromLongWrite.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osEepromLongRead.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osCreatePiManager.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osEPiRawStartDma.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/epidma.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osCartRomInit.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/__osDevMgrMain.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/__osPiCreateAccessQueue.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osPiStartDma.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/motor.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osInitialize.o: OPT_FLAGS := -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/__osAiDeviceBusy.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/_Litob.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/_Ldtob.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osJamMesg.o: OPT_FLAGS := -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/__osSpDeviceBusy.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/__osSpGetStatus.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/__osSpSetStatus.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/__osSpSetPc.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/__osSpRawStartDma.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/__osSiRawReadIo.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/__osSiRawWriteIo.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osDestroyThread.o: OPT_FLAGS := -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osGetThreadPri.o: OPT_FLAGS := -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osYieldThread.o: OPT_FLAGS := -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/__osViInit.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/__osViGetCurrentContext.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osEepromRead.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osEepromWrite.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/__osSetGlobalIntMask.o: OPT_FLAGS := -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/__osResetGlobalIntMask.o: OPT_FLAGS := -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osPiRawStartDma.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osPiGetCmdQueue.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osEPiRawReadIo.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/osEPiRawWriteIo.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/ldiv.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/__osSiDeviceBusy.o: OPT_FLAGS := -O2 -mno-abicalls -mips2 + $(BUILD_DIR)/lib/src/libgcc/%.o: OPT_FLAGS := -O2 -g -mips2 + endif ifeq ($(VERSION),eu) $(BUILD_DIR)/lib/src/_Ldtob.o: OPT_FLAGS := -O3 $(BUILD_DIR)/lib/src/_Litob.o: OPT_FLAGS := -O3 @@ -733,16 +899,31 @@ $(BUILD_DIR)/libgoddard.a: $(GODDARD_O_FILES) @$(PRINT) "$(GREEN)Linking libgoddard: $(BLUE)$@ $(NO_COL)\n" $(V)$(AR) rcs -o $@ $(GODDARD_O_FILES) +# Link libgcc +$(BUILD_DIR)/libgcc.a: $(LIBGCC_O_FILES) + @$(PRINT) "$(GREEN)Linking libgcc: $(BLUE)$@ $(NO_COL)\n" + $(V)$(AR) rcs -o $@ $(LIBGCC_O_FILES) + # Link SM64 ELF file -$(ELF): $(O_FILES) $(MIO0_OBJ_FILES) $(SEG_FILES) $(BUILD_DIR)/$(LD_SCRIPT) undefined_syms.txt $(BUILD_DIR)/libultra.a $(BUILD_DIR)/libgoddard.a +$(ELF): $(O_FILES) $(MIO0_OBJ_FILES) $(SEG_FILES) $(BUILD_DIR)/$(LD_SCRIPT) undefined_syms.txt $(BUILD_DIR)/libultra.a $(BUILD_DIR)/libgoddard.a $(BUILD_DIR)/libgcc.a @$(PRINT) "$(GREEN)Linking ELF file: $(BLUE)$@ $(NO_COL)\n" - $(V)$(LD) -L $(BUILD_DIR) -T undefined_syms.txt -T $(BUILD_DIR)/$(LD_SCRIPT) -Map $(BUILD_DIR)/sm64.$(VERSION).map --no-check-sections $(addprefix -R ,$(SEG_FILES)) -o $@ $(O_FILES) -lultra -lgoddard + $(V)$(LD) -L $(BUILD_DIR) -T undefined_syms.txt -T $(BUILD_DIR)/$(LD_SCRIPT) -Map $(BUILD_DIR)/sm64.$(VERSION).map --no-check-sections $(addprefix -R ,$(SEG_FILES)) -o $@ $(O_FILES) -lultra -lgoddard -lgcc # Build ROM +ifeq ($(VERSION),cn) + PAD_TO_GAP_FILL := --pad-to=0x7B0000 --gap-fill=0x00 +else + PAD_TO_GAP_FILL := --pad-to=0x800000 --gap-fill=0xFF +endif + $(ROM): $(ELF) $(call print,Building ROM:,$<,$@) - $(V)$(OBJCOPY) --pad-to=0x800000 --gap-fill=0xFF $< $(@:.z64=.bin) -O binary +ifeq ($(VERSION),cn) # cn has no checksums + $(V)$(OBJCOPY) $(PAD_TO_GAP_FILL) $< $(@) -O binary +else + $(V)$(OBJCOPY) $(PAD_TO_GAP_FILL) $< $(@:.z64=.bin) -O binary $(V)$(N64CKSUM) $(@:.z64=.bin) $@ +endif $(BUILD_DIR)/$(TARGET).objdump: $(ELF) $(OBJDUMP) -D $< > $@ diff --git a/Makefile.split b/Makefile.split index 4aa49d82..35ae029c 100644 --- a/Makefile.split +++ b/Makefile.split @@ -178,6 +178,9 @@ $(eval $(call level_rules,menu,generic)) # Menu (File Select) # -------------------------------------- # Ending cake textures are generated in a special way +$(BUILD_DIR)/levels/ending/cake_cn.inc.c: levels/ending/cake_cn.png + $(call print,Splitting:,$<,$@) + $(V)$(SKYCONV) --type cake-cn --split $^ $(BUILD_DIR)/levels/ending $(BUILD_DIR)/levels/ending/cake_eu.inc.c: levels/ending/cake_eu.png $(call print,Splitting:,$<,$@) $(V)$(SKYCONV) --type cake-eu --split $^ $(BUILD_DIR)/levels/ending diff --git a/README.md b/README.md index aee71d4f..e708a8b8 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Super Mario 64 -- This repo contains a full decompilation of Super Mario 64 (J), (U), (E), and (SH). +- This repo contains a full decompilation of Super Mario 64 of the following releases: Japan (jp), North America (us), Europe (eu), Shindou (sh) and iQue Player (cn). - Naming and documentation of the source code and data structures are in progress. It builds the following ROMs: @@ -9,16 +9,17 @@ It builds the following ROMs: * sm64.us.z64 `sha1: 9bef1128717f958171a4afac3ed78ee2bb4e86ce` * sm64.eu.z64 `sha1: 4ac5721683d0e0b6bbb561b58a71740845dceea9` * sm64.sh.z64 `sha1: 3f319ae697533a255a1003d09202379d78d5a2e0` +* sm64.cn.z64 `sha1: 2e1db2780985a1f068077dc0444b685f39cd90ec` This repo does not include all assets necessary for compiling the ROMs. A prior copy of the game is required to extract the assets. ## Quick Start (for Ubuntu) -1. Install prerequisites: `sudo apt install -y build-essential git binutils-mips-linux-gnu python3` +1. Install prerequisites: `sudo apt install -y binutils-mips-linux-gnu build-essential git pkgconf python3` 2. Clone the repo from within Linux: `git clone https://github.com/n64decomp/sm64.git` -3. Place a Super Mario 64 ROM called `baserom..z64` into the project folder for asset extraction, where `VERSION` can be `us`, `jp`, `eu`, or `sh`. -4. Run `make` to build. Qualify the version through `make VERSION=`. Add `-j4` to improve build speed (hardware dependent). +3. Place a Super Mario 64 ROM called `baserom..z64` into the project folder for asset extraction, where `VERSION` can be `jp`, `us`, `eu`, `sh`, or `cn`. +4. Run `make` to build. Specify the version through `make VERSION=`. Add `-j4` to improve build speed (hardware dependent). Ensure the repo path length does not exceed 255 characters. Long path names result in build errors. @@ -44,7 +45,6 @@ There are 3 steps to set up a working build. The build system has the following package requirements: * binutils-mips - * capstone * pkgconf * python3 >= 3.6 @@ -53,18 +53,17 @@ Dependency installation instructions for common Linux distros are provided below ##### Debian / Ubuntu To install build dependencies: ``` -sudo apt install -y binutils-mips-linux-gnu build-essential git libcapstone-dev pkgconf python3 +sudo apt install -y binutils-mips-linux-gnu build-essential git pkgconf python3 ``` ##### Arch Linux To install build dependencies: ``` -sudo pacman -S base-devel capstone python +sudo pacman -S base-devel python ``` Install the following AUR packages: * [mips64-elf-binutils](https://aur.archlinux.org/packages/mips64-elf-binutils) (AUR) - ##### Other Linux distributions Most modern Linux distributions should have equivalent packages to the other two listed above. @@ -79,7 +78,7 @@ You may also use [Docker](#docker-installation) to handle installing an image wi #### Step 2: Copy baserom(s) for asset extraction -For each version (jp/us/eu/sh) for which you want to build a ROM, put an existing ROM at +For each version (jp/us/eu/sh/cn) for which you want to build a ROM, put an existing ROM at `./baserom..z64` for asset extraction. ##### Step 3: Build the ROM @@ -95,10 +94,10 @@ Resulting artifacts can be found in the `build` directory. The full list of configurable variables are listed below, with the default being the first listed: -* ``VERSION``: ``us``, ``jp``, ``eu``, ``sh`` +* ``VERSION``: ``jp``, ``us``, ``eu``, ``sh``, ``cn`` * ``GRUCODE``: ``f3d_old``, ``f3d_new``, ``f3dex``, ``f3dex2``, ``f3dzex`` * ``COMPARE``: ``1`` (compare ROM hash), ``0`` (do not compare ROM hash) -* ``NON_MATCHING``: Use functionally equivalent C implementations for non-matchings (Currently there aren't any non-matchings, but this will apply to iQue). Also will avoid instances of undefined behavior. +* ``NON_MATCHING``: Use functionally equivalent C implementations for non-matchings. Also will avoid instances of undefined behavior. * ``CROSS``: Cross-compiler tool prefix (Example: ``mips64-elf-``). ### macOS @@ -111,12 +110,12 @@ With macOS, you may either use Homebrew or [Docker](#docker-installation). Install [Homebrew](https://brew.sh) and the following dependencies: ``` brew update -brew install capstone coreutils make pkg-config tehzz/n64-dev/mips64-elf-binutils +brew install coreutils make pkg-config tehzz/n64-dev/mips64-elf-binutils ``` #### Step 2: Copy baserom(s) for asset extraction -For each version (jp/us/eu/sh) for which you want to build a ROM, put an existing ROM at +For each version (jp/us/eu/sh/cn) for which you want to build a ROM, put an existing ROM at `./baserom..z64` for asset extraction. ##### Step 3: Build the ROM @@ -154,7 +153,7 @@ docker run --rm --mount type=bind,source="$(pwd)",destination=/sm64 --user $UID: Resulting artifacts can be found in the `build` directory. ## Project Structure - + sm64 ├── actors: object behaviors, geo layout, and display lists ├── asm: handwritten assembly code, rom header diff --git a/actors/amp/geo.inc.c b/actors/amp/geo.inc.c index 9c9e1d69..aa69edea 100644 --- a/actors/amp/geo.inc.c +++ b/actors/amp/geo.inc.c @@ -1,55 +1,55 @@ const GeoLayout dAmpGeo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, dAmpEyeDl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(2, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, dAmpElectricityDl), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(2, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, dAmpElectricityDl), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(2, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, dAmpElectricityDl), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(2, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, dAmpElectricityDl), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, dAmpMouthDl), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, dAmpBodyDl), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, dAmpEyeDl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(2, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, dAmpElectricityDl), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(2, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, dAmpElectricityDl), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(2, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, dAmpElectricityDl), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(2, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, dAmpElectricityDl), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, dAmpMouthDl), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, dAmpBodyDl), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/bird/geo.inc.c b/actors/bird/geo.inc.c index 92876442..45f1b7ed 100644 --- a/actors/bird/geo.inc.c +++ b/actors/bird/geo.inc.c @@ -1,25 +1,25 @@ // 0x0C000000 const GeoLayout birds_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, birds_seg5_dl_05000670), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 1, -12, 37, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, birds_seg5_dl_05000528), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 1, -12, -37, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, birds_seg5_dl_05000600), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, birds_seg5_dl_05000670), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 1, -12, 37, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, birds_seg5_dl_05000528), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 1, -12, -37, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, birds_seg5_dl_05000600), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, birds_seg5_dl_05000598), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, birds_seg5_dl_05000598), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/blargg/geo.inc.c b/actors/blargg/geo.inc.c index 3c161769..7ab5de9e 100644 --- a/actors/blargg/geo.inc.c +++ b/actors/blargg/geo.inc.c @@ -1,20 +1,20 @@ // 0x0C000240 const GeoLayout blargg_geo[] = { - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, blargg_seg5_dl_05005D00), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 306, 0, 0, blargg_seg5_dl_05005A60), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, blargg_seg5_dl_05005D00), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 6, 3, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, blargg_seg5_dl_050058D0), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 306, 0, 0, blargg_seg5_dl_05005A60), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 6, 3, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, blargg_seg5_dl_050058D0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/blue_coin_switch/geo.inc.c b/actors/blue_coin_switch/geo.inc.c index cb0b96c0..6ef7a78d 100644 --- a/actors/blue_coin_switch/geo.inc.c +++ b/actors/blue_coin_switch/geo.inc.c @@ -1,10 +1,10 @@ // 0x0F000000 const GeoLayout blue_coin_switch_geo[] = { - GEO_CULLING_RADIUS(300), - GEO_OPEN_NODE(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, blue_coin_switch_seg8_dl_08000E08), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(300), + GEO_OPEN_NODE(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, blue_coin_switch_seg8_dl_08000E08), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/blue_fish/geo.inc.c b/actors/blue_fish/geo.inc.c index d55c81a8..10e3cbfb 100644 --- a/actors/blue_fish/geo.inc.c +++ b/actors/blue_fish/geo.inc.c @@ -1,32 +1,32 @@ // 0x16000BEC const GeoLayout fish_shadow_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x9B, 50), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -16, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, blue_fish_seg3_dl_0301BFB8), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x9B, 50), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -16, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 97, 0, 0, blue_fish_seg3_dl_0301C150), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, blue_fish_seg3_dl_0301BFB8), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 97, 0, 0, blue_fish_seg3_dl_0301C150), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x16000C44 const GeoLayout fish_geo[] = { - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -16, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, blue_fish_seg3_dl_0301BFB8), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 97, 0, 0, blue_fish_seg3_dl_0301C150), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -16, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, blue_fish_seg3_dl_0301BFB8), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 97, 0, 0, blue_fish_seg3_dl_0301C150), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/bobomb/geo.inc.c b/actors/bobomb/geo.inc.c index 4221dd39..d8e263e0 100644 --- a/actors/bobomb/geo.inc.c +++ b/actors/bobomb/geo.inc.c @@ -1,99 +1,99 @@ // 0x0F0007B8 const GeoLayout black_bobomb_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 70), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 24576), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 70), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 24576), + GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bobomb_seg8_dl_08022D08), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 57, -60, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 91, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bobomb_seg8_dl_08023270), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 55, 62, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 91, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bobomb_seg8_dl_08023378), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bobomb_seg8_dl_08023480), - GEO_SWITCH_CASE(2, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, bobomb_seg8_dl_08022B58), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, bobomb_seg8_dl_08022B88), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bobomb_seg8_dl_08022D08), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 57, -60, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 91, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bobomb_seg8_dl_08023270), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 55, 62, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 91, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bobomb_seg8_dl_08023378), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bobomb_seg8_dl_08023480), + GEO_SWITCH_CASE(2, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, bobomb_seg8_dl_08022B58), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, bobomb_seg8_dl_08022B88), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0F0008F4 const GeoLayout bobomb_buddy_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 70), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 24576), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 70), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 24576), + GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bobomb_seg8_dl_08022D78), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 57, -60, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 91, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bobomb_seg8_dl_08023270), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 55, 62, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 91, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bobomb_seg8_dl_08023378), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bobomb_seg8_dl_08023480), - GEO_SWITCH_CASE(2, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, bobomb_seg8_dl_08022B58), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, bobomb_seg8_dl_08022B88), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bobomb_seg8_dl_08022D78), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 57, -60, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 91, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bobomb_seg8_dl_08023270), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 55, 62, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 91, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bobomb_seg8_dl_08023378), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bobomb_seg8_dl_08023480), + GEO_SWITCH_CASE(2, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, bobomb_seg8_dl_08022B58), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, bobomb_seg8_dl_08022B88), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/bomb/geo.inc.c b/actors/bomb/geo.inc.c index d2deeea1..66a95e13 100644 --- a/actors/bomb/geo.inc.c +++ b/actors/bomb/geo.inc.c @@ -1,15 +1,15 @@ // 0x0D000B78 / 0BBC const GeoLayout bowser_bomb_geo[] = { - GEO_CULLING_RADIUS(1000), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 196608), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bomb_seg6_dl_0605A9C0), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bomb_seg6_dl_0605A830), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1000), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 196608), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bomb_seg6_dl_0605A9C0), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bomb_seg6_dl_0605A830), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/boo/geo.inc.c b/actors/boo/geo.inc.c index 4fa9721b..83af1d6b 100644 --- a/actors/boo/geo.inc.c +++ b/actors/boo/geo.inc.c @@ -1,17 +1,17 @@ // 0x0C000224 const GeoLayout boo_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 70), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 26214), - GEO_OPEN_NODE(), - 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), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, boo_seg5_dl_0500C1B0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), -GEO_CLOSE_NODE(), //! more close than open nodes -GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 70), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 26214), + GEO_OPEN_NODE(), + 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), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, boo_seg5_dl_0500C1B0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), //! more close than open nodes + GEO_END(), }; diff --git a/actors/boo_castle/geo.inc.c b/actors/boo_castle/geo.inc.c index 1b3ee4f3..bafbf35b 100644 --- a/actors/boo_castle/geo.inc.c +++ b/actors/boo_castle/geo.inc.c @@ -1,17 +1,17 @@ // 0x0D0005B0 const GeoLayout boo_castle_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 70), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 26214), - GEO_OPEN_NODE(), - 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), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, boo_castle_seg6_dl_06017CE0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), -GEO_CLOSE_NODE(), //! more close than open nodes -GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 70), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 26214), + GEO_OPEN_NODE(), + 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), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, boo_castle_seg6_dl_06017CE0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), //! more close than open nodes + GEO_END(), }; diff --git a/actors/book/geo.inc.c b/actors/book/geo.inc.c index d6cf4402..f371ec7c 100644 --- a/actors/book/geo.inc.c +++ b/actors/book/geo.inc.c @@ -1,8 +1,8 @@ // 0x0C0000C0 const GeoLayout bookend_geo[] = { - GEO_CULLING_RADIUS(300), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, book_seg5_dl_05002FB0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(300), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, book_seg5_dl_05002FB0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/bookend/geo.inc.c b/actors/bookend/geo.inc.c index b5629c8d..4e857322 100644 --- a/actors/bookend/geo.inc.c +++ b/actors/bookend/geo.inc.c @@ -1,29 +1,29 @@ // 0x0C000000 const GeoLayout bookend_part_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bookend_seg5_dl_05001F98), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bookend_seg5_dl_05001B20), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bookend_seg5_dl_05002140), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bookend_seg5_dl_05001F98), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bookend_seg5_dl_05001B20), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bookend_seg5_dl_05002140), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bookend_seg5_dl_05001D68), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bookend_seg5_dl_05001978), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bookend_seg5_dl_050022E0), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bookend_seg5_dl_05001D68), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bookend_seg5_dl_05001978), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bookend_seg5_dl_050022E0), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), -GEO_CLOSE_NODE(), //! more close than open nodes -GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), //! more close than open nodes + GEO_END(), }; diff --git a/actors/bowling_ball/geo.inc.c b/actors/bowling_ball/geo.inc.c index 884afead..6ab0fc93 100644 --- a/actors/bowling_ball/geo.inc.c +++ b/actors/bowling_ball/geo.inc.c @@ -4,24 +4,24 @@ // 0x0F000640 const GeoLayout bowling_ball_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 280), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 170393), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bobomb_seg8_dl_08022D08), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 280), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 170393), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bobomb_seg8_dl_08022D08), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0F00066C const GeoLayout bowling_ball_track_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 170393), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bobomb_seg8_dl_08022D08), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 170393), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bobomb_seg8_dl_08022D08), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/bowser/flames_data.inc.c b/actors/bowser/flames_data.inc.c index 1ba334ab..23e3a075 100644 --- a/actors/bowser/flames_data.inc.c +++ b/actors/bowser/flames_data.inc.c @@ -2,97 +2,97 @@ const s16 dBowserFlamesOrientationValues[] = { // posX, posY, posZ, rotY, rotX - 0, 280, 80, 0x00E9, 0x1A96, - 0, 278, 83, 0x00EC, 0x1C7F, - 0, 273, 92, 0x00F9, 0x20BF, - 0, 268, 102, 0x010F, 0x2519, - 0, 263, 109, 0x011D, 0x2751, - 0, 263, 110, 0x011C, 0x2714, - 0, 265, 106, 0x0112, 0x2601, - 0, 268, 102, 0x0109, 0x24C0, - 0, 271, 96, 0x00FF, 0x2358, - 0, 274, 90, 0x00F7, 0x21CB, - 0, 277, 84, 0x00EE, 0x201C, - 0, 280, 78, 0x00E7, 0x1E4E, - 0, 284, 71, 0x00DF, 0x1C64, - 0, 288, 63, 0x00D9, 0x1A61, - 0, 291, 56, 0x00D3, 0x184B, - 0, 295, 48, 0x00CF, 0x1622, - 0, 298, 40, 0x00CA, 0x13E9, - 0, 301, 32, 0x00C7, 0x11A5, - 0, 304, 23, 0x00C4, 0x0F59, - 0, 308, 15, 0x00C1, 0x0D08, - 0, 311, 7, 0x00C0, 0x0AB5, - 0, 313, 0, 0x00C0, 0x0863, - 0, 315, -8, 0x00BF, 0x0615, - 0, 317, -15, 0x00CE, 0x03A3, - 0, 319, -22, 0x00F8, 0x00ED, - 0, 320, -29, 0x0131, 0xFFFF, - 0, 322, -36, 0x0172, 0xFFFF, - 0, 322, -40, 0x01B5, 0xFFFF, - 0, 323, -45, 0x01ED, 0xFFFF, - 0, 323, -48, 0x0213, 0xFFFF, - 0, 323, -51, 0x0219, 0xFFFF, - 0, 323, -52, 0x01F2, 0xFFFF, - 0, 323, -51, 0x018F, 0xFFFF, - 0, 323, -49, 0x00E5, 0xFFFF, - 0, 322, -45, 0xFFFF, 0xFFFF, - 0, 320, -35, 0xFFFF, 0xFFFF, - 0, 317, -23, 0xFFFF, 0xFFFF, - 0, 312, -7, 0xFFFF, 0xFFFF, - 0, 306, 11, 0xFFFF, 0xFFFF, - 0, 299, 31, 0xFFFF, 0xFFFF, - 0, 288, 51, 0xFFFF, 0xFFFF, - 0, 278, 70, 0xFFFF, 0xFFFF, - 0, 267, 89, 0xFFFF, 0xFFFF, - 0, 256, 106, 0xFFFF, 0x023A, - 0, 244, 120, 0xFFFF, 0x04AA, - 0, 236, 132, 0xFFFF, 0x069F, - 0, 229, 139, 0xFFFF, 0x0803, - 0, 224, 144, 0xFFFF, 0x08C0, - 0, 222, 147, 0xFFFF, 0x0928, - 0, 221, 148, 0xFFFF, 0x099D, - 0, 221, 149, 0xFFFF, 0x0A16, - 0, 221, 150, 0xFFFF, 0x0A8D, - 0, 221, 150, 0xFFFF, 0x0AF6, - 0, 222, 150, 0xFFFF, 0x0B4A, - 0, 222, 150, 0xFFFF, 0x0B84, - 0, 222, 149, 0x020A, 0x0BA0, - 0, 223, 149, 0x0524, 0x0B9E, - 0, 225, 148, 0x07EC, 0x0B84, - 0, 226, 147, 0x0A3F, 0x0B57, - 0, 227, 145, 0x0BFB, 0x0B1F, - 0, 228, 144, 0x0D00, 0x0AE5, - 0, 230, 142, 0x0D6F, 0x0AA0, - 0, 232, 140, 0x0D8B, 0x0A48, - 0, 233, 138, 0x0D5D, 0x09DE, - 0, 236, 136, 0x0CED, 0x096A, - 0, 238, 134, 0x0C49, 0x08EA, - 0, 239, 132, 0x0B76, 0x0863, - 0, 241, 130, 0x0A80, 0x07D9, - 0, 244, 128, 0x0970, 0x074E, - 0, 246, 125, 0x084E, 0x06C7, - 0, 248, 122, 0x0723, 0x0649, - 0, 251, 120, 0x05F8, 0x05D7, - 0, 253, 117, 0x04D6, 0x0579, - 0, 254, 114, 0x03C3, 0x0532, - 0, 256, 111, 0x02C9, 0x0509, - 0, 259, 108, 0x01F0, 0x0504, - 0, 261, 105, 0x0141, 0x0525, - 0, 262, 103, 0x00C3, 0x0572, - 0, 264, 100, 0x006E, 0x0619, - 0, 267, 97, 0x0032, 0x0734, - 0, 268, 95, 0x000C, 0x08AF, - 0, 269, 93, 0xFFFF, 0x0A74, - 0, 272, 90, 0xFFFF, 0x0C70, - 0, 273, 88, 0xFFFF, 0x0E8E, - 0, 274, 86, 0x0014, 0x10B6, - 0, 275, 84, 0x0032, 0x12DA, - 0, 277, 82, 0x0056, 0x14E1, - 0, 277, 82, 0x007E, 0x16B9, - 0, 278, 80, 0x00A4, 0x184B, - 0, 278, 80, 0x00C6, 0x1983, - 0, 279, 80, 0x00DF, 0x1A4D, - 0, 280, 80, 0x00E9, 0x1A96, + 0, 280, 80, 0x00E9, 0x1A96, + 0, 278, 83, 0x00EC, 0x1C7F, + 0, 273, 92, 0x00F9, 0x20BF, + 0, 268, 102, 0x010F, 0x2519, + 0, 263, 109, 0x011D, 0x2751, + 0, 263, 110, 0x011C, 0x2714, + 0, 265, 106, 0x0112, 0x2601, + 0, 268, 102, 0x0109, 0x24C0, + 0, 271, 96, 0x00FF, 0x2358, + 0, 274, 90, 0x00F7, 0x21CB, + 0, 277, 84, 0x00EE, 0x201C, + 0, 280, 78, 0x00E7, 0x1E4E, + 0, 284, 71, 0x00DF, 0x1C64, + 0, 288, 63, 0x00D9, 0x1A61, + 0, 291, 56, 0x00D3, 0x184B, + 0, 295, 48, 0x00CF, 0x1622, + 0, 298, 40, 0x00CA, 0x13E9, + 0, 301, 32, 0x00C7, 0x11A5, + 0, 304, 23, 0x00C4, 0x0F59, + 0, 308, 15, 0x00C1, 0x0D08, + 0, 311, 7, 0x00C0, 0x0AB5, + 0, 313, 0, 0x00C0, 0x0863, + 0, 315, -8, 0x00BF, 0x0615, + 0, 317, -15, 0x00CE, 0x03A3, + 0, 319, -22, 0x00F8, 0x00ED, + 0, 320, -29, 0x0131, 0xFFFF, + 0, 322, -36, 0x0172, 0xFFFF, + 0, 322, -40, 0x01B5, 0xFFFF, + 0, 323, -45, 0x01ED, 0xFFFF, + 0, 323, -48, 0x0213, 0xFFFF, + 0, 323, -51, 0x0219, 0xFFFF, + 0, 323, -52, 0x01F2, 0xFFFF, + 0, 323, -51, 0x018F, 0xFFFF, + 0, 323, -49, 0x00E5, 0xFFFF, + 0, 322, -45, 0xFFFF, 0xFFFF, + 0, 320, -35, 0xFFFF, 0xFFFF, + 0, 317, -23, 0xFFFF, 0xFFFF, + 0, 312, -7, 0xFFFF, 0xFFFF, + 0, 306, 11, 0xFFFF, 0xFFFF, + 0, 299, 31, 0xFFFF, 0xFFFF, + 0, 288, 51, 0xFFFF, 0xFFFF, + 0, 278, 70, 0xFFFF, 0xFFFF, + 0, 267, 89, 0xFFFF, 0xFFFF, + 0, 256, 106, 0xFFFF, 0x023A, + 0, 244, 120, 0xFFFF, 0x04AA, + 0, 236, 132, 0xFFFF, 0x069F, + 0, 229, 139, 0xFFFF, 0x0803, + 0, 224, 144, 0xFFFF, 0x08C0, + 0, 222, 147, 0xFFFF, 0x0928, + 0, 221, 148, 0xFFFF, 0x099D, + 0, 221, 149, 0xFFFF, 0x0A16, + 0, 221, 150, 0xFFFF, 0x0A8D, + 0, 221, 150, 0xFFFF, 0x0AF6, + 0, 222, 150, 0xFFFF, 0x0B4A, + 0, 222, 150, 0xFFFF, 0x0B84, + 0, 222, 149, 0x020A, 0x0BA0, + 0, 223, 149, 0x0524, 0x0B9E, + 0, 225, 148, 0x07EC, 0x0B84, + 0, 226, 147, 0x0A3F, 0x0B57, + 0, 227, 145, 0x0BFB, 0x0B1F, + 0, 228, 144, 0x0D00, 0x0AE5, + 0, 230, 142, 0x0D6F, 0x0AA0, + 0, 232, 140, 0x0D8B, 0x0A48, + 0, 233, 138, 0x0D5D, 0x09DE, + 0, 236, 136, 0x0CED, 0x096A, + 0, 238, 134, 0x0C49, 0x08EA, + 0, 239, 132, 0x0B76, 0x0863, + 0, 241, 130, 0x0A80, 0x07D9, + 0, 244, 128, 0x0970, 0x074E, + 0, 246, 125, 0x084E, 0x06C7, + 0, 248, 122, 0x0723, 0x0649, + 0, 251, 120, 0x05F8, 0x05D7, + 0, 253, 117, 0x04D6, 0x0579, + 0, 254, 114, 0x03C3, 0x0532, + 0, 256, 111, 0x02C9, 0x0509, + 0, 259, 108, 0x01F0, 0x0504, + 0, 261, 105, 0x0141, 0x0525, + 0, 262, 103, 0x00C3, 0x0572, + 0, 264, 100, 0x006E, 0x0619, + 0, 267, 97, 0x0032, 0x0734, + 0, 268, 95, 0x000C, 0x08AF, + 0, 269, 93, 0xFFFF, 0x0A74, + 0, 272, 90, 0xFFFF, 0x0C70, + 0, 273, 88, 0xFFFF, 0x0E8E, + 0, 274, 86, 0x0014, 0x10B6, + 0, 275, 84, 0x0032, 0x12DA, + 0, 277, 82, 0x0056, 0x14E1, + 0, 277, 82, 0x007E, 0x16B9, + 0, 278, 80, 0x00A4, 0x184B, + 0, 278, 80, 0x00C6, 0x1983, + 0, 279, 80, 0x00DF, 0x1A4D, + 0, 280, 80, 0x00E9, 0x1A96, 0, 0, 0, 0x0000, 0x0000, }; diff --git a/actors/bowser/geo.inc.c b/actors/bowser/geo.inc.c index b59e23a6..0bbb5972 100644 --- a/actors/bowser/geo.inc.c +++ b/actors/bowser/geo.inc.c @@ -1,419 +1,419 @@ // 0x0D0000D8 const GeoLayout bowser_geo_0000D8[] = { - GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0x9B, 400), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_06040210), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -89, -2, -18, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0x9B, 400), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_06040210), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -89, -2, -18, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 69, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 85, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_0603D200), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_0603E6B8), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 69, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 85, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_0603D200), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_0603E6B8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, -32, -112, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, -32, -112, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_06043698), - GEO_ASM(0, geo_update_body_rot_from_parent), + 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, geo_update_body_rot_from_parent), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 118, 67, 105, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 118, 67, 105, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 49, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_0603B208), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_060399D8), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_060392E0), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 49, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_0603B208), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_060399D8), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_060392E0), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 136, 130, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 136, 130, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 61, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -13, 258, 0, bowser_seg6_dl_060431F0), - GEO_CLOSE_NODE(), - GEO_SWITCH_CASE(9, geo_switch_bowser_eyes), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_06042348), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_060423A0), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_060423F8), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_06042450), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_060424A8), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_06042500), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_06042558), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_060425B0), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_06042608), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 61, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -13, 258, 0, bowser_seg6_dl_060431F0), + GEO_CLOSE_NODE(), + GEO_SWITCH_CASE(9, geo_switch_bowser_eyes), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_06042348), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_060423A0), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_060423F8), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_06042450), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_060424A8), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_06042500), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_06042558), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_060425B0), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_06042608), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -118, 67, 105, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, -118, 67, 105, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 49, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_0603DFB0), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_0603C6D0), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_0603BFC8), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 49, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_0603DFB0), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_0603C6D0), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_0603BFC8), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 89, -2, -18, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 89, -2, -18, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 69, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 85, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_0603A4E8), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_0603B8D0), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 69, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 85, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_0603A4E8), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bowser_seg6_dl_0603B8D0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0D000424 const GeoLayout bowser_geo_000424[] = { - GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0x9B, 400), - GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0x9B, 400), + GEO_OPEN_NODE(), #if BUGFIX_BOWSER_FADING_OUT - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06040358), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06040358), #else - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06040210), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06040210), #endif - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, -89, -2, -18, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, -89, -2, -18, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 69, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 85, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603D200), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603E6B8), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 69, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 85, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603D200), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603E6B8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, -32, -112, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, -32, -112, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06043698), - GEO_ASM(0, geo_update_body_rot_from_parent), + 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, geo_update_body_rot_from_parent), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 118, 67, 105, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 118, 67, 105, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 49, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603B208), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_060399D8), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_060392E0), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 49, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603B208), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_060399D8), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_060392E0), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 136, 130, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 136, 130, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 61, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, -13, 258, 0, bowser_seg6_dl_060431F0), - GEO_CLOSE_NODE(), - GEO_SWITCH_CASE(9, geo_switch_bowser_eyes), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06042348), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_060423A0), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_060423F8), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06042450), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_060424A8), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06042500), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06042558), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_060425B0), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06042608), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 61, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, -13, 258, 0, bowser_seg6_dl_060431F0), + GEO_CLOSE_NODE(), + GEO_SWITCH_CASE(9, geo_switch_bowser_eyes), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06042348), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_060423A0), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_060423F8), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06042450), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_060424A8), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06042500), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06042558), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_060425B0), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06042608), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, -118, 67, 105, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, -118, 67, 105, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 49, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603DFB0), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603C6D0), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603BFC8), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 49, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603DFB0), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603C6D0), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603BFC8), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, -2, -18, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, -2, -18, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 69, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 85, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603A4E8), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 69, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 85, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603A4E8), + GEO_CLOSE_NODE(), #if BUGFIX_BOWSER_FADING_OUT - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603B948), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603B948), #else - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603B8D0), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603B8D0), #endif - GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0D000770 const GeoLayout bowser_geo_000770[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), + GEO_NODE_START(), + GEO_OPEN_NODE(), #if BUGFIX_BOWSER_FADING_OUT - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06040358), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06040358), #else - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06040210), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06040210), #endif - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, -89, -2, -18, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, -89, -2, -18, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 69, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 85, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603D200), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603E6B8), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 69, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 85, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603D200), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603E6B8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, -32, -112, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, -32, -112, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06043698), - GEO_ASM(0, geo_update_body_rot_from_parent), + 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, geo_update_body_rot_from_parent), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 118, 67, 105, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 118, 67, 105, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 49, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603B208), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_060399D8), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_060392E0), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 49, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603B208), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_060399D8), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_060392E0), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 136, 130, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 136, 130, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 61, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, -13, 258, 0, bowser_seg6_dl_060431F0), - GEO_CLOSE_NODE(), - GEO_SWITCH_CASE(9, geo_switch_bowser_eyes), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06042348), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_060423A0), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_060423F8), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06042450), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_060424A8), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06042500), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06042558), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_060425B0), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06042608), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 61, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, -13, 258, 0, bowser_seg6_dl_060431F0), + GEO_CLOSE_NODE(), + GEO_SWITCH_CASE(9, geo_switch_bowser_eyes), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06042348), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_060423A0), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_060423F8), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06042450), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_060424A8), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06042500), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06042558), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_060425B0), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_06042608), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, -118, 67, 105, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, -118, 67, 105, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 49, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603DFB0), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603C6D0), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603BFC8), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 49, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603DFB0), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603C6D0), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603BFC8), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, -2, -18, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, -2, -18, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 69, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 85, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603A4E8), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 69, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 85, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603A4E8), + GEO_CLOSE_NODE(), #if BUGFIX_BOWSER_FADING_OUT - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603B948), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603B948), #else - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603B8D0), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, bowser_seg6_dl_0603B8D0), #endif - GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; #ifndef VERSION_JP // 0x0D000AB8 const GeoLayout bowser_shadow_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0x9B, 400), - GEO_RETURN(), + GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0x9B, 400), + GEO_RETURN(), }; #endif // 0x0D000AB8 / 0AC4 const GeoLayout bowser_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_update_layer_transparency), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_update_layer_transparency), #ifndef VERSION_JP - GEO_SWITCH_CASE(3, geo_switch_anim_state), + GEO_SWITCH_CASE(3, geo_switch_anim_state), #else - GEO_SWITCH_CASE(2, geo_switch_anim_state), + GEO_SWITCH_CASE(2, geo_switch_anim_state), #endif - GEO_OPEN_NODE(), - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_bits_bowser_coloring), - GEO_BRANCH(1, bowser_geo_0000D8), - GEO_CLOSE_NODE(), + GEO_OPEN_NODE(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + 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, geo_bits_bowser_coloring), - GEO_BRANCH(1, bowser_geo_000424), - GEO_CLOSE_NODE(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + 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, geo_bits_bowser_coloring), - GEO_BRANCH(1, bowser_shadow_geo), - GEO_CLOSE_NODE(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_bits_bowser_coloring), + GEO_BRANCH(1, bowser_shadow_geo), + GEO_CLOSE_NODE(), #endif - GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0D000B18 / 0B40 const GeoLayout bowser_geo_no_shadow[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_update_layer_transparency), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_update_layer_transparency), #ifndef VERSION_JP - GEO_SWITCH_CASE(3, geo_switch_anim_state), + GEO_SWITCH_CASE(3, geo_switch_anim_state), #else - GEO_SWITCH_CASE(2, geo_switch_anim_state), + GEO_SWITCH_CASE(2, geo_switch_anim_state), #endif - GEO_OPEN_NODE(), - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_bits_bowser_coloring), - GEO_BRANCH(1, bowser_geo_0000D8), - GEO_CLOSE_NODE(), + GEO_OPEN_NODE(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + 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, geo_bits_bowser_coloring), - GEO_BRANCH(1, bowser_geo_000770), - GEO_CLOSE_NODE(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + 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, geo_bits_bowser_coloring), - GEO_BRANCH(1, bowser_shadow_geo), - GEO_CLOSE_NODE(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_bits_bowser_coloring), + GEO_BRANCH(1, bowser_shadow_geo), + GEO_CLOSE_NODE(), #endif - GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/bowser_flame/geo.inc.c b/actors/bowser_flame/geo.inc.c index c4f0be6b..b936d875 100644 --- a/actors/bowser_flame/geo.inc.c +++ b/actors/bowser_flame/geo.inc.c @@ -1,24 +1,24 @@ // 0x0D000000 const GeoLayout bowser_flames_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(14, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C108), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C1A8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C248), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C2E8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C388), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C428), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C4C8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C568), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C608), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C6A8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C748), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C7E8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C888), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C928), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(14, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C108), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C1A8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C248), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C2E8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C388), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C428), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C4C8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C568), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C608), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C6A8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C748), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C7E8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C888), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg6_dl_0601C928), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/bowser_key/geo.inc.c b/actors/bowser_key/geo.inc.c index d7e2a85f..83379a30 100644 --- a/actors/bowser_key/geo.inc.c +++ b/actors/bowser_key/geo.inc.c @@ -1,31 +1,31 @@ // 0x16000A84 const GeoLayout bowser_key_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x9B, 300), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_key_dl), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x9B, 300), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_key_dl), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x16000AB0 const GeoLayout bowser_key_cutscene_geo[] = { - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_scale_bowser_key), - GEO_SCALE(0x00, 65536), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_key_dl), + GEO_ASM(0, geo_scale_bowser_key), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_key_dl), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), -GEO_CLOSE_NODE(), //! more close than open nodes -GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), //! more close than open nodes + GEO_END(), }; diff --git a/actors/breakable_box/geo.inc.c b/actors/breakable_box/geo.inc.c index 0a610e27..6c7fb151 100644 --- a/actors/breakable_box/geo.inc.c +++ b/actors/breakable_box/geo.inc.c @@ -1,28 +1,28 @@ // 0x0F0005D0 const GeoLayout breakable_box_geo[] = { - GEO_CULLING_RADIUS(500), - GEO_OPEN_NODE(), - GEO_SHADOW(SHADOW_SQUARE_PERMANENT, 0xB4, 240), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(2, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, breakable_box_seg8_dl_08012D20), - GEO_DISPLAY_LIST(LAYER_OPAQUE, breakable_box_seg8_dl_08012D48), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(500), + GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_SQUARE_PERMANENT, 0xB4, 240), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(2, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, breakable_box_seg8_dl_08012D20), + GEO_DISPLAY_LIST(LAYER_OPAQUE, breakable_box_seg8_dl_08012D48), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0F000610 const GeoLayout breakable_box_small_geo[] = { - GEO_CULLING_RADIUS(500), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(2, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, breakable_box_seg8_dl_08012D20), - GEO_DISPLAY_LIST(LAYER_OPAQUE, breakable_box_seg8_dl_08012D48), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(500), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(2, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, breakable_box_seg8_dl_08012D20), + GEO_DISPLAY_LIST(LAYER_OPAQUE, breakable_box_seg8_dl_08012D48), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/bub/geo.inc.c b/actors/bub/geo.inc.c index 7fe1b86c..f768f1c3 100644 --- a/actors/bub/geo.inc.c +++ b/actors/bub/geo.inc.c @@ -1,22 +1,22 @@ // 0x0D00038C const GeoLayout bub_geo[] = { - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -13, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bub_seg6_dl_06011B28), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 135, 0, 0, bub_seg6_dl_06011CF0), - GEO_ANIMATED_PART(LAYER_OPAQUE, -33, -86, -35, NULL), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -13, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bub_seg6_dl_06011B28), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bub_seg6_dl_06011E48), + GEO_ANIMATED_PART(LAYER_OPAQUE, 135, 0, 0, bub_seg6_dl_06011CF0), + GEO_ANIMATED_PART(LAYER_OPAQUE, -33, -86, -35, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bub_seg6_dl_06011E48), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -34, 71, -36, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bub_seg6_dl_06011FA0), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -34, 71, -36, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bub_seg6_dl_06011FA0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/bubba/geo.inc.c b/actors/bubba/geo.inc.c index 39e13b94..5c13278d 100644 --- a/actors/bubba/geo.inc.c +++ b/actors/bubba/geo.inc.c @@ -1,12 +1,12 @@ // 0x0C000000 const GeoLayout bubba_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(2, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bubba_seg5_dl_05004E80), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bubba_seg5_dl_05005978), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(2, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bubba_seg5_dl_05004E80), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bubba_seg5_dl_05005978), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/bubble/geo.inc.c b/actors/bubble/geo.inc.c index 60dc9be2..e9e48165 100644 --- a/actors/bubble/geo.inc.c +++ b/actors/bubble/geo.inc.c @@ -1,17 +1,17 @@ // 0x17000000 const GeoLayout bubble_geo[] = { - GEO_SWITCH_CASE(1, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bubble_seg4_dl_0401DD60), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SWITCH_CASE(1, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bubble_seg4_dl_0401DD60), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x1700001C const GeoLayout purple_marble_geo[] = { - GEO_SWITCH_CASE(1, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bubble_seg4_dl_0401DDE0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SWITCH_CASE(1, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bubble_seg4_dl_0401DDE0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/bullet_bill/geo.inc.c b/actors/bullet_bill/geo.inc.c index db6d9894..d30c1e24 100644 --- a/actors/bullet_bill/geo.inc.c +++ b/actors/bullet_bill/geo.inc.c @@ -1,11 +1,11 @@ // 0x0C000264 const GeoLayout bullet_bill_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SHADOW(SHADOW_SQUARE_PERMANENT, 0x96, 400), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bullet_bill_seg5_dl_0500E8A8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_SQUARE_PERMANENT, 0x96, 400), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bullet_bill_seg5_dl_0500E8A8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/bully/geo.inc.c b/actors/bully/geo.inc.c index 5bb0142f..2ac3472d 100644 --- a/actors/bully/geo.inc.c +++ b/actors/bully/geo.inc.c @@ -1,91 +1,91 @@ // 0x0C000000 const GeoLayout bully_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 70), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 24576), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 70), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 24576), + GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 75, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 146, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bully_seg5_dl_05003708), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, -75, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 146, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bully_seg5_dl_050037A0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bully_seg5_dl_05003D40), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bully_seg5_dl_05000398), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, bully_seg5_dl_05003FC8), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 75, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 146, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bully_seg5_dl_05003708), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, -75, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 146, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bully_seg5_dl_050037A0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bully_seg5_dl_05003D40), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bully_seg5_dl_05000398), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, bully_seg5_dl_05003FC8), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0C000120 const GeoLayout bully_boss_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 210), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 49152), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 210), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 49152), + GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 75, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 146, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bully_seg5_dl_05003708), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, -75, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 146, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bully_seg5_dl_050037A0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bully_seg5_dl_05003EA8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bully_seg5_dl_05000398), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, bully_seg5_dl_05003FC8), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 75, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 146, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bully_seg5_dl_05003708), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, -75, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 146, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bully_seg5_dl_050037A0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bully_seg5_dl_05003EA8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, bully_seg5_dl_05000398), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, bully_seg5_dl_05003FC8), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/burn_smoke/geo.inc.c b/actors/burn_smoke/geo.inc.c index 61cb4796..eb34c176 100644 --- a/actors/burn_smoke/geo.inc.c +++ b/actors/burn_smoke/geo.inc.c @@ -1,8 +1,8 @@ // 0x17000084 const GeoLayout burn_smoke_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, burn_smoke_seg4_dl_04022070), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, burn_smoke_seg4_dl_04022070), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/butterfly/geo.inc.c b/actors/butterfly/geo.inc.c index ccaedd5d..5e34127d 100644 --- a/actors/butterfly/geo.inc.c +++ b/actors/butterfly/geo.inc.c @@ -1,26 +1,26 @@ // 0x160000A8 const GeoLayout butterfly_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xB4, 25), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, butterfly_seg3_dl_03005408), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xB4, 25), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, butterfly_seg3_dl_030054A0), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, butterfly_seg3_dl_03005408), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, butterfly_seg3_dl_030054A0), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/cannon_barrel/geo.inc.c b/actors/cannon_barrel/geo.inc.c index 862ed9e5..2f151a68 100644 --- a/actors/cannon_barrel/geo.inc.c +++ b/actors/cannon_barrel/geo.inc.c @@ -1,8 +1,8 @@ // 0x0F0001C0 const GeoLayout cannon_barrel_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, cannon_barrel_seg8_dl_08006660), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, cannon_barrel_seg8_dl_08006660), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/cannon_base/geo.inc.c b/actors/cannon_base/geo.inc.c index a7ea3320..67074474 100644 --- a/actors/cannon_base/geo.inc.c +++ b/actors/cannon_base/geo.inc.c @@ -1,8 +1,8 @@ // 0x0F0001A8 const GeoLayout cannon_base_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, cannon_base_seg8_dl_080057F8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, cannon_base_seg8_dl_080057F8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/capswitch/geo.inc.c b/actors/capswitch/geo.inc.c index 3ab43b99..d124cd70 100644 --- a/actors/capswitch/geo.inc.c +++ b/actors/capswitch/geo.inc.c @@ -1,15 +1,15 @@ // 0x0C000048 const GeoLayout cap_switch_geo[] = { - GEO_CULLING_RADIUS(600), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, cap_switch_exclamation_seg5_dl_05002E00), - GEO_SWITCH_CASE(4, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, capswitch_seg5_dl_05003350), - GEO_DISPLAY_LIST(LAYER_OPAQUE, capswitch_seg5_dl_05003370), - GEO_DISPLAY_LIST(LAYER_OPAQUE, capswitch_seg5_dl_05003390), - GEO_DISPLAY_LIST(LAYER_OPAQUE, capswitch_seg5_dl_050033B0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(600), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, cap_switch_exclamation_seg5_dl_05002E00), + GEO_SWITCH_CASE(4, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, capswitch_seg5_dl_05003350), + GEO_DISPLAY_LIST(LAYER_OPAQUE, capswitch_seg5_dl_05003370), + GEO_DISPLAY_LIST(LAYER_OPAQUE, capswitch_seg5_dl_05003390), + GEO_DISPLAY_LIST(LAYER_OPAQUE, capswitch_seg5_dl_050033B0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/chain_ball/geo.inc.c b/actors/chain_ball/geo.inc.c index d97fdf6f..383852e9 100644 --- a/actors/chain_ball/geo.inc.c +++ b/actors/chain_ball/geo.inc.c @@ -1,8 +1,8 @@ // 0x0D0005D0 const GeoLayout metallic_ball_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 60), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, chain_ball_seg6_dl_060212E8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 60), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, chain_ball_seg6_dl_060212E8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/chain_chomp/geo.inc.c b/actors/chain_chomp/geo.inc.c index ad336773..decfbe76 100644 --- a/actors/chain_chomp/geo.inc.c +++ b/actors/chain_chomp/geo.inc.c @@ -1,22 +1,22 @@ // 0x0D0005EC const GeoLayout chain_chomp_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 200), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, chain_chomp_seg6_dl_06024940), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, chain_chomp_seg6_dl_06024FC0), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, chain_chomp_seg6_dl_06024240), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, chain_chomp_seg6_dl_06024D60), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, chain_chomp_seg6_dl_06024B00), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), -GEO_CLOSE_NODE(), //! more close than open nodes -GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 200), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, chain_chomp_seg6_dl_06024940), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, chain_chomp_seg6_dl_06024FC0), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, chain_chomp_seg6_dl_06024240), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, chain_chomp_seg6_dl_06024D60), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, chain_chomp_seg6_dl_06024B00), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), //! more close than open nodes + GEO_END(), }; diff --git a/actors/chair/geo.inc.c b/actors/chair/geo.inc.c index eb963a7e..28879b83 100644 --- a/actors/chair/geo.inc.c +++ b/actors/chair/geo.inc.c @@ -1,29 +1,29 @@ // 0x0C0000D8 const GeoLayout haunted_chair_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, chair_seg5_dl_05005190), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -7, -9, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, chair_seg5_dl_05005680), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 156, -9, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, chair_seg5_dl_05005408), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -3, 17, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, chair_seg5_dl_05004EE8), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, chair_seg5_dl_05005190), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -7, -9, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, chair_seg5_dl_05005680), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 156, -9, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, chair_seg5_dl_05005408), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -3, 17, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, chair_seg5_dl_05004EE8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), -GEO_CLOSE_NODE(), //! more close than open nodes -GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), //! more close than open nodes + GEO_END(), }; diff --git a/actors/checkerboard_platform/geo.inc.c b/actors/checkerboard_platform/geo.inc.c index 7e139ca7..947c3111 100644 --- a/actors/checkerboard_platform/geo.inc.c +++ b/actors/checkerboard_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0F0004E4 const GeoLayout checkerboard_platform_geo[] = { - GEO_CULLING_RADIUS(400), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, checkerboard_platform_seg8_dl_0800D680), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(400), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, checkerboard_platform_seg8_dl_0800D680), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/chillychief/geo.inc.c b/actors/chillychief/geo.inc.c index 96ec2e1c..a13a8045 100644 --- a/actors/chillychief/geo.inc.c +++ b/actors/chillychief/geo.inc.c @@ -1,92 +1,92 @@ // Why are these scripts compressed unlike the other ones? // 0x06003754 const GeoLayout chilly_chief_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 0x46), - GEO_OPEN_NODE(), - GEO_SCALE(0, 0x7333), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 0x46), + GEO_OPEN_NODE(), + GEO_SCALE(0, 0x7333), + GEO_OPEN_NODE(), GEO_ANIMATED_PART(1, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 75, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 146, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, chilly_chief_seg6_dl_06002B30), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(1, 0, 0, -75, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 146, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, chilly_chief_seg6_dl_06002BC8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, chilly_chief_seg6_dl_06002D88), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, chilly_chief_seg6_dl_06002C60), - GEO_ANIMATED_PART(4, 0, 0, 0, chilly_chief_seg6_dl_06003010), + GEO_ANIMATED_PART(1, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 0, 0, 75, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 146, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 0, 0, 0, chilly_chief_seg6_dl_06002B30), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(1, 0, 0, -75, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 146, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 0, 0, 0, chilly_chief_seg6_dl_06002BC8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(1, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, chilly_chief_seg6_dl_06002D88), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(1, 0, 0, 0, chilly_chief_seg6_dl_06002C60), + GEO_ANIMATED_PART(4, 0, 0, 0, chilly_chief_seg6_dl_06003010), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x06003874 const GeoLayout chilly_chief_big_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 0xD2), - GEO_OPEN_NODE(), - GEO_SCALE(0, 0xE666), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 0xD2), + GEO_OPEN_NODE(), + GEO_SCALE(0, 0xE666), + GEO_OPEN_NODE(), GEO_ANIMATED_PART(1, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 75, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 146, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, chilly_chief_seg6_dl_06002B30), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(1, 0, 0, -75, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 146, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, chilly_chief_seg6_dl_06002BC8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, chilly_chief_seg6_dl_06002EF0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, chilly_chief_seg6_dl_06002C60), - GEO_ANIMATED_PART(4, 0, 0, 0, chilly_chief_seg6_dl_06003010), + GEO_ANIMATED_PART(1, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 0, 0, 75, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 146, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 0, 0, 0, chilly_chief_seg6_dl_06002B30), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(1, 0, 0, -75, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 146, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 0, 0, 0, chilly_chief_seg6_dl_06002BC8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(1, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, chilly_chief_seg6_dl_06002EF0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(1, 0, 0, 0, chilly_chief_seg6_dl_06002C60), + GEO_ANIMATED_PART(4, 0, 0, 0, chilly_chief_seg6_dl_06003010), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/chuckya/geo.inc.c b/actors/chuckya/geo.inc.c index 902693c1..4802cf81 100644 --- a/actors/chuckya/geo.inc.c +++ b/actors/chuckya/geo.inc.c @@ -1,117 +1,117 @@ // 0x0F0001D8 const GeoLayout chuckya_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 281, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, chuckya_seg8_dl_0800ABE8), - GEO_ANIMATED_PART(LAYER_OPAQUE, 113, -152, 0, NULL), - GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 281, 0, 0, NULL), + GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 74, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 96, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, chuckya_seg8_dl_0800ABE8), + GEO_ANIMATED_PART(LAYER_OPAQUE, 113, -152, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 74, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, chuckya_seg8_dl_0800A5F8), + GEO_ANIMATED_PART(LAYER_OPAQUE, 96, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, chuckya_seg8_dl_0800A5F8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, chuckya_seg8_dl_0800A998), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, chuckya_seg8_dl_0800A758), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, chuckya_seg8_dl_0800A068), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 1, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 209, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, chuckya_seg8_dl_0800A1D0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 95, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, chuckya_seg8_dl_0800A998), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, chuckya_seg8_dl_0800A758), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, chuckya_seg8_dl_0800A068), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 1, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 209, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, chuckya_seg8_dl_0800A428), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, chuckya_seg8_dl_0800A1D0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 95, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, chuckya_seg8_dl_0800A428), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 1, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 209, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, chuckya_seg8_dl_0800A338), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 95, 0, 0, NULL), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 1, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 209, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, chuckya_seg8_dl_0800A510), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ASM(0, geo_update_held_mario_pos), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, chuckya_seg8_dl_0800A338), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 95, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, chuckya_seg8_dl_0800A510), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ASM(0, geo_update_held_mario_pos), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, chuckya_seg8_dl_0800A8D0), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, chuckya_seg8_dl_0800A8D0), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/clam_shell/geo.inc.c b/actors/clam_shell/geo.inc.c index f8b652f9..f7720088 100644 --- a/actors/clam_shell/geo.inc.c +++ b/actors/clam_shell/geo.inc.c @@ -1,20 +1,20 @@ // 0x0C000000 const GeoLayout clam_shell_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, clam_shell_seg5_dl_05001568), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -520, -6, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, clam_shell_seg5_dl_050012B8), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, clam_shell_seg5_dl_05001568), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -520, -6, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, clam_shell_seg5_dl_050012B8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/coin/geo.inc.c b/actors/coin/geo.inc.c index bfb2d92d..48d38c31 100644 --- a/actors/coin/geo.inc.c +++ b/actors/coin/geo.inc.c @@ -1,113 +1,113 @@ // 0x1600013C const GeoLayout yellow_coin_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xB4, 50), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(8, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007800), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007800), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007828), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007828), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007850), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007850), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007878), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007878), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xB4, 50), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(8, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007800), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007800), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007828), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007828), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007850), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007850), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007878), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007878), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x160001A0 const GeoLayout yellow_coin_no_shadow_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(8, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007800), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007800), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007828), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007828), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007850), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007850), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007878), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007878), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(8, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007800), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007800), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007828), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007828), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007850), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007850), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007878), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007878), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x16000200 const GeoLayout blue_coin_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xB4, 80), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(8, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030078A0), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030078A0), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030078C8), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030078C8), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030078F0), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030078F0), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007918), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007918), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xB4, 80), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(8, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030078A0), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030078A0), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030078C8), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030078C8), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030078F0), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030078F0), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007918), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007918), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x16000264 const GeoLayout blue_coin_no_shadow_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(8, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030078A0), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030078A0), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030078C8), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030078C8), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030078F0), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030078F0), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007918), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007918), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(8, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030078A0), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030078A0), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030078C8), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030078C8), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030078F0), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030078F0), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007918), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007918), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x160002C4 const GeoLayout red_coin_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xB4, 80), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(8, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007940), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007940), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007968), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007968), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007990), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007990), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030079B8), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030079B8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xB4, 80), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(8, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007940), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007940), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007968), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007968), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007990), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007990), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030079B8), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030079B8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x16000328 const GeoLayout red_coin_no_shadow_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(8, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007940), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007940), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007968), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007968), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007990), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007990), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030079B8), - GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030079B8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(8, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007940), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007940), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007968), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007968), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007990), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_03007990), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030079B8), + GEO_DISPLAY_LIST(LAYER_ALPHA, coin_seg3_dl_030079B8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/cyan_fish/geo.inc.c b/actors/cyan_fish/geo.inc.c index dfebc8fd..d16525bc 100644 --- a/actors/cyan_fish/geo.inc.c +++ b/actors/cyan_fish/geo.inc.c @@ -1,18 +1,18 @@ // 0x0D000324 const GeoLayout cyan_fish_geo[] = { - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, cyan_fish_seg6_dl_0600DDD8), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 160, 0, 0, cyan_fish_seg6_dl_0600E038), - GEO_ANIMATED_PART(LAYER_OPAQUE, 32, 112, 0, NULL), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, cyan_fish_seg6_dl_0600DDD8), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, cyan_fish_seg6_dl_0600DED8), + GEO_ANIMATED_PART(LAYER_OPAQUE, 160, 0, 0, cyan_fish_seg6_dl_0600E038), + GEO_ANIMATED_PART(LAYER_OPAQUE, 32, 112, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, cyan_fish_seg6_dl_0600DED8), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/dirt/geo.inc.c b/actors/dirt/geo.inc.c index ab4c558f..2abc63a7 100644 --- a/actors/dirt/geo.inc.c +++ b/actors/dirt/geo.inc.c @@ -1,33 +1,33 @@ // 0x16000ED4 const GeoLayout dirt_animation_geo[] = { - GEO_CULLING_RADIUS(300), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(6, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, dirt_seg3_dl_0302C378), - GEO_DISPLAY_LIST(LAYER_OPAQUE, dirt_seg3_dl_0302C3B0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, dirt_seg3_dl_0302C3E8), - GEO_DISPLAY_LIST(LAYER_ALPHA, dirt_seg3_dl_0302C028), - GEO_DISPLAY_LIST(LAYER_OPAQUE, dirt_seg3_dl_0302C420), - GEO_DISPLAY_LIST(LAYER_OPAQUE, dirt_seg3_dl_0302C458), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(300), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(6, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, dirt_seg3_dl_0302C378), + GEO_DISPLAY_LIST(LAYER_OPAQUE, dirt_seg3_dl_0302C3B0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, dirt_seg3_dl_0302C3E8), + GEO_DISPLAY_LIST(LAYER_ALPHA, dirt_seg3_dl_0302C028), + GEO_DISPLAY_LIST(LAYER_OPAQUE, dirt_seg3_dl_0302C420), + GEO_DISPLAY_LIST(LAYER_OPAQUE, dirt_seg3_dl_0302C458), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // This is probably wrongly named according to the Bin IDs... // 0x16000F24 const GeoLayout cartoon_star_geo[] = { - GEO_CULLING_RADIUS(300), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(5, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, dirt_seg3_dl_0302C298), - GEO_DISPLAY_LIST(LAYER_OPAQUE, dirt_seg3_dl_0302C2B8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, dirt_seg3_dl_0302C2D8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, dirt_seg3_dl_0302C2F8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, dirt_seg3_dl_0302C318), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(300), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(5, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, dirt_seg3_dl_0302C298), + GEO_DISPLAY_LIST(LAYER_OPAQUE, dirt_seg3_dl_0302C2B8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, dirt_seg3_dl_0302C2D8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, dirt_seg3_dl_0302C2F8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, dirt_seg3_dl_0302C318), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/door/geo.inc.c b/actors/door/geo.inc.c index 81c017d1..b13a3b54 100644 --- a/actors/door/geo.inc.c +++ b/actors/door/geo.inc.c @@ -1,320 +1,320 @@ // 0x160003A8 const GeoLayout castle_door_geo[] = { - GEO_TRANSLATE_NODE(0x00, 78, 0, 0), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -300, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_TRANSLATE_NODE(0x00, 78, 0, 0), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -300, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2048, 3500), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03013E28), - GEO_CLOSE_NODE(), - GEO_RENDER_RANGE(3500, 32767), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03014100), - GEO_CLOSE_NODE(), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2048, 3500), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03013E28), + GEO_CLOSE_NODE(), + GEO_RENDER_RANGE(3500, 32767), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03014100), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), -GEO_CLOSE_NODE(), //! more close than open nodes -GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), //! more close than open nodes + GEO_END(), }; // 0x1600043C const GeoLayout cabin_door_geo[] = { - GEO_TRANSLATE_NODE(0x00, 78, 0, 0), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -300, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_TRANSLATE_NODE(0x00, 78, 0, 0), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -300, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2048, 3500), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03013EA8), - GEO_CLOSE_NODE(), - GEO_RENDER_RANGE(3500, 32767), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03014128), - GEO_CLOSE_NODE(), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2048, 3500), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03013EA8), + GEO_CLOSE_NODE(), + GEO_RENDER_RANGE(3500, 32767), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03014128), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), -GEO_CLOSE_NODE(), //! more close than open nodes -GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), //! more close than open nodes + GEO_END(), }; // 0x160004D0 const GeoLayout wooden_door_geo[] = { - GEO_TRANSLATE_NODE(0x00, 78, 0, 0), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -300, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_TRANSLATE_NODE(0x00, 78, 0, 0), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -300, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2048, 3500), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03014A80), - GEO_CLOSE_NODE(), - GEO_RENDER_RANGE(3500, 32767), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03014F98), - GEO_CLOSE_NODE(), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2048, 3500), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03014A80), + GEO_CLOSE_NODE(), + GEO_RENDER_RANGE(3500, 32767), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03014F98), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), -GEO_CLOSE_NODE(), //! more close than open nodes -GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), //! more close than open nodes + GEO_END(), }; // 0x16000564 const GeoLayout wooden_door2_geo[] = { - GEO_TRANSLATE_NODE(0x00, 78, 0, 0), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -300, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_TRANSLATE_NODE(0x00, 78, 0, 0), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -300, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2048, 3500), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03014B30), - GEO_CLOSE_NODE(), - GEO_RENDER_RANGE(3500, 32767), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03015008), - GEO_CLOSE_NODE(), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2048, 3500), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03014B30), + GEO_CLOSE_NODE(), + GEO_RENDER_RANGE(3500, 32767), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03015008), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), -GEO_CLOSE_NODE(), //! more close than open nodes -GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), //! more close than open nodes + GEO_END(), }; // 0x160005F8 const GeoLayout metal_door_geo[] = { - GEO_TRANSLATE_NODE(0x00, 78, 0, 0), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -300, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_TRANSLATE_NODE(0x00, 78, 0, 0), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -300, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2048, 3500), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03014BE0), - GEO_CLOSE_NODE(), - GEO_RENDER_RANGE(3500, 32767), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03015078), - GEO_CLOSE_NODE(), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2048, 3500), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03014BE0), + GEO_CLOSE_NODE(), + GEO_RENDER_RANGE(3500, 32767), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03015078), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), -GEO_CLOSE_NODE(), //! more close than open nodes -GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), //! more close than open nodes + GEO_END(), }; // 0x1600068C const GeoLayout hazy_maze_door_geo[] = { - GEO_TRANSLATE_NODE(0x00, 78, 0, 0), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -300, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_TRANSLATE_NODE(0x00, 78, 0, 0), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -300, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2048, 3500), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03014C90), - GEO_CLOSE_NODE(), - GEO_RENDER_RANGE(3500, 32767), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_030150E8), - GEO_CLOSE_NODE(), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2048, 3500), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03014C90), + GEO_CLOSE_NODE(), + GEO_RENDER_RANGE(3500, 32767), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_030150E8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), -GEO_CLOSE_NODE(), //! more close than open nodes -GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), //! more close than open nodes + GEO_END(), }; // 0x16000720 const GeoLayout haunted_door_geo[] = { - GEO_TRANSLATE_NODE(0x00, 78, 0, 0), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -300, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_TRANSLATE_NODE(0x00, 78, 0, 0), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -300, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2048, 3500), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03014D40), - GEO_CLOSE_NODE(), - GEO_RENDER_RANGE(3500, 32767), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03015158), - GEO_CLOSE_NODE(), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2048, 3500), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03014D40), + GEO_CLOSE_NODE(), + GEO_RENDER_RANGE(3500, 32767), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03015158), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), -GEO_CLOSE_NODE(), //! more close than open nodes -GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), //! more close than open nodes + GEO_END(), }; // 0x160007B4 const GeoLayout castle_door_0_star_geo[] = { - GEO_TRANSLATE_NODE(0x00, 78, 0, 0), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -300, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_TRANSLATE_NODE(0x00, 78, 0, 0), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -300, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2048, 1000), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03013E28), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, door_seg3_dl_03014250), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RENDER_RANGE(1000, 32767), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03013E28), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, door_seg3_dl_03014280), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2048, 1000), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03013E28), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, door_seg3_dl_03014250), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RENDER_RANGE(1000, 32767), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03013E28), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, door_seg3_dl_03014280), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), -GEO_CLOSE_NODE(), //! more close than open nodes -GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), //! more close than open nodes + GEO_END(), }; // 0x16000868 const GeoLayout castle_door_1_star_geo[] = { - GEO_TRANSLATE_NODE(0x00, 78, 0, 0), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -300, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_TRANSLATE_NODE(0x00, 78, 0, 0), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -300, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2048, 1000), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03013E28), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, door_seg3_dl_030142B0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RENDER_RANGE(1000, 32767), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03013E28), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, door_seg3_dl_030142E0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2048, 1000), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03013E28), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, door_seg3_dl_030142B0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RENDER_RANGE(1000, 32767), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03013E28), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, door_seg3_dl_030142E0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), -GEO_CLOSE_NODE(), //! more close than open nodes -GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), //! more close than open nodes + GEO_END(), }; // 0x1600091C const GeoLayout castle_door_3_stars_geo[] = { - GEO_TRANSLATE_NODE(0x00, 78, 0, 0), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -300, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_TRANSLATE_NODE(0x00, 78, 0, 0), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -300, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2048, 1000), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03013E28), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, door_seg3_dl_03014310), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RENDER_RANGE(1000, 32767), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03013E28), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, door_seg3_dl_03014340), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2048, 1000), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03013E28), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, door_seg3_dl_03014310), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RENDER_RANGE(1000, 32767), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03013E28), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, door_seg3_dl_03014340), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), -GEO_CLOSE_NODE(), //! more close than open nodes -GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), //! more close than open nodes + GEO_END(), }; // 0x160009D0 const GeoLayout key_door_geo[] = { - GEO_TRANSLATE_NODE(0x00, 78, 0, 0), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -300, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_TRANSLATE_NODE(0x00, 78, 0, 0), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -300, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2048, 1000), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03013E28), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, door_seg3_dl_03014540), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RENDER_RANGE(1000, 32767), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03013E28), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE_DECAL, door_seg3_dl_03014528), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2048, 1000), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03013E28), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, door_seg3_dl_03014540), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RENDER_RANGE(1000, 32767), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, door_seg3_dl_03013E28), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE_DECAL, door_seg3_dl_03014528), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), -GEO_CLOSE_NODE(), //! more close than open nodes -GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), //! more close than open nodes + GEO_END(), }; diff --git a/actors/dorrie/geo.inc.c b/actors/dorrie/geo.inc.c index 23fd462c..73f76e66 100644 --- a/actors/dorrie/geo.inc.c +++ b/actors/dorrie/geo.inc.c @@ -1,54 +1,54 @@ // 0x0D000230 const GeoLayout dorrie_geo[] = { - GEO_CULLING_RADIUS(5000), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, dorrie_seg6_dl_0600CFD0), + GEO_CULLING_RADIUS(5000), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 1295, 0, 0, dorrie_seg6_dl_0600C8B8), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 916, 0, 0, dorrie_seg6_dl_0600C468), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 874, 0, 0, dorrie_seg6_dl_0600BAF8), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, dorrie_seg6_dl_0600DFA8), - GEO_ANIMATED_PART(LAYER_OPAQUE, 30, 444, -6, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, dorrie_seg6_dl_0600CFD0), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 1295, 0, 0, dorrie_seg6_dl_0600C8B8), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 916, 0, 0, dorrie_seg6_dl_0600C468), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, dorrie_seg6_dl_0600C030), + GEO_ANIMATED_PART(LAYER_OPAQUE, 874, 0, 0, dorrie_seg6_dl_0600BAF8), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, dorrie_seg6_dl_0600DFA8), + GEO_ANIMATED_PART(LAYER_OPAQUE, 30, 444, -6, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, dorrie_seg6_dl_0600C030), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -893, -490, -6, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, dorrie_seg6_dl_0600D440), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 1300, 0, 0, dorrie_seg6_dl_0600D6D8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -1086, 91, -700, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, dorrie_seg6_dl_0600DE38), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 902, 700, -785, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, dorrie_seg6_dl_0600DA88), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -1086, 91, 698, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, dorrie_seg6_dl_0600DC60), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 902, 700, 783, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, dorrie_seg6_dl_0600D8B0), - GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -893, -490, -6, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, dorrie_seg6_dl_0600D440), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 1300, 0, 0, dorrie_seg6_dl_0600D6D8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -1086, 91, -700, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, dorrie_seg6_dl_0600DE38), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 902, 700, -785, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, dorrie_seg6_dl_0600DA88), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -1086, 91, 698, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, dorrie_seg6_dl_0600DC60), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 902, 700, 783, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, dorrie_seg6_dl_0600D8B0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), -GEO_CLOSE_NODE(), //! more close than open nodes -GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), //! more close than open nodes + GEO_END(), }; diff --git a/actors/exclamation_box/geo.inc.c b/actors/exclamation_box/geo.inc.c index 3d5845c8..d23f3f4c 100644 --- a/actors/exclamation_box/geo.inc.c +++ b/actors/exclamation_box/geo.inc.c @@ -1,17 +1,17 @@ // 0x0F000694 const GeoLayout exclamation_box_geo[] = { - GEO_CULLING_RADIUS(300), - GEO_OPEN_NODE(), - GEO_SHADOW(SHADOW_SQUARE_PERMANENT, 0xB4, 70), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(4, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, exclamation_box_seg8_dl_08019318), - GEO_DISPLAY_LIST(LAYER_OPAQUE, exclamation_box_seg8_dl_08019378), - GEO_DISPLAY_LIST(LAYER_OPAQUE, exclamation_box_seg8_dl_080193D8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, exclamation_box_seg8_dl_08019438), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(300), + GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_SQUARE_PERMANENT, 0xB4, 70), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(4, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, exclamation_box_seg8_dl_08019318), + GEO_DISPLAY_LIST(LAYER_OPAQUE, exclamation_box_seg8_dl_08019378), + GEO_DISPLAY_LIST(LAYER_OPAQUE, exclamation_box_seg8_dl_080193D8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, exclamation_box_seg8_dl_08019438), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/exclamation_box_outline/geo.inc.c b/actors/exclamation_box_outline/geo.inc.c index 88e8101b..963876df 100644 --- a/actors/exclamation_box_outline/geo.inc.c +++ b/actors/exclamation_box_outline/geo.inc.c @@ -1,18 +1,18 @@ // 0x0F000A5A const GeoLayout exclamation_box_outline_geo[] = { - GEO_CULLING_RADIUS(300), - GEO_OPEN_NODE(), - GEO_SHADOW(SHADOW_SQUARE_PERMANENT, 0xB4, 70), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(4, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, exclamation_box_outline_seg8_dl_08024F88), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, exclamation_box_outline_seg8_dl_08024FA8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, exclamation_box_outline_seg8_dl_08024FC8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, exclamation_box_outline_seg8_dl_08024FE8), - GEO_CLOSE_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, exclamation_box_outline_seg8_dl_080259F8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(300), + GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_SQUARE_PERMANENT, 0xB4, 70), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(4, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, exclamation_box_outline_seg8_dl_08024F88), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, exclamation_box_outline_seg8_dl_08024FA8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, exclamation_box_outline_seg8_dl_08024FC8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, exclamation_box_outline_seg8_dl_08024FE8), + GEO_CLOSE_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, exclamation_box_outline_seg8_dl_080259F8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/explosion/geo.inc.c b/actors/explosion/geo.inc.c index 901bae67..0d27a1fb 100644 --- a/actors/explosion/geo.inc.c +++ b/actors/explosion/geo.inc.c @@ -1,19 +1,19 @@ // 0x16000040 const GeoLayout explosion_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(9, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, explosion_seg3_dl_03004298), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, explosion_seg3_dl_03004298), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, explosion_seg3_dl_030042B0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, explosion_seg3_dl_030042B0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, explosion_seg3_dl_030042C8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, explosion_seg3_dl_030042E0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, explosion_seg3_dl_030042F8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, explosion_seg3_dl_03004310), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, explosion_seg3_dl_03004328), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(9, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, explosion_seg3_dl_03004298), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, explosion_seg3_dl_03004298), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, explosion_seg3_dl_030042B0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, explosion_seg3_dl_030042B0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, explosion_seg3_dl_030042C8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, explosion_seg3_dl_030042E0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, explosion_seg3_dl_030042F8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, explosion_seg3_dl_03004310), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, explosion_seg3_dl_03004328), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/eyerok/geo.inc.c b/actors/eyerok/geo.inc.c index 16113827..5f70b302 100644 --- a/actors/eyerok/geo.inc.c +++ b/actors/eyerok/geo.inc.c @@ -1,131 +1,131 @@ // 0x0C0002AC const GeoLayout eyerok_geo_0002AC[] = { - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 447, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500C640), - GEO_ANIMATED_PART(LAYER_OPAQUE, 281, 5, -419, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 447, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 400, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 401, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500BF00), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500C100), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500C378), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 281, 5, -218, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 400, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 401, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500BF00), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500C100), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500C378), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 281, 5, -18, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 400, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 401, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500BF00), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500C100), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500C378), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 281, 5, 180, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 400, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 401, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500BF00), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500C100), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500C378), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500C908), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(4, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, eyerok_seg5_dl_0500C9B8), - GEO_DISPLAY_LIST(LAYER_ALPHA, eyerok_seg5_dl_0500CA50), - GEO_DISPLAY_LIST(LAYER_ALPHA, eyerok_seg5_dl_0500CAE8), - GEO_DISPLAY_LIST(LAYER_ALPHA, eyerok_seg5_dl_0500CB80), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 181, 89, 80, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 199, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500BC88), - GEO_ANIMATED_PART(LAYER_OPAQUE, 200, 199, 199, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 336, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500C640), + GEO_ANIMATED_PART(LAYER_OPAQUE, 281, 5, -419, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 400, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500B748), + GEO_ANIMATED_PART(LAYER_OPAQUE, 401, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500BF00), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500C100), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500B9C0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500C378), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 281, 5, -218, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 400, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 401, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500BF00), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500C100), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500C378), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 281, 5, -18, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 400, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 401, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500BF00), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500C100), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500C378), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 281, 5, 180, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 400, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 401, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500BF00), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500C100), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500C378), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500C908), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(4, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, eyerok_seg5_dl_0500C9B8), + GEO_DISPLAY_LIST(LAYER_ALPHA, eyerok_seg5_dl_0500CA50), + GEO_DISPLAY_LIST(LAYER_ALPHA, eyerok_seg5_dl_0500CAE8), + GEO_DISPLAY_LIST(LAYER_ALPHA, eyerok_seg5_dl_0500CB80), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 181, 89, 80, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 199, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500BC88), + GEO_ANIMATED_PART(LAYER_OPAQUE, 200, 199, 199, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 336, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500B748), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, eyerok_seg5_dl_0500B9C0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0C0005A8 const GeoLayout eyerok_left_hand_geo[] = { - GEO_SHADOW(SHADOW_SQUARE_SCALABLE, 0xB4, 300), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, eyerok_seg5_dl_0500CC18), - GEO_BRANCH(1, eyerok_geo_0002AC), - GEO_DISPLAY_LIST(LAYER_OPAQUE, eyerok_seg5_dl_0500CC30), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_SQUARE_SCALABLE, 0xB4, 300), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, eyerok_seg5_dl_0500CC18), + GEO_BRANCH(1, eyerok_geo_0002AC), + GEO_DISPLAY_LIST(LAYER_OPAQUE, eyerok_seg5_dl_0500CC30), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0C0005E4 const GeoLayout eyerok_right_hand_geo[] = { - GEO_SHADOW(SHADOW_SQUARE_SCALABLE, 0xB4, 300), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_BRANCH(1, eyerok_geo_0002AC), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_SQUARE_SCALABLE, 0xB4, 300), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_BRANCH(1, eyerok_geo_0002AC), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/flame/geo.inc.c b/actors/flame/geo.inc.c index a4617ad2..88185272 100644 --- a/actors/flame/geo.inc.c +++ b/actors/flame/geo.inc.c @@ -1,46 +1,46 @@ // 0x16000B10 const GeoLayout red_flame_shadow_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x50, 20), - GEO_OPEN_NODE(), - GEO_BRANCH_AND_LINK(red_flame_geo), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x50, 20), + GEO_OPEN_NODE(), + GEO_BRANCH_AND_LINK(red_flame_geo), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x16000B2C const GeoLayout red_flame_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(8, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B3B0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B3C8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B3E0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B3F8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B410), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B428), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B440), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B458), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(8, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B3B0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B3C8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B3E0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B3F8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B410), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B428), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B440), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B458), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x16000B8C const GeoLayout blue_flame_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(8, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B500), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B518), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B530), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B548), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B560), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B578), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B590), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B5A8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(8, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B500), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B518), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B530), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B548), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B560), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B578), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B590), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, flame_seg3_dl_0301B5A8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/flyguy/geo.inc.c b/actors/flyguy/geo.inc.c index 54bf6fd1..30e4ed4c 100644 --- a/actors/flyguy/geo.inc.c +++ b/actors/flyguy/geo.inc.c @@ -1,29 +1,29 @@ // 0x0F000518 const GeoLayout flyguy_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, flyguy_seg8_dl_08011710), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -45, -20, -55, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, flyguy_seg8_dl_08010840), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -45, -20, 55, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, flyguy_seg8_dl_08010968), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 250, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, flyguy_seg8_dl_08010B80), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, flyguy_seg8_dl_08011710), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -45, -20, -55, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, flyguy_seg8_dl_08010840), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -45, -20, 55, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, flyguy_seg8_dl_08010968), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 250, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, flyguy_seg8_dl_08010B80), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/fwoosh/geo.inc.c b/actors/fwoosh/geo.inc.c index 9067675c..0ee64b01 100644 --- a/actors/fwoosh/geo.inc.c +++ b/actors/fwoosh/geo.inc.c @@ -1,8 +1,8 @@ // 0x0C00036C const GeoLayout fwoosh_geo[] = { - GEO_CULLING_RADIUS(200), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, fwoosh_seg5_dl_05016040), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(200), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, fwoosh_seg5_dl_05016040), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/goomba/geo.inc.c b/actors/goomba/geo.inc.c index fb5c8d17..b011b602 100644 --- a/actors/goomba/geo.inc.c +++ b/actors/goomba/geo.inc.c @@ -1,35 +1,35 @@ // 0x0F0006E4 const GeoLayout goomba_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, goomba_seg8_dl_0801D760), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, goomba_seg8_dl_0801D760), GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, goomba_seg8_dl_0801B690), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, goomba_seg8_dl_0801B690), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(2, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 48, 0, 0, goomba_seg8_dl_0801B5C8), + GEO_ANIMATED_PART(LAYER_OPAQUE, 48, 0, 0, goomba_seg8_dl_0801B5F0), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -60, -16, 45, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, goomba_seg8_dl_0801CE20), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -60, -16, -45, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, goomba_seg8_dl_0801CF78), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(2, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 48, 0, 0, goomba_seg8_dl_0801B5C8), - GEO_ANIMATED_PART(LAYER_OPAQUE, 48, 0, 0, goomba_seg8_dl_0801B5F0), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -60, -16, 45, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, goomba_seg8_dl_0801CE20), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -60, -16, -45, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, goomba_seg8_dl_0801CF78), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/haunted_cage/geo.inc.c b/actors/haunted_cage/geo.inc.c index 5bfa6486..864378ba 100644 --- a/actors/haunted_cage/geo.inc.c +++ b/actors/haunted_cage/geo.inc.c @@ -1,13 +1,13 @@ // 0x0C000274 const GeoLayout haunted_cage_geo[] = { - GEO_CULLING_RADIUS(300), - GEO_OPEN_NODE(), - GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0x96, 100), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, haunted_cage_seg5_dl_0500F7D8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, haunted_cage_seg5_dl_0500FC28), - GEO_DISPLAY_LIST(LAYER_ALPHA, haunted_cage_seg5_dl_05010100), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(300), + GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0x96, 100), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, haunted_cage_seg5_dl_0500F7D8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, haunted_cage_seg5_dl_0500FC28), + GEO_DISPLAY_LIST(LAYER_ALPHA, haunted_cage_seg5_dl_05010100), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/heart/geo.inc.c b/actors/heart/geo.inc.c index 756654ff..a81cb9c3 100644 --- a/actors/heart/geo.inc.c +++ b/actors/heart/geo.inc.c @@ -1,8 +1,8 @@ // 0x0F0004FC const GeoLayout heart_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x64, 100), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, heart_seg8_dl_0800DFE0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x64, 100), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, heart_seg8_dl_0800DFE0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/heave_ho/geo.inc.c b/actors/heave_ho/geo.inc.c index 61866e56..fc7e1385 100644 --- a/actors/heave_ho/geo.inc.c +++ b/actors/heave_ho/geo.inc.c @@ -1,60 +1,60 @@ // 0x0C00028C const GeoLayout heave_ho_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, heave_ho_seg5_dl_05014D80), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 140, -11, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, heave_ho_seg5_dl_05011EC0), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 150, 50, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, heave_ho_seg5_dl_05014560), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, heave_ho_seg5_dl_050127F8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 135, 0, -84, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, heave_ho_seg5_dl_050126E8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 168, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, heave_ho_seg5_dl_050126E8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 168, 0, 0, NULL), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 149, -28, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, heave_ho_seg5_dl_050125F8), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, heave_ho_seg5_dl_05012148), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, heave_ho_seg5_dl_050123A8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, heave_ho_seg5_dl_050126E8), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, heave_ho_seg5_dl_05014D80), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 140, -11, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, heave_ho_seg5_dl_05011EC0), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 150, 50, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, heave_ho_seg5_dl_05014560), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, heave_ho_seg5_dl_050127F8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 135, 0, -84, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, heave_ho_seg5_dl_050126E8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 168, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, heave_ho_seg5_dl_050126E8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 168, 0, 0, NULL), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 149, -28, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, heave_ho_seg5_dl_050125F8), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, heave_ho_seg5_dl_05012148), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, heave_ho_seg5_dl_050123A8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, heave_ho_seg5_dl_050126E8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/hoot/geo.inc.c b/actors/hoot/geo.inc.c index e415a492..1f7c51d6 100644 --- a/actors/hoot/geo.inc.c +++ b/actors/hoot/geo.inc.c @@ -1,62 +1,62 @@ // 0x0C000018 const GeoLayout hoot_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xFF, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 147, -5, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, hoot_seg5_dl_05004D48), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xFF, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 147, -5, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 96, 0, 0, hoot_seg5_dl_05001DF0), - GEO_ANIMATED_PART(LAYER_OPAQUE, 34, -35, 31, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, hoot_seg5_dl_05003728), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 91, 0, 0, hoot_seg5_dl_050034D8), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 121, 0, 0, hoot_seg5_dl_050033B0), - GEO_ANIMATED_PART(LAYER_OPAQUE, 121, 0, 0, NULL), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 91, 0, 0, NULL), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, hoot_seg5_dl_05003600), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -31, 5, 37, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, hoot_seg5_dl_05004A98), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 42, 0, 0, hoot_seg5_dl_05004928), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -31, 5, -37, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, hoot_seg5_dl_05004CA8), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 42, 0, 0, hoot_seg5_dl_05004B38), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 34, -35, -31, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, hoot_seg5_dl_05003288), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 91, 0, 0, hoot_seg5_dl_05003038), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 121, 0, 0, hoot_seg5_dl_05002F10), - GEO_ANIMATED_PART(LAYER_OPAQUE, 121, 0, 0, NULL), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 91, 0, 0, NULL), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, hoot_seg5_dl_05003160), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, hoot_seg5_dl_05004D48), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 96, 0, 0, hoot_seg5_dl_05001DF0), + GEO_ANIMATED_PART(LAYER_OPAQUE, 34, -35, 31, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, hoot_seg5_dl_05003728), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 91, 0, 0, hoot_seg5_dl_050034D8), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 121, 0, 0, hoot_seg5_dl_050033B0), + GEO_ANIMATED_PART(LAYER_OPAQUE, 121, 0, 0, NULL), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 91, 0, 0, NULL), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, hoot_seg5_dl_05003600), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -31, 5, 37, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, hoot_seg5_dl_05004A98), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 42, 0, 0, hoot_seg5_dl_05004928), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -31, 5, -37, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, hoot_seg5_dl_05004CA8), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 42, 0, 0, hoot_seg5_dl_05004B38), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 34, -35, -31, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, hoot_seg5_dl_05003288), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 91, 0, 0, hoot_seg5_dl_05003038), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 121, 0, 0, hoot_seg5_dl_05002F10), + GEO_ANIMATED_PART(LAYER_OPAQUE, 121, 0, 0, NULL), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 91, 0, 0, NULL), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, hoot_seg5_dl_05003160), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), -GEO_CLOSE_NODE(), //! more close than open nodes -GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), //! more close than open nodes + GEO_END(), }; diff --git a/actors/impact_ring/geo.inc.c b/actors/impact_ring/geo.inc.c index a3a7898f..20b4d119 100644 --- a/actors/impact_ring/geo.inc.c +++ b/actors/impact_ring/geo.inc.c @@ -1,9 +1,9 @@ // 0x0D000090 const GeoLayout invisible_bowser_accessory_geo[] = { - GEO_CULLING_RADIUS(10000), - GEO_OPEN_NODE(), - GEO_ASM(20, geo_update_layer_transparency), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, impact_ring_seg6_dl_0601EAC0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(10000), + GEO_OPEN_NODE(), + 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 d8790212..fa49067a 100644 --- a/actors/impact_smoke/geo.inc.c +++ b/actors/impact_smoke/geo.inc.c @@ -1,16 +1,16 @@ // 0x0D000BB8 / 0BFC const GeoLayout bowser_impact_smoke_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - 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), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, impact_smoke_seg6_dl_06062BD8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, impact_smoke_seg6_dl_06062C78), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, impact_smoke_seg6_dl_06062D18), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, impact_smoke_seg6_dl_06062BD8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + 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), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, impact_smoke_seg6_dl_06062BD8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, impact_smoke_seg6_dl_06062C78), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, impact_smoke_seg6_dl_06062D18), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, impact_smoke_seg6_dl_06062BD8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/king_bobomb/geo.inc.c b/actors/king_bobomb/geo.inc.c index 5b7ced61..a9e6a704 100644 --- a/actors/king_bobomb/geo.inc.c +++ b/actors/king_bobomb/geo.inc.c @@ -1,120 +1,120 @@ // 0x0C000000 const GeoLayout king_bobomb_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 300), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 300), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, king_bobomb_seg5_dl_0500B188), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, -243, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 488, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 110, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, king_bobomb_seg5_dl_0500AD08), + GEO_DISPLAY_LIST(LAYER_ALPHA, king_bobomb_seg5_dl_0500B188), GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, -243, 0, NULL), + GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, king_bobomb_seg5_dl_0500A5D8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, king_bobomb_seg5_dl_0500B2D0), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, king_bobomb_seg5_dl_0500B418), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, king_bobomb_seg5_dl_0500B6C0), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 243, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 488, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 110, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, king_bobomb_seg5_dl_0500B068), + GEO_ANIMATED_PART(LAYER_OPAQUE, 488, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 110, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, king_bobomb_seg5_dl_0500AD08), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, king_bobomb_seg5_dl_0500A5D8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, king_bobomb_seg5_dl_0500B2D0), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, king_bobomb_seg5_dl_0500B418), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, king_bobomb_seg5_dl_0500B6C0), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 243, 0, NULL), + GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, king_bobomb_seg5_dl_0500A890), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 488, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 110, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, king_bobomb_seg5_dl_0500B068), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, king_bobomb_seg5_dl_0500A890), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, -1, 36, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 548, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, -1, 36, NULL), + GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, king_bobomb_seg5_dl_0500A4F0), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 548, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, king_bobomb_seg5_dl_0500A4F0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 189, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, king_bobomb_seg5_dl_0500A6C0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ASM(0, geo_update_held_mario_pos), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 189, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, king_bobomb_seg5_dl_0500A6C0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ASM(0, geo_update_held_mario_pos), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 1, 36, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 548, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 1, 36, NULL), + GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, king_bobomb_seg5_dl_0500A7A8), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 548, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, king_bobomb_seg5_dl_0500A7A8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 189, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, king_bobomb_seg5_dl_0500A978), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 189, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, king_bobomb_seg5_dl_0500A978), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), -GEO_CLOSE_NODE(), //! more close than open nodes -GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), //! more close than open nodes + GEO_END(), }; diff --git a/actors/klepto/geo.inc.c b/actors/klepto/geo.inc.c index 0d0bbe30..33145a1b 100644 --- a/actors/klepto/geo.inc.c +++ b/actors/klepto/geo.inc.c @@ -1,96 +1,96 @@ // 0x0C000000 const GeoLayout klepto_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 250), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, klepto_seg5_dl_050041E8), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 250), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 62, 0, 0, klepto_seg5_dl_05003F20), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 44, 0, 0, klepto_seg5_dl_05003D80), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 58, 0, 0, klepto_seg5_dl_05003BD0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -3, 17, 17, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, klepto_seg5_dl_05004330), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 68, 0, 0, klepto_seg5_dl_050047C8), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(4, geo_switch_anim_state), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, klepto_seg5_dl_050041E8), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 62, 0, 0, klepto_seg5_dl_05003F20), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 44, 0, 0, klepto_seg5_dl_05003D80), GEO_OPEN_NODE(), - GEO_NODE_START(), - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - 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(), - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - 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, 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(), - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - 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(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 58, 0, 0, klepto_seg5_dl_05003BD0), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -3, 17, -17, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, klepto_seg5_dl_05004438), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 68, 0, 0, klepto_seg5_dl_05004B58), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 49, -9, -17, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, klepto_seg5_dl_05004D38), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 34, 0, 0, klepto_seg5_dl_05004F58), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 79, 0, 0, klepto_seg5_dl_05005178), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 49, -9, 17, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, klepto_seg5_dl_05004C28), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 34, 0, 0, klepto_seg5_dl_05004E48), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 79, 0, 0, klepto_seg5_dl_05005068), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -3, 17, 17, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, klepto_seg5_dl_05004330), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 68, 0, 0, klepto_seg5_dl_050047C8), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(4, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_NODE_START(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + 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(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + 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, 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(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + 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(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -3, 17, -17, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, klepto_seg5_dl_05004438), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 68, 0, 0, klepto_seg5_dl_05004B58), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 49, -9, -17, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, klepto_seg5_dl_05004D38), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 34, 0, 0, klepto_seg5_dl_05004F58), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 79, 0, 0, klepto_seg5_dl_05005178), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 49, -9, 17, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, klepto_seg5_dl_05004C28), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 34, 0, 0, klepto_seg5_dl_05004E48), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 79, 0, 0, klepto_seg5_dl_05005068), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, klepto_seg5_dl_05004118), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, klepto_seg5_dl_05004118), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/koopa/geo.inc.c b/actors/koopa/geo.inc.c index a6cbe07a..1e83c2b9 100644 --- a/actors/koopa/geo.inc.c +++ b/actors/koopa/geo.inc.c @@ -1,99 +1,99 @@ // 0x0D0000D0 const GeoLayout koopa_without_shell_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x9B, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, koopa_seg6_dl_0600C498), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x9B, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_SWITCH_CASE(2, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 114, 0, 0, koopa_seg6_dl_06007AF8), - GEO_ANIMATED_PART(LAYER_OPAQUE, 114, 0, 0, koopa_seg6_dl_06007B20), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -29, 39, 60, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, koopa_seg6_dl_0600B838), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, koopa_seg6_dl_060086D0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -29, 39, -60, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, koopa_seg6_dl_0600BA10), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, koopa_seg6_dl_06008B50), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 55, 25, -73, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, koopa_seg6_dl_0600BC18), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 54, 0, 0, koopa_seg6_dl_0600BA90), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 55, 25, 74, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, koopa_seg6_dl_0600BE10), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 54, 0, 0, koopa_seg6_dl_0600BC88), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, koopa_seg6_dl_0600C498), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(2, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 114, 0, 0, koopa_seg6_dl_06007AF8), + GEO_ANIMATED_PART(LAYER_OPAQUE, 114, 0, 0, koopa_seg6_dl_06007B20), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -29, 39, 60, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, koopa_seg6_dl_0600B838), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, koopa_seg6_dl_060086D0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -29, 39, -60, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, koopa_seg6_dl_0600BA10), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, koopa_seg6_dl_06008B50), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 55, 25, -73, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, koopa_seg6_dl_0600BC18), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 54, 0, 0, koopa_seg6_dl_0600BA90), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 55, 25, 74, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, koopa_seg6_dl_0600BE10), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 54, 0, 0, koopa_seg6_dl_0600BC88), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0D000214 const GeoLayout koopa_with_shell_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x9B, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, koopa_seg6_dl_06008250), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x9B, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_SWITCH_CASE(2, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 114, 0, 0, koopa_seg6_dl_06007AF8), - GEO_ANIMATED_PART(LAYER_OPAQUE, 114, 0, 0, koopa_seg6_dl_06007B20), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -29, 39, 60, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, koopa_seg6_dl_0600B838), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, koopa_seg6_dl_060086D0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -29, 39, -60, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, koopa_seg6_dl_0600BA10), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, koopa_seg6_dl_06008B50), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 55, 25, -73, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, koopa_seg6_dl_0600BC18), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 54, 0, 0, koopa_seg6_dl_0600BA90), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 55, 25, 74, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, koopa_seg6_dl_0600BE10), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 54, 0, 0, koopa_seg6_dl_0600BC88), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, koopa_seg6_dl_06008250), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(2, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 114, 0, 0, koopa_seg6_dl_06007AF8), + GEO_ANIMATED_PART(LAYER_OPAQUE, 114, 0, 0, koopa_seg6_dl_06007B20), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -29, 39, 60, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, koopa_seg6_dl_0600B838), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, koopa_seg6_dl_060086D0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -29, 39, -60, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, koopa_seg6_dl_0600BA10), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, koopa_seg6_dl_06008B50), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 55, 25, -73, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, koopa_seg6_dl_0600BC18), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 54, 0, 0, koopa_seg6_dl_0600BA90), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 55, 25, 74, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, koopa_seg6_dl_0600BE10), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 54, 0, 0, koopa_seg6_dl_0600BC88), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/koopa_flag/geo.inc.c b/actors/koopa_flag/geo.inc.c index b9c8c8dc..b3c45187 100644 --- a/actors/koopa_flag/geo.inc.c +++ b/actors/koopa_flag/geo.inc.c @@ -1,32 +1,32 @@ // 0x0D000000 const GeoLayout koopa_flag_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, koopa_flag_seg6_dl_06000A08), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 2040, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, koopa_flag_seg6_dl_06000B08), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 460, 0, 0, koopa_flag_seg6_dl_06000BF8), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 460, 0, 0, koopa_flag_seg6_dl_06000CE0), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, koopa_flag_seg6_dl_06000A08), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 2040, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, koopa_flag_seg6_dl_06000B08), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 344, 0, 0, koopa_flag_seg6_dl_06000DB0), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 288, 0, 0, koopa_flag_seg6_dl_06000E38), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 460, 0, 0, koopa_flag_seg6_dl_06000BF8), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 460, 0, 0, koopa_flag_seg6_dl_06000CE0), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 344, 0, 0, koopa_flag_seg6_dl_06000DB0), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 288, 0, 0, koopa_flag_seg6_dl_06000E38), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/koopa_shell/geo.inc.c b/actors/koopa_shell/geo.inc.c index 424c3291..82f273bb 100644 --- a/actors/koopa_shell/geo.inc.c +++ b/actors/koopa_shell/geo.inc.c @@ -1,35 +1,35 @@ // 0x0F000AB0 const GeoLayout koopa_shell_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 70), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, koopa_shell_seg8_dl_08028B78), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 70), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, koopa_shell_seg8_dl_08028B78), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0F000ADC const GeoLayout koopa_shell2_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 70), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, koopa_shell_seg8_dl_08027420), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 70), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, koopa_shell_seg8_dl_08027420), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0F000B08 const GeoLayout koopa_shell3_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 70), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, koopa_shell_seg8_dl_080273C8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 70), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, koopa_shell_seg8_dl_080273C8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/lakitu_cameraman/geo.inc.c b/actors/lakitu_cameraman/geo.inc.c index 2dd17365..0275019d 100644 --- a/actors/lakitu_cameraman/geo.inc.c +++ b/actors/lakitu_cameraman/geo.inc.c @@ -1,43 +1,43 @@ // 0x0D000000 const GeoLayout lakitu_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, lakitu_seg6_dl_06003E30), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 132, 0, 0, lakitu_seg6_dl_06004680), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(2, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, lakitu_seg6_dl_06004C60), - GEO_DISPLAY_LIST(LAYER_ALPHA, lakitu_seg6_dl_06004C88), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 18, 72, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, lakitu_seg6_dl_060047E8), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 18, -72, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, lakitu_seg6_dl_060049E0), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 334, -214, -50, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, lakitu_seg6_dl_06005610), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, lakitu_seg6_dl_06003E30), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 132, 0, 0, lakitu_seg6_dl_06004680), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(2, geo_switch_anim_state), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 191, 0, 0, lakitu_seg6_dl_06005360), + GEO_DISPLAY_LIST(LAYER_ALPHA, lakitu_seg6_dl_06004C60), + GEO_DISPLAY_LIST(LAYER_ALPHA, lakitu_seg6_dl_06004C88), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, lakitu_seg6_dl_060055E8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, lakitu_seg6_dl_06005598), - GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 18, 72, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, lakitu_seg6_dl_060047E8), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 18, -72, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, lakitu_seg6_dl_060049E0), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 334, -214, -50, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, lakitu_seg6_dl_06005610), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 191, 0, 0, lakitu_seg6_dl_06005360), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, lakitu_seg6_dl_060055E8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, lakitu_seg6_dl_06005598), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/lakitu_enemy/geo.inc.c b/actors/lakitu_enemy/geo.inc.c index 93045f6e..a8173217 100644 --- a/actors/lakitu_enemy/geo.inc.c +++ b/actors/lakitu_enemy/geo.inc.c @@ -1,34 +1,34 @@ // 0x0C0001BC const GeoLayout enemy_lakitu_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 63, -62, lakitu_enemy_seg5_dl_050138B0), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, lakitu_enemy_seg5_dl_05012910), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 63, -62, lakitu_enemy_seg5_dl_050138B0), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 132, 0, 0, lakitu_enemy_seg5_dl_05013160), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(2, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, lakitu_enemy_seg5_dl_05013350), - GEO_DISPLAY_LIST(LAYER_ALPHA, lakitu_enemy_seg5_dl_05013378), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 18, 72, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, lakitu_enemy_seg5_dl_050136A0), - GEO_CLOSE_NODE(), - 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, geo_update_projectile_pos_from_parent), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, lakitu_enemy_seg5_dl_05012910), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 132, 0, 0, lakitu_enemy_seg5_dl_05013160), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(2, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, lakitu_enemy_seg5_dl_05013350), + GEO_DISPLAY_LIST(LAYER_ALPHA, lakitu_enemy_seg5_dl_05013378), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 18, 72, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, lakitu_enemy_seg5_dl_050136A0), + GEO_CLOSE_NODE(), + 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, geo_update_projectile_pos_from_parent), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/leaves/geo.inc.c b/actors/leaves/geo.inc.c index c466a517..bc313117 100644 --- a/actors/leaves/geo.inc.c +++ b/actors/leaves/geo.inc.c @@ -1,8 +1,8 @@ // 0x16000C8C const GeoLayout leaves_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, leaves_seg3_dl_0301CDE0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, leaves_seg3_dl_0301CDE0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/mad_piano/geo.inc.c b/actors/mad_piano/geo.inc.c index 70dea53e..cc155976 100644 --- a/actors/mad_piano/geo.inc.c +++ b/actors/mad_piano/geo.inc.c @@ -1,21 +1,21 @@ // 0x0C0001B4 const GeoLayout mad_piano_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mad_piano_seg5_dl_050098E8), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -141, -546, 218, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mad_piano_seg5_dl_05008CB0), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mad_piano_seg5_dl_050098E8), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -141, -546, 218, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mad_piano_seg5_dl_05008CB0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), -GEO_CLOSE_NODE(), //! more close than open nodes -GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), //! more close than open nodes + GEO_END(), }; diff --git a/actors/manta/geo.inc.c b/actors/manta/geo.inc.c index d60ce675..91c524c6 100644 --- a/actors/manta/geo.inc.c +++ b/actors/manta/geo.inc.c @@ -1,60 +1,60 @@ // 0x05008D14 const GeoLayout manta_seg5_geo_05008D14[] = { - GEO_SCALE(0, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, manta_seg5_dl_05006750), + GEO_SCALE(0, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 440, 220, 6, NULL), + GEO_ANIMATED_PART(1, 0, 0, 0, manta_seg5_dl_05006750), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, manta_seg5_dl_05005358), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 220, 0, 0, manta_seg5_dl_050055A8), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 180, 0, 0, manta_seg5_dl_05005768), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(1, 440, -220, 6, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, manta_seg5_dl_05005C38), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 220, 0, 0, manta_seg5_dl_05005E88), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 180, 0, 0, manta_seg5_dl_05006048), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, manta_seg5_dl_05006C08), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 168, 0, 0, manta_seg5_dl_05006B70), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 236, 0, 0, manta_seg5_dl_05006B08), - GEO_ANIMATED_PART(1, 236, 0, 0, manta_seg5_dl_05004E90), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(1, 688, 120, -6, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, manta_seg5_dl_05005038), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(1, 668, 170, 6, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, manta_seg5_dl_05004DB8), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(1, 688, -120, -6, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, manta_seg5_dl_05005918), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(1, 668, -170, 6, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, manta_seg5_dl_05004A70), + GEO_ANIMATED_PART(1, 440, 220, 6, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 0, 0, 0, manta_seg5_dl_05005358), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 220, 0, 0, manta_seg5_dl_050055A8), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 180, 0, 0, manta_seg5_dl_05005768), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(1, 440, -220, 6, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 0, 0, 0, manta_seg5_dl_05005C38), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 220, 0, 0, manta_seg5_dl_05005E88), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 180, 0, 0, manta_seg5_dl_05006048), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(1, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 0, 0, 0, manta_seg5_dl_05006C08), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 168, 0, 0, manta_seg5_dl_05006B70), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 236, 0, 0, manta_seg5_dl_05006B08), + GEO_ANIMATED_PART(1, 236, 0, 0, manta_seg5_dl_05004E90), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(1, 688, 120, -6, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 0, 0, 0, manta_seg5_dl_05005038), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(1, 668, 170, 6, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 0, 0, 0, manta_seg5_dl_05004DB8), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(1, 688, -120, -6, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 0, 0, 0, manta_seg5_dl_05005918), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(1, 668, -170, 6, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 0, 0, 0, manta_seg5_dl_05004A70), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/mario/geo.inc.c b/actors/mario/geo.inc.c index 736d31f0..feb396bb 100644 --- a/actors/mario/geo.inc.c +++ b/actors/mario/geo.inc.c @@ -2,1824 +2,1824 @@ // 0x170002E0 const GeoLayout mario_geo_face_and_wings[] = { - GEO_ASM(0, geo_mario_head_rotation), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(0, geo_switch_mario_eyes), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_on_eyes_front), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_on_eyes_half_closed), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_on_eyes_closed), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_on_eyes_right), // unused - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_on_eyes_left), // unused - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_on_eyes_up), // unused - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_on_eyes_down), // unused - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_on_eyes_dead), - GEO_CLOSE_NODE(), - GEO_SWITCH_CASE(0, geo_switch_mario_eyes), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_off_eyes_front), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_off_eyes_half_closed), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_off_eyes_closed), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_off_eyes_right), // unused - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_off_eyes_left), // unused - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_off_eyes_up), // unused - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_off_eyes_down), // unused - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_off_eyes_dead), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_TRANSLATE_ROTATE(0, 142, -51, -126, 22, -40, -135), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_mario_rotate_wing_cap_wings), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, mario_cap_wings), // left - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_TRANSLATE_ROTATE(0, 142, -51, 126, -22, 40, -135), - GEO_OPEN_NODE(), - GEO_ASM(1, geo_mario_rotate_wing_cap_wings), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, mario_cap_wings), // right - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_ASM(0, geo_mario_head_rotation), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(0, geo_switch_mario_eyes), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_on_eyes_front), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_on_eyes_half_closed), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_on_eyes_closed), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_on_eyes_right), // unused + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_on_eyes_left), // unused + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_on_eyes_up), // unused + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_on_eyes_down), // unused + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_on_eyes_dead), + GEO_CLOSE_NODE(), + GEO_SWITCH_CASE(0, geo_switch_mario_eyes), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_off_eyes_front), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_off_eyes_half_closed), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_off_eyes_closed), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_off_eyes_right), // unused + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_off_eyes_left), // unused + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_off_eyes_up), // unused + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_off_eyes_down), // unused + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_off_eyes_dead), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_TRANSLATE_ROTATE(0, 142, -51, -126, 22, -40, -135), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_rotate_wing_cap_wings), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, mario_cap_wings), // left + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_TRANSLATE_ROTATE(0, 142, -51, 126, -22, 40, -135), + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_rotate_wing_cap_wings), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, mario_cap_wings), // right + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x1700041C const GeoLayout mario_geo_left_hand[] = { - GEO_SWITCH_CASE(1, geo_switch_mario_hand), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(1, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_left_hand_closed), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_left_hand_open), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_left_hand_closed), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_left_hand_closed), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_left_hand_closed), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_SWITCH_CASE(1, geo_switch_mario_hand), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_left_hand_closed), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_left_hand_open), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_left_hand_closed), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_left_hand_closed), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_left_hand_closed), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x17000494 const GeoLayout mario_geo_right_hand[] = { - GEO_SWITCH_CASE(0, geo_switch_mario_hand), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_right_hand_closed), - GEO_CLOSE_NODE(), - GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_open), - GEO_OPEN_NODE(), - GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_peace), // here we go hand - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_cap), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_cap), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, mario_right_hand_cap_wings), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_SWITCH_CASE(0, geo_switch_mario_hand), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_right_hand_closed), + GEO_CLOSE_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_open), + GEO_OPEN_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_peace), // here we go hand + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_cap), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_cap), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, mario_right_hand_cap_wings), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // The body loads all the parts with some shared dls to apply the solid color of the dl that has it, the same rule applies to the medium and low poly geos // 0x1700053C const GeoLayout mario_geo_body[] = { - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - 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, geo_move_mario_part_from_parent), - GEO_ASM(0, geo_mario_tilt_torso), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 68, 0, 0, mario_torso), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + 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, geo_move_mario_part_from_parent), + GEO_ASM(0, geo_mario_tilt_torso), + GEO_ROTATION_NODE(0x00, 0, 0, 0), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_geo_face_and_wings), // stops sharing because faces has its own dl - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 67, -10, 79, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_left_arm), // starts sharing solid color with mario_left_forearm (red) - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_left_forearm_shared_dl), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_geo_left_hand), // stops sharing because hand has its solid color (white) - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 68, -10, -79, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_right_arm), // starts sharing solid color of his dl with mario_right_forearm (red) - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_right_forearm_shared_dl), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_geo_right_hand), // stops sharing because hand has its solid color (white) - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 68, 0, 0, mario_torso), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_geo_face_and_wings), // stops sharing because faces has its own dl + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 67, -10, 79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_left_arm), // starts sharing solid color with mario_left_forearm (red) + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_left_forearm_shared_dl), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_geo_left_hand), // stops sharing because hand has its solid color (white) + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 68, -10, -79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_right_arm), // starts sharing solid color of his dl with mario_right_forearm (red) + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_right_forearm_shared_dl), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_geo_right_hand), // stops sharing because hand has its solid color (white) + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, 42, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_left_thigh), // starts sharing solid color of his dl with mario_left_leg (blue) + GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, 42, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, mario_left_leg_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, mario_left_foot), // stops sharing because foot has its solid color (brown) - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_left_thigh), // starts sharing solid color of his dl with mario_left_leg (blue) + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, mario_left_leg_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, mario_left_foot), // stops sharing because foot has its solid color (brown) + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, -42, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_right_thigh), // starts sharing solid color of his dl with mario_left_leg (blue) + GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, -42, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, mario_right_leg_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(2, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_right_foot), // stops sharing because foot has its solid color (brown) - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_right_thigh), // starts sharing solid color of his dl with mario_left_leg (blue) + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, mario_right_leg_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(2, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_right_foot), // stops sharing because foot has its solid color (brown) + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x170006F8 const GeoLayout mario_geo_medium_poly_left_hand[] = { - GEO_SWITCH_CASE(1, geo_switch_mario_hand), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(1, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_medium_poly_left_hand_closed), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_left_hand_open), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_medium_poly_left_hand_closed), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_medium_poly_left_hand_closed), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_medium_poly_left_hand_closed), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_SWITCH_CASE(1, geo_switch_mario_hand), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_medium_poly_left_hand_closed), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_left_hand_open), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_medium_poly_left_hand_closed), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_medium_poly_left_hand_closed), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_medium_poly_left_hand_closed), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x17000770 const GeoLayout mario_geo_medium_poly_right_hand[] = { - GEO_SWITCH_CASE(0, geo_switch_mario_hand), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_medium_poly_right_hand_closed), - GEO_CLOSE_NODE(), - GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_open), - GEO_OPEN_NODE(), - GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_peace), // here we go hand - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_cap), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_cap), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, mario_right_hand_cap_wings), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_SWITCH_CASE(0, geo_switch_mario_hand), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_medium_poly_right_hand_closed), + GEO_CLOSE_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_open), + GEO_OPEN_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_peace), // here we go hand + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_cap), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_cap), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, mario_right_hand_cap_wings), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x17000818 const GeoLayout mario_geo_medium_poly_body[] = { - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - 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, geo_move_mario_part_from_parent), - GEO_ASM(0, geo_mario_tilt_torso), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 68, 0, 0, mario_medium_poly_torso), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + 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, geo_move_mario_part_from_parent), + GEO_ASM(0, geo_mario_tilt_torso), + GEO_ROTATION_NODE(0x00, 0, 0, 0), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_geo_face_and_wings), // stops sharing because faces has its own dl - medium poly mario uses high poly face - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 67, -10, 79, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_medium_poly_left_arm), // starts sharing solid color with mario_left_forearm (red) - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_medium_poly_left_forearm_shared_dl), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_geo_medium_poly_left_hand), // stops sharing because hand has its solid color (white) - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 68, -10, -79, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_medium_poly_right_arm), // starts sharing solid color of his dl with mario_right_forearm (red) - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_medium_poly_right_forearm_shared_dl), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_geo_medium_poly_right_hand), // stops sharing because hand has its solid color (white) - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 68, 0, 0, mario_medium_poly_torso), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_geo_face_and_wings), // stops sharing because faces has its own dl - medium poly mario uses high poly face + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 67, -10, 79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_medium_poly_left_arm), // starts sharing solid color with mario_left_forearm (red) + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_medium_poly_left_forearm_shared_dl), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_geo_medium_poly_left_hand), // stops sharing because hand has its solid color (white) + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 68, -10, -79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_medium_poly_right_arm), // starts sharing solid color of his dl with mario_right_forearm (red) + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_medium_poly_right_forearm_shared_dl), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_geo_medium_poly_right_hand), // stops sharing because hand has its solid color (white) + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, 42, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_medium_poly_left_thigh), // starts sharing solid color of his dl with mario_left_leg (blue) + GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, 42, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, mario_medium_poly_left_leg_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, mario_medium_poly_left_foot), // stops sharing because foot has its solid color (brown) - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_medium_poly_left_thigh), // starts sharing solid color of his dl with mario_left_leg (blue) + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, mario_medium_poly_left_leg_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, mario_medium_poly_left_foot), // stops sharing because foot has its solid color (brown) + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, -42, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_medium_poly_right_thigh), // starts sharing solid color of his dl with mario_left_leg (blue) + GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, -42, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, mario_medium_poly_right_leg_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(2, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_medium_poly_right_foot), // stops sharing because foot has its solid color (brown) - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_medium_poly_right_thigh), // starts sharing solid color of his dl with mario_left_leg (blue) + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, mario_medium_poly_right_leg_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(2, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_medium_poly_right_foot), // stops sharing because foot has its solid color (brown) + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x170009D4 const GeoLayout mario_geo_low_poly_face_and_wings[] = { - GEO_ASM(0, geo_mario_head_rotation), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(0, geo_switch_mario_eyes), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_on_eyes_front), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_on_eyes_half_closed), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_on_eyes_closed), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_on_eyes_right), // unused - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_on_eyes_left), // unused - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_on_eyes_up), // unused - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_on_eyes_down), // unused - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_on_eyes_dead), - GEO_CLOSE_NODE(), - GEO_SWITCH_CASE(0, geo_switch_mario_eyes), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_off_eyes_front), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_off_eyes_half_closed), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_off_eyes_closed), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_off_eyes_right), // unused - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_off_eyes_left), // unused - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_off_eyes_up), // unused - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_off_eyes_down), // unused - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_off_eyes_dead), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_TRANSLATE_ROTATE(0, 142, -51, -126, 22, -40, -135), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_mario_rotate_wing_cap_wings), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, mario_cap_wings), // left - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_TRANSLATE_ROTATE(0, 142, -51, 126, -22, 40, -135), - GEO_OPEN_NODE(), - GEO_ASM(1, geo_mario_rotate_wing_cap_wings), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, mario_cap_wings), // right - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_ASM(0, geo_mario_head_rotation), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(0, geo_switch_mario_eyes), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_on_eyes_front), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_on_eyes_half_closed), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_on_eyes_closed), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_on_eyes_right), // unused + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_on_eyes_left), // unused + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_on_eyes_up), // unused + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_on_eyes_down), // unused + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_on_eyes_dead), + GEO_CLOSE_NODE(), + GEO_SWITCH_CASE(0, geo_switch_mario_eyes), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_off_eyes_front), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_off_eyes_half_closed), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_off_eyes_closed), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_off_eyes_right), // unused + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_off_eyes_left), // unused + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_off_eyes_up), // unused + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_off_eyes_down), // unused + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_cap_off_eyes_dead), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_TRANSLATE_ROTATE(0, 142, -51, -126, 22, -40, -135), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_rotate_wing_cap_wings), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, mario_cap_wings), // left + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_TRANSLATE_ROTATE(0, 142, -51, 126, -22, 40, -135), + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_rotate_wing_cap_wings), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, mario_cap_wings), // right + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x17000B10 const GeoLayout mario_geo_low_poly_left_hand[] = { - GEO_SWITCH_CASE(1, geo_switch_mario_hand), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(1, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_left_hand_closed), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_left_hand_open), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_low_poly_left_hand_closed), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_low_poly_left_hand_closed), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_low_poly_left_hand_closed), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_SWITCH_CASE(1, geo_switch_mario_hand), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_left_hand_closed), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_left_hand_open), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_low_poly_left_hand_closed), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_low_poly_left_hand_closed), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_low_poly_left_hand_closed), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x17000B88 const GeoLayout mario_geo_low_poly_right_hand[] = { - GEO_SWITCH_CASE(0, geo_switch_mario_hand), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_right_hand_closed), - GEO_CLOSE_NODE(), - GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_open), - GEO_OPEN_NODE(), - GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_peace), // here we go hand - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_cap), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_cap), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, mario_right_hand_cap_wings), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_SWITCH_CASE(0, geo_switch_mario_hand), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_right_hand_closed), + GEO_CLOSE_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_open), + GEO_OPEN_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_peace), // here we go hand + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_cap), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_cap), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, mario_right_hand_cap_wings), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x17000C30 const GeoLayout mario_geo_low_poly_body[] = { - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - 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, geo_move_mario_part_from_parent), - GEO_ASM(0, geo_mario_tilt_torso), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 68, 0, 0, mario_low_poly_torso), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + 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, geo_move_mario_part_from_parent), + GEO_ASM(0, geo_mario_tilt_torso), + GEO_ROTATION_NODE(0x00, 0, 0, 0), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_geo_low_poly_face_and_wings), // stops sharing because faces has its own dl - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 67, -10, 79, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_low_poly_left_arm), // starts sharing solid color with mario_left_forearm (red) - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_low_poly_left_forearm_shared_dl), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_geo_low_poly_left_hand), // stops sharing because hand has its solid color (white) - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 68, -10, -79, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_low_poly_right_arm), // starts sharing solid color of his dl with mario_right_forearm (red) - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_low_poly_right_forearm_shared_dl), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_geo_low_poly_right_hand), // stops sharing because hand has its solid color (white) - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 68, 0, 0, mario_low_poly_torso), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_geo_low_poly_face_and_wings), // stops sharing because faces has its own dl + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 67, -10, 79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_low_poly_left_arm), // starts sharing solid color with mario_left_forearm (red) + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_low_poly_left_forearm_shared_dl), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_geo_low_poly_left_hand), // stops sharing because hand has its solid color (white) + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 68, -10, -79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_low_poly_right_arm), // starts sharing solid color of his dl with mario_right_forearm (red) + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_low_poly_right_forearm_shared_dl), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_geo_low_poly_right_hand), // stops sharing because hand has its solid color (white) + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, 42, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_low_poly_left_thigh), // starts sharing solid color of his dl with mario_left_leg (blue) + GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, 42, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, mario_low_poly_left_leg_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, mario_low_poly_left_foot), // stops sharing because foot has its solid color (brown) - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_low_poly_left_thigh), // starts sharing solid color of his dl with mario_left_leg (blue) + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, mario_low_poly_left_leg_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, mario_low_poly_left_foot), // stops sharing because foot has its solid color (brown) + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, -42, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_low_poly_right_thigh), // starts sharing solid color of his dl with mario_left_leg (blue) + GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, -42, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, mario_low_poly_right_leg_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(2, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_right_foot), // stops sharing because foot has its solid color (brown) - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_low_poly_right_thigh), // starts sharing solid color of his dl with mario_left_leg (blue) + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, mario_low_poly_right_leg_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(2, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_right_foot), // stops sharing because foot has its solid color (brown) + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // Vanish Mario Geo // 0x17000DEC const GeoLayout mario_vanish_geo_face_and_wings[] = { - GEO_ASM(0, geo_mario_head_rotation), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(0, geo_switch_mario_eyes), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_on_eyes_front), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_on_eyes_half_closed), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_on_eyes_closed), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_on_eyes_right), // unused - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_on_eyes_left), // unused - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_on_eyes_up), // unused - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_on_eyes_down), // unused - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_on_eyes_dead), - GEO_CLOSE_NODE(), - GEO_SWITCH_CASE(0, geo_switch_mario_eyes), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_off_eyes_front), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_off_eyes_half_closed), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_off_eyes_closed), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_off_eyes_right), // unused - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_off_eyes_left), // unused - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_off_eyes_up), // unused - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_off_eyes_down), // unused - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_off_eyes_dead), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_TRANSLATE_ROTATE(0, 142, -51, -126, 22, -40, -135), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_mario_rotate_wing_cap_wings), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_wings_transparent), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_TRANSLATE_ROTATE(0, 142, -51, 126, -22, 40, -135), - GEO_OPEN_NODE(), - GEO_ASM(1, geo_mario_rotate_wing_cap_wings), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_wings_transparent), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_ASM(0, geo_mario_head_rotation), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(0, geo_switch_mario_eyes), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_on_eyes_front), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_on_eyes_half_closed), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_on_eyes_closed), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_on_eyes_right), // unused + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_on_eyes_left), // unused + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_on_eyes_up), // unused + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_on_eyes_down), // unused + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_on_eyes_dead), + GEO_CLOSE_NODE(), + GEO_SWITCH_CASE(0, geo_switch_mario_eyes), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_off_eyes_front), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_off_eyes_half_closed), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_off_eyes_closed), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_off_eyes_right), // unused + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_off_eyes_left), // unused + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_off_eyes_up), // unused + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_off_eyes_down), // unused + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_off_eyes_dead), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_TRANSLATE_ROTATE(0, 142, -51, -126, 22, -40, -135), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_rotate_wing_cap_wings), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_wings_transparent), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_TRANSLATE_ROTATE(0, 142, -51, 126, -22, 40, -135), + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_rotate_wing_cap_wings), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_wings_transparent), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x17000F28 const GeoLayout mario_vanish_geo_left_hand[] = { - GEO_SWITCH_CASE(1, geo_switch_mario_hand), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(1, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_left_hand_closed), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_left_hand_open), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_left_hand_closed), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_left_hand_closed), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_left_hand_closed), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_SWITCH_CASE(1, geo_switch_mario_hand), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_left_hand_closed), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_left_hand_open), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_left_hand_closed), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_left_hand_closed), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_left_hand_closed), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x17000FA0 const GeoLayout mario_vanish_geo_right_hand[] = { - GEO_SWITCH_CASE(0, geo_switch_mario_hand), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_right_hand_closed), - GEO_CLOSE_NODE(), - GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_open), - GEO_OPEN_NODE(), - GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_peace), // here we go hand - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_cap), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_cap), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, mario_right_hand_cap_wings), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_SWITCH_CASE(0, geo_switch_mario_hand), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_right_hand_closed), + GEO_CLOSE_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_open), + GEO_OPEN_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_peace), // here we go hand + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_cap), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_cap), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, mario_right_hand_cap_wings), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // Same rule body as Normal Mario // 0x17001048 const GeoLayout mario_vanish_geo_body[] = { - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_butt), - GEO_OPEN_NODE(), - 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(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 68, 0, 0, mario_torso), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_butt), + GEO_OPEN_NODE(), + 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(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 87, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_vanish_geo_face_and_wings), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, -10, 79, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_left_arm), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_left_forearm_shared_dl), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_vanish_geo_left_hand), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 68, -10, -79, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_right_arm), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_right_forearm_shared_dl), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_vanish_geo_right_hand), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 68, 0, 0, mario_torso), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 87, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_vanish_geo_face_and_wings), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, -10, 79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_left_arm), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_left_forearm_shared_dl), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_vanish_geo_left_hand), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 68, -10, -79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_right_arm), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_right_forearm_shared_dl), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_vanish_geo_right_hand), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, 42, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_left_thigh), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, 42, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, mario_left_leg_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, mario_left_foot), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_left_thigh), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, mario_left_leg_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, mario_left_foot), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, -42, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_right_thigh), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, -42, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, mario_right_leg_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(2, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_right_foot), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_right_thigh), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, mario_right_leg_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(2, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_right_foot), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x17001204 const GeoLayout mario_vanish_geo_medium_poly_left_hand[] = { - GEO_SWITCH_CASE(1, geo_switch_mario_hand), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(1, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_medium_poly_left_hand_closed), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_left_hand_open), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_medium_poly_left_hand_closed), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_medium_poly_left_hand_closed), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_medium_poly_left_hand_closed), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_SWITCH_CASE(1, geo_switch_mario_hand), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_medium_poly_left_hand_closed), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_left_hand_open), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_medium_poly_left_hand_closed), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_medium_poly_left_hand_closed), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_medium_poly_left_hand_closed), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x1700127C const GeoLayout mario_vanish_geo_medium_poly_right_hand[] = { - GEO_SWITCH_CASE(0, geo_switch_mario_hand), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_medium_poly_right_hand_closed), - GEO_CLOSE_NODE(), - GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_open), - GEO_OPEN_NODE(), - GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_peace), // here we go hand - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_cap), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_cap), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, mario_right_hand_cap_wings), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_SWITCH_CASE(0, geo_switch_mario_hand), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_medium_poly_right_hand_closed), + GEO_CLOSE_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_open), + GEO_OPEN_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_peace), // here we go hand + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_cap), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_cap), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, mario_right_hand_cap_wings), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x17001324 const GeoLayout mario_vanish_geo_medium_poly_body[] = { - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_medium_poly_butt), - GEO_OPEN_NODE(), - 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(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 68, 0, 0, mario_medium_poly_torso), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_medium_poly_butt), + GEO_OPEN_NODE(), + 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(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 87, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_vanish_geo_face_and_wings), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, -10, 79, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_medium_poly_left_arm), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_medium_poly_left_forearm_shared_dl), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_vanish_geo_medium_poly_left_hand), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 68, -10, -79, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_medium_poly_right_arm), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_medium_poly_right_forearm_shared_dl), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_vanish_geo_medium_poly_right_hand), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 68, 0, 0, mario_medium_poly_torso), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 87, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_vanish_geo_face_and_wings), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, -10, 79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_medium_poly_left_arm), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_medium_poly_left_forearm_shared_dl), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_vanish_geo_medium_poly_left_hand), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 68, -10, -79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_medium_poly_right_arm), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_medium_poly_right_forearm_shared_dl), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_vanish_geo_medium_poly_right_hand), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, 42, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_medium_poly_left_thigh), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, 42, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, mario_medium_poly_left_leg_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, mario_medium_poly_left_foot), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_medium_poly_left_thigh), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, mario_medium_poly_left_leg_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, mario_medium_poly_left_foot), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, -42, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_medium_poly_right_thigh), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, -42, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, mario_medium_poly_right_leg_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(2, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_medium_poly_right_foot), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_medium_poly_right_thigh), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, mario_medium_poly_right_leg_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(2, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_medium_poly_right_foot), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x170014E0 const GeoLayout mario_vanish_geo_low_poly_face_and_wings[] = { - GEO_ASM(0, geo_mario_head_rotation), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(0, geo_switch_mario_eyes), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_on_eyes_front), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_on_eyes_half_closed), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_on_eyes_closed), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_on_eyes_right), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_on_eyes_left), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_on_eyes_up), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_on_eyes_down), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_on_eyes_dead), - GEO_CLOSE_NODE(), - GEO_SWITCH_CASE(0, geo_switch_mario_eyes), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_off_eyes_front), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_off_eyes_half_closed), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_off_eyes_closed), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_off_eyes_right), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_off_eyes_left), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_off_eyes_up), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_off_eyes_down), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_off_eyes_dead), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_TRANSLATE_ROTATE(0, 142, -51, -126, 22, -40, -135), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_mario_rotate_wing_cap_wings), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_wings_transparent), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_TRANSLATE_ROTATE(0, 142, -51, 126, -22, 40, -135), - GEO_OPEN_NODE(), - GEO_ASM(1, geo_mario_rotate_wing_cap_wings), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_wings_transparent), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_ASM(0, geo_mario_head_rotation), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(0, geo_switch_mario_eyes), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_on_eyes_front), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_on_eyes_half_closed), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_on_eyes_closed), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_on_eyes_right), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_on_eyes_left), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_on_eyes_up), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_on_eyes_down), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_on_eyes_dead), + GEO_CLOSE_NODE(), + GEO_SWITCH_CASE(0, geo_switch_mario_eyes), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_off_eyes_front), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_off_eyes_half_closed), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_off_eyes_closed), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_off_eyes_right), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_off_eyes_left), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_off_eyes_up), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_off_eyes_down), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_cap_off_eyes_dead), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_TRANSLATE_ROTATE(0, 142, -51, -126, 22, -40, -135), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_rotate_wing_cap_wings), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_wings_transparent), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_TRANSLATE_ROTATE(0, 142, -51, 126, -22, 40, -135), + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_rotate_wing_cap_wings), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_wings_transparent), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x1700161C const GeoLayout mario_vanish_geo_low_poly_left_hand[] = { - GEO_SWITCH_CASE(1, geo_switch_mario_hand), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(1, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_left_hand_closed), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_left_hand_open), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_low_poly_left_hand_closed), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_low_poly_left_hand_closed), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_low_poly_left_hand_closed), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_SWITCH_CASE(1, geo_switch_mario_hand), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_left_hand_closed), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_left_hand_open), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_low_poly_left_hand_closed), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_low_poly_left_hand_closed), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_low_poly_left_hand_closed), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x17001694 const GeoLayout mario_vanish_geo_low_poly_right_hand[] = { - GEO_SWITCH_CASE(0, geo_switch_mario_hand), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_right_hand_closed), - GEO_CLOSE_NODE(), - GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_open), - GEO_OPEN_NODE(), - GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_peace), // here we go hand - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_cap), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_cap), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, mario_right_hand_cap_wings), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_SWITCH_CASE(0, geo_switch_mario_hand), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_right_hand_closed), + GEO_CLOSE_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_open), + GEO_OPEN_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_peace), // here we go hand + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_cap), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_cap), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, mario_right_hand_cap_wings), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x1700173C const GeoLayout mario_vanish_geo_low_poly_body[] = { - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_low_poly_butt), - GEO_OPEN_NODE(), - 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(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 68, 0, 0, mario_low_poly_torso), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_low_poly_butt), + GEO_OPEN_NODE(), + 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(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 87, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_vanish_geo_low_poly_face_and_wings), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, -10, 79, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_low_poly_left_arm), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_low_poly_left_forearm_shared_dl), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_vanish_geo_low_poly_left_hand), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 68, -10, -79, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_low_poly_right_arm), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_low_poly_right_forearm_shared_dl), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_vanish_geo_low_poly_right_hand), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 68, 0, 0, mario_low_poly_torso), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 87, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_vanish_geo_low_poly_face_and_wings), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, -10, 79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_low_poly_left_arm), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_low_poly_left_forearm_shared_dl), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_vanish_geo_low_poly_left_hand), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 68, -10, -79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_low_poly_right_arm), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_low_poly_right_forearm_shared_dl), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_vanish_geo_low_poly_right_hand), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, 42, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_low_poly_left_thigh), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, 42, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, mario_low_poly_left_leg_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, mario_low_poly_left_foot), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_low_poly_left_thigh), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, mario_low_poly_left_leg_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, mario_low_poly_left_foot), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, -42, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_low_poly_right_thigh), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, -42, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, mario_low_poly_right_leg_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(2, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_right_foot), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_low_poly_right_thigh), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, mario_low_poly_right_leg_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(2, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_right_foot), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // Metal Mario Geo // 0x170018F8 const GeoLayout mario_metal_geo_face_and_wings[] = { - GEO_ASM(0, geo_mario_head_rotation), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_metal_cap_on_shared_dl), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_metal_cap_off_shared_dl), - GEO_CLOSE_NODE(), - GEO_TRANSLATE_ROTATE(0, 142, -51, -126, 22, -40, -135), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_mario_rotate_wing_cap_wings), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, mario_metal_cap_wings), // left - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_TRANSLATE_ROTATE(0, 142, -51, 126, -22, 40, -135), - GEO_OPEN_NODE(), - GEO_ASM(1, geo_mario_rotate_wing_cap_wings), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, mario_metal_cap_wings), // right - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_ASM(0, geo_mario_head_rotation), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_metal_cap_on_shared_dl), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_metal_cap_off_shared_dl), + GEO_CLOSE_NODE(), + GEO_TRANSLATE_ROTATE(0, 142, -51, -126, 22, -40, -135), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_rotate_wing_cap_wings), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, mario_metal_cap_wings), // left + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_TRANSLATE_ROTATE(0, 142, -51, 126, -22, 40, -135), + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_rotate_wing_cap_wings), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, mario_metal_cap_wings), // right + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x170019A4 const GeoLayout mario_metal_geo_left_hand[] = { - GEO_SWITCH_CASE(1, geo_switch_mario_hand), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(1, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_left_hand_closed_shared_dl), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_left_hand_open_shared_dl), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_left_hand_closed_shared_dl), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_left_hand_closed_shared_dl), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_left_hand_closed_shared_dl), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_SWITCH_CASE(1, geo_switch_mario_hand), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_left_hand_closed_shared_dl), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_left_hand_open_shared_dl), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_left_hand_closed_shared_dl), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_left_hand_closed_shared_dl), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_left_hand_closed_shared_dl), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x17001A1C const GeoLayout mario_metal_geo_right_hand[] = { - GEO_SWITCH_CASE(0, geo_switch_mario_hand), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_metal_right_hand_closed), - GEO_CLOSE_NODE(), - GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_metal_right_hand_open), - GEO_OPEN_NODE(), - GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_peace_shared_dl), // here we go hand - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_metal_right_hand_cap_shared_dl), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_metal_right_hand_cap_shared_dl), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, mario_metal_right_hand_cap_shared_dl_wings), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_SWITCH_CASE(0, geo_switch_mario_hand), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_metal_right_hand_closed), + GEO_CLOSE_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_metal_right_hand_open), + GEO_OPEN_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_peace_shared_dl), // here we go hand + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_metal_right_hand_cap_shared_dl), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_metal_right_hand_cap_shared_dl), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, mario_metal_right_hand_cap_shared_dl_wings), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // A difference from Normal Mario is that the dls after the butt and left thigh shares the metal texture of it, same rule applies to the medium and low poly geos // 0x17001AC4 const GeoLayout mario_metal_geo_body[] = { - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - 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, geo_move_mario_part_from_parent), - GEO_ASM(0, geo_mario_tilt_torso), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 68, 0, 0, mario_metal_torso_shared_dl), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + 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, geo_move_mario_part_from_parent), + GEO_ASM(0, geo_mario_tilt_torso), + GEO_ROTATION_NODE(0x00, 0, 0, 0), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_metal_geo_face_and_wings), // unlike normal mario geo, these dls still share the metal texture - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 67, -10, 79, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_left_arm_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_left_forearm_shared_dl), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_metal_geo_left_hand), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 68, -10, -79, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_right_arm_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_right_forearm_shared_dl), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_metal_geo_right_hand), // stop sharing because the wing metal cap of it - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 68, 0, 0, mario_metal_torso_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_metal_geo_face_and_wings), // unlike normal mario geo, these dls still share the metal texture + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 67, -10, 79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_left_arm_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_left_forearm_shared_dl), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_metal_geo_left_hand), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 68, -10, -79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_right_arm_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_right_forearm_shared_dl), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_metal_geo_right_hand), // stop sharing because the wing metal cap of it + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, 42, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_metal_left_thigh), // starts sharing metal texture with the dls below + GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, 42, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, mario_left_leg_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, mario_left_foot_shared_dl), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_metal_left_thigh), // starts sharing metal texture with the dls below + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, mario_left_leg_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, mario_left_foot_shared_dl), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, -42, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_right_thigh_shared_dl), + GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, -42, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, mario_right_leg_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(2, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_metal_right_foot), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_right_thigh_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, mario_right_leg_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(2, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_metal_right_foot), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x17001C80 const GeoLayout mario_metal_geo_medium_poly_left_hand[] = { - GEO_SWITCH_CASE(1, geo_switch_mario_hand), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(1, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_medium_poly_left_hand_closed_shared_dl), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_left_hand_open_shared_dl), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_medium_poly_left_hand_closed_shared_dl), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_medium_poly_left_hand_closed_shared_dl), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_medium_poly_left_hand_closed_shared_dl), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_SWITCH_CASE(1, geo_switch_mario_hand), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_medium_poly_left_hand_closed_shared_dl), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_left_hand_open_shared_dl), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_medium_poly_left_hand_closed_shared_dl), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_medium_poly_left_hand_closed_shared_dl), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_medium_poly_left_hand_closed_shared_dl), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x17001CF8 const GeoLayout mario_metal_geo_medium_poly_right_hand[] = { - GEO_SWITCH_CASE(0, geo_switch_mario_hand), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_metal_medium_poly_right_hand_closed), - GEO_CLOSE_NODE(), - GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_metal_right_hand_open), - GEO_OPEN_NODE(), - GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_peace_shared_dl), // here we go hand - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_metal_right_hand_cap_shared_dl), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_metal_right_hand_cap_shared_dl), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, mario_metal_right_hand_cap_shared_dl_wings), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_SWITCH_CASE(0, geo_switch_mario_hand), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_metal_medium_poly_right_hand_closed), + GEO_CLOSE_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_metal_right_hand_open), + GEO_OPEN_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_peace_shared_dl), // here we go hand + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_metal_right_hand_cap_shared_dl), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_metal_right_hand_cap_shared_dl), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, mario_metal_right_hand_cap_shared_dl_wings), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x17001DA0 const GeoLayout mario_metal_geo_medium_poly_body[] = { - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_metal_medium_poly_butt), - GEO_OPEN_NODE(), - 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(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 68, 0, 0, mario_metal_medium_poly_torso), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_metal_medium_poly_butt), + GEO_OPEN_NODE(), + 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(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_metal_geo_face_and_wings), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 67, -10, 79, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_medium_poly_left_arm_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_medium_poly_left_forearm_shared_dl), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_metal_geo_medium_poly_left_hand), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 68, -10, -79, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_medium_poly_right_arm_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_medium_poly_right_forearm_shared_dl), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_metal_geo_medium_poly_right_hand), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 68, 0, 0, mario_metal_medium_poly_torso), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_metal_geo_face_and_wings), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 67, -10, 79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_medium_poly_left_arm_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_medium_poly_left_forearm_shared_dl), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_metal_geo_medium_poly_left_hand), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 68, -10, -79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_medium_poly_right_arm_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_medium_poly_right_forearm_shared_dl), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_metal_geo_medium_poly_right_hand), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, 42, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_metal_medium_poly_left_thigh), + GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, 42, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, mario_medium_poly_left_leg_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, mario_medium_poly_left_foot_shared_dl), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_metal_medium_poly_left_thigh), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, mario_medium_poly_left_leg_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, mario_medium_poly_left_foot_shared_dl), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, -42, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_medium_poly_right_thigh_shared_dl), + GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, -42, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, mario_medium_poly_right_leg_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(2, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_metal_medium_poly_right_foot), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_medium_poly_right_thigh_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, mario_medium_poly_right_leg_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(2, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_metal_medium_poly_right_foot), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x17001F5C const GeoLayout mario_metal_geo_low_poly_face_and_wings[] = { - GEO_ASM(0, geo_mario_head_rotation), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_metal_low_poly_cap_on), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_metal_low_poly_cap_off), - GEO_CLOSE_NODE(), - GEO_TRANSLATE_ROTATE(0, 142, -51, -126, 22, -40, -135), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_mario_rotate_wing_cap_wings), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, mario_metal_cap_wings), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_TRANSLATE_ROTATE(0, 142, -51, 126, -22, 40, -135), - GEO_OPEN_NODE(), - GEO_ASM(1, geo_mario_rotate_wing_cap_wings), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, mario_metal_cap_wings), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_ASM(0, geo_mario_head_rotation), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_metal_low_poly_cap_on), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_metal_low_poly_cap_off), + GEO_CLOSE_NODE(), + GEO_TRANSLATE_ROTATE(0, 142, -51, -126, 22, -40, -135), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_rotate_wing_cap_wings), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, mario_metal_cap_wings), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_TRANSLATE_ROTATE(0, 142, -51, 126, -22, 40, -135), + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_rotate_wing_cap_wings), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, mario_metal_cap_wings), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x17002008 const GeoLayout mario_metal_geo_low_poly_left_hand[] = { - GEO_SWITCH_CASE(1, geo_switch_mario_hand), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(1, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_left_hand_closed_shared_dl), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_left_hand_open_shared_dl), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_low_poly_left_hand_closed_shared_dl), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_low_poly_left_hand_closed_shared_dl), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_low_poly_left_hand_closed_shared_dl), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_SWITCH_CASE(1, geo_switch_mario_hand), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_left_hand_closed_shared_dl), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_left_hand_open_shared_dl), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_low_poly_left_hand_closed_shared_dl), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_low_poly_left_hand_closed_shared_dl), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_low_poly_left_hand_closed_shared_dl), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x17002080 const GeoLayout mario_metal_geo_low_poly_right_hand[] = { - GEO_SWITCH_CASE(0, geo_switch_mario_hand), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_metal_low_poly_right_hand_closed), - GEO_CLOSE_NODE(), - GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_metal_right_hand_open), - GEO_OPEN_NODE(), - GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_peace_shared_dl), // here we go hand - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_metal_right_hand_cap_shared_dl), - GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_metal_right_hand_cap_shared_dl), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, mario_metal_right_hand_cap_shared_dl_wings), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_SWITCH_CASE(0, geo_switch_mario_hand), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_metal_low_poly_right_hand_closed), + GEO_CLOSE_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_metal_right_hand_open), + GEO_OPEN_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_peace_shared_dl), // here we go hand + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_metal_right_hand_cap_shared_dl), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_metal_right_hand_cap_shared_dl), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, mario_metal_right_hand_cap_shared_dl_wings), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x17002128 const GeoLayout mario_metal_geo_low_poly_body[] = { - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_metal_low_poly_butt), - GEO_OPEN_NODE(), - 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(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 68, 0, 0, mario_metal_low_poly_torso), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_metal_low_poly_butt), + GEO_OPEN_NODE(), + 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(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_metal_geo_low_poly_face_and_wings), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 67, -10, 79, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_low_poly_left_arm_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_low_poly_left_forearm_shared_dl), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_metal_geo_low_poly_left_hand), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 68, -10, -79, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_low_poly_right_arm_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_low_poly_right_forearm_shared_dl), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_metal_geo_low_poly_right_hand), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 68, 0, 0, mario_metal_low_poly_torso), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_metal_geo_low_poly_face_and_wings), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 67, -10, 79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_low_poly_left_arm_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_low_poly_left_forearm_shared_dl), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_metal_geo_low_poly_left_hand), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 68, -10, -79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_low_poly_right_arm_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_low_poly_right_forearm_shared_dl), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_metal_geo_low_poly_right_hand), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, 42, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_metal_low_poly_left_thigh), + GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, 42, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, mario_low_poly_left_leg_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, mario_low_poly_left_foot_shared_dl), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_metal_low_poly_left_thigh), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, mario_low_poly_left_leg_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, mario_low_poly_left_foot_shared_dl), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, -42, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_low_poly_right_thigh_shared_dl), + GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, -42, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, mario_low_poly_right_leg_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(2, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_metal_low_poly_right_foot), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_low_poly_right_thigh_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, mario_low_poly_right_leg_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(2, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_metal_low_poly_right_foot), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // Metal Vanish Mario Geo // 0x170022E4 const GeoLayout mario_metal_vanish_geo_face_and_wings[] = { - GEO_ASM(0, geo_mario_head_rotation), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_cap_on_shared_dl), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_cap_off_shared_dl), - GEO_CLOSE_NODE(), - GEO_TRANSLATE_ROTATE(0, 142, -51, -126, 22, -40, -135), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_mario_rotate_wing_cap_wings), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_cap_wings_transparent), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_TRANSLATE_ROTATE(0, 142, -51, 126, -22, 40, -135), - GEO_OPEN_NODE(), - GEO_ASM(1, geo_mario_rotate_wing_cap_wings), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_cap_wings_transparent), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_ASM(0, geo_mario_head_rotation), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_cap_on_shared_dl), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_cap_off_shared_dl), + GEO_CLOSE_NODE(), + GEO_TRANSLATE_ROTATE(0, 142, -51, -126, 22, -40, -135), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_rotate_wing_cap_wings), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_cap_wings_transparent), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_TRANSLATE_ROTATE(0, 142, -51, 126, -22, 40, -135), + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_rotate_wing_cap_wings), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_cap_wings_transparent), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x17002390 const GeoLayout mario_metal_vanish_geo_left_hand[] = { - GEO_SWITCH_CASE(0, geo_switch_mario_hand), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(1, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_left_hand_closed_shared_dl), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_left_hand_open_shared_dl), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_left_hand_closed_shared_dl), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_left_hand_closed_shared_dl), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_left_hand_closed_shared_dl), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_SWITCH_CASE(0, geo_switch_mario_hand), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_left_hand_closed_shared_dl), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_left_hand_open_shared_dl), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_left_hand_closed_shared_dl), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_left_hand_closed_shared_dl), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_left_hand_closed_shared_dl), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x17002408 const GeoLayout mario_metal_vanish_geo_right_hand[] = { - GEO_SWITCH_CASE(0, geo_switch_mario_hand), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_right_hand_closed), - GEO_CLOSE_NODE(), - GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_metal_right_hand_open), - GEO_OPEN_NODE(), - GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_peace_shared_dl), // here we go hand - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_metal_right_hand_cap_shared_dl), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_metal_right_hand_cap_shared_dl), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, mario_metal_right_hand_cap_shared_dl_wings), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_SWITCH_CASE(0, geo_switch_mario_hand), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_right_hand_closed), + GEO_CLOSE_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_metal_right_hand_open), + GEO_OPEN_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_peace_shared_dl), // here we go hand + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_metal_right_hand_cap_shared_dl), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_metal_right_hand_cap_shared_dl), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, mario_metal_right_hand_cap_shared_dl_wings), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // Same rules as Metal Mario // 0x170024B0 const GeoLayout mario_metal_vanish_geo_body[] = { - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_metal_butt), - GEO_OPEN_NODE(), - 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(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 68, 0, 0, mario_metal_torso_shared_dl), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_metal_butt), + GEO_OPEN_NODE(), + 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(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 87, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_metal_vanish_geo_face_and_wings), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, -10, 79, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_left_arm_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_left_forearm_shared_dl), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_metal_vanish_geo_left_hand), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 68, -10, -79, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_right_arm_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_right_forearm_shared_dl), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_metal_vanish_geo_right_hand), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 68, 0, 0, mario_metal_torso_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 87, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_metal_vanish_geo_face_and_wings), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, -10, 79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_left_arm_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_left_forearm_shared_dl), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_metal_vanish_geo_left_hand), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 68, -10, -79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_right_arm_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_right_forearm_shared_dl), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_metal_vanish_geo_right_hand), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, 42, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_metal_left_thigh), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, 42, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, mario_left_leg_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, mario_left_foot_shared_dl), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_metal_left_thigh), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, mario_left_leg_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, mario_left_foot_shared_dl), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, -42, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_right_thigh_shared_dl), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, -42, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, mario_right_leg_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(2, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_right_foot), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_right_thigh_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, mario_right_leg_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(2, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_right_foot), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x1700266C const GeoLayout mario_metal_vanish_geo_medium_poly_left_hand[] = { - GEO_SWITCH_CASE(0, geo_switch_mario_hand), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(1, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_medium_poly_left_hand_closed_shared_dl), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_left_hand_open_shared_dl), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_medium_poly_left_hand_closed_shared_dl), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_medium_poly_left_hand_closed_shared_dl), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_medium_poly_left_hand_closed_shared_dl), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_SWITCH_CASE(0, geo_switch_mario_hand), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_medium_poly_left_hand_closed_shared_dl), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_left_hand_open_shared_dl), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_medium_poly_left_hand_closed_shared_dl), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_medium_poly_left_hand_closed_shared_dl), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_medium_poly_left_hand_closed_shared_dl), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x170026E4 const GeoLayout mario_metal_vanish_geo_medium_poly_right_hand[] = { - GEO_SWITCH_CASE(0, geo_switch_mario_hand), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_medium_poly_right_hand_closed), - GEO_CLOSE_NODE(), - GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_metal_right_hand_open), - GEO_OPEN_NODE(), - GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_peace_shared_dl), // here we go hand - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_metal_right_hand_cap_shared_dl), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_metal_right_hand_cap_shared_dl), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, mario_metal_right_hand_cap_shared_dl_wings), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_SWITCH_CASE(0, geo_switch_mario_hand), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_medium_poly_right_hand_closed), + GEO_CLOSE_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_metal_right_hand_open), + GEO_OPEN_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_peace_shared_dl), // here we go hand + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_metal_right_hand_cap_shared_dl), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_metal_right_hand_cap_shared_dl), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, mario_metal_right_hand_cap_shared_dl_wings), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x1700278C const GeoLayout mario_metal_vanish_geo_medium_poly_body[] = { - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_metal_medium_poly_butt), - GEO_OPEN_NODE(), - 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(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 68, 0, 0, mario_metal_medium_poly_torso), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_metal_medium_poly_butt), + GEO_OPEN_NODE(), + 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(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 87, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_metal_vanish_geo_face_and_wings), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, -10, 79, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_medium_poly_left_arm_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_medium_poly_left_forearm_shared_dl), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_metal_vanish_geo_medium_poly_left_hand), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 68, -10, -79, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_medium_poly_right_arm_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_medium_poly_right_forearm_shared_dl), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(0, geo_switch_mario_hand), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 68, 0, 0, mario_metal_medium_poly_torso), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 87, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_metal_vanish_geo_face_and_wings), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, -10, 79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_medium_poly_left_arm_shared_dl), GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_metal_vanish_geo_medium_poly_right_hand), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_medium_poly_left_forearm_shared_dl), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_metal_vanish_geo_medium_poly_left_hand), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 68, -10, -79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_medium_poly_right_arm_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_medium_poly_right_forearm_shared_dl), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(0, geo_switch_mario_hand), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_metal_vanish_geo_medium_poly_right_hand), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, 42, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_metal_medium_poly_left_thigh), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, 42, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, mario_medium_poly_left_leg_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, mario_medium_poly_left_foot_shared_dl), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_metal_medium_poly_left_thigh), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, mario_medium_poly_left_leg_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, mario_medium_poly_left_foot_shared_dl), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, -42, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_medium_poly_right_thigh_shared_dl), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, -42, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, mario_medium_poly_right_leg_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(2, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_medium_poly_right_foot), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_medium_poly_right_thigh_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, mario_medium_poly_right_leg_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(2, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_medium_poly_right_foot), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x17002958 const GeoLayout mario_metal_vanish_geo_low_poly_face_and_wings[] = { - GEO_ASM(0, geo_mario_head_rotation), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_low_poly_cap_on), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_low_poly_cap_off), - GEO_CLOSE_NODE(), - GEO_TRANSLATE_ROTATE(0, 142, -51, -126, 22, -40, -135), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_mario_rotate_wing_cap_wings), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_cap_wings_transparent), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_TRANSLATE_ROTATE(0, 142, -51, 126, -22, 40, -135), - GEO_OPEN_NODE(), - GEO_ASM(1, geo_mario_rotate_wing_cap_wings), - GEO_ROTATION_NODE(0x00, 0, 0, 0), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_cap_wings_transparent), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_ASM(0, geo_mario_head_rotation), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_low_poly_cap_on), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_low_poly_cap_off), + GEO_CLOSE_NODE(), + GEO_TRANSLATE_ROTATE(0, 142, -51, -126, 22, -40, -135), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_rotate_wing_cap_wings), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_cap_wings_transparent), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_TRANSLATE_ROTATE(0, 142, -51, 126, -22, 40, -135), + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_rotate_wing_cap_wings), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_cap_wings_transparent), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x17002A04 const GeoLayout mario_metal_vanish_geo_low_poly_left_hand[] = { - GEO_SWITCH_CASE(0, geo_switch_mario_hand), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(1, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_left_hand_closed_shared_dl), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_left_hand_open_shared_dl), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_low_poly_left_hand_closed_shared_dl), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_low_poly_left_hand_closed_shared_dl), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_low_poly_left_hand_closed_shared_dl), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_SWITCH_CASE(0, geo_switch_mario_hand), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_left_hand_closed_shared_dl), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_left_hand_open_shared_dl), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_low_poly_left_hand_closed_shared_dl), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_low_poly_left_hand_closed_shared_dl), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_low_poly_left_hand_closed_shared_dl), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x17002A7C const GeoLayout mario_metal_vanish_geo_low_poly_right_hand[] = { - GEO_SWITCH_CASE(0, geo_switch_mario_hand), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_low_poly_right_hand_closed), - GEO_CLOSE_NODE(), - GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_metal_right_hand_open), - GEO_OPEN_NODE(), - GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_peace_shared_dl), // here we go hand - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_metal_right_hand_cap_shared_dl), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_metal_right_hand_cap_shared_dl), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, mario_metal_right_hand_cap_shared_dl_wings), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_SWITCH_CASE(0, geo_switch_mario_hand), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_low_poly_right_hand_closed), + GEO_CLOSE_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_metal_right_hand_open), + GEO_OPEN_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_peace_shared_dl), // here we go hand + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_metal_right_hand_cap_shared_dl), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_metal_right_hand_cap_shared_dl), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, mario_metal_right_hand_cap_shared_dl_wings), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x17002B24 const GeoLayout mario_metal_vanish_geo_low_poly_body[] = { - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_metal_low_poly_butt), - GEO_OPEN_NODE(), - 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(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 68, 0, 0, mario_metal_low_poly_torso), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_metal_low_poly_butt), + GEO_OPEN_NODE(), + 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(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 87, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_metal_vanish_geo_low_poly_face_and_wings), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, -10, 79, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_low_poly_left_arm_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_low_poly_left_forearm_shared_dl), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_metal_vanish_geo_low_poly_left_hand), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 68, -10, -79, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_low_poly_right_arm_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_low_poly_right_forearm_shared_dl), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_metal_vanish_geo_low_poly_right_hand), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 68, 0, 0, mario_metal_low_poly_torso), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 87, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_metal_vanish_geo_low_poly_face_and_wings), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, -10, 79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_low_poly_left_arm_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_low_poly_left_forearm_shared_dl), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_metal_vanish_geo_low_poly_left_hand), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 68, -10, -79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_low_poly_right_arm_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_low_poly_right_forearm_shared_dl), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_metal_vanish_geo_low_poly_right_hand), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, 42, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_metal_low_poly_left_thigh), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, 42, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, mario_low_poly_left_leg_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, mario_low_poly_left_foot_shared_dl), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_metal_low_poly_left_thigh), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, mario_low_poly_left_leg_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, mario_low_poly_left_foot_shared_dl), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, -42, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_low_poly_right_thigh_shared_dl), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, -42, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, mario_low_poly_right_leg_shared_dl), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ASM(2, geo_mario_hand_foot_scaler), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_low_poly_right_foot), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_low_poly_right_thigh_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, mario_low_poly_right_leg_shared_dl), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(2, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_low_poly_right_foot), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // High Poly // 0x17002CE0 const GeoLayout mario_geo_load_body[] = { - GEO_SWITCH_CASE(0, geo_switch_mario_cap_effect), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_geo_body), - GEO_BRANCH(1, mario_vanish_geo_body), - GEO_BRANCH(1, mario_metal_geo_body), - GEO_BRANCH(1, mario_metal_vanish_geo_body), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_SWITCH_CASE(0, geo_switch_mario_cap_effect), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_geo_body), + GEO_BRANCH(1, mario_vanish_geo_body), + GEO_BRANCH(1, mario_metal_geo_body), + GEO_BRANCH(1, mario_metal_vanish_geo_body), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // Medium Poly // 0x17002D14 const GeoLayout mario_geo_load_medium_poly_body[] = { - GEO_SWITCH_CASE(0, geo_switch_mario_cap_effect), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_geo_medium_poly_body), - GEO_BRANCH(1, mario_vanish_geo_medium_poly_body), - GEO_BRANCH(1, mario_metal_geo_medium_poly_body), - GEO_BRANCH(1, mario_metal_vanish_geo_medium_poly_body), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_SWITCH_CASE(0, geo_switch_mario_cap_effect), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_geo_medium_poly_body), + GEO_BRANCH(1, mario_vanish_geo_medium_poly_body), + GEO_BRANCH(1, mario_metal_geo_medium_poly_body), + GEO_BRANCH(1, mario_metal_vanish_geo_medium_poly_body), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // Low Poly // 0x17002D48 const GeoLayout mario_geo_load_low_poly_body[] = { - GEO_SWITCH_CASE(0, geo_switch_mario_cap_effect), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_geo_low_poly_body), - GEO_BRANCH(1, mario_vanish_geo_low_poly_body), - GEO_BRANCH(1, mario_metal_geo_low_poly_body), - GEO_BRANCH(1, mario_metal_vanish_geo_low_poly_body), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_SWITCH_CASE(0, geo_switch_mario_cap_effect), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_geo_low_poly_body), + GEO_BRANCH(1, mario_vanish_geo_low_poly_body), + GEO_BRANCH(1, mario_metal_geo_low_poly_body), + GEO_BRANCH(1, mario_metal_vanish_geo_low_poly_body), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x17002D7C const GeoLayout mario_geo_render_body[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2048, 600), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_geo_load_body), - GEO_CLOSE_NODE(), - GEO_RENDER_RANGE(600, 1600), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_geo_load_medium_poly_body), - GEO_CLOSE_NODE(), - GEO_RENDER_RANGE(1600, 32767), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_geo_load_low_poly_body), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2048, 600), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_geo_load_body), + GEO_CLOSE_NODE(), + GEO_RENDER_RANGE(600, 1600), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_geo_load_medium_poly_body), + GEO_CLOSE_NODE(), + GEO_RENDER_RANGE(1600, 32767), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_geo_load_low_poly_body), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // This last geo is used to load all of Mario Geo in the Level Scripts // 0x17002DD4 const GeoLayout mario_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_PLAYER, 0xB4, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_mirror_mario_backface_culling), - GEO_ASM(0, geo_mirror_mario_set_alpha), - GEO_SWITCH_CASE(0, geo_switch_mario_stand_run), - GEO_OPEN_NODE(), - GEO_BRANCH(1, mario_geo_load_body), - GEO_BRANCH(1, mario_geo_render_body), - GEO_CLOSE_NODE(), - GEO_ASM(1, geo_mirror_mario_backface_culling), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_PLAYER, 0xB4, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mirror_mario_backface_culling), + GEO_ASM(0, geo_mirror_mario_set_alpha), + GEO_SWITCH_CASE(0, geo_switch_mario_stand_run), + GEO_OPEN_NODE(), + GEO_BRANCH(1, mario_geo_load_body), + GEO_BRANCH(1, mario_geo_render_body), + GEO_CLOSE_NODE(), + GEO_ASM(1, geo_mirror_mario_backface_culling), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/mario_cap/geo.inc.c b/actors/mario_cap/geo.inc.c index 5e59c311..94e7fcf5 100644 --- a/actors/mario_cap/geo.inc.c +++ b/actors/mario_cap/geo.inc.c @@ -1,81 +1,81 @@ // 0x16000CA4 const GeoLayout marios_cap_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0xB4, 75), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - 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), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_seg3_dl_03022F48), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0xB4, 75), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + 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), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_seg3_dl_03022F48), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x16000CF0 const GeoLayout marios_metal_cap_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0xB4, 75), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - 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), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_seg3_dl_03022FF8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0xB4, 75), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + 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), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_seg3_dl_03022FF8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x16000D3C const GeoLayout marios_wing_cap_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0xB4, 75), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ASM(10, geo_update_layer_transparency), - GEO_SWITCH_CASE(2, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_NODE_START(), + GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0xB4, 75), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + 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), - GEO_DISPLAY_LIST(LAYER_ALPHA, mario_cap_seg3_dl_030230B0), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_seg3_dl_03022F48), + GEO_DISPLAY_LIST(LAYER_ALPHA, mario_cap_seg3_dl_030230B0), + GEO_CLOSE_NODE(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_seg3_dl_03023160), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_seg3_dl_03023160), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x16000DA8 const GeoLayout marios_winged_metal_cap_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0xB4, 75), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ASM(10, geo_update_layer_transparency), - GEO_SWITCH_CASE(2, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_NODE_START(), + GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0xB4, 75), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + 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), - GEO_DISPLAY_LIST(LAYER_ALPHA, mario_cap_seg3_dl_03023108), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_seg3_dl_03022FF8), + GEO_DISPLAY_LIST(LAYER_ALPHA, mario_cap_seg3_dl_03023108), + GEO_CLOSE_NODE(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_seg3_dl_03023298), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_seg3_dl_03023298), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/metal_box/geo.inc.c b/actors/metal_box/geo.inc.c index 676bd0ad..08656991 100644 --- a/actors/metal_box/geo.inc.c +++ b/actors/metal_box/geo.inc.c @@ -1,11 +1,11 @@ // 0x0F000A30 const GeoLayout metal_box_geo[] = { - GEO_CULLING_RADIUS(500), - GEO_OPEN_NODE(), - GEO_SHADOW(SHADOW_SQUARE_PERMANENT, 0xB4, 70), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, metal_box_dl), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(500), + GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_SQUARE_PERMANENT, 0xB4, 70), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, metal_box_dl), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/mips/geo.inc.c b/actors/mips/geo.inc.c index 58948b5b..ffb323a7 100644 --- a/actors/mips/geo.inc.c +++ b/actors/mips/geo.inc.c @@ -1,56 +1,56 @@ // 0x0D000448 const GeoLayout mips_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mips_seg6_dl_06010C40), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 64, 0, 0, mips_seg6_dl_060107B8), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 52, -24, -32, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mips_seg6_dl_06011DB0), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 79, 0, 0, mips_seg6_dl_06011BB0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 52, -24, 32, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mips_seg6_dl_060110B0), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 79, 0, 0, mips_seg6_dl_06010E60), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -31, 4, -39, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mips_seg6_dl_06011FC0), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 45, 0, 0, mips_seg6_dl_06011990), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 52, 0, 0, mips_seg6_dl_06011780), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -31, 4, 40, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mips_seg6_dl_06011ED8), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 45, 0, 0, mips_seg6_dl_06011520), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 52, 0, 0, mips_seg6_dl_06011310), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mips_seg6_dl_06010C40), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 64, 0, 0, mips_seg6_dl_060107B8), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 52, -24, -32, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mips_seg6_dl_06011DB0), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 79, 0, 0, mips_seg6_dl_06011BB0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 52, -24, 32, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mips_seg6_dl_060110B0), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 79, 0, 0, mips_seg6_dl_06010E60), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -31, 4, -39, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mips_seg6_dl_06011FC0), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 45, 0, 0, mips_seg6_dl_06011990), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 52, 0, 0, mips_seg6_dl_06011780), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -31, 4, 40, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mips_seg6_dl_06011ED8), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 45, 0, 0, mips_seg6_dl_06011520), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 52, 0, 0, mips_seg6_dl_06011310), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), -GEO_CLOSE_NODE(), //! more close than open nodes -GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), //! more close than open nodes + GEO_END(), }; UNUSED static const u64 mips_unused_1 = 0; diff --git a/actors/mist/geo.inc.c b/actors/mist/geo.inc.c index 93308965..4357b82a 100644 --- a/actors/mist/geo.inc.c +++ b/actors/mist/geo.inc.c @@ -1,19 +1,19 @@ // 0x16000000 const GeoLayout mist_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_update_layer_transparency), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mist_seg3_dl_03000880), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_update_layer_transparency), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mist_seg3_dl_03000880), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x16000020 const GeoLayout white_puff_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_update_layer_transparency), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mist_seg3_dl_03000920), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + 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 2d1db035..efe8420b 100644 --- a/actors/moneybag/geo.inc.c +++ b/actors/moneybag/geo.inc.c @@ -1,59 +1,59 @@ // 0x0D000000 const GeoLayout moneybag_geo_000000[] = { - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, moneybag_seg6_dl_06005750), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, -120, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, moneybag_seg6_dl_06005980), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 120, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, moneybag_seg6_dl_060059F0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, moneybag_seg6_dl_06005688), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, moneybag_seg6_dl_06005750), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, -120, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, moneybag_seg6_dl_06005980), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 120, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, moneybag_seg6_dl_060059F0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, moneybag_seg6_dl_06005688), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0D000078 const GeoLayout moneybag_geo_000078[] = { - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, moneybag_seg6_dl_06005750), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, -120, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, moneybag_seg6_dl_06005980), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 120, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, moneybag_seg6_dl_060059F0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, moneybag_seg6_dl_06005688), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, moneybag_seg6_dl_06005750), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, -120, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, moneybag_seg6_dl_06005980), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 120, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, moneybag_seg6_dl_060059F0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, moneybag_seg6_dl_06005688), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0D0000F0 const GeoLayout moneybag_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_update_layer_transparency), - GEO_SWITCH_CASE(2, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_BRANCH(1, moneybag_geo_000000), - GEO_BRANCH(1, moneybag_geo_000078), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), -GEO_CLOSE_NODE(), //! more close than open nodes -GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_update_layer_transparency), + GEO_SWITCH_CASE(2, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_BRANCH(1, moneybag_geo_000000), + GEO_BRANCH(1, moneybag_geo_000078), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), //! more close than open nodes + GEO_END(), }; UNUSED static const u64 moneybag_unused_1 = 0; diff --git a/actors/monty_mole/geo.inc.c b/actors/monty_mole/geo.inc.c index 5c76e89c..4144c92d 100644 --- a/actors/monty_mole/geo.inc.c +++ b/actors/monty_mole/geo.inc.c @@ -1,41 +1,41 @@ // 0x0C000000 const GeoLayout monty_mole_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, monty_mole_seg5_dl_050044B0), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 116, 0, 0, monty_mole_seg5_dl_05004C00), - GEO_ANIMATED_PART(LAYER_ALPHA, 116, 0, 0, monty_mole_seg5_dl_05004D30), - GEO_ANIMATED_PART(LAYER_OPAQUE, -68, -5, -40, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, monty_mole_seg5_dl_05003C48), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -68, -5, 40, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, monty_mole_seg5_dl_05003518), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 80, 1, 78, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, monty_mole_seg5_dl_050032A0), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 80, 0, 0, monty_mole_seg5_dl_05003820), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 80, 1, -78, NULL), - GEO_OPEN_NODE(), - 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, geo_update_projectile_pos_from_parent), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, monty_mole_seg5_dl_050044B0), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 116, 0, 0, monty_mole_seg5_dl_05004C00), + GEO_ANIMATED_PART(LAYER_ALPHA, 116, 0, 0, monty_mole_seg5_dl_05004D30), + GEO_ANIMATED_PART(LAYER_OPAQUE, -68, -5, -40, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, monty_mole_seg5_dl_05003C48), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -68, -5, 40, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, monty_mole_seg5_dl_05003518), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 80, 1, 78, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, monty_mole_seg5_dl_050032A0), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 80, 0, 0, monty_mole_seg5_dl_05003820), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 80, 1, -78, NULL), + GEO_OPEN_NODE(), + 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, geo_update_projectile_pos_from_parent), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/mr_i_eyeball/geo.inc.c b/actors/mr_i_eyeball/geo.inc.c index b1a693b7..dc50a7c0 100644 --- a/actors/mr_i_eyeball/geo.inc.c +++ b/actors/mr_i_eyeball/geo.inc.c @@ -1,8 +1,8 @@ // 0x0D000000 const GeoLayout mr_i_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x9B, 200), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_eyeball_seg6_dl_06002080), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x9B, 200), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_eyeball_seg6_dl_06002080), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/mr_i_iris/geo.inc.c b/actors/mr_i_iris/geo.inc.c index 31156664..e12155ff 100644 --- a/actors/mr_i_iris/geo.inc.c +++ b/actors/mr_i_iris/geo.inc.c @@ -1,30 +1,30 @@ // 0x0D00001C const GeoLayout mr_i_iris_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(20, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041D8), - GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041F0), - GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_06004208), - GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_06004220), - GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_06004208), - GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041F0), - GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041D8), - GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041D8), - GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041D8), - GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041F0), - GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_06004208), - GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_06004220), - GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_06004208), - GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041F0), - GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041D8), - GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041D8), - GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041D8), - GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041D8), - GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041D8), - GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041D8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(20, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041D8), + GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041F0), + GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_06004208), + GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_06004220), + GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_06004208), + GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041F0), + GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041D8), + GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041D8), + GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041D8), + GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041F0), + GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_06004208), + GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_06004220), + GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_06004208), + GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041F0), + GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041D8), + GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041D8), + GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041D8), + GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041D8), + GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041D8), + GEO_DISPLAY_LIST(LAYER_ALPHA, mr_i_iris_seg6_dl_060041D8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/mushroom_1up/geo.inc.c b/actors/mushroom_1up/geo.inc.c index 62c2bc3d..9a402095 100644 --- a/actors/mushroom_1up/geo.inc.c +++ b/actors/mushroom_1up/geo.inc.c @@ -1,8 +1,8 @@ // 0x16000E84 const GeoLayout mushroom_1up_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xB4, 80), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, mushroom_1up_seg3_dl_0302A660), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xB4, 80), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, mushroom_1up_seg3_dl_0302A660), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/number/geo.inc.c b/actors/number/geo.inc.c index 0cf3845c..3abb7331 100644 --- a/actors/number/geo.inc.c +++ b/actors/number/geo.inc.c @@ -1,20 +1,20 @@ // 0x16000E14 const GeoLayout number_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(10, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, dl_billboard_num_0), - GEO_DISPLAY_LIST(LAYER_ALPHA, dl_billboard_num_1), - GEO_DISPLAY_LIST(LAYER_ALPHA, dl_billboard_num_2), - GEO_DISPLAY_LIST(LAYER_ALPHA, dl_billboard_num_3), - GEO_DISPLAY_LIST(LAYER_ALPHA, dl_billboard_num_4), - GEO_DISPLAY_LIST(LAYER_ALPHA, dl_billboard_num_5), - GEO_DISPLAY_LIST(LAYER_ALPHA, dl_billboard_num_6), - GEO_DISPLAY_LIST(LAYER_ALPHA, dl_billboard_num_7), - GEO_DISPLAY_LIST(LAYER_ALPHA, dl_billboard_num_8), - GEO_DISPLAY_LIST(LAYER_ALPHA, dl_billboard_num_9), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(10, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, dl_billboard_num_0), + GEO_DISPLAY_LIST(LAYER_ALPHA, dl_billboard_num_1), + GEO_DISPLAY_LIST(LAYER_ALPHA, dl_billboard_num_2), + GEO_DISPLAY_LIST(LAYER_ALPHA, dl_billboard_num_3), + GEO_DISPLAY_LIST(LAYER_ALPHA, dl_billboard_num_4), + GEO_DISPLAY_LIST(LAYER_ALPHA, dl_billboard_num_5), + GEO_DISPLAY_LIST(LAYER_ALPHA, dl_billboard_num_6), + GEO_DISPLAY_LIST(LAYER_ALPHA, dl_billboard_num_7), + GEO_DISPLAY_LIST(LAYER_ALPHA, dl_billboard_num_8), + GEO_DISPLAY_LIST(LAYER_ALPHA, dl_billboard_num_9), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/peach/geo.inc.c b/actors/peach/geo.inc.c index 876bfee5..8194b0ed 100644 --- a/actors/peach/geo.inc.c +++ b/actors/peach/geo.inc.c @@ -1,154 +1,154 @@ // 0x0C000098 const GeoLayout peach_geo_000098[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, peach_seg5_dl_05007230), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 78, 0, 0, peach_seg5_dl_05006A18), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, peach_seg5_dl_05007230), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 132, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(8, geo_switch_peach_eyes), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, peach_seg5_dl_05005CE0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, peach_seg5_dl_05005D38), - GEO_DISPLAY_LIST(LAYER_OPAQUE, peach_seg5_dl_05005D90), - GEO_DISPLAY_LIST(LAYER_OPAQUE, peach_seg5_dl_05005DE8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, peach_seg5_dl_05005E40), - GEO_DISPLAY_LIST(LAYER_OPAQUE, peach_seg5_dl_05005E98), - GEO_DISPLAY_LIST(LAYER_OPAQUE, peach_seg5_dl_05005EF0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, peach_seg5_dl_05005F48), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 38, -78, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, peach_seg5_dl_05007AB8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 132, 0, 0, peach_seg5_dl_05009148), - GEO_ANIMATED_PART(LAYER_OPAQUE, 132, 0, 0, peach_seg5_dl_05008F20), - GEO_ANIMATED_PART(LAYER_OPAQUE, 63, 0, 84, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, peach_seg5_dl_05007E58), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 104, 0, 0, peach_seg5_dl_050087A8), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 0, 0, peach_seg5_dl_05009500), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, peach_seg5_dl_05008560), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 63, 0, -84, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, peach_seg5_dl_05008228), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 104, 0, 0, peach_seg5_dl_05008CF8), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 0, 0, peach_seg5_dl_05009940), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, peach_seg5_dl_05008AB0), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 78, 0, 0, peach_seg5_dl_05006A18), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 132, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(8, geo_switch_peach_eyes), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, peach_seg5_dl_05005CE0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, peach_seg5_dl_05005D38), + GEO_DISPLAY_LIST(LAYER_OPAQUE, peach_seg5_dl_05005D90), + GEO_DISPLAY_LIST(LAYER_OPAQUE, peach_seg5_dl_05005DE8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, peach_seg5_dl_05005E40), + GEO_DISPLAY_LIST(LAYER_OPAQUE, peach_seg5_dl_05005E98), + GEO_DISPLAY_LIST(LAYER_OPAQUE, peach_seg5_dl_05005EF0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, peach_seg5_dl_05005F48), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 38, -78, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, peach_seg5_dl_05007AB8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 132, 0, 0, peach_seg5_dl_05009148), + GEO_ANIMATED_PART(LAYER_OPAQUE, 132, 0, 0, peach_seg5_dl_05008F20), + GEO_ANIMATED_PART(LAYER_OPAQUE, 63, 0, 84, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, peach_seg5_dl_05007E58), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 104, 0, 0, peach_seg5_dl_050087A8), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 0, 0, peach_seg5_dl_05009500), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, peach_seg5_dl_05008560), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 63, 0, -84, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, peach_seg5_dl_05008228), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 104, 0, 0, peach_seg5_dl_05008CF8), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 0, 0, peach_seg5_dl_05009940), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, peach_seg5_dl_05008AB0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 78, 0, 0, peach_seg5_dl_050060E0), + GEO_ANIMATED_PART(LAYER_OPAQUE, -23, -1, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, peach_seg5_dl_0500A0A8), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 78, 0, 0, peach_seg5_dl_050060E0), - GEO_ANIMATED_PART(LAYER_OPAQUE, -23, -1, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, peach_seg5_dl_0500A0A8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0C000254 const GeoLayout peach_geo_000254[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_OPEN_NODE(), #ifdef VERSION_JP - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, peach_seg5_dl_05007230), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, peach_seg5_dl_05007230), #else - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, peach_seg5_us_dl_05007288), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, peach_seg5_us_dl_05007288), #endif - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 78, 0, 0, peach_seg5_dl_05006A18), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 132, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(8, geo_switch_peach_eyes), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, peach_seg5_dl_05005CE0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, peach_seg5_dl_05005D38), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, peach_seg5_dl_05005D90), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, peach_seg5_dl_05005DE8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, peach_seg5_dl_05005E40), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, peach_seg5_dl_05005E98), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, peach_seg5_dl_05005EF0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, peach_seg5_dl_05005F48), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 38, -78, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, peach_seg5_dl_05007AB8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 132, 0, 0, peach_seg5_dl_05009148), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 132, 0, 0, peach_seg5_dl_05008F20), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 63, 0, 84, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, peach_seg5_dl_05007E58), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 104, 0, 0, peach_seg5_dl_050087A8), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 87, 0, 0, peach_seg5_dl_05009500), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, peach_seg5_dl_05008560), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 63, 0, -84, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, peach_seg5_dl_05008228), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 104, 0, 0, peach_seg5_dl_05008CF8), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 87, 0, 0, peach_seg5_dl_05009940), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, peach_seg5_dl_05008AB0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 78, 0, 0, peach_seg5_dl_050060E0), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, -23, -1, 0, NULL), GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 78, 0, 0, peach_seg5_dl_05006A18), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 132, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(8, geo_switch_peach_eyes), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, peach_seg5_dl_05005CE0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, peach_seg5_dl_05005D38), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, peach_seg5_dl_05005D90), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, peach_seg5_dl_05005DE8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, peach_seg5_dl_05005E40), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, peach_seg5_dl_05005E98), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, peach_seg5_dl_05005EF0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, peach_seg5_dl_05005F48), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 38, -78, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, peach_seg5_dl_05007AB8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 132, 0, 0, peach_seg5_dl_05009148), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 132, 0, 0, peach_seg5_dl_05008F20), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 63, 0, 84, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, peach_seg5_dl_05007E58), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 104, 0, 0, peach_seg5_dl_050087A8), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 87, 0, 0, peach_seg5_dl_05009500), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, peach_seg5_dl_05008560), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 63, 0, -84, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, peach_seg5_dl_05008228), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 104, 0, 0, peach_seg5_dl_05008CF8), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 87, 0, 0, peach_seg5_dl_05009940), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, peach_seg5_dl_05008AB0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 78, 0, 0, peach_seg5_dl_050060E0), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, -23, -1, 0, NULL), + GEO_OPEN_NODE(), #ifdef VERSION_JP - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, peach_seg5_dl_0500A0A8), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, peach_seg5_dl_0500A0A8), #else - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, peach_seg5_us_dl_0500A188), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, peach_seg5_us_dl_0500A188), #endif + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0C000410 const GeoLayout peach_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0x96, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ASM(10, geo_update_layer_transparency), - GEO_SWITCH_CASE(2, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_BRANCH(1, peach_geo_000098), - GEO_BRANCH(1, peach_geo_000254), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0x96, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ASM(10, geo_update_layer_transparency), + GEO_SWITCH_CASE(2, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_BRANCH(1, peach_geo_000098), + GEO_BRANCH(1, peach_geo_000254), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; UNUSED static const u64 peach_unused_1 = 0; diff --git a/actors/penguin/geo.inc.c b/actors/penguin/geo.inc.c index aea40dd9..d67f0844 100644 --- a/actors/penguin/geo.inc.c +++ b/actors/penguin/geo.inc.c @@ -1,44 +1,44 @@ // 0x0C000104 const GeoLayout penguin_geo[] = { -#if defined(VERSION_EU) || defined(VERSION_SH) - GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0x96, 60), +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) + GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0x96, 60), #else - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), #endif - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 40, penguin_seg5_dl_05007540), - GEO_OPEN_NODE(), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 40, penguin_seg5_dl_05007540), + GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, -51, 84, -13, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, penguin_seg5_dl_05007198), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, penguin_seg5_dl_05007198), GEO_CLOSE_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 51, 84, -13, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, penguin_seg5_dl_050071E8), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, penguin_seg5_dl_050071E8), GEO_CLOSE_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, -38, -54, -13, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, penguin_seg5_dl_05007238), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, penguin_seg5_dl_05007238), GEO_CLOSE_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 38, -54, -13, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, penguin_seg5_dl_050072C8), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, penguin_seg5_dl_050072C8), GEO_CLOSE_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 111, -19, NULL), GEO_OPEN_NODE(), - GEO_SWITCH_CASE(5, geo_switch_tuxie_mother_eyes), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, penguin_seg5_dl_05006428), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, penguin_seg5_dl_05006458), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, penguin_seg5_dl_05006488), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, penguin_seg5_dl_050064B8), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, penguin_seg5_dl_050064E8), // unused, seen in Shoshinkai 1995 footage - GEO_CLOSE_NODE(), + GEO_SWITCH_CASE(5, geo_switch_tuxie_mother_eyes), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, penguin_seg5_dl_05006428), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, penguin_seg5_dl_05006458), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, penguin_seg5_dl_05006488), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, penguin_seg5_dl_050064B8), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, penguin_seg5_dl_050064E8), // unused, seen in Shoshinkai 1995 footage + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/piranha_plant/geo.inc.c b/actors/piranha_plant/geo.inc.c index 4b48a6c3..fe6acdb2 100644 --- a/actors/piranha_plant/geo.inc.c +++ b/actors/piranha_plant/geo.inc.c @@ -1,47 +1,47 @@ // 0x0D000358 const GeoLayout piranha_plant_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x9B, 200), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 14, 3, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, piranha_plant_seg6_dl_06015850), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x9B, 200), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 14, 3, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 46, 0, 0, piranha_plant_seg6_dl_06016F20), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 154, 0, 0, piranha_plant_seg6_dl_06016D98), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 153, 0, 0, piranha_plant_seg6_dl_06016C10), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 236, 42, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, piranha_plant_seg6_dl_06015850), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 46, 0, 0, piranha_plant_seg6_dl_06016F20), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 154, 0, 0, piranha_plant_seg6_dl_06016D98), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, piranha_plant_seg6_dl_060160B0), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, piranha_plant_seg6_dl_06016120), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 153, 0, 0, piranha_plant_seg6_dl_06016C10), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 236, 42, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, piranha_plant_seg6_dl_060160B0), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, piranha_plant_seg6_dl_06016120), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 217, -2, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, piranha_plant_seg6_dl_060169E8), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, piranha_plant_seg6_dl_06016A78), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 217, -2, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 49, 0, -34, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, piranha_plant_seg6_dl_060169E8), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, piranha_plant_seg6_dl_06016A78), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, piranha_plant_seg6_dl_06015480), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 49, 0, -34, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, piranha_plant_seg6_dl_06015480), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 49, 0, 37, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, piranha_plant_seg6_dl_06015578), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 49, 0, 37, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, piranha_plant_seg6_dl_06015578), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/pokey/geo.inc.c b/actors/pokey/geo.inc.c index f4ca96f2..abe9db86 100644 --- a/actors/pokey/geo.inc.c +++ b/actors/pokey/geo.inc.c @@ -1,21 +1,21 @@ // 0x0C000610 const GeoLayout pokey_head_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 50), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(2, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, pokey_seg5_dl_050127D8), - GEO_DISPLAY_LIST(LAYER_ALPHA, pokey_seg5_dl_05012808), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 50), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(2, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, pokey_seg5_dl_050127D8), + GEO_DISPLAY_LIST(LAYER_ALPHA, pokey_seg5_dl_05012808), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0C000644 const GeoLayout pokey_body_part_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 50), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, pokey_seg5_dl_050130B0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 50), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, pokey_seg5_dl_050130B0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/poundable_pole/geo.inc.c b/actors/poundable_pole/geo.inc.c index 719a9b7d..ea1b9dcf 100644 --- a/actors/poundable_pole/geo.inc.c +++ b/actors/poundable_pole/geo.inc.c @@ -1,8 +1,8 @@ // 0x0D0000B8 const GeoLayout wooden_post_geo[] = { - GEO_CULLING_RADIUS(450), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, poundable_pole_seg6_dl_06002410), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(450), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, poundable_pole_seg6_dl_06002410), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/power_meter/model.inc.c b/actors/power_meter/model.inc.c index 1a2c17f6..be095b78 100644 --- a/actors/power_meter/model.inc.c +++ b/actors/power_meter/model.inc.c @@ -2,6 +2,15 @@ UNUSED static const u64 power_meter_unused_1 = 0; +#if defined(VERSION_CN) +ALIGNED8 static const Texture texture_power_meter_left_side[] = { +#include "actors/power_meter/power_meter_left_side_cn.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_power_meter_right_side[] = { +#include "actors/power_meter/power_meter_right_side_cn.rgba16.inc.c" +}; +#else // 0x030233E0 ALIGNED8 static const Texture texture_power_meter_left_side[] = { #include "actors/power_meter/power_meter_left_side.rgba16.inc.c" @@ -11,6 +20,7 @@ ALIGNED8 static const Texture texture_power_meter_left_side[] = { ALIGNED8 static const Texture texture_power_meter_right_side[] = { #include "actors/power_meter/power_meter_right_side.rgba16.inc.c" }; +#endif // 0x030253E0 ALIGNED8 static const Texture texture_power_meter_full[] = { @@ -102,10 +112,17 @@ const Gfx dl_power_meter_base[] = { // 0x03029530 static const Vtx vertex_power_meter_health_segments[] = { +#if defined(VERSION_CN) + {{{ -16, -20, 0}, 0, { 0, 992}, {0xff, 0xff, 0xff, 0xff}}}, + {{{ 15, -20, 0}, 0, { 992, 992}, {0xff, 0xff, 0xff, 0xff}}}, + {{{ 15, 12, 0}, 0, { 992, 0}, {0xff, 0xff, 0xff, 0xff}}}, + {{{ -16, 12, 0}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}}, +#else {{{ -16, -16, 0}, 0, { 0, 992}, {0xff, 0xff, 0xff, 0xff}}}, {{{ 15, -16, 0}, 0, { 992, 992}, {0xff, 0xff, 0xff, 0xff}}}, {{{ 15, 16, 0}, 0, { 992, 0}, {0xff, 0xff, 0xff, 0xff}}}, {{{ -16, 16, 0}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}}, +#endif }; // 0x03029570 - 0x030295A0 diff --git a/actors/purple_switch/geo.inc.c b/actors/purple_switch/geo.inc.c index 85567220..40cdd173 100644 --- a/actors/purple_switch/geo.inc.c +++ b/actors/purple_switch/geo.inc.c @@ -1,8 +1,8 @@ // 0x0F0004CC const GeoLayout purple_switch_geo[] = { - GEO_CULLING_RADIUS(300), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, purple_switch_seg8_dl_0800C718), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(300), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, purple_switch_seg8_dl_0800C718), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/scuttlebug/geo.inc.c b/actors/scuttlebug/geo.inc.c index 254ebcdf..8f6ff3e7 100644 --- a/actors/scuttlebug/geo.inc.c +++ b/actors/scuttlebug/geo.inc.c @@ -1,118 +1,118 @@ // 0x0D000394 const GeoLayout scuttlebug_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, -29, 0, NULL), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -1, 113, 112, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 198, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 195, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06014378), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06014270), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06014188), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -1, 109, -116, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 198, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 195, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06014378), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06014270), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06014188), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, scuttlebug_seg6_dl_060139F8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -29, -57, 28, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 158, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, -29, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -1, 113, 112, NULL), + GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, scuttlebug_seg6_dl_06013AE8), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 198, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 195, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06014378), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06014270), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06014188), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06013CB8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -29, 55, 28, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 157, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -1, 109, -116, NULL), + GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, scuttlebug_seg6_dl_06013BD0), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 198, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 195, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06014378), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06014270), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06014188), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06013DA0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -1, -116, -111, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 198, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 195, 0, 0, NULL), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06014378), + GEO_DISPLAY_LIST(LAYER_ALPHA, scuttlebug_seg6_dl_060139F8), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06014270), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06014188), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -1, -116, 112, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 195, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 199, 0, 0, NULL), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -29, -57, 28, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06014378), + GEO_ANIMATED_PART(LAYER_OPAQUE, 158, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, scuttlebug_seg6_dl_06013AE8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06013CB8), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06014270), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06014188), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, scuttlebug_seg6_dl_060140F0), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -29, 55, 28, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 157, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, scuttlebug_seg6_dl_06013BD0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06013DA0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -1, -116, -111, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 198, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 195, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06014378), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06014270), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06014188), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -1, -116, 112, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 195, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 199, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06014378), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06014270), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, scuttlebug_seg6_dl_06014188), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, scuttlebug_seg6_dl_060140F0), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/seaweed/geo.inc.c b/actors/seaweed/geo.inc.c index a085a505..2aed0ebe 100644 --- a/actors/seaweed/geo.inc.c +++ b/actors/seaweed/geo.inc.c @@ -1,20 +1,20 @@ // 0x0D000284 const GeoLayout seaweed_geo[] = { - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, seaweed_seg6_dl_0600A180), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 238, 0, 0, seaweed_seg6_dl_0600A088), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, seaweed_seg6_dl_0600A180), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 317, 0, 0, seaweed_seg6_dl_06009F90), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 314, 0, 0, seaweed_seg6_dl_06009E98), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 238, 0, 0, seaweed_seg6_dl_0600A088), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 317, 0, 0, seaweed_seg6_dl_06009F90), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 314, 0, 0, seaweed_seg6_dl_06009E98), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/skeeter/geo.inc.c b/actors/skeeter/geo.inc.c index aafd4cd5..a12db4dc 100644 --- a/actors/skeeter/geo.inc.c +++ b/actors/skeeter/geo.inc.c @@ -1,98 +1,98 @@ // 0x0D000000 const GeoLayout skeeter_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, skeeter_seg6_dl_06000A08), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 100, -75, -105, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, skeeter_seg6_dl_06004070), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 405, 0, 0, skeeter_seg6_dl_06004040), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 540, 0, 0, skeeter_seg6_dl_06000EC0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -40, -75, -125, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, skeeter_seg6_dl_06004120), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 405, 0, 0, skeeter_seg6_dl_060040F0), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 540, 0, 0, skeeter_seg6_dl_06000EC0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -40, -75, 125, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, skeeter_seg6_dl_060041D0), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 405, 0, 0, skeeter_seg6_dl_060041A0), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 540, 0, 0, skeeter_seg6_dl_06000EC0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -150, -87, 111, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, skeeter_seg6_dl_06000BD8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, skeeter_seg6_dl_06000CA8), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -150, -87, -111, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, skeeter_seg6_dl_06000D78), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, skeeter_seg6_dl_06000BD8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 100, -75, 95, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, skeeter_seg6_dl_06004648), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 405, 0, 0, skeeter_seg6_dl_06004618), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 540, 0, 0, skeeter_seg6_dl_06000EC0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 147, 84, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, skeeter_seg6_dl_06005328), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 216, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, skeeter_seg6_dl_06000A08), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 100, -75, -105, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, skeeter_seg6_dl_06004070), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, skeeter_seg6_dl_06000AF0), + GEO_ANIMATED_PART(LAYER_OPAQUE, 405, 0, 0, skeeter_seg6_dl_06004040), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 540, 0, 0, skeeter_seg6_dl_06000EC0), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 216, 0, 0, NULL), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -40, -75, -125, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, skeeter_seg6_dl_06004120), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 405, 0, 0, skeeter_seg6_dl_060040F0), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 540, 0, 0, skeeter_seg6_dl_06000EC0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -40, -75, 125, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, skeeter_seg6_dl_060041D0), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 405, 0, 0, skeeter_seg6_dl_060041A0), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 540, 0, 0, skeeter_seg6_dl_06000EC0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -150, -87, 111, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, skeeter_seg6_dl_06000BD8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, skeeter_seg6_dl_06000CA8), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -150, -87, -111, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, skeeter_seg6_dl_06000D78), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, skeeter_seg6_dl_06000BD8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 100, -75, 95, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, skeeter_seg6_dl_06004648), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 405, 0, 0, skeeter_seg6_dl_06004618), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 540, 0, 0, skeeter_seg6_dl_06000EC0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 147, 84, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, skeeter_seg6_dl_06005328), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 216, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, skeeter_seg6_dl_06000AF0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 216, 0, 0, NULL), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/small_key/geo.inc.c b/actors/small_key/geo.inc.c index 882ad244..480f599d 100644 --- a/actors/small_key/geo.inc.c +++ b/actors/small_key/geo.inc.c @@ -1,11 +1,11 @@ // 0x0C000188 const GeoLayout small_key_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 80), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, small_key_seg5_dl_05006A68), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 80), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, small_key_seg5_dl_05006A68), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/snowman/geo.inc.c b/actors/snowman/geo.inc.c index 2dded75e..d079f435 100644 --- a/actors/snowman/geo.inc.c +++ b/actors/snowman/geo.inc.c @@ -1,57 +1,57 @@ // 0x0C00021C const GeoLayout mr_blizzard_hidden_geo[] = { - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, snowman_seg5_dl_0500C620), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, snowman_seg5_dl_0500C620), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 356, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, snowman_seg5_dl_0500CBF8), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 356, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, snowman_seg5_dl_0500CBF8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 356, 0, 0, snowman_seg5_dl_0500CCE8), + GEO_ANIMATED_PART(LAYER_ALPHA, 356, 0, 0, snowman_seg5_dl_0500C760), + GEO_SWITCH_CASE(2, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_NODE_START(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_TRANSLATE_ROTATE_WITH_DL(LAYER_OPAQUE, 490, 14, 43, 305, 0, 248, mario_cap_seg3_dl_03022F48), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, -229, NULL), + GEO_OPEN_NODE(), + 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, geo_update_projectile_pos_from_parent), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 356, 0, 0, NULL), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 356, 0, 0, snowman_seg5_dl_0500CCE8), - GEO_ANIMATED_PART(LAYER_ALPHA, 356, 0, 0, snowman_seg5_dl_0500C760), - GEO_SWITCH_CASE(2, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_NODE_START(), - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 65536), - GEO_OPEN_NODE(), - GEO_TRANSLATE_ROTATE_WITH_DL(LAYER_OPAQUE, 490, 14, 43, 305, 0, 248, mario_cap_seg3_dl_03022F48), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, -229, NULL), - GEO_OPEN_NODE(), - 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, geo_update_projectile_pos_from_parent), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 356, 0, 0, NULL), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0C000348 const GeoLayout mr_blizzard_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xB4, 160), - GEO_OPEN_NODE(), - GEO_BRANCH_AND_LINK(mr_blizzard_hidden_geo), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xB4, 160), + GEO_OPEN_NODE(), + GEO_BRANCH_AND_LINK(mr_blizzard_hidden_geo), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/snufit/geo.inc.c b/actors/snufit/geo.inc.c index a8aabecc..b1ecd32e 100644 --- a/actors/snufit/geo.inc.c +++ b/actors/snufit/geo.inc.c @@ -1,27 +1,27 @@ // 0x0D0001A0 const GeoLayout snufit_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - 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), - GEO_CLOSE_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, snufit_seg6_dl_06009498), - GEO_DISPLAY_LIST(LAYER_OPAQUE, snufit_seg6_dl_06009938), - GEO_DISPLAY_LIST(LAYER_OPAQUE, snufit_seg6_dl_06009B68), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_snufit_scale_body), - GEO_SCALE(0x00, 0), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_snufit_move_mask), + GEO_TRANSLATE_NODE(0x00, 0, 0, 0), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, snufit_seg6_dl_06009A10), + GEO_DISPLAY_LIST(LAYER_OPAQUE, snufit_seg6_dl_06009748), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), -GEO_CLOSE_NODE(), //! more close than open nodes -GEO_END(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, snufit_seg6_dl_06009498), + GEO_DISPLAY_LIST(LAYER_OPAQUE, snufit_seg6_dl_06009938), + GEO_DISPLAY_LIST(LAYER_OPAQUE, snufit_seg6_dl_06009B68), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_snufit_scale_body), + GEO_SCALE(0x00, 0), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, snufit_seg6_dl_06009A10), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), //! more close than open nodes + GEO_END(), }; diff --git a/actors/sparkle/geo.inc.c b/actors/sparkle/geo.inc.c index d96da669..0bdf6181 100644 --- a/actors/sparkle/geo.inc.c +++ b/actors/sparkle/geo.inc.c @@ -1,19 +1,19 @@ // 0x170001BC const GeoLayout sparkles_geo[] = { - GEO_SWITCH_CASE(12, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, sparkles_seg4_dl_0402A570), - GEO_DISPLAY_LIST(LAYER_ALPHA, sparkles_seg4_dl_0402A570), - GEO_DISPLAY_LIST(LAYER_ALPHA, sparkles_seg4_dl_0402A558), - GEO_DISPLAY_LIST(LAYER_ALPHA, sparkles_seg4_dl_0402A558), - GEO_DISPLAY_LIST(LAYER_ALPHA, sparkles_seg4_dl_0402A540), - GEO_DISPLAY_LIST(LAYER_ALPHA, sparkles_seg4_dl_0402A540), - GEO_DISPLAY_LIST(LAYER_ALPHA, sparkles_seg4_dl_0402A528), - GEO_DISPLAY_LIST(LAYER_ALPHA, sparkles_seg4_dl_0402A528), - GEO_DISPLAY_LIST(LAYER_ALPHA, sparkles_seg4_dl_0402A510), - GEO_DISPLAY_LIST(LAYER_ALPHA, sparkles_seg4_dl_0402A510), - GEO_DISPLAY_LIST(LAYER_ALPHA, sparkles_seg4_dl_0402A4F8), - GEO_DISPLAY_LIST(LAYER_ALPHA, sparkles_seg4_dl_0402A4F8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SWITCH_CASE(12, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, sparkles_seg4_dl_0402A570), + GEO_DISPLAY_LIST(LAYER_ALPHA, sparkles_seg4_dl_0402A570), + GEO_DISPLAY_LIST(LAYER_ALPHA, sparkles_seg4_dl_0402A558), + GEO_DISPLAY_LIST(LAYER_ALPHA, sparkles_seg4_dl_0402A558), + GEO_DISPLAY_LIST(LAYER_ALPHA, sparkles_seg4_dl_0402A540), + GEO_DISPLAY_LIST(LAYER_ALPHA, sparkles_seg4_dl_0402A540), + GEO_DISPLAY_LIST(LAYER_ALPHA, sparkles_seg4_dl_0402A528), + GEO_DISPLAY_LIST(LAYER_ALPHA, sparkles_seg4_dl_0402A528), + GEO_DISPLAY_LIST(LAYER_ALPHA, sparkles_seg4_dl_0402A510), + GEO_DISPLAY_LIST(LAYER_ALPHA, sparkles_seg4_dl_0402A510), + GEO_DISPLAY_LIST(LAYER_ALPHA, sparkles_seg4_dl_0402A4F8), + GEO_DISPLAY_LIST(LAYER_ALPHA, sparkles_seg4_dl_0402A4F8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/sparkle_animation/geo.inc.c b/actors/sparkle_animation/geo.inc.c index b6110b59..b7a48c89 100644 --- a/actors/sparkle_animation/geo.inc.c +++ b/actors/sparkle_animation/geo.inc.c @@ -1,16 +1,16 @@ // 0x17000284 const GeoLayout sparkles_animation_geo[] = { - GEO_SWITCH_CASE(9, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sparkles_animation_seg4_dl_04035300), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sparkles_animation_seg4_dl_04035318), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sparkles_animation_seg4_dl_04035330), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sparkles_animation_seg4_dl_04035348), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sparkles_animation_seg4_dl_04035360), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sparkles_animation_seg4_dl_04035348), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sparkles_animation_seg4_dl_04035330), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sparkles_animation_seg4_dl_04035318), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sparkles_animation_seg4_dl_04035300), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SWITCH_CASE(9, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sparkles_animation_seg4_dl_04035300), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sparkles_animation_seg4_dl_04035318), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sparkles_animation_seg4_dl_04035330), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sparkles_animation_seg4_dl_04035348), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sparkles_animation_seg4_dl_04035360), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sparkles_animation_seg4_dl_04035348), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sparkles_animation_seg4_dl_04035330), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sparkles_animation_seg4_dl_04035318), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sparkles_animation_seg4_dl_04035300), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/spindrift/geo.inc.c b/actors/spindrift/geo.inc.c index 3cd1f515..f784bdaa 100644 --- a/actors/spindrift/geo.inc.c +++ b/actors/spindrift/geo.inc.c @@ -1,36 +1,36 @@ // 0x0C000000 const GeoLayout spindrift_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 32768), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, spindrift_seg5_dl_05002900), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 100, 0, 0, spindrift_seg5_dl_05000328), - GEO_ANIMATED_PART(LAYER_ALPHA, 100, 0, 0, spindrift_seg5_dl_05002A20), - GEO_ANIMATED_PART(LAYER_ALPHA, 100, 0, 0, spindrift_seg5_dl_05002B30), - GEO_ANIMATED_PART(LAYER_OPAQUE, -88, -32, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spindrift_seg5_dl_050002A0), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, spindrift_seg5_dl_05002D08), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 32768), + GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, spindrift_seg5_dl_05002748), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, spindrift_seg5_dl_05002900), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 100, 0, 0, spindrift_seg5_dl_05000328), + GEO_ANIMATED_PART(LAYER_ALPHA, 100, 0, 0, spindrift_seg5_dl_05002A20), + GEO_ANIMATED_PART(LAYER_ALPHA, 100, 0, 0, spindrift_seg5_dl_05002B30), + GEO_ANIMATED_PART(LAYER_OPAQUE, -88, -32, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spindrift_seg5_dl_050002A0), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, spindrift_seg5_dl_05002D08), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, spindrift_seg5_dl_05002748), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, spindrift_seg5_dl_05002830), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, spindrift_seg5_dl_05002830), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/spiny/geo.inc.c b/actors/spiny/geo.inc.c index fa813f84..fd3b8441 100644 --- a/actors/spiny/geo.inc.c +++ b/actors/spiny/geo.inc.c @@ -1,57 +1,57 @@ // 0x0C000328 const GeoLayout spiny_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 72, -7, spiny_seg5_dl_05016A48), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 72, -7, spiny_seg5_dl_05016A48), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spiny_seg5_dl_05016738), - GEO_ANIMATED_PART(LAYER_OPAQUE, -1, 55, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 77, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spiny_seg5_dl_05016418), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, -48, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 88, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spiny_seg5_dl_050164E0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -1, 55, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 77, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spiny_seg5_dl_050165A8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, -48, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 88, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spiny_seg5_dl_05016670), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spiny_seg5_dl_05016738), + GEO_ANIMATED_PART(LAYER_OPAQUE, -1, 55, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 77, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spiny_seg5_dl_05016418), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, -48, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 88, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spiny_seg5_dl_050164E0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -1, 55, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 77, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spiny_seg5_dl_050165A8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, -48, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 88, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spiny_seg5_dl_05016670), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/spiny_egg/geo.inc.c b/actors/spiny_egg/geo.inc.c index e2a3d4f6..721b487e 100644 --- a/actors/spiny_egg/geo.inc.c +++ b/actors/spiny_egg/geo.inc.c @@ -1,21 +1,21 @@ // 0x0C000290 const GeoLayout spiny_ball_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -18, -34, 10, spiny_egg_seg5_dl_05015368), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spiny_egg_seg5_dl_05015330), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spiny_egg_seg5_dl_050152F8), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spiny_egg_seg5_dl_050152C0), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spiny_egg_seg5_dl_05015288), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spiny_egg_seg5_dl_05015250), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spiny_egg_seg5_dl_05015218), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spiny_egg_seg5_dl_050151E0), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spiny_egg_seg5_dl_050151A8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -18, -34, 10, spiny_egg_seg5_dl_05015368), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spiny_egg_seg5_dl_05015330), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spiny_egg_seg5_dl_050152F8), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spiny_egg_seg5_dl_050152C0), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spiny_egg_seg5_dl_05015288), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spiny_egg_seg5_dl_05015250), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spiny_egg_seg5_dl_05015218), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spiny_egg_seg5_dl_050151E0), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, spiny_egg_seg5_dl_050151A8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/springboard/geo.inc.c b/actors/springboard/geo.inc.c index ed5a896b..aa8ce677 100644 --- a/actors/springboard/geo.inc.c +++ b/actors/springboard/geo.inc.c @@ -1,29 +1,29 @@ // top of beta trampoline - unused // 0x0C000000 const GeoLayout springboard_top_geo[] = { - GEO_CULLING_RADIUS(500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, springboard_checkerboard_seg5_dl_050016B8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, springboard_checkerboard_seg5_dl_050016B8), + GEO_CLOSE_NODE(), + GEO_END(), }; // middle of beta trampoline - unused // 0x0C000018 const GeoLayout springboard_spring_geo[] = { - GEO_CULLING_RADIUS(500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, springboard_spring_seg5_dl_05001800), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, springboard_spring_seg5_dl_05001800), + GEO_CLOSE_NODE(), + GEO_END(), }; // bottom of beta trampoline - unused // 0x0C000030 const GeoLayout springboard_bottom_geo[] = { - GEO_CULLING_RADIUS(500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, springboard_checkerboard_seg5_dl_05001900), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, springboard_checkerboard_seg5_dl_05001900), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/star/geo.inc.c b/actors/star/geo.inc.c index 200f64e7..1f2f1afa 100644 --- a/actors/star/geo.inc.c +++ b/actors/star/geo.inc.c @@ -1,12 +1,12 @@ // 0x16000EA0 const GeoLayout star_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x9B, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, star_seg3_dl_0302B870), - GEO_DISPLAY_LIST(LAYER_ALPHA, star_seg3_dl_0302BA18), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x9B, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, star_seg3_dl_0302B870), + GEO_DISPLAY_LIST(LAYER_ALPHA, star_seg3_dl_0302BA18), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/stomp_smoke/geo.inc.c b/actors/stomp_smoke/geo.inc.c index 1fc0a468..8819b694 100644 --- a/actors/stomp_smoke/geo.inc.c +++ b/actors/stomp_smoke/geo.inc.c @@ -1,28 +1,28 @@ // 0x1700009C 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), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, stomp_smoke_seg4_dl_04025240), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, stomp_smoke_seg4_dl_04025258), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, stomp_smoke_seg4_dl_04025270), - GEO_CLOSE_NODE(), - GEO_END(), + 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), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, stomp_smoke_seg4_dl_04025240), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, stomp_smoke_seg4_dl_04025258), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, stomp_smoke_seg4_dl_04025270), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x170000E0 const GeoLayout mario_TODO_geo_0000E0[] = { - GEO_SWITCH_CASE(6, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, stomp_smoke_seg4_dl_04025288), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, stomp_smoke_seg4_dl_040252A0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, stomp_smoke_seg4_dl_040252B8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, stomp_smoke_seg4_dl_040252D0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, stomp_smoke_seg4_dl_040252E8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, stomp_smoke_seg4_dl_04025300), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SWITCH_CASE(6, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, stomp_smoke_seg4_dl_04025288), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, stomp_smoke_seg4_dl_040252A0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, stomp_smoke_seg4_dl_040252B8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, stomp_smoke_seg4_dl_040252D0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, stomp_smoke_seg4_dl_040252E8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, stomp_smoke_seg4_dl_04025300), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/sushi/geo.inc.c b/actors/sushi/geo.inc.c index 4e401699..f507a3d8 100644 --- a/actors/sushi/geo.inc.c +++ b/actors/sushi/geo.inc.c @@ -1,28 +1,28 @@ // 0x0C000068 const GeoLayout sushi_geo[] = { - GEO_CULLING_RADIUS(800), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, sushi_seg5_dl_0500A768), + GEO_CULLING_RADIUS(800), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ASM(0, geo_update_body_rot_from_parent), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, sushi_seg5_dl_0500A768), + GEO_OPEN_NODE(), + 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), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 415, 0, 0, sushi_seg5_dl_0500A008), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 486, 0, 0, sushi_seg5_dl_0500A160), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, sushi_seg5_dl_0500A990), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, sushi_seg5_dl_0500A8A8), GEO_CLOSE_NODE(), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 201, 0, 0, sushi_seg5_dl_05009DD0), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 415, 0, 0, sushi_seg5_dl_0500A008), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 486, 0, 0, sushi_seg5_dl_0500A160), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, sushi_seg5_dl_0500A990), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, sushi_seg5_dl_0500A8A8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/swoop/geo.inc.c b/actors/swoop/geo.inc.c index 5cde29ba..c3d40387 100644 --- a/actors/swoop/geo.inc.c +++ b/actors/swoop/geo.inc.c @@ -1,32 +1,32 @@ // 0x0D0000DC const GeoLayout swoop_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, swoop_seg6_dl_06006880), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, swoop_seg6_dl_06006880), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 54, 0, 0, swoop_seg6_dl_06006758), + GEO_ANIMATED_PART(LAYER_OPAQUE, 54, 0, 0, swoop_seg6_dl_06006A88), + GEO_ANIMATED_PART(LAYER_OPAQUE, 57, -48, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, swoop_seg6_dl_06006BD0), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 57, -48, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, swoop_seg6_dl_06006D00), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 54, 0, 0, swoop_seg6_dl_06006758), - GEO_ANIMATED_PART(LAYER_OPAQUE, 54, 0, 0, swoop_seg6_dl_06006A88), - GEO_ANIMATED_PART(LAYER_OPAQUE, 57, -48, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, swoop_seg6_dl_06006BD0), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 57, -48, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, swoop_seg6_dl_06006D00), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/thwomp/geo.inc.c b/actors/thwomp/geo.inc.c index d096c5ae..a45a1f4f 100644 --- a/actors/thwomp/geo.inc.c +++ b/actors/thwomp/geo.inc.c @@ -1,8 +1,8 @@ // 0x0C000248 const GeoLayout thwomp_geo[] = { - GEO_SHADOW(SHADOW_SQUARE_SCALABLE, 0xB4, 300), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, thwomp_seg5_dl_0500B750), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_SQUARE_SCALABLE, 0xB4, 300), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, thwomp_seg5_dl_0500B750), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/toad/geo.inc.c b/actors/toad/geo.inc.c index fd8af275..bc27ea4d 100644 --- a/actors/toad/geo.inc.c +++ b/actors/toad/geo.inc.c @@ -1,141 +1,141 @@ // 0x0D000114 const GeoLayout toad_geo_000114[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 83, 0, 0, NULL), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 126, -37, 0, toad_seg6_dl_06007710), + GEO_ANIMATED_PART(LAYER_OPAQUE, 83, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 126, -37, 0, toad_seg6_dl_06007710), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 25, 8, 0, toad_seg6_dl_06007A48), + GEO_ANIMATED_PART(LAYER_OPAQUE, 34, 8, 0, toad_seg6_dl_06007EB0), + GEO_ANIMATED_PART(LAYER_OPAQUE, 4, 7, 38, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 37, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 9, -25, 3, toad_seg6_dl_06008890), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 4, 7, -38, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 37, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 9, -25, -3, toad_seg6_dl_06008BD8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 61, -3, 52, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 17, 0, 4, toad_seg6_dl_060081F8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 61, -3, -52, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 17, 0, -4, toad_seg6_dl_06008520), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 25, 8, 0, toad_seg6_dl_06007A48), - GEO_ANIMATED_PART(LAYER_OPAQUE, 34, 8, 0, toad_seg6_dl_06007EB0), - GEO_ANIMATED_PART(LAYER_OPAQUE, 4, 7, 38, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 37, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 9, -25, 3, toad_seg6_dl_06008890), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 4, 7, -38, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 37, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 9, -25, -3, toad_seg6_dl_06008BD8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 61, -3, 52, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 17, 0, 4, toad_seg6_dl_060081F8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 61, -3, -52, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 17, 0, -4, toad_seg6_dl_06008520), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0D00027C const GeoLayout toad_geo_00027C[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 83, 0, 0, NULL), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 83, 0, 0, NULL), + GEO_OPEN_NODE(), #ifdef VERSION_JP - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 126, -37, 0, toad_seg6_dl_06007710), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 126, -37, 0, toad_seg6_dl_06007710), #else - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 126, -37, 0, toad_seg6_us_dl_06007788), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 126, -37, 0, toad_seg6_us_dl_06007788), #endif - GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), #ifdef VERSION_JP - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 25, 8, 0, toad_seg6_dl_06007A48), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 25, 8, 0, toad_seg6_dl_06007A48), #else - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 25, 8, 0, toad_seg6_us_dl_06007B00), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 25, 8, 0, toad_seg6_us_dl_06007B00), #endif - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 34, 8, 0, toad_seg6_dl_06007EB0), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 4, 7, 38, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 37, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 9, -25, 3, toad_seg6_dl_06008890), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 4, 7, -38, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 37, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 9, -25, -3, toad_seg6_dl_06008BD8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 61, -3, 52, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 17, 0, 4, toad_seg6_dl_060081F8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 61, -3, -52, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 34, 8, 0, toad_seg6_dl_06007EB0), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 4, 7, 38, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 37, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 9, -25, 3, toad_seg6_dl_06008890), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 4, 7, -38, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 37, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 9, -25, -3, toad_seg6_dl_06008BD8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 61, -3, 52, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 17, 0, 4, toad_seg6_dl_060081F8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 61, -3, -52, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_OPEN_NODE(), #ifdef VERSION_JP - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 17, 0, -4, toad_seg6_dl_06008520), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 17, 0, -4, toad_seg6_dl_06008520), #else - GEO_ANIMATED_PART(LAYER_TRANSPARENT, 17, 0, -4, toad_seg6_us_dl_06008608), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 17, 0, -4, toad_seg6_us_dl_06008608), #endif - GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0D0003E4 const GeoLayout toad_geo[] = { - GEO_CULLING_RADIUS(1000), - GEO_OPEN_NODE(), - GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0x96, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ASM(10, geo_update_layer_transparency), - GEO_SWITCH_CASE(2, geo_switch_anim_state), + GEO_CULLING_RADIUS(1000), + GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0x96, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), GEO_OPEN_NODE(), - GEO_BRANCH(1, toad_geo_000114), - GEO_BRANCH(1, toad_geo_00027C), + GEO_ASM(10, geo_update_layer_transparency), + GEO_SWITCH_CASE(2, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_BRANCH(1, toad_geo_000114), + GEO_BRANCH(1, toad_geo_00027C), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; UNUSED static const u64 toad_unused_1 = 0; diff --git a/actors/tornado/geo.inc.c b/actors/tornado/geo.inc.c index 26f971cb..533d24b0 100644 --- a/actors/tornado/geo.inc.c +++ b/actors/tornado/geo.inc.c @@ -2,7 +2,7 @@ const GeoLayout tweester_geo[] = { GEO_CULLING_RADIUS(5000), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, tornado_seg5_dl_050145C0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, tornado_seg5_dl_050145C0), GEO_CLOSE_NODE(), GEO_END(), }; diff --git a/actors/transparent_star/geo.inc.c b/actors/transparent_star/geo.inc.c index fca28b58..87e06bce 100644 --- a/actors/transparent_star/geo.inc.c +++ b/actors/transparent_star/geo.inc.c @@ -1,11 +1,11 @@ // 0x16000F6C const GeoLayout transparent_star_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x9B, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, transparent_star_seg3_dl_0302C620), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x9B, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, transparent_star_seg3_dl_0302C620), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/treasure_chest/geo.inc.c b/actors/treasure_chest/geo.inc.c index 4ace3590..29a993ed 100644 --- a/actors/treasure_chest/geo.inc.c +++ b/actors/treasure_chest/geo.inc.c @@ -1,17 +1,17 @@ // 0x0D000450 const GeoLayout treasure_chest_base_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, treasure_chest_seg6_dl_06016F90), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, treasure_chest_seg6_dl_06016F90), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0D000468 const GeoLayout treasure_chest_lid_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, treasure_chest_seg6_dl_060178C0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, treasure_chest_seg6_dl_060178C0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/tree/geo.inc.c b/actors/tree/geo.inc.c index c58ded64..7377f0ae 100644 --- a/actors/tree/geo.inc.c +++ b/actors/tree/geo.inc.c @@ -1,44 +1,44 @@ // 0x16000FE8 const GeoLayout bubbly_tree_geo[] = { - GEO_CULLING_RADIUS(800), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, tree_seg3_dl_0302FEE8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(800), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, tree_seg3_dl_0302FEE8), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x16001000 const GeoLayout spiky_tree_geo[] = { - GEO_CULLING_RADIUS(800), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, tree_seg3_dl_03030FA0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(800), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, tree_seg3_dl_03030FA0), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x16001018 const GeoLayout snow_tree_geo[] = { - GEO_CULLING_RADIUS(800), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, tree_seg3_dl_03032088), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(800), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, tree_seg3_dl_03032088), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x16001030 const GeoLayout spiky_tree1_geo[] = { - GEO_CULLING_RADIUS(800), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, tree_seg3_dl_03032170), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(800), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, tree_seg3_dl_03032170), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x16001048 const GeoLayout palm_tree_geo[] = { - GEO_CULLING_RADIUS(800), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, tree_seg3_dl_03033258), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(800), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, tree_seg3_dl_03033258), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/ukiki/geo.inc.c b/actors/ukiki/geo.inc.c index 72d864c9..6f2a6c7a 100644 --- a/actors/ukiki/geo.inc.c +++ b/actors/ukiki/geo.inc.c @@ -1,91 +1,91 @@ // 0x0C000110 const GeoLayout ukiki_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 80), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, ukiki_seg5_dl_0500B820), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 99, -11, NULL), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 80), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, ukiki_seg5_dl_0500B820), GEO_OPEN_NODE(), - GEO_SWITCH_CASE(4, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, ukiki_seg5_dl_0500B2E8), - GEO_CLOSE_NODE(), - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, ukiki_seg5_dl_0500B310), - GEO_CLOSE_NODE(), - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, ukiki_seg5_dl_0500B2E8), - GEO_OPEN_NODE(), - GEO_TRANSLATE_ROTATE_WITH_DL(LAYER_OPAQUE, 100, 0, 0, -90, -90, 0, mario_cap_seg3_dl_03022F48), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, ukiki_seg5_dl_0500B310), - GEO_OPEN_NODE(), - GEO_TRANSLATE_ROTATE_WITH_DL(LAYER_OPAQUE, 100, 0, 0, -90, -90, 0, mario_cap_seg3_dl_03022F48), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 99, -11, NULL), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(4, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, ukiki_seg5_dl_0500B2E8), + GEO_CLOSE_NODE(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, ukiki_seg5_dl_0500B310), + GEO_CLOSE_NODE(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, ukiki_seg5_dl_0500B2E8), + GEO_OPEN_NODE(), + GEO_TRANSLATE_ROTATE_WITH_DL(LAYER_OPAQUE, 100, 0, 0, -90, -90, 0, mario_cap_seg3_dl_03022F48), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, ukiki_seg5_dl_0500B310), + GEO_OPEN_NODE(), + GEO_TRANSLATE_ROTATE_WITH_DL(LAYER_OPAQUE, 100, 0, 0, -90, -90, 0, mario_cap_seg3_dl_03022F48), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 71, 69, -9, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, ukiki_seg5_dl_0500B988), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 86, 0, 0, ukiki_seg5_dl_0500BB28), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 64, 0, 0, ukiki_seg5_dl_0500CF68), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -71, 68, -9, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, ukiki_seg5_dl_0500BC78), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 86, 0, 0, ukiki_seg5_dl_0500BE38), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 64, 0, 0, ukiki_seg5_dl_0500CFF0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 43, -22, -1, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, ukiki_seg5_dl_0500BFF8), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 46, 0, 0, ukiki_seg5_dl_0500C1B8), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 36, 0, 0, ukiki_seg5_dl_0500D078), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -43, -22, -1, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, ukiki_seg5_dl_0500C368), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 46, 0, 0, ukiki_seg5_dl_0500C528), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 36, 0, 0, ukiki_seg5_dl_0500D108), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, -15, -57, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, ukiki_seg5_dl_0500C6E8), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 45, 0, 0, ukiki_seg5_dl_0500C898), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 46, 0, 0, ukiki_seg5_dl_0500CA48), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 71, 69, -9, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, ukiki_seg5_dl_0500B988), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 86, 0, 0, ukiki_seg5_dl_0500BB28), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 64, 0, 0, ukiki_seg5_dl_0500CF68), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -71, 68, -9, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, ukiki_seg5_dl_0500BC78), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 86, 0, 0, ukiki_seg5_dl_0500BE38), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 64, 0, 0, ukiki_seg5_dl_0500CFF0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 43, -22, -1, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, ukiki_seg5_dl_0500BFF8), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 46, 0, 0, ukiki_seg5_dl_0500C1B8), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 36, 0, 0, ukiki_seg5_dl_0500D078), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -43, -22, -1, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, ukiki_seg5_dl_0500C368), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 46, 0, 0, ukiki_seg5_dl_0500C528), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 36, 0, 0, ukiki_seg5_dl_0500D108), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, -15, -57, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, ukiki_seg5_dl_0500C6E8), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 45, 0, 0, ukiki_seg5_dl_0500C898), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 46, 0, 0, ukiki_seg5_dl_0500CA48), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/unagi/geo.inc.c b/actors/unagi/geo.inc.c index a6f7674c..bac11b65 100644 --- a/actors/unagi/geo.inc.c +++ b/actors/unagi/geo.inc.c @@ -1,55 +1,55 @@ // 0x0C00010C const GeoLayout unagi_geo[] = { - GEO_CULLING_RADIUS(2000), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, unagi_seg5_dl_0500D268), + GEO_CULLING_RADIUS(2000), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 245, 0, 0, unagi_seg5_dl_0500D468), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 494, 0, 0, unagi_seg5_dl_0500D668), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 475, 0, 0, unagi_seg5_dl_0500D828), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(2, geo_switch_anim_state), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, unagi_seg5_dl_0500D268), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 245, 0, 0, unagi_seg5_dl_0500D468), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 494, 0, 0, unagi_seg5_dl_0500D668), GEO_OPEN_NODE(), - GEO_NODE_START(), - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_TRANSLATE_ROTATE_WITH_DL(LAYER_OPAQUE, 2000, 0, 0, 0, 0, 0, star_seg3_dl_0302B870), - GEO_TRANSLATE_ROTATE_WITH_DL(LAYER_ALPHA, 2000, 0, 0, 0, 0, 0, star_seg3_dl_0302BA18), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 475, 0, 0, unagi_seg5_dl_0500D828), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(2, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_NODE_START(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_TRANSLATE_ROTATE_WITH_DL(LAYER_OPAQUE, 2000, 0, 0, 0, 0, 0, star_seg3_dl_0302B870), + GEO_TRANSLATE_ROTATE_WITH_DL(LAYER_ALPHA, 2000, 0, 0, 0, 0, 0, star_seg3_dl_0302BA18), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -254, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, unagi_seg5_dl_0500D050), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 527, 0, 0, unagi_seg5_dl_0500DEB8), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 226, 65, 0, NULL), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -254, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, unagi_seg5_dl_0500D050), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, unagi_seg5_dl_0500E258), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, unagi_seg5_dl_0500CDD0), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_ANIMATED_PART(LAYER_ALPHA, 527, 0, 0, unagi_seg5_dl_0500DEB8), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 226, 65, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 0, 0, 0, unagi_seg5_dl_0500E258), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, unagi_seg5_dl_0500CDD0), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 527, 0, 0, unagi_seg5_dl_0500E088), + GEO_ANIMATED_PART(LAYER_OPAQUE, 527, 0, 0, unagi_seg5_dl_0500DD08), + GEO_ANIMATED_PART(LAYER_OPAQUE, 527, 0, 0, NULL), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 527, 0, 0, unagi_seg5_dl_0500E088), - GEO_ANIMATED_PART(LAYER_OPAQUE, 527, 0, 0, unagi_seg5_dl_0500DD08), - GEO_ANIMATED_PART(LAYER_OPAQUE, 527, 0, 0, NULL), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/walk_smoke/geo.inc.c b/actors/walk_smoke/geo.inc.c index 8b521062..c9b51b49 100644 --- a/actors/walk_smoke/geo.inc.c +++ b/actors/walk_smoke/geo.inc.c @@ -1,14 +1,14 @@ // 0x17000038 const GeoLayout smoke_geo[] = { - GEO_SWITCH_CASE(7, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, smoke_seg4_dl_04021718), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, smoke_seg4_dl_04021730), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, smoke_seg4_dl_04021748), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, smoke_seg4_dl_04021760), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, smoke_seg4_dl_04021778), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, smoke_seg4_dl_04021790), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, smoke_seg4_dl_040217A8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SWITCH_CASE(7, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, smoke_seg4_dl_04021718), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, smoke_seg4_dl_04021730), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, smoke_seg4_dl_04021748), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, smoke_seg4_dl_04021760), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, smoke_seg4_dl_04021778), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, smoke_seg4_dl_04021790), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, smoke_seg4_dl_040217A8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/warp_pipe/geo.inc.c b/actors/warp_pipe/geo.inc.c index b537b43f..581b2d50 100644 --- a/actors/warp_pipe/geo.inc.c +++ b/actors/warp_pipe/geo.inc.c @@ -1,9 +1,9 @@ // 0x16000388 const GeoLayout warp_pipe_geo[] = { - GEO_CULLING_RADIUS(350), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, warp_pipe_seg3_dl_03008F98), - GEO_DISPLAY_LIST(LAYER_OPAQUE, warp_pipe_seg3_dl_03009A50), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(350), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, warp_pipe_seg3_dl_03008F98), + GEO_DISPLAY_LIST(LAYER_OPAQUE, warp_pipe_seg3_dl_03009A50), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/water_bubble/geo.inc.c b/actors/water_bubble/geo.inc.c index b429edcd..318a794b 100644 --- a/actors/water_bubble/geo.inc.c +++ b/actors/water_bubble/geo.inc.c @@ -1,19 +1,19 @@ // 0x0C000308 const GeoLayout water_bomb_geo[] = { - GEO_CULLING_RADIUS(150), - GEO_OPEN_NODE(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_bubble_seg5_dl_05011000), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(150), + GEO_OPEN_NODE(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, water_bubble_seg5_dl_05011000), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0C000328 const GeoLayout water_bomb_shadow_geo[] = { - GEO_CULLING_RADIUS(150), - GEO_OPEN_NODE(), - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x64, 160), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(150), + GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x64, 160), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/water_mine/geo.inc.c b/actors/water_mine/geo.inc.c index 92497e1e..36c64a91 100644 --- a/actors/water_mine/geo.inc.c +++ b/actors/water_mine/geo.inc.c @@ -1,12 +1,12 @@ // 0x0D0002F4 const GeoLayout water_mine_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, water_mine_seg6_dl_0600D3F8), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, water_mine_seg6_dl_0600D268), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, water_mine_seg6_dl_0600D3F8), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, water_mine_seg6_dl_0600D268), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/water_ring/geo.inc.c b/actors/water_ring/geo.inc.c index 3d2b546a..e20742f1 100644 --- a/actors/water_ring/geo.inc.c +++ b/actors/water_ring/geo.inc.c @@ -1,12 +1,12 @@ // 0x0D000414 const GeoLayout water_ring_geo[] = { - GEO_SCALE(0x00, 32768), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - 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(), - GEO_END(), + GEO_SCALE(0x00, 32768), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + 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(), + GEO_END(), }; diff --git a/actors/water_splash/geo.inc.c b/actors/water_splash/geo.inc.c index 7075b114..5d7a222a 100644 --- a/actors/water_splash/geo.inc.c +++ b/actors/water_splash/geo.inc.c @@ -1,15 +1,15 @@ // 0x17000230 const GeoLayout water_splash_geo[] = { - GEO_SWITCH_CASE(8, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, water_splash_seg4_dl_04032640), - GEO_DISPLAY_LIST(LAYER_ALPHA, water_splash_seg4_dl_04032658), - GEO_DISPLAY_LIST(LAYER_ALPHA, water_splash_seg4_dl_04032670), - GEO_DISPLAY_LIST(LAYER_ALPHA, water_splash_seg4_dl_04032688), - GEO_DISPLAY_LIST(LAYER_ALPHA, water_splash_seg4_dl_040326A0), - GEO_DISPLAY_LIST(LAYER_ALPHA, water_splash_seg4_dl_040326B8), - GEO_DISPLAY_LIST(LAYER_ALPHA, water_splash_seg4_dl_040326D0), - GEO_DISPLAY_LIST(LAYER_ALPHA, water_splash_seg4_dl_040326E8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SWITCH_CASE(8, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, water_splash_seg4_dl_04032640), + GEO_DISPLAY_LIST(LAYER_ALPHA, water_splash_seg4_dl_04032658), + GEO_DISPLAY_LIST(LAYER_ALPHA, water_splash_seg4_dl_04032670), + GEO_DISPLAY_LIST(LAYER_ALPHA, water_splash_seg4_dl_04032688), + GEO_DISPLAY_LIST(LAYER_ALPHA, water_splash_seg4_dl_040326A0), + GEO_DISPLAY_LIST(LAYER_ALPHA, water_splash_seg4_dl_040326B8), + GEO_DISPLAY_LIST(LAYER_ALPHA, water_splash_seg4_dl_040326D0), + GEO_DISPLAY_LIST(LAYER_ALPHA, water_splash_seg4_dl_040326E8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/water_wave/geo.inc.c b/actors/water_wave/geo.inc.c index 6abbc0da..75923ab3 100644 --- a/actors/water_wave/geo.inc.c +++ b/actors/water_wave/geo.inc.c @@ -1,29 +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(), + 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(), + 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/white_particle/geo.inc.c b/actors/white_particle/geo.inc.c index 5a161ed5..793393ba 100644 --- a/actors/white_particle/geo.inc.c +++ b/actors/white_particle/geo.inc.c @@ -1,8 +1,8 @@ // 0x16000F98 const GeoLayout white_particle_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xB4, 50), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, white_particle_dl), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xB4, 50), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, white_particle_dl), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/whomp/geo.inc.c b/actors/whomp/geo.inc.c index c2edb69e..e848f710 100644 --- a/actors/whomp/geo.inc.c +++ b/actors/whomp/geo.inc.c @@ -1,56 +1,56 @@ // 0x0D000480 const GeoLayout whomp_geo[] = { - GEO_CULLING_RADIUS(2000), - GEO_OPEN_NODE(), - GEO_TRANSLATE_NODE(0x00, 0, 0, -50), - GEO_OPEN_NODE(), - GEO_SHADOW(0x01 + SHADOW_RECTANGLE_HARDCODED_OFFSET, 0xB4, 0), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), + GEO_CULLING_RADIUS(2000), + GEO_OPEN_NODE(), + GEO_TRANSLATE_NODE(0x00, 0, 0, -50), + GEO_OPEN_NODE(), + GEO_SHADOW(0x01 + SHADOW_RECTANGLE_HARDCODED_OFFSET, 0xB4, 0), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, whomp_seg6_dl_0601F5E0), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -12, 490, -5, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, whomp_seg6_dl_0601FEA8), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -18, -479, -5, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, whomp_seg6_dl_06020038), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 1075, 570, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, whomp_seg6_dl_0601F880), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, whomp_seg6_dl_0601F5E0), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 400, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, whomp_seg6_dl_0601FBC0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -12, 490, -5, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, whomp_seg6_dl_0601FEA8), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -18, -479, -5, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, whomp_seg6_dl_06020038), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 1075, 570, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, whomp_seg6_dl_0601F880), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 400, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, whomp_seg6_dl_0601FBC0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 1068, -574, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, whomp_seg6_dl_0601FAE8), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 400, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, whomp_seg6_dl_0601FCA8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 1068, -574, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, whomp_seg6_dl_0601FAE8), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 400, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, whomp_seg6_dl_0601FCA8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/wiggler_body/geo.inc.c b/actors/wiggler_body/geo.inc.c index a55a1f93..56e55e5c 100644 --- a/actors/wiggler_body/geo.inc.c +++ b/actors/wiggler_body/geo.inc.c @@ -2,41 +2,41 @@ const GeoLayout wiggler_body_geo[] = { GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 0x64), GEO_OPEN_NODE(), - GEO_SCALE(0, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, NULL), + GEO_SCALE(0, 16384), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), + GEO_ANIMATED_PART(1, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, wiggler_seg5_dl_0500C278), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, -31, 0, 51, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, wiggler_seg5_dl_0500BE98), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 39, 0, 0, wiggler_seg5_dl_0500BE10), + GEO_ANIMATED_PART(1, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 41, 0, 0, wiggler_seg5_dl_0500BCB8), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, wiggler_seg5_dl_0500C278), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(1, -31, 0, -49, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 0, 0, 0, wiggler_seg5_dl_0500C100), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 39, 0, 0, wiggler_seg5_dl_0500C078), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(1, 41, 0, 0, wiggler_seg5_dl_0500BF20), + GEO_ANIMATED_PART(1, -31, 0, 51, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 0, 0, 0, wiggler_seg5_dl_0500BE98), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 39, 0, 0, wiggler_seg5_dl_0500BE10), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 41, 0, 0, wiggler_seg5_dl_0500BCB8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(1, -31, 0, -49, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 0, 0, 0, wiggler_seg5_dl_0500C100), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 39, 0, 0, wiggler_seg5_dl_0500C078), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(1, 41, 0, 0, wiggler_seg5_dl_0500BF20), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_END(), }; diff --git a/actors/wiggler_head/geo.inc.c b/actors/wiggler_head/geo.inc.c index 320a824e..5346f5ce 100644 --- a/actors/wiggler_head/geo.inc.c +++ b/actors/wiggler_head/geo.inc.c @@ -1,62 +1,62 @@ // 0x0C000030 const GeoLayout wiggler_head_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0x96, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, wiggler_seg5_dl_0500C278), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, wiggler_seg5_dl_0500C278), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 157, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, wiggler_seg5_dl_0500E678), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 143, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, wiggler_seg5_dl_0500E1D8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 143, 0, 0, NULL), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_ALPHA, 157, 0, 0, wiggler_seg5_dl_0500E518), + GEO_ANIMATED_PART(LAYER_ALPHA, 157, 0, 0, wiggler_seg5_dl_0500E430), + GEO_ANIMATED_PART(LAYER_ALPHA, 157, 0, 0, wiggler_seg5_dl_0500E2F8), + GEO_ANIMATED_PART(LAYER_OPAQUE, -16, 23, 51, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, wiggler_seg5_dl_0500DDF8), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 39, 0, 0, wiggler_seg5_dl_0500DD70), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 41, 0, 0, wiggler_seg5_dl_0500DC18), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -16, 23, -49, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, wiggler_seg5_dl_0500E060), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 39, 0, 0, wiggler_seg5_dl_0500DFD8), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 41, 0, 0, wiggler_seg5_dl_0500DE80), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 157, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, wiggler_seg5_dl_0500E678), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 143, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, wiggler_seg5_dl_0500E1D8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 143, 0, 0, NULL), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_ALPHA, 157, 0, 0, wiggler_seg5_dl_0500E518), - GEO_ANIMATED_PART(LAYER_ALPHA, 157, 0, 0, wiggler_seg5_dl_0500E430), - GEO_ANIMATED_PART(LAYER_ALPHA, 157, 0, 0, wiggler_seg5_dl_0500E2F8), - GEO_ANIMATED_PART(LAYER_OPAQUE, -16, 23, 51, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, wiggler_seg5_dl_0500DDF8), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 39, 0, 0, wiggler_seg5_dl_0500DD70), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 41, 0, 0, wiggler_seg5_dl_0500DC18), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -16, 23, -49, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, wiggler_seg5_dl_0500E060), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 39, 0, 0, wiggler_seg5_dl_0500DFD8), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 41, 0, 0, wiggler_seg5_dl_0500DE80), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/wooden_signpost/geo.inc.c b/actors/wooden_signpost/geo.inc.c index 5b4e1b31..08d2886a 100644 --- a/actors/wooden_signpost/geo.inc.c +++ b/actors/wooden_signpost/geo.inc.c @@ -1,12 +1,12 @@ // 0x16000FB4 const GeoLayout wooden_signpost_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 60), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wooden_signpost_seg3_dl_0302DA48), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wooden_signpost_seg3_dl_0302DD08), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 60), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wooden_signpost_seg3_dl_0302DA48), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wooden_signpost_seg3_dl_0302DD08), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/yellow_sphere/geo.inc.c b/actors/yellow_sphere/geo.inc.c index 67252e30..057f87bd 100644 --- a/actors/yellow_sphere/geo.inc.c +++ b/actors/yellow_sphere/geo.inc.c @@ -1,11 +1,11 @@ // 0x0D0000B0 const GeoLayout bowser_1_yellow_sphere_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, yellow_sphere_seg6_dl_0601F3C0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, yellow_sphere_seg6_dl_0601F3C0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/yellow_sphere_small/geo.inc.c b/actors/yellow_sphere_small/geo.inc.c index 01142c04..22e71aca 100644 --- a/actors/yellow_sphere_small/geo.inc.c +++ b/actors/yellow_sphere_small/geo.inc.c @@ -1,8 +1,8 @@ // 0x0C000000 const GeoLayout yellow_sphere_geo[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, yellow_sphere_seg5_dl_050008C8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, yellow_sphere_seg5_dl_050008C8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/yoshi/geo.inc.c b/actors/yoshi/geo.inc.c index 86252d55..6b9f6fa2 100644 --- a/actors/yoshi/geo.inc.c +++ b/actors/yoshi/geo.inc.c @@ -1,77 +1,77 @@ // 0x0C000468 const GeoLayout yoshi_geo[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 100), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, yoshi_seg5_dl_05022608), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 100, 0, 0, yoshi_seg5_dl_05022408), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 222, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(2, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, yoshi_seg5_dl_0501D970), - GEO_DISPLAY_LIST(LAYER_OPAQUE, yoshi_seg5_dl_0501D998), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 76, 49, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, yoshi_seg5_dl_050212B0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 51, 55, 97, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, yoshi_seg5_dl_05021678), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 74, 0, 0, yoshi_seg5_dl_050215D8), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, yoshi_seg5_dl_05022608), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 100, 0, 0, yoshi_seg5_dl_05022408), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 222, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 69, 0, 0, yoshi_seg5_dl_05021490), + GEO_SWITCH_CASE(2, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, yoshi_seg5_dl_0501D970), + GEO_DISPLAY_LIST(LAYER_OPAQUE, yoshi_seg5_dl_0501D998), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 51, 55, -97, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, yoshi_seg5_dl_05021900), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 74, 0, 0, yoshi_seg5_dl_05021860), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 69, 0, 0, yoshi_seg5_dl_05021718), + GEO_ANIMATED_PART(LAYER_OPAQUE, 76, 49, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, yoshi_seg5_dl_050212B0), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -1, 27, 95, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, yoshi_seg5_dl_05021CD8), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 100, 0, 0, yoshi_seg5_dl_05021B90), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 95, 0, 0, yoshi_seg5_dl_050219A0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -89, -62, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, yoshi_seg5_dl_05021E38), - GEO_CLOSE_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, -1, 27, -95, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, yoshi_seg5_dl_050222A8), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 100, 0, 0, yoshi_seg5_dl_05022160), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 95, 0, 0, yoshi_seg5_dl_05021F70), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 51, 55, 97, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, yoshi_seg5_dl_05021678), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 74, 0, 0, yoshi_seg5_dl_050215D8), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 69, 0, 0, yoshi_seg5_dl_05021490), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 51, 55, -97, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, yoshi_seg5_dl_05021900), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 74, 0, 0, yoshi_seg5_dl_05021860), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 69, 0, 0, yoshi_seg5_dl_05021718), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -1, 27, 95, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, yoshi_seg5_dl_05021CD8), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 100, 0, 0, yoshi_seg5_dl_05021B90), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 95, 0, 0, yoshi_seg5_dl_050219A0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -89, -62, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, yoshi_seg5_dl_05021E38), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, -1, 27, -95, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, yoshi_seg5_dl_050222A8), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 100, 0, 0, yoshi_seg5_dl_05022160), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 95, 0, 0, yoshi_seg5_dl_05021F70), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/actors/yoshi_egg/geo.inc.c b/actors/yoshi_egg/geo.inc.c index c1c5bf14..0f2da79f 100644 --- a/actors/yoshi_egg/geo.inc.c +++ b/actors/yoshi_egg/geo.inc.c @@ -1,18 +1,18 @@ // 0x0C0001E4 const GeoLayout yoshi_egg_geo[] = { - GEO_SCALE(0x00, 16384), - GEO_OPEN_NODE(), - GEO_SWITCH_CASE(8, geo_switch_anim_state), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, yoshi_egg_seg5_dl_050098C8), - GEO_DISPLAY_LIST(LAYER_ALPHA, yoshi_egg_seg5_dl_050098B0), - GEO_DISPLAY_LIST(LAYER_ALPHA, yoshi_egg_seg5_dl_05009898), - GEO_DISPLAY_LIST(LAYER_ALPHA, yoshi_egg_seg5_dl_05009880), - GEO_DISPLAY_LIST(LAYER_ALPHA, yoshi_egg_seg5_dl_05009868), - GEO_DISPLAY_LIST(LAYER_ALPHA, yoshi_egg_seg5_dl_05009850), - GEO_DISPLAY_LIST(LAYER_ALPHA, yoshi_egg_seg5_dl_05009838), - GEO_DISPLAY_LIST(LAYER_ALPHA, yoshi_egg_seg5_dl_05009820), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(8, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, yoshi_egg_seg5_dl_050098C8), + GEO_DISPLAY_LIST(LAYER_ALPHA, yoshi_egg_seg5_dl_050098B0), + GEO_DISPLAY_LIST(LAYER_ALPHA, yoshi_egg_seg5_dl_05009898), + GEO_DISPLAY_LIST(LAYER_ALPHA, yoshi_egg_seg5_dl_05009880), + GEO_DISPLAY_LIST(LAYER_ALPHA, yoshi_egg_seg5_dl_05009868), + GEO_DISPLAY_LIST(LAYER_ALPHA, yoshi_egg_seg5_dl_05009850), + GEO_DISPLAY_LIST(LAYER_ALPHA, yoshi_egg_seg5_dl_05009838), + GEO_DISPLAY_LIST(LAYER_ALPHA, yoshi_egg_seg5_dl_05009820), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/asm/boot.s b/asm/boot.s index 17a0ace7..381e19ba 100644 --- a/asm/boot.s +++ b/asm/boot.s @@ -1,10 +1,26 @@ // assembler directives .set noat // allow manual use of $at .set noreorder // don't insert nops after branches -.set gp=64 #include "macros.inc" +.equ EXCEPTION_TLB_MISS, 0x80000000 +.equ SP_DMEM, 0xA4000000 +.equ SP_IMEM, 0xA4001000 +.equ MI_MODE_REG, 0xA4300000 +.equ RI_MODE_REG, 0xA4700000 + +#ifdef VERSION_CN +.macro cn_li a b + li \a, \b +.endm +#else +.macro cn_li a b + lui \a, %hi(\b) + addiu \a, \a, %lo(\b) +.endm +#endif + // 0xA0000000-0xBFFFFFFF: KSEG1 direct map non-cache mirror of 0x00000000 // 0xA4000000-0xA4000FFF: RSP DMEM @@ -19,8 +35,7 @@ glabel ipl3_entry // 0xA4000040 mtc0 $zero, $13 mtc0 $zero, $9 mtc0 $zero, $11 - lui $t0, %hi(RI_MODE_REG) - addiu $t0, %lo(RI_MODE_REG) + cn_li $t0, RI_MODE_REG lw $t1, 0xc($t0) bnez $t1, .LA4000410 nop @@ -30,15 +45,13 @@ glabel ipl3_entry // 0xA4000040 sw $s5, 8($sp) sw $s6, 0xc($sp) sw $s7, 0x10($sp) - lui $t0, %hi(RI_MODE_REG) - addiu $t0, %lo(RI_MODE_REG) + cn_li $t0, RI_MODE_REG lui $t2, (0xa3f80000 >> 16) lui $t3, (0xa3f00000 >> 16) - lui $t4, %hi(MI_MODE_REG) - addiu $t4, %lo(MI_MODE_REG) + cn_li $t4, MI_MODE_REG ori $t1, $zero, 64 sw $t1, 4($t0) - li $s1, 8000 + li $s1, 8000 .LA400009C: nop addi $s1, $s1, -1 @@ -71,20 +84,19 @@ glabel ipl3_entry // 0xA4000040 move $t5, $zero move $t6, $zero lui $t7, (0xA3F00000 >> 16) - move $t8, $zero + move $t8, $zero lui $t9, (0xA3F00000 >> 16) lui $s6, (0xA0000000 >> 16) - move $s7, $zero + move $s7, $zero lui $a2, (0xA3F00000 >> 16) lui $a3, (0xA0000000 >> 16) - move $s2, $zero + move $s2, $zero lui $s4, (0xA0000000 >> 16) addiu $sp, $sp, -0x48 - move $fp, $sp + move $fp, $sp lui $s0, %hi(MI_VERSION_REG) lw $s0, %lo(MI_VERSION_REG)($s0) - lui $s1, (0x01010101 >> 16) - addiu $s1, (0x01010101 & 0xFFFF) + cn_li $s1, 0x01010101 bne $s0, $s1, .LA4000160 nop li $s0, 512 @@ -161,12 +173,16 @@ glabel ipl3_entry // 0xA4000040 bnez $t0, .LA4000168 nop .LA400025C: +#ifdef VERSION_CN + li $t0, 0xc0000000 +#else li $t0, 0xc4000000 +#endif sw $t0, 0xc($t2) li $t0, 0x80000000 sw $t0, 0x4($t2) - move $sp, $fp - move $v1, $zero + move $sp, $fp + move $v1, $zero .LA4000274: lw $t1, 4($sp) lui $t0, 0xb009 @@ -245,7 +261,7 @@ glabel ipl3_entry // 0xA4000040 ori $t1, (0x0FFFFFFF & 0xFFFF) and $s6, $s6, $t1 sw $s6, 0x18($t0) - move $sp, $fp + move $sp, $fp addiu $sp, $sp, 0x48 lw $s3, ($sp) lw $s4, 4($sp) @@ -253,8 +269,7 @@ glabel ipl3_entry // 0xA4000040 lw $s6, 0xc($sp) lw $s7, 0x10($sp) addiu $sp, $sp, 0x18 - lui $t0, %hi(EXCEPTION_TLB_MISS) - addiu $t0, $t0, %lo(EXCEPTION_TLB_MISS) + cn_li $t0, EXCEPTION_TLB_MISS addiu $t1, $t0, 0x4000 addiu $t1, $t1, -0x20 mtc0 $zero, $28 @@ -264,8 +279,7 @@ glabel ipl3_entry // 0xA4000040 sltu $at, $t0, $t1 bnez $at, .LA40003D8 addiu $t0, $t0, 0x20 - lui $t0, %hi(EXCEPTION_TLB_MISS) - addiu $t0, %lo(EXCEPTION_TLB_MISS) + cn_li $t0, EXCEPTION_TLB_MISS addiu $t1, $t0, 0x2000 addiu $t1, $t1, -0x10 .LA40003F8: @@ -276,8 +290,7 @@ glabel ipl3_entry // 0xA4000040 b .LA4000458 nop .LA4000410: - lui $t0, %hi(EXCEPTION_TLB_MISS) - addiu $t0, %lo(EXCEPTION_TLB_MISS) + cn_li $t0, EXCEPTION_TLB_MISS addiu $t1, $t0, 0x4000 addiu $t1, $t1, -0x20 mtc0 $zero, $28 @@ -287,8 +300,7 @@ glabel ipl3_entry // 0xA4000040 sltu $at, $t0, $t1 bnez $at, .LA4000428 addiu $t0, $t0, 0x20 - lui $t0, %hi(EXCEPTION_TLB_MISS) - addiu $t0, %lo(EXCEPTION_TLB_MISS) + cn_li $t0, EXCEPTION_TLB_MISS addiu $t1, $t0, 0x2000 addiu $t1, $t1, -0x10 .LA4000448: @@ -297,8 +309,45 @@ glabel ipl3_entry // 0xA4000040 bnez $at, .LA4000448 addiu $t0, $t0, 0x10 .LA4000458: - lui $t2, %hi(SP_DMEM) - addiu $t2, $t2, %lo(SP_DMEM) +#ifdef VERSION_CN + la $t0, D_CN_0400049C + lui $t1, 0xf + ori $t1, $t1, 0xffff + and $t0, $t0, $t1 + lui $t2, 0xa400 + lui $t3, 0xfff0 + and $t2, $t2, $t3 + or $t0, $t0, $t2 + la $t3, D_CN_0400074C + and $t3, $t3, $t1 + or $t3, $t3, $t2 + lui $t1, 0xa000 +.LA4000474: + lw $t5, ($t0) + sw $t5, ($t1) + addiu $t0, $t0, 4 + addiu $t1, $t1, 4 + sltu $at, $t0, $t3 + bnez $at, .LA4000474 + nop + lui $t4, 0x8000 + jr $t4 + nop + lui $t3, 0xb000 + lui $t2, 0x1fff + ori $t2, $t2, 0xffff + lw $t1, 8($t3) + and $t1, $t1, $t2 + lui $at, 0xa460 + sw $t1, ($at) +.LA40004B8: + lui $t0, 0xa460 + lw $t0, 0x10($t0) + andi $t0, $t0, 2 + bnez $t0, .LA40004B8 + nop +#else + cn_li $t2, SP_DMEM lui $t3, 0xfff0 lui $t1, 0x0010 and $t2, $t2, $t3 @@ -320,8 +369,7 @@ glabel ipl3_entry // 0xA4000040 addiu $t1, $t1, 4 bnez $at, .LA4000498 sw $t5, -4($t1) - lui $t4, %hi(EXCEPTION_TLB_MISS) - addiu $t4, %lo(EXCEPTION_TLB_MISS) + cn_li $t4, EXCEPTION_TLB_MISS jr $t4 nop lui $t3, %hi(D_B0000008) @@ -337,13 +385,13 @@ glabel ipl3_entry // 0xA4000040 andi $t0, $t0, 2 bnezl $t0, .LA40004D0 lui $t0, %hi(PI_STATUS_REG) +#endif li $t0, 0x1000 add $t0, $t0, $t3 and $t0, $t0, $t2 lui $at, %hi(PI_CART_ADDR_REG) sw $t0, %lo(PI_CART_ADDR_REG)($at) - lui $t2, 0x0010 - addiu $t2, 0xFFFF + cn_li $t2, 0x000FFFFF lui $at, %hi(PI_WR_LEN_REG) sw $t2, %lo(PI_WR_LEN_REG)($at) @@ -381,6 +429,104 @@ glabel ipl3_entry // 0xA4000040 andi $t3, $t3, 0x1 bnez $t3, .LA4000514 nop +#ifdef VERSION_CN + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop +#endif +#ifdef VERSION_CN + lui $t1, %hi(SP_PC) + lw $t1, %lo(SP_PC)($t1) + beqz $t1, .LA4000698 + nop + addiu $t2, $zero, 0x41 + lui $at, %hi(SP_STATUS_REG) + sw $t2, %lo(SP_STATUS_REG)($at) + lui $at, %hi(SP_PC) + sw $zero, %lo(SP_PC)($at) +.LA4000698: + li $t3, 0x00AAAAAE + lui $at, %hi(SP_STATUS_REG) + sw $t3, %lo(SP_STATUS_REG)($at) + li $t0, 1365 + lui $at, %hi(MI_INTR_MASK_REG) + sw $t0, %lo(MI_INTR_MASK_REG)($at) + lui $at, %hi(SI_STATUS_REG) + sw $zero, %lo(SI_STATUS_REG)($at) + lui $at, %hi(AI_STATUS_REG) + sw $zero, %lo(AI_STATUS_REG)($at) + li $t1, 2048 + lui $at, %hi(MI_MODE_REG) + sw $t1, %lo(MI_MODE_REG)($at) + li $t1, 2 + lui $at, %hi(PI_STATUS_REG) + sw $t1, %lo(PI_STATUS_REG)($at) + lui $t0, (0xA0000300 >> 16) + ori $t0, (0xA0000300 & 0xFFFF) + sw $s4, ($t0) + sw $s3, 4($t0) +#else lui $t3, %hi(D_B0000008) lw $a0, %lo(D_B0000008)($t3) move $a1, $s6 @@ -463,8 +609,7 @@ func_A4000690: lui $at, %hi(SP_PC) sw $zero, %lo(SP_PC)($at) .LA40006BC: - lui $t3, (0x00AAAAAE >> 16) - ori $t3, (0x00AAAAAE & 0xFFFF) + li $t3, 0x00AAAAAE lui $at, %hi(SP_STATUS_REG) sw $t3, %lo(SP_STATUS_REG)($at) lui $at, %hi(MI_INTR_MASK_REG) @@ -483,32 +628,53 @@ func_A4000690: ori $t0, (0xA0000300 & 0xFFFF) sw $t1, %lo(PI_STATUS_REG)($at) sw $s7, 0x14($t0) +#endif sw $s5, 0xc($t0) +#ifdef VERSION_CN + beqz $s3, .LA4000728 + sw $s7, 0x14($t0) + b .LA4000730 + lui $t1, 0xa600 +#else sw $s3, 0x4($t0) beqz $s3, .LA4000728 sw $s4, ($t0) lui $t1, 0xa600 b .LA4000730 addiu $t1, $t1, 0 +#endif .LA4000728: - lui $t1, 0xb000 - addiu $t1, $t1, 0 + cn_li $t1, 0xb0000000 .LA4000730: sw $t1, 0x8($t0) - lui $t0, %hi(SP_DMEM) - addiu $t0, %lo(SP_DMEM) + cn_li $t0, SP_DMEM addi $t1, $t0, 0x1000 +#ifdef VERSION_CN +.LA4000710: + sw $zero, ($t0) + addiu $t0, $t0, 4 + bne $t0, $t1, .LA4000710 + nop +#else .LA4000740: addiu $t0, $t0, 4 bne $t0, $t1, .LA4000740 sw $zero, -4($t0) - lui $t0, %hi(SP_IMEM) - addiu $t0, %lo(SP_IMEM) +#endif + cn_li $t0, SP_IMEM addi $t1, $t0, 0x1000 +#ifdef VERSION_CN +.LA400072C: + sw $zero, ($t0) + addiu $t0, $t0, 4 + bne $t0, $t1, .LA400072C + nop +#else .LA4000758: addiu $t0, $t0, 4 bne $t0, $t1, .LA4000758 sw $zero, -4($t0) +#endif lui $t3, %hi(D_B0000008) lw $t1, %lo(D_B0000008)($t3) jr $t1 @@ -517,10 +683,12 @@ func_A4000690: func_A4000778: addiu $sp, $sp, -0xa0 +#ifndef VERSION_CN sw $s0, 0x40($sp) sw $s1, 0x44($sp) move $s1, $zero move $s0, $zero +#endif sw $v0, ($sp) sw $v1, 4($sp) sw $a0, 8($sp) @@ -537,6 +705,10 @@ func_A4000778: sw $t7, 0x34($sp) sw $t8, 0x38($sp) sw $t9, 0x3c($sp) +#ifdef VERSION_CN + sw $s0, 0x40($sp) + sw $s1, 0x44($sp) +#endif sw $s2, 0x48($sp) sw $s3, 0x4c($sp) sw $s4, 0x50($sp) @@ -545,19 +717,34 @@ func_A4000778: sw $s7, 0x5c($sp) sw $fp, 0x60($sp) sw $ra, 0x64($sp) +#ifdef VERSION_CN + move $s0, $zero + move $s1, $zero +#endif .LA40007EC: jal func_A4000880 nop addiu $s0, $s0, 1 +#ifdef VERSION_CN + addu $s1, $s1, $v0 +#endif slti $t1, $s0, 4 bnez $t1, .LA40007EC +#ifdef VERSION_CN + nop +#else addu $s1, $s1, $v0 +#endif srl $a0, $s1, 2 jal func_A4000A40 li $a1, 1 +#ifdef VERSION_CN + srl $v0, $s1, 2 +#else lw $ra, 0x64($sp) srl $v0, $s1, 2 lw $s1, 0x44($sp) +#endif lw $v1, 4($sp) lw $a0, 8($sp) lw $a1, 0xc($sp) @@ -574,6 +761,9 @@ func_A4000778: lw $t8, 0x38($sp) lw $t9, 0x3c($sp) lw $s0, 0x40($sp) +#ifdef VERSION_CN + lw $s1, 0x44($sp) +#endif lw $s2, 0x48($sp) lw $s3, 0x4c($sp) lw $s4, 0x50($sp) @@ -581,6 +771,9 @@ func_A4000778: lw $s6, 0x58($sp) lw $s7, 0x5c($sp) lw $fp, 0x60($sp) +#ifdef VERSION_CN + lw $ra, 0x64($sp) +#endif jr $ra addiu $sp, $sp, 0xa0 @@ -592,22 +785,46 @@ func_A4000880: move $t4, $zero .LA4000894: slti $k0, $t4, 0x40 +#ifdef VERSION_CN + beqz $k0, .LA40008D4 + nop +#else beql $k0, $zero, .LA40008FC move $v0, $zero +#endif jal func_A400090C move $a0, $t4 +#ifdef VERSION_CN + blez $v0, .LA40008CC + nop +#else blezl $v0, .LA40008CC slti $k0, $t1, 0x50 +#endif subu $k0, $v0, $t1 multu $k0, $t4 +#ifndef VERSION_CN move $t1, $v0 +#endif mflo $k0 addu $t3, $t3, $k0 +#ifdef VERSION_CN + move $t1, $v0 +#else nop slti $k0, $t1, 0x50 +#endif .LA40008CC: +#ifdef VERSION_CN + addiu $t4, $t4, 1 + slti $k0, $t1, 0x50 +#endif bnez $k0, .LA4000894 +#ifdef VERSION_CN + nop +#else addiu $t4, $t4, 1 +#endif sll $a0, $t3, 2 subu $a0, $a0, $t3 sll $a0, $a0, 2 @@ -615,15 +832,27 @@ func_A4000880: sll $a0, $a0, 1 jal func_A4000980 addiu $a0, $a0, -0x370 +#ifdef VERSION_CN + b .LA40008FC + nop +.LA40008D4: + move $v0, $zero +#else b .LA4000900 lw $ra, 0x1c($sp) move $v0, $zero +#endif .LA40008FC: lw $ra, 0x1c($sp) .LA4000900: +#ifdef VERSION_CN + jr $ra + addiu $sp, $sp, 0x20 +#else addiu $sp, $sp, 0x20 jr $ra nop +#endif func_A400090C: addiu $sp, $sp, -0x28 @@ -632,7 +861,16 @@ func_A400090C: jal func_A4000A40 li $a1, 2 move $fp, $zero +.LA40008FC_cn: li $k0, -1 +#ifdef VERSION_CN + sw $k0, ($s4) + sw $k0, ($s4) + sw $k0, 4($s4) + lw $v1, 4($s4) + srl $v1, $v1, 0x10 + move $gp, $zero +#else .LA4000928: sw $k0, 4($s4) lw $v1, 4($s4) @@ -640,42 +878,82 @@ func_A400090C: sw $k0, ($s4) move $gp, $zero srl $v1, $v1, 0x10 +#endif .LA4000940: andi $k0, $v1, 1 +#ifdef VERSION_CN + beqz $k0, .LA4000928_cn + nop +#else beql $k0, $zero, .LA4000954 addiu $gp, $gp, 1 +#endif addiu $v0, $v0, 1 +#ifdef VERSION_CN +.LA4000928_cn: + srl $v1, $v1, 1 +#endif addiu $gp, $gp, 1 .LA4000954: slti $k0, $gp, 8 bnez $k0, .LA4000940 +#ifdef VERSION_CN + nop +#else srl $v1, $v1, 1 +#endif addiu $fp, $fp, 1 slti $k0, $fp, 0xa +#ifdef VERSION_CN + bnez $k0, .LA40008FC_cn + nop + lw $ra, 0x1c($sp) + jr $ra + addiu $sp, $sp, 0x28 +#else bnezl $k0, .LA4000928 li $k0, -1 lw $ra, 0x1c($sp) addiu $sp, $sp, 0x28 jr $ra nop +#endif func_A4000980: addiu $sp, $sp, -0x28 sw $ra, 0x1c($sp) sw $a0, 0x20($sp) +#ifndef VERSION_CN sb $zero, 0x27($sp) +#endif move $t0, $zero move $t2, $zero li $t5, 51200 +#ifdef VERSION_CN + sb $zero, 0x27($sp) +#endif move $t6, $zero +#ifdef VERSION_CN +.LA4000978: +#endif slti $k0, $t6, 0x40 .LA40009A4: +#ifdef VERSION_CN + bnez $k0, .LA400098C_cn + nop +#else bnezl $k0, .LA40009B8 move $a0, $t6 +#endif b .LA4000A30 - move $v0, $zero - move $a0, $t6 + move $v0, $zero +#ifdef VERSION_CN +.LA400098C_cn: +#endif + move $a0, $t6 +#ifndef VERSION_CN .LA40009B8: +#endif jal func_A4000A40 li $a1, 1 jal func_A4000AD0 @@ -684,6 +962,37 @@ func_A4000980: addiu $a0, $sp, 0x27 lbu $k0, 0x27($sp) li $k1, 800 +#ifdef VERSION_CN + multu $k0, $k1 + mflo $t0 + lw $a0, 0x20($sp) + subu $k0, $t0, $a0 + bgez $k0, .LA40009CC + nop + subu $k0, $a0, $t0 +.LA40009CC: + slt $k1, $k0, $t5 + beqz $k1, .LA40009E0 + nop + move $t5, $k0 + move $t2, $t6 +.LA40009E0: + lw $a0, 0x20($sp) + slt $k1, $t0, $a0 + beqz $k1, .LA4000A00 + nop + addiu $t6, $t6, 1 + slti $k1, $t6, 0x41 + bnez $k1, .LA4000978 + nop +.LA4000A00: + addu $v0, $t2, $t6 + srl $v0, $v0, 1 +.LA4000A30: + lw $ra, 0x1c($sp) + jr $ra + addiu $sp, $sp, 0x28 +#else lw $a0, 0x20($sp) multu $k0, $k1 mflo $t0 @@ -714,15 +1023,26 @@ func_A4000980: addiu $sp, $sp, 0x28 jr $ra nop +#endif func_A4000A40: addiu $sp, $sp, -0x28 +#ifdef VERSION_CN + sw $ra, 0x1c($sp) + lui $t7, 0x4200 + andi $a0, $a0, 0xff + xori $a0, $a0, 0x3f + li $k1, 1 + bne $a1, $k1, .LA4000A64 + nop +#else andi $a0, $a0, 0xff li $k1, 1 xori $a0, $a0, 0x3f sw $ra, 0x1c($sp) bne $a1, $k1, .LA4000A64 lui $t7, 0x4600 +#endif lui $k0, 0x8000 or $t7, $t7, $k0 .LA4000A64: @@ -744,31 +1064,53 @@ func_A4000A40: andi $k0, $a0, 0x20 sll $k0, $k0, 0x12 or $t7, $t7, $k0 +#ifdef VERSION_CN + sw $t7, ($s5) + li $k1, 1 + bne $a1, $k1, .LA4000AC0 + nop +#else li $k1, 1 bne $a1, $k1, .LA4000AC0 sw $t7, ($s5) +#endif lui $k0, %hi(MI_MODE_REG) sw $zero, %lo(MI_MODE_REG)($k0) .LA4000AC0: lw $ra, 0x1c($sp) +#ifdef VERSION_CN + jr $ra + addiu $sp, $sp, 0x28 +#else addiu $sp, $sp, 0x28 jr $ra nop +#endif func_A4000AD0: addiu $sp, $sp, -0x28 sw $ra, 0x1c($sp) +#ifdef VERSION_CN + move $fp, $zero +#endif li $k0, 0x2000 lui $k1, %hi(MI_MODE_REG) sw $k0, %lo(MI_MODE_REG)($k1) +#ifndef VERSION_CN move $fp, $zero +#endif lw $fp, ($s5) li $k0, 0x1000 sw $k0, %lo(MI_MODE_REG)($k1) +#ifdef VERSION_CN + move $k0, $zero +#endif li $k1, 0x40 and $k1, $k1, $fp srl $k1, $k1, 6 +#ifndef VERSION_CN move $k0, $zero +#endif or $k0, $k0, $k1 li $k1, 0x4000 and $k1, $k1, $fp @@ -792,61 +1134,13 @@ func_A4000AD0: or $k0, $k0, $k1 sb $k0, ($a0) lw $ra, 0x1c($sp) +#ifdef VERSION_CN + jr $ra + addiu $sp, $sp, 0x28 +.fill 0x30 +#else addiu $sp, $sp, 0x28 jr $ra nop nop - -// 0xA4000B70-0xA4000FFF: IPL3 Font -glabel ipl3_font -.incbin "textures/ipl3_raw/ipl3_font_00.ia1" -.incbin "textures/ipl3_raw/ipl3_font_01.ia1" -.incbin "textures/ipl3_raw/ipl3_font_02.ia1" -.incbin "textures/ipl3_raw/ipl3_font_03.ia1" -.incbin "textures/ipl3_raw/ipl3_font_04.ia1" -.incbin "textures/ipl3_raw/ipl3_font_05.ia1" -.incbin "textures/ipl3_raw/ipl3_font_06.ia1" -.incbin "textures/ipl3_raw/ipl3_font_07.ia1" -.incbin "textures/ipl3_raw/ipl3_font_08.ia1" -.incbin "textures/ipl3_raw/ipl3_font_09.ia1" -.incbin "textures/ipl3_raw/ipl3_font_10.ia1" -.incbin "textures/ipl3_raw/ipl3_font_11.ia1" -.incbin "textures/ipl3_raw/ipl3_font_12.ia1" -.incbin "textures/ipl3_raw/ipl3_font_13.ia1" -.incbin "textures/ipl3_raw/ipl3_font_14.ia1" -.incbin "textures/ipl3_raw/ipl3_font_15.ia1" -.incbin "textures/ipl3_raw/ipl3_font_16.ia1" -.incbin "textures/ipl3_raw/ipl3_font_17.ia1" -.incbin "textures/ipl3_raw/ipl3_font_18.ia1" -.incbin "textures/ipl3_raw/ipl3_font_19.ia1" -.incbin "textures/ipl3_raw/ipl3_font_20.ia1" -.incbin "textures/ipl3_raw/ipl3_font_21.ia1" -.incbin "textures/ipl3_raw/ipl3_font_22.ia1" -.incbin "textures/ipl3_raw/ipl3_font_23.ia1" -.incbin "textures/ipl3_raw/ipl3_font_24.ia1" -.incbin "textures/ipl3_raw/ipl3_font_25.ia1" -.incbin "textures/ipl3_raw/ipl3_font_26.ia1" -.incbin "textures/ipl3_raw/ipl3_font_27.ia1" -.incbin "textures/ipl3_raw/ipl3_font_28.ia1" -.incbin "textures/ipl3_raw/ipl3_font_29.ia1" -.incbin "textures/ipl3_raw/ipl3_font_30.ia1" -.incbin "textures/ipl3_raw/ipl3_font_31.ia1" -.incbin "textures/ipl3_raw/ipl3_font_32.ia1" -.incbin "textures/ipl3_raw/ipl3_font_33.ia1" -.incbin "textures/ipl3_raw/ipl3_font_34.ia1" -.incbin "textures/ipl3_raw/ipl3_font_35.ia1" -.incbin "textures/ipl3_raw/ipl3_font_36.ia1" -.incbin "textures/ipl3_raw/ipl3_font_37.ia1" -.incbin "textures/ipl3_raw/ipl3_font_38.ia1" -.incbin "textures/ipl3_raw/ipl3_font_39.ia1" -.incbin "textures/ipl3_raw/ipl3_font_40.ia1" -.incbin "textures/ipl3_raw/ipl3_font_41.ia1" -.incbin "textures/ipl3_raw/ipl3_font_42.ia1" -.incbin "textures/ipl3_raw/ipl3_font_43.ia1" -.incbin "textures/ipl3_raw/ipl3_font_44.ia1" -.incbin "textures/ipl3_raw/ipl3_font_45.ia1" -.incbin "textures/ipl3_raw/ipl3_font_46.ia1" -.incbin "textures/ipl3_raw/ipl3_font_47.ia1" -.incbin "textures/ipl3_raw/ipl3_font_48.ia1" -.incbin "textures/ipl3_raw/ipl3_font_49.ia1" -.fill 0x12 +#endif diff --git a/asm/decompress.s b/asm/decompress.s index 4c1733e4..7a90c25b 100644 --- a/asm/decompress.s +++ b/asm/decompress.s @@ -1,7 +1,6 @@ // assembler directives .set noat // allow manual use of $at .set noreorder // don't insert nops after branches -.set gp=64 #include "macros.inc" @@ -11,13 +10,13 @@ // This file is handwritten. glabel decompress -#if defined(VERSION_EU) || defined(VERSION_SH) +#if !defined(VERSION_JP) && !defined(VERSION_US) lw $a3, 8($a0) lw $t9, 0xc($a0) lw $t8, 4($a0) add $a3, $a3, $a0 add $t9, $t9, $a0 - move $a2, $zero + or $a2, $zero, $zero addi $a0, $a0, 0x10 add $t8, $t8, $a1 .L8026ED80: diff --git a/asm/entry.s b/asm/entry.s index fa95d8e1..e0f53fea 100644 --- a/asm/entry.s +++ b/asm/entry.s @@ -1,7 +1,6 @@ // assembler directives .set noat // allow manual use of $at .set noreorder // don't insert nops after branches -.set gp=64 #include "macros.inc" @@ -9,6 +8,25 @@ .section .text, "ax" glabel entry_point +.if VERSION_CN == 1 + lui $t0, %lo(_mainSegmentNoloadStartHi) + ori $t0, %lo(_mainSegmentNoloadStartLo) + lui $t1, %lo(_mainSegmentNoloadSizeHi) + ori $t1, %lo(_mainSegmentNoloadSizeLo) +.L80249010: + sw $zero, ($t0) + sw $zero, 4($t0) + addi $t0, $t0, 8 + addi $t1, $t1, -8 + bnez $t1, .L80249010 + nop + lui $sp, %lo(gIdleThreadStackHi) + ori $sp, %lo(gIdleThreadStackLo) + lui $t2, %lo(main_funcHi) + ori $t2, %lo(main_funcLo) + jr $t2 + nop +.else lui $t0, %hi(_mainSegmentNoloadStart) // $t0, 0x8034 lui $t1, %lo(_mainSegmentNoloadSizeHi) // lui $t1, 2 addiu $t0, %lo(_mainSegmentNoloadStart) // addiu $t0, $t0, -0x6df0 @@ -24,6 +42,7 @@ glabel entry_point addiu $t2, %lo(main_func) // addiu $t2, $t2, 0x6dc4 jr $t2 addiu $sp, %lo(gIdleThreadStack) // addiu $sp, $sp, 0xa00 +.endif nop nop nop diff --git a/asm/ipl3_font.s b/asm/ipl3_font.s new file mode 100644 index 00000000..f002a789 --- /dev/null +++ b/asm/ipl3_font.s @@ -0,0 +1,56 @@ +#include "macros.inc" + +// 0xA4000B70-0xA4000FFF: IPL3 Font +glabel ipl3_font +.incbin "textures/ipl3_raw/ipl3_font_00.ia1" +.incbin "textures/ipl3_raw/ipl3_font_01.ia1" +.incbin "textures/ipl3_raw/ipl3_font_02.ia1" +.incbin "textures/ipl3_raw/ipl3_font_03.ia1" +.incbin "textures/ipl3_raw/ipl3_font_04.ia1" +.incbin "textures/ipl3_raw/ipl3_font_05.ia1" +.incbin "textures/ipl3_raw/ipl3_font_06.ia1" +.incbin "textures/ipl3_raw/ipl3_font_07.ia1" +.incbin "textures/ipl3_raw/ipl3_font_08.ia1" +.incbin "textures/ipl3_raw/ipl3_font_09.ia1" +.incbin "textures/ipl3_raw/ipl3_font_10.ia1" +.incbin "textures/ipl3_raw/ipl3_font_11.ia1" +.incbin "textures/ipl3_raw/ipl3_font_12.ia1" +.incbin "textures/ipl3_raw/ipl3_font_13.ia1" +.incbin "textures/ipl3_raw/ipl3_font_14.ia1" +.incbin "textures/ipl3_raw/ipl3_font_15.ia1" +.incbin "textures/ipl3_raw/ipl3_font_16.ia1" +.incbin "textures/ipl3_raw/ipl3_font_17.ia1" +.incbin "textures/ipl3_raw/ipl3_font_18.ia1" +.incbin "textures/ipl3_raw/ipl3_font_19.ia1" +.incbin "textures/ipl3_raw/ipl3_font_20.ia1" +.incbin "textures/ipl3_raw/ipl3_font_21.ia1" +.incbin "textures/ipl3_raw/ipl3_font_22.ia1" +.incbin "textures/ipl3_raw/ipl3_font_23.ia1" +.incbin "textures/ipl3_raw/ipl3_font_24.ia1" +.incbin "textures/ipl3_raw/ipl3_font_25.ia1" +.incbin "textures/ipl3_raw/ipl3_font_26.ia1" +.incbin "textures/ipl3_raw/ipl3_font_27.ia1" +.incbin "textures/ipl3_raw/ipl3_font_28.ia1" +.incbin "textures/ipl3_raw/ipl3_font_29.ia1" +.incbin "textures/ipl3_raw/ipl3_font_30.ia1" +.incbin "textures/ipl3_raw/ipl3_font_31.ia1" +.incbin "textures/ipl3_raw/ipl3_font_32.ia1" +.incbin "textures/ipl3_raw/ipl3_font_33.ia1" +.incbin "textures/ipl3_raw/ipl3_font_34.ia1" +.incbin "textures/ipl3_raw/ipl3_font_35.ia1" +.incbin "textures/ipl3_raw/ipl3_font_36.ia1" +.incbin "textures/ipl3_raw/ipl3_font_37.ia1" +.incbin "textures/ipl3_raw/ipl3_font_38.ia1" +.incbin "textures/ipl3_raw/ipl3_font_39.ia1" +.incbin "textures/ipl3_raw/ipl3_font_40.ia1" +.incbin "textures/ipl3_raw/ipl3_font_41.ia1" +.incbin "textures/ipl3_raw/ipl3_font_42.ia1" +.incbin "textures/ipl3_raw/ipl3_font_43.ia1" +.incbin "textures/ipl3_raw/ipl3_font_44.ia1" +.incbin "textures/ipl3_raw/ipl3_font_45.ia1" +.incbin "textures/ipl3_raw/ipl3_font_46.ia1" +.incbin "textures/ipl3_raw/ipl3_font_47.ia1" +.incbin "textures/ipl3_raw/ipl3_font_48.ia1" +.incbin "textures/ipl3_raw/ipl3_font_49.ia1" +.fill 0x12 + diff --git a/asm/rom_header.s b/asm/rom_header.s index af8b9afd..0f6cd83c 100644 --- a/asm/rom_header.s +++ b/asm/rom_header.s @@ -10,12 +10,18 @@ /* Revision */ #ifdef VERSION_SH .word 0x00001448 +#elif defined(VERSION_CN) + .word 0x0000144C #elif defined(VERSION_EU) .word 0x00001446 #else /* NTSC-U and NTSC-J 1.0 */ .word 0x00001444 #endif +#ifdef VERSION_CN + .fill 0x30 +#else + .word 0x4EAA3D0E /* Checksum 1 */ .word 0x74757C24 /* Checksum 2 */ .word 0x00000000 /* Unknown */ @@ -44,3 +50,5 @@ #else .byte 0x00 /* Version */ #endif + +#endif diff --git a/assets.json b/assets.json index 691735f2..dd2e5a7d 100644 --- a/assets.json +++ b/assets.json @@ -4,735 +4,740 @@ "@sound ctl eu": [97856,{"eu":[5626032]}], "@sound ctl jp": [94400,{"jp":[5738816]}], "@sound ctl us": [97856,{"us":[5748512]}], -"@sound ctl sh": [89472,{"sh":[5596480]}], +"@sound ctl sh": [89472,{"sh":[5596480],"cn":[5669504]}], "@sound tbl eu": [2216704,{"us":[5846368],"eu":[5723888]}], "@sound tbl jp": [1793408,{"jp":[5833216]}], "@sound tbl us": [2216704,{"us":[5846368],"eu":[5723888]}], -"@sound tbl sh": [2184688,{"sh":[5685952]}], -"@sound ctl header sh": [624,{"sh":[864272]}], -"@sound tbl header sh": [192,{"sh":[865056]}], -"textures/ipl3_raw/ipl3_font_00.ia1.png": [13,14,23,{"jp":[2928],"us":[2928],"eu":[2928],"sh":[2928]}], -"textures/ipl3_raw/ipl3_font_01.ia1.png": [13,14,23,{"jp":[2951],"us":[2951],"eu":[2951],"sh":[2951]}], -"textures/ipl3_raw/ipl3_font_02.ia1.png": [13,14,23,{"jp":[2974],"us":[2974],"eu":[2974],"sh":[2974]}], -"textures/ipl3_raw/ipl3_font_03.ia1.png": [13,14,23,{"jp":[2997],"us":[2997],"eu":[2997],"sh":[2997]}], -"textures/ipl3_raw/ipl3_font_04.ia1.png": [13,14,23,{"jp":[3020],"us":[3020],"eu":[3020],"sh":[3020]}], -"textures/ipl3_raw/ipl3_font_05.ia1.png": [13,14,23,{"jp":[3043],"us":[3043],"eu":[3043],"sh":[3043]}], -"textures/ipl3_raw/ipl3_font_06.ia1.png": [13,14,23,{"jp":[3066],"us":[3066],"eu":[3066],"sh":[3066]}], -"textures/ipl3_raw/ipl3_font_07.ia1.png": [13,14,23,{"jp":[3089],"us":[3089],"eu":[3089],"sh":[3089]}], -"textures/ipl3_raw/ipl3_font_08.ia1.png": [13,14,23,{"jp":[3112],"us":[3112],"eu":[3112],"sh":[3112]}], -"textures/ipl3_raw/ipl3_font_09.ia1.png": [13,14,23,{"jp":[3135],"us":[3135],"eu":[3135],"sh":[3135]}], -"textures/ipl3_raw/ipl3_font_10.ia1.png": [13,14,23,{"jp":[3158],"us":[3158],"eu":[3158],"sh":[3158]}], -"textures/ipl3_raw/ipl3_font_11.ia1.png": [13,14,23,{"jp":[3181],"us":[3181],"eu":[3181],"sh":[3181]}], -"textures/ipl3_raw/ipl3_font_12.ia1.png": [13,14,23,{"jp":[3204],"us":[3204],"eu":[3204],"sh":[3204]}], -"textures/ipl3_raw/ipl3_font_13.ia1.png": [13,14,23,{"jp":[3227],"us":[3227],"eu":[3227],"sh":[3227]}], -"textures/ipl3_raw/ipl3_font_14.ia1.png": [13,14,23,{"jp":[3250],"us":[3250],"eu":[3250],"sh":[3250]}], -"textures/ipl3_raw/ipl3_font_15.ia1.png": [13,14,23,{"jp":[3273],"us":[3273],"eu":[3273],"sh":[3273]}], -"textures/ipl3_raw/ipl3_font_16.ia1.png": [13,14,23,{"jp":[3296],"us":[3296],"eu":[3296],"sh":[3296]}], -"textures/ipl3_raw/ipl3_font_17.ia1.png": [13,14,23,{"jp":[3319],"us":[3319],"eu":[3319],"sh":[3319]}], -"textures/ipl3_raw/ipl3_font_18.ia1.png": [13,14,23,{"jp":[3342],"us":[3342],"eu":[3342],"sh":[3342]}], -"textures/ipl3_raw/ipl3_font_19.ia1.png": [13,14,23,{"jp":[3365],"us":[3365],"eu":[3365],"sh":[3365]}], -"textures/ipl3_raw/ipl3_font_20.ia1.png": [13,14,23,{"jp":[3388],"us":[3388],"eu":[3388],"sh":[3388]}], -"textures/ipl3_raw/ipl3_font_21.ia1.png": [13,14,23,{"jp":[3411],"us":[3411],"eu":[3411],"sh":[3411]}], -"textures/ipl3_raw/ipl3_font_22.ia1.png": [13,14,23,{"jp":[3434],"us":[3434],"eu":[3434],"sh":[3434]}], -"textures/ipl3_raw/ipl3_font_23.ia1.png": [13,14,23,{"jp":[3457],"us":[3457],"eu":[3457],"sh":[3457]}], -"textures/ipl3_raw/ipl3_font_24.ia1.png": [13,14,23,{"jp":[3480],"us":[3480],"eu":[3480],"sh":[3480]}], -"textures/ipl3_raw/ipl3_font_25.ia1.png": [13,14,23,{"jp":[3503],"us":[3503],"eu":[3503],"sh":[3503]}], -"textures/ipl3_raw/ipl3_font_26.ia1.png": [13,14,23,{"jp":[3526],"us":[3526],"eu":[3526],"sh":[3526]}], -"textures/ipl3_raw/ipl3_font_27.ia1.png": [13,14,23,{"jp":[3549],"us":[3549],"eu":[3549],"sh":[3549]}], -"textures/ipl3_raw/ipl3_font_28.ia1.png": [13,14,23,{"jp":[3572],"us":[3572],"eu":[3572],"sh":[3572]}], -"textures/ipl3_raw/ipl3_font_29.ia1.png": [13,14,23,{"jp":[3595],"us":[3595],"eu":[3595],"sh":[3595]}], -"textures/ipl3_raw/ipl3_font_30.ia1.png": [13,14,23,{"jp":[3618],"us":[3618],"eu":[3618],"sh":[3618]}], -"textures/ipl3_raw/ipl3_font_31.ia1.png": [13,14,23,{"jp":[3641],"us":[3641],"eu":[3641],"sh":[3641]}], -"textures/ipl3_raw/ipl3_font_32.ia1.png": [13,14,23,{"jp":[3664],"us":[3664],"eu":[3664],"sh":[3664]}], -"textures/ipl3_raw/ipl3_font_33.ia1.png": [13,14,23,{"jp":[3687],"us":[3687],"eu":[3687],"sh":[3687]}], -"textures/ipl3_raw/ipl3_font_34.ia1.png": [13,14,23,{"jp":[3710],"us":[3710],"eu":[3710],"sh":[3710]}], -"textures/ipl3_raw/ipl3_font_35.ia1.png": [13,14,23,{"jp":[3733],"us":[3733],"eu":[3733],"sh":[3733]}], -"textures/ipl3_raw/ipl3_font_36.ia1.png": [13,14,23,{"jp":[3756],"us":[3756],"eu":[3756],"sh":[3756]}], -"textures/ipl3_raw/ipl3_font_37.ia1.png": [13,14,23,{"jp":[3779],"us":[3779],"eu":[3779],"sh":[3779]}], -"textures/ipl3_raw/ipl3_font_38.ia1.png": [13,14,23,{"jp":[3802],"us":[3802],"eu":[3802],"sh":[3802]}], -"textures/ipl3_raw/ipl3_font_39.ia1.png": [13,14,23,{"jp":[3825],"us":[3825],"eu":[3825],"sh":[3825]}], -"textures/ipl3_raw/ipl3_font_40.ia1.png": [13,14,23,{"jp":[3848],"us":[3848],"eu":[3848],"sh":[3848]}], -"textures/ipl3_raw/ipl3_font_41.ia1.png": [13,14,23,{"jp":[3871],"us":[3871],"eu":[3871],"sh":[3871]}], -"textures/ipl3_raw/ipl3_font_42.ia1.png": [13,14,23,{"jp":[3894],"us":[3894],"eu":[3894],"sh":[3894]}], -"textures/ipl3_raw/ipl3_font_43.ia1.png": [13,14,23,{"jp":[3917],"us":[3917],"eu":[3917],"sh":[3917]}], -"textures/ipl3_raw/ipl3_font_44.ia1.png": [13,14,23,{"jp":[3940],"us":[3940],"eu":[3940],"sh":[3940]}], -"textures/ipl3_raw/ipl3_font_45.ia1.png": [13,14,23,{"jp":[3963],"us":[3963],"eu":[3963],"sh":[3963]}], -"textures/ipl3_raw/ipl3_font_46.ia1.png": [13,14,23,{"jp":[3986],"us":[3986],"eu":[3986],"sh":[3986]}], -"textures/ipl3_raw/ipl3_font_47.ia1.png": [13,14,23,{"jp":[4009],"us":[4009],"eu":[4009],"sh":[4009]}], -"textures/ipl3_raw/ipl3_font_48.ia1.png": [13,14,23,{"jp":[4032],"us":[4032],"eu":[4032],"sh":[4032]}], -"textures/ipl3_raw/ipl3_font_49.ia1.png": [13,14,23,{"jp":[4055],"us":[4055],"eu":[4055],"sh":[4055]}], -"textures/crash_screen/crash_screen_font.ia1.png": [32,63,252,{"eu":[757168],"sh":[805680]}], -"actors/amp/amp_body.rgba16.png": [32,32,2048,{"jp":[2032944,6936],"us":[2040320,6936],"eu":[1912288,6936],"sh":[1888800,6936]}], -"actors/amp/amp_electricity.rgba16.png": [16,32,1024,{"jp":[2032944,3864],"us":[2040320,3864],"eu":[1912288,3864],"sh":[1888800,3864]}], -"actors/amp/amp_eyes.rgba16.png": [32,32,2048,{"jp":[2032944,4888],"us":[2040320,4888],"eu":[1912288,4888],"sh":[1888800,4888]}], -"actors/amp/amp_mouth.rgba16.png": [32,32,2048,{"jp":[2032944,8984],"us":[2040320,8984],"eu":[1912288,8984],"sh":[1888800,8984]}], -"actors/blue_coin_switch/blue_coin_switch_side.rgba16.png": [32,16,1024,{"jp":[2032944,24],"us":[2040320,24],"eu":[1912288,24],"sh":[1888800,24]}], -"actors/blue_coin_switch/blue_coin_switch_top.rgba16.png": [32,32,2048,{"jp":[2032944,1048],"us":[2040320,1048],"eu":[1912288,1048],"sh":[1888800,1048]}], -"actors/blue_fish/blue_fish.rgba16.png": [32,32,2048,{"jp":[2094912,112096],"us":[2102288,112096],"eu":[1974256,112096],"sh":[1950768,112096]}], -"actors/bobomb/bob-omb_buddy_left_side.rgba16.png": [32,64,4096,{"jp":[1257760,120],"us":[1264928,120],"eu":[1136896,120],"sh":[1113408,120]}], -"actors/bobomb/bob-omb_buddy_right_side.rgba16.png": [32,64,4096,{"jp":[1257760,4216],"us":[1264928,4216],"eu":[1136896,4216],"sh":[1113408,4216]}], -"actors/bobomb/bob-omb_eyes.rgba16.png": [32,32,2048,{"jp":[1257760,18552],"us":[1264928,18552],"eu":[1136896,18552],"sh":[1113408,18552]}], -"actors/bobomb/bob-omb_eyes_blink.rgba16.png": [32,32,2048,{"jp":[1257760,20600],"us":[1264928,20600],"eu":[1136896,20600],"sh":[1113408,20600]}], -"actors/bobomb/bob-omb_left_side.rgba16.png": [32,64,4096,{"jp":[2032944,121440],"us":[2040320,121440],"eu":[1912288,121440],"sh":[1888800,121440]}], -"actors/bobomb/bob-omb_right_side.rgba16.png": [32,64,4096,{"jp":[2032944,125536],"us":[2040320,125536],"eu":[1912288,125536],"sh":[1888800,125536]}], -"actors/bomb/bomb_left_side.rgba16.png": [32,64,4096,{"jp":[1599504,359104],"us":[1606720,359440],"eu":[1478688,359440],"sh":[1455200,359440]}], -"actors/bomb/bomb_right_side.rgba16.png": [32,64,4096,{"jp":[1599504,363200],"us":[1606720,363536],"eu":[1478688,363536],"sh":[1455200,363536]}], -"actors/bomb/bomb_spike.rgba16.png": [32,32,2048,{"jp":[1599504,367296],"us":[1606720,367632],"eu":[1478688,367632],"sh":[1455200,367632]}], -"actors/boo/boo_eyes.rgba16.png": [64,32,4096,{"jp":[1462368,39744],"us":[1469536,39744],"eu":[1341504,39744],"sh":[1318016,39744]}], -"actors/boo/boo_mouth.rgba16.png": [32,32,2048,{"jp":[1462368,43840],"us":[1469536,43840],"eu":[1341504,43840],"sh":[1318016,43840]}], -"actors/boo_castle/bbh_boo_eyes.rgba16.png": [64,32,4096,{"jp":[1462368,39744],"us":[1469536,39744],"eu":[1341504,39744],"sh":[1318016,39744]}], -"actors/boo_castle/bbh_boo_mouth.rgba16.png": [32,32,2048,{"jp":[1462368,43840],"us":[1469536,43840],"eu":[1341504,43840],"sh":[1318016,43840]}], -"actors/book/book_cover.rgba16.png": [32,32,2048,{"jp":[1462368,4192],"us":[1469536,4192],"eu":[1341504,4192],"sh":[1318016,4192]}], -"actors/bookend/bookend_cover.rgba16.png": [32,32,2048,{"jp":[1462368,4192],"us":[1469536,4192],"eu":[1341504,4192],"sh":[1318016,4192]}], -"actors/bookend/bookend_mouth.rgba16.png": [16,32,1024,{"jp":[1462368,2144],"us":[1469536,2144],"eu":[1341504,2144],"sh":[1318016,2144]}], -"actors/bookend/bookend_pages.rgba16.png": [16,32,1024,{"jp":[1462368,3168],"us":[1469536,3168],"eu":[1341504,3168],"sh":[1318016,3168]}], -"actors/bookend/bookend_spine.rgba16.png": [16,32,1024,{"jp":[1462368,96],"us":[1469536,96],"eu":[1341504,96],"sh":[1318016,96]}], -"actors/bookend/bookend_tooth.rgba16.png": [16,32,1024,{"jp":[1462368,1120],"us":[1469536,1120],"eu":[1341504,1120],"sh":[1318016,1120]}], -"actors/bowser/bowser_armband.rgba16.png": [32,32,2048,{"jp":[1599504,146488],"us":[1606720,146488],"eu":[1478688,146488],"sh":[1455200,146488]}], -"actors/bowser/bowser_armband_spike.rgba16.png": [64,32,4096,{"jp":[1599504,142392],"us":[1606720,142392],"eu":[1478688,142392],"sh":[1455200,142392]}], -"actors/bowser/bowser_blue_eye_unused.rgba16.png": [64,32,4096,{"jp":[1599504,156728],"us":[1606720,156728],"eu":[1478688,156728],"sh":[1455200,156728]}], -"actors/bowser/bowser_body.rgba16.png": [32,32,2048,{"jp":[1599504,140344],"us":[1606720,140344],"eu":[1478688,140344],"sh":[1455200,140344]}], -"actors/bowser/bowser_chest.rgba16.png": [32,32,2048,{"jp":[1599504,152632],"us":[1606720,152632],"eu":[1478688,152632],"sh":[1455200,152632]}], -"actors/bowser/bowser_claw_edge.rgba16.png": [32,64,4096,{"jp":[1599504,171064],"us":[1606720,171064],"eu":[1478688,171064],"sh":[1455200,171064]}], -"actors/bowser/bowser_claw_horn_angle.rgba16.png": [32,64,4096,{"jp":[1599504,179256],"us":[1606720,179256],"eu":[1478688,179256],"sh":[1455200,179256]}], -"actors/bowser/bowser_claw_horn_tooth.rgba16.png": [32,64,4096,{"jp":[1599504,175160],"us":[1606720,175160],"eu":[1478688,175160],"sh":[1455200,175160]}], -"actors/bowser/bowser_eye_center_0.rgba16.png": [64,32,4096,{"jp":[1599504,195640],"us":[1606720,195640],"eu":[1478688,195640],"sh":[1455200,195640]}], -"actors/bowser/bowser_eye_center_1.rgba16.png": [64,32,4096,{"jp":[1599504,195640],"us":[1606720,195640],"eu":[1478688,195640],"sh":[1455200,195640]}], -"actors/bowser/bowser_eye_closed_0.rgba16.png": [64,32,4096,{"jp":[1599504,191544],"us":[1606720,191544],"eu":[1478688,191544],"sh":[1455200,191544]}], -"actors/bowser/bowser_eye_closed_1.rgba16.png": [64,32,4096,{"jp":[1599504,191544],"us":[1606720,191544],"eu":[1478688,191544],"sh":[1455200,191544]}], -"actors/bowser/bowser_eye_far_left_0.rgba16.png": [64,32,4096,{"jp":[1599504,203832],"us":[1606720,203832],"eu":[1478688,203832],"sh":[1455200,203832]}], -"actors/bowser/bowser_eye_far_left_1.rgba16.png": [64,32,4096,{"jp":[1599504,203832],"us":[1606720,203832],"eu":[1478688,203832],"sh":[1455200,203832]}], -"actors/bowser/bowser_eye_half_closed_0.rgba16.png": [64,32,4096,{"jp":[1599504,187448],"us":[1606720,187448],"eu":[1478688,187448],"sh":[1455200,187448]}], -"actors/bowser/bowser_eye_half_closed_1.rgba16.png": [64,32,4096,{"jp":[1599504,187448],"us":[1606720,187448],"eu":[1478688,187448],"sh":[1455200,187448]}], -"actors/bowser/bowser_eye_left_0.rgba16.png": [64,32,4096,{"jp":[1599504,183352],"us":[1606720,183352],"eu":[1478688,183352],"sh":[1455200,183352]}], -"actors/bowser/bowser_eye_left_1.rgba16.png": [64,32,4096,{"jp":[1599504,183352],"us":[1606720,183352],"eu":[1478688,183352],"sh":[1455200,183352]}], -"actors/bowser/bowser_eye_right_0.rgba16.png": [64,32,4096,{"jp":[1599504,199736],"us":[1606720,199736],"eu":[1478688,199736],"sh":[1455200,199736]}], -"actors/bowser/bowser_eye_right_1.rgba16.png": [64,32,4096,{"jp":[1599504,199736],"us":[1606720,199736],"eu":[1478688,199736],"sh":[1455200,199736]}], -"actors/bowser/bowser_eyebrow.rgba16.png": [64,32,4096,{"jp":[1599504,130104],"us":[1606720,130104],"eu":[1478688,130104],"sh":[1455200,130104]}], -"actors/bowser/bowser_hair.rgba16.png": [32,64,4096,{"jp":[1599504,166968],"us":[1606720,166968],"eu":[1478688,166968],"sh":[1455200,166968]}], -"actors/bowser/bowser_mouth_unused.rgba16.png": [64,32,4096,{"jp":[1599504,160824],"us":[1606720,160824],"eu":[1478688,160824],"sh":[1455200,160824]}], -"actors/bowser/bowser_muzzle.rgba16.png": [32,32,2048,{"jp":[1599504,134200],"us":[1606720,134200],"eu":[1478688,134200],"sh":[1455200,134200]}], -"actors/bowser/bowser_nostrils.rgba16.png": [64,32,4096,{"jp":[1599504,136248],"us":[1606720,136248],"eu":[1478688,136248],"sh":[1455200,136248]}], -"actors/bowser/bowser_shell.rgba16.png": [32,32,2048,{"jp":[1599504,128056],"us":[1606720,128056],"eu":[1478688,128056],"sh":[1455200,128056]}], -"actors/bowser/bowser_shell_edge.rgba16.png": [32,32,2048,{"jp":[1599504,154680],"us":[1606720,154680],"eu":[1478688,154680],"sh":[1455200,154680]}], -"actors/bowser/bowser_tongue.rgba16.png": [32,64,4096,{"jp":[1599504,148536],"us":[1606720,148536],"eu":[1478688,148536],"sh":[1455200,148536]}], -"actors/bowser/bowser_upper_face.rgba16.png": [32,32,2048,{"jp":[1599504,164920],"us":[1606720,164920],"eu":[1478688,164920],"sh":[1455200,164920]}], -"actors/bowser_flame/bowser_flame_0.rgba16.png": [64,64,8192,{"jp":[1599504,0],"us":[1606720,0],"eu":[1478688,0],"sh":[1455200,0]}], -"actors/bowser_flame/bowser_flame_1.rgba16.png": [64,64,8192,{"jp":[1599504,8192],"us":[1606720,8192],"eu":[1478688,8192],"sh":[1455200,8192]}], -"actors/bowser_flame/bowser_flame_10.rgba16.png": [64,64,8192,{"jp":[1599504,81920],"us":[1606720,81920],"eu":[1478688,81920],"sh":[1455200,81920]}], -"actors/bowser_flame/bowser_flame_11.rgba16.png": [64,64,8192,{"jp":[1599504,90112],"us":[1606720,90112],"eu":[1478688,90112],"sh":[1455200,90112]}], -"actors/bowser_flame/bowser_flame_12.rgba16.png": [64,64,8192,{"jp":[1599504,98304],"us":[1606720,98304],"eu":[1478688,98304],"sh":[1455200,98304]}], -"actors/bowser_flame/bowser_flame_13.rgba16.png": [64,64,8192,{"jp":[1599504,106496],"us":[1606720,106496],"eu":[1478688,106496],"sh":[1455200,106496]}], -"actors/bowser_flame/bowser_flame_2.rgba16.png": [64,64,8192,{"jp":[1599504,16384],"us":[1606720,16384],"eu":[1478688,16384],"sh":[1455200,16384]}], -"actors/bowser_flame/bowser_flame_3.rgba16.png": [64,64,8192,{"jp":[1599504,24576],"us":[1606720,24576],"eu":[1478688,24576],"sh":[1455200,24576]}], -"actors/bowser_flame/bowser_flame_4.rgba16.png": [64,64,8192,{"jp":[1599504,32768],"us":[1606720,32768],"eu":[1478688,32768],"sh":[1455200,32768]}], -"actors/bowser_flame/bowser_flame_5.rgba16.png": [64,64,8192,{"jp":[1599504,40960],"us":[1606720,40960],"eu":[1478688,40960],"sh":[1455200,40960]}], -"actors/bowser_flame/bowser_flame_6.rgba16.png": [64,64,8192,{"jp":[1599504,49152],"us":[1606720,49152],"eu":[1478688,49152],"sh":[1455200,49152]}], -"actors/bowser_flame/bowser_flame_7.rgba16.png": [64,64,8192,{"jp":[1599504,57344],"us":[1606720,57344],"eu":[1478688,57344],"sh":[1455200,57344]}], -"actors/bowser_flame/bowser_flame_8.rgba16.png": [64,64,8192,{"jp":[1599504,65536],"us":[1606720,65536],"eu":[1478688,65536],"sh":[1455200,65536]}], -"actors/bowser_flame/bowser_flame_9.rgba16.png": [64,64,8192,{"jp":[1599504,73728],"us":[1606720,73728],"eu":[1478688,73728],"sh":[1455200,73728]}], -"actors/breakable_box/cork_box_surface.rgba16.png": [32,32,2048,{"jp":[2032944,74384],"us":[2040320,74384],"eu":[1912288,74384],"sh":[1888800,74384]}], -"actors/breakable_box/crazy_box_surface.rgba16.png": [32,32,2048,{"jp":[2032944,72336],"us":[2040320,72336],"eu":[1912288,72336],"sh":[1888800,72336]}], -"actors/bub/bub_eye_border.rgba16.png": [32,32,2048,{"jp":[1568640,5128],"us":[1575856,5128],"eu":[1447824,5128],"sh":[1424336,5128]}], -"actors/bub/bub_eyes.rgba16.png": [64,32,4096,{"jp":[1568640,1032],"us":[1575856,1032],"eu":[1447824,1032],"sh":[1424336,1032]}], -"actors/bub/bub_fins.rgba16.png": [32,32,2048,{"jp":[1568640,7176],"us":[1575856,7176],"eu":[1447824,7176],"sh":[1424336,7176]}], -"actors/bub/bub_scales.rgba16.png": [64,32,4096,{"jp":[1568640,9224],"us":[1575856,9224],"eu":[1447824,9224],"sh":[1424336,9224]}], -"actors/bubba/bubba_eye_border.rgba16.png": [32,32,2048,{"jp":[1568640,5128],"us":[1575856,5128],"eu":[1447824,5128],"sh":[1424336,5128]}], -"actors/bubba/bubba_eyes_unused.rgba16.png": [64,32,4096,{"jp":[1568640,1032],"us":[1575856,1032],"eu":[1447824,1032],"sh":[1424336,1032]}], -"actors/bubba/bubba_fins.rgba16.png": [32,32,2048,{"jp":[1568640,7176],"us":[1575856,7176],"eu":[1447824,7176],"sh":[1424336,7176]}], -"actors/bubba/bubba_scales.rgba16.png": [64,64,8192,{"jp":[1568640,9224],"us":[1575856,9224],"eu":[1447824,9224],"sh":[1424336,9224]}], -"actors/bubba/bubba_sunglasses.rgba16.png": [16,32,1024,{"jp":[1568640,8],"us":[1575856,8],"eu":[1447824,8],"sh":[1424336,8]}], -"actors/bubble/bubble.rgba16.png": [32,32,2048,{"jp":[1125200,118112],"us":[1132368,118112],"eu":[1004336,118112],"sh":[980848,118112]}], -"actors/bubble/mr_i_bubble.rgba16.png": [32,32,2048,{"jp":[1125200,120160],"us":[1132368,120160],"eu":[1004336,120160],"sh":[980848,120160]}], -"actors/bullet_bill/bullet_bill_eye.rgba16.png": [64,32,4096,{"jp":[1215456,47784],"us":[1222624,47784],"eu":[1094592,47784],"sh":[1071104,47784]}], -"actors/bullet_bill/bullet_bill_mouth.rgba16.png": [64,32,4096,{"jp":[1215456,51880],"us":[1222624,51880],"eu":[1094592,51880],"sh":[1071104,51880]}], -"actors/bully/bully_eye.rgba16.png": [32,32,2048,{"jp":[1249376,9320],"us":[1256544,9320],"eu":[1128512,9320],"sh":[1105024,9320]}], -"actors/bully/bully_horn.rgba16.png": [16,16,512,{"jp":[1249376,224],"us":[1256544,224],"eu":[1128512,224],"sh":[1105024,224]}], -"actors/bully/bully_left_side.rgba16.png": [32,64,4096,{"jp":[1249376,1128],"us":[1256544,1128],"eu":[1128512,1128],"sh":[1105024,1128]}], -"actors/bully/bully_right_side.rgba16.png": [32,64,4096,{"jp":[1249376,5224],"us":[1256544,5224],"eu":[1128512,5224],"sh":[1105024,5224]}], -"actors/burn_smoke/burn_smoke.ia16.png": [32,32,2048,{"jp":[1125200,137216],"us":[1132368,137216],"eu":[1004336,137216],"sh":[980848,137216]}], -"actors/butterfly/butterfly_wing.rgba16.png": [32,64,4096,{"jp":[2094912,17320],"us":[2102288,17320],"eu":[1974256,17320],"sh":[1950768,17320]}], -"actors/cannon_barrel/cannon_barrel.rgba16.png": [32,32,2048,{"jp":[2032944,22696],"us":[2040320,22696],"eu":[1912288,22696],"sh":[1888800,22696]}], -"actors/cannon_base/cannon_base.rgba16.png": [32,32,2048,{"jp":[2032944,18872],"us":[2040320,18872],"eu":[1912288,18872],"sh":[1888800,18872]}], -"actors/cannon_lid/cannon_lid.rgba16.png": [32,32,2048,{"jp":[2032944,16472],"us":[2040320,16472],"eu":[1912288,16472],"sh":[1888800,16472]}], -"actors/capswitch/cap_switch_base.rgba16.png": [16,4,128,{"jp":[1457744,11336],"us":[1464912,11336],"eu":[1336880,11336],"sh":[1313392,11336]}], -"actors/capswitch/cap_switch_head.ia16.png": [32,64,4096,{"jp":[1457744,7240],"us":[1464912,7240],"eu":[1336880,7240],"sh":[1313392,7240]}], -"actors/chain_ball/chain_ball.rgba16.png": [32,32,2048,{"jp":[1844608,133864],"us":[1851952,133864],"eu":[1723920,133864],"sh":[1700432,133864]}], -"actors/chain_chomp/chain_chomp_bright_shine.rgba16.png": [32,32,2048,{"jp":[1844608,136144],"us":[1851952,136144],"eu":[1723920,136144],"sh":[1700432,136144]}], -"actors/chain_chomp/chain_chomp_dull_shine.rgba16.png": [32,32,2048,{"jp":[1844608,138192],"us":[1851952,138192],"eu":[1723920,138192],"sh":[1700432,138192]}], -"actors/chain_chomp/chain_chomp_eye.rgba16.png": [32,32,2048,{"jp":[1844608,144336],"us":[1851952,144336],"eu":[1723920,144336],"sh":[1700432,144336]}], -"actors/chain_chomp/chain_chomp_tongue.rgba16.png": [32,32,2048,{"jp":[1844608,140240],"us":[1851952,140240],"eu":[1723920,140240],"sh":[1700432,140240]}], -"actors/chain_chomp/chain_chomp_tooth.rgba16.png": [32,32,2048,{"jp":[1462368,27376],"us":[1469536,27376],"eu":[1341504,27376],"sh":[1318016,27376]}], -"actors/chair/chair_bottom.rgba16.png": [32,16,1024,{"jp":[1462368,16480],"us":[1469536,16480],"eu":[1341504,16480],"sh":[1318016,16480]}], -"actors/chair/chair_front.rgba16.png": [32,32,2048,{"jp":[1462368,12384],"us":[1469536,12384],"eu":[1341504,12384],"sh":[1318016,12384]}], -"actors/chair/chair_leg.rgba16.png": [32,32,2048,{"jp":[1462368,14432],"us":[1469536,14432],"eu":[1341504,14432],"sh":[1318016,14432]}], -"actors/chair/chair_surface_unused.rgba16.png": [32,32,2048,{"jp":[1462368,17504],"us":[1469536,17504],"eu":[1341504,17504],"sh":[1318016,17504]}], -"actors/checkerboard_platform/checkerboard_platform.rgba16.png": [32,32,2048,{"jp":[2032944,52288],"us":[2040320,52288],"eu":[1912288,52288],"sh":[1888800,52288]}], -"actors/checkerboard_platform/checkerboard_platform_side.rgba16.png": [32,16,1024,{"jp":[2032944,51264],"us":[2040320,51264],"eu":[1912288,51264],"sh":[1888800,51264]}], -"actors/chillychief/chill_bully_eye.rgba16.png": [32,32,2048,{"jp":[1249376,9320],"us":[1256544,9320],"eu":[1128512,9320],"sh":[1105024,9320]}], -"actors/chillychief/chill_bully_left_side.rgba16.png": [32,64,4096,{"jp":[1979680,96],"us":[1987056,96],"eu":[1859024,96],"sh":[1835536,96]}], -"actors/chillychief/chill_bully_right_side.rgba16.png": [32,64,4096,{"jp":[1979680,4192],"us":[1987056,4192],"eu":[1859024,4192],"sh":[1835536,4192]}], -"actors/chuckya/chuckya_body_arm_left_side.rgba16.png": [32,64,4096,{"jp":[2032944,32632],"us":[2040320,32632],"eu":[1912288,32632],"sh":[1888800,32632]}], -"actors/chuckya/chuckya_body_arm_right_side.rgba16.png": [32,64,4096,{"jp":[2032944,36728],"us":[2040320,36728],"eu":[1912288,36728],"sh":[1888800,36728]}], -"actors/chuckya/chuckya_eyes.rgba16.png": [32,64,4096,{"jp":[2032944,26488],"us":[2040320,26488],"eu":[1912288,26488],"sh":[1888800,26488]}], -"actors/chuckya/chuckya_hand_antenna.rgba16.png": [32,32,2048,{"jp":[2032944,30584],"us":[2040320,30584],"eu":[1912288,30584],"sh":[1888800,30584]}], -"actors/clam_shell/clam_shell.rgba16.png": [32,32,2048,{"jp":[1285392,48],"us":[1292560,48],"eu":[1164528,48],"sh":[1141040,48]}], -"actors/clam_shell/clam_shell_mouth.rgba16.png": [32,32,2048,{"jp":[1285392,2096],"us":[1292560,2096],"eu":[1164528,2096],"sh":[1141040,2096]}], -"actors/coin/coin_front.ia16.png": [32,32,2048,{"jp":[2094912,22400],"us":[2102288,22400],"eu":[1974256,22400],"sh":[1950768,22400]}], -"actors/coin/coin_side.ia16.png": [32,32,2048,{"jp":[2094912,26496],"us":[2102288,26496],"eu":[1974256,26496],"sh":[1950768,26496]}], -"actors/coin/coin_tilt_left.ia16.png": [32,32,2048,{"jp":[2094912,28544],"us":[2102288,28544],"eu":[1974256,28544],"sh":[1950768,28544]}], -"actors/coin/coin_tilt_right.ia16.png": [32,32,2048,{"jp":[2094912,24448],"us":[2102288,24448],"eu":[1974256,24448],"sh":[1950768,24448]}], -"actors/cyan_fish/cyan_fish.rgba16.png": [32,32,2048,{"jp":[1802256,54376],"us":[1809600,54376],"eu":[1681568,54376],"sh":[1658080,54376]}], -"actors/dirt/dirt_particle.rgba16.png": [16,16,512,{"jp":[2094912,179704],"us":[2102288,179704],"eu":[1974256,179704],"sh":[1950768,179704]}], -"actors/door/bbh_door.rgba16.png": [32,64,4096,{"jp":[2094912,66832],"us":[2102288,66832],"eu":[1974256,66832],"sh":[1950768,66832]}], -"actors/door/bbh_door_overlay.rgba16.png": [32,32,2048,{"jp":[2094912,70928],"us":[2102288,70928],"eu":[1974256,70928],"sh":[1950768,70928]}], -"actors/door/door_lock.rgba16.png": [16,32,1024,{"jp":[2094912,79120],"us":[2102288,79120],"eu":[1974256,79120],"sh":[1950768,79120]}], -"actors/door/hmc_mural_door.rgba16.png": [32,64,4096,{"jp":[2094912,60688],"us":[2102288,60688],"eu":[1974256,60688],"sh":[1950768,60688]}], -"actors/door/hmc_mural_door_overlay.rgba16.png": [32,32,2048,{"jp":[2094912,64784],"us":[2102288,64784],"eu":[1974256,64784],"sh":[1950768,64784]}], -"actors/door/metal_door.rgba16.png": [32,64,4096,{"jp":[2094912,54544],"us":[2102288,54544],"eu":[1974256,54544],"sh":[1950768,54544]}], -"actors/door/metal_door_overlay.rgba16.png": [32,32,2048,{"jp":[2094912,58640],"us":[2102288,58640],"eu":[1974256,58640],"sh":[1950768,58640]}], -"actors/door/one_star_door_sign.rgba16.png": [32,32,2048,{"jp":[2094912,75024],"us":[2102288,75024],"eu":[1974256,75024],"sh":[1950768,75024]}], -"actors/door/polished_wooden_door.rgba16.png": [32,64,4096,{"jp":[2094912,40208],"us":[2102288,40208],"eu":[1974256,40208],"sh":[1950768,40208]}], -"actors/door/polished_wooden_door_overlay.rgba16.png": [32,64,4096,{"jp":[2094912,44304],"us":[2102288,44304],"eu":[1974256,44304],"sh":[1950768,44304]}], -"actors/door/rough_wooden_door.rgba16.png": [32,64,4096,{"jp":[2094912,48400],"us":[2102288,48400],"eu":[1974256,48400],"sh":[1950768,48400]}], -"actors/door/rough_wooden_door_overlay.rgba16.png": [32,32,2048,{"jp":[2094912,52496],"us":[2102288,52496],"eu":[1974256,52496],"sh":[1950768,52496]}], -"actors/door/three_star_door_sign.rgba16.png": [32,32,2048,{"jp":[2094912,77072],"us":[2102288,77072],"eu":[1974256,77072],"sh":[1950768,77072]}], -"actors/door/zero_star_door_sign.rgba16.png": [32,32,2048,{"jp":[2094912,72976],"us":[2102288,72976],"eu":[1974256,72976],"sh":[1950768,72976]}], -"actors/dorrie/dorrie_eye.rgba16.png": [16,16,512,{"jp":[1991184,39840],"us":[1998560,39840],"eu":[1870528,39840],"sh":[1847040,39840]}], -"actors/dorrie/dorrie_skin.rgba16.png": [32,64,4096,{"jp":[1991184,40352],"us":[1998560,40352],"eu":[1870528,40352],"sh":[1847040,40352]}], -"actors/dorrie/dorrie_tongue.rgba16.png": [32,32,2048,{"jp":[1844608,140240],"us":[1851952,140240],"eu":[1723920,140240],"sh":[1700432,140240]}], -"actors/exclamation_box/exclamation_box_front.rgba16.png": [32,32,2048,{"jp":[2032944,95784],"us":[2040320,95784],"eu":[1912288,95784],"sh":[1888800,95784]}], -"actors/exclamation_box/exclamation_box_side.rgba16.png": [64,32,4096,{"jp":[2032944,97832],"us":[2040320,97832],"eu":[1912288,97832],"sh":[1888800,97832]}], -"actors/exclamation_box/metal_cap_box_front.rgba16.png": [32,32,2048,{"jp":[2032944,83496],"us":[2040320,83496],"eu":[1912288,83496],"sh":[1888800,83496]}], -"actors/exclamation_box/metal_cap_box_side.rgba16.png": [64,32,4096,{"jp":[2032944,85544],"us":[2040320,85544],"eu":[1912288,85544],"sh":[1888800,85544]}], -"actors/exclamation_box/vanish_cap_box_front.rgba16.png": [32,32,2048,{"jp":[2032944,77352],"us":[2040320,77352],"eu":[1912288,77352],"sh":[1888800,77352]}], -"actors/exclamation_box/vanish_cap_box_side.rgba16.png": [32,64,4096,{"jp":[2032944,79400],"us":[2040320,79400],"eu":[1912288,79400],"sh":[1888800,79400]}], -"actors/exclamation_box/wing_cap_box_front.rgba16.png": [32,32,2048,{"jp":[2032944,89640],"us":[2040320,89640],"eu":[1912288,89640],"sh":[1888800,89640]}], -"actors/exclamation_box/wing_cap_box_side.rgba16.png": [32,64,4096,{"jp":[2032944,91688],"us":[2040320,91688],"eu":[1912288,91688],"sh":[1888800,91688]}], -"actors/exclamation_box_outline/exclamation_box_outline.rgba16.png": [32,32,2048,{"jp":[2032944,151912],"us":[2040320,151912],"eu":[1912288,151912],"sh":[1888800,151912]}], -"actors/exclamation_box_outline/exclamation_point.rgba16.png": [16,32,1024,{"jp":[2032944,154240],"us":[2040320,154240],"eu":[1912288,154240],"sh":[1888800,154240]}], -"actors/explosion/explosion_0.rgba16.png": [32,32,2048,{"jp":[2094912,2568],"us":[2102288,2568],"eu":[1974256,2568],"sh":[1950768,2568]}], -"actors/explosion/explosion_1.rgba16.png": [32,32,2048,{"jp":[2094912,4616],"us":[2102288,4616],"eu":[1974256,4616],"sh":[1950768,4616]}], -"actors/explosion/explosion_2.rgba16.png": [32,32,2048,{"jp":[2094912,6664],"us":[2102288,6664],"eu":[1974256,6664],"sh":[1950768,6664]}], -"actors/explosion/explosion_3.rgba16.png": [32,32,2048,{"jp":[2094912,8712],"us":[2102288,8712],"eu":[1974256,8712],"sh":[1950768,8712]}], -"actors/explosion/explosion_4.rgba16.png": [32,32,2048,{"jp":[2094912,10760],"us":[2102288,10760],"eu":[1974256,10760],"sh":[1950768,10760]}], -"actors/explosion/explosion_5.rgba16.png": [32,32,2048,{"jp":[2094912,12808],"us":[2102288,12808],"eu":[1974256,12808],"sh":[1950768,12808]}], -"actors/explosion/explosion_6.rgba16.png": [32,32,2048,{"jp":[2094912,14856],"us":[2102288,14856],"eu":[1974256,14856],"sh":[1950768,14856]}], -"actors/eyerok/eyerok_bricks.rgba16.png": [32,32,2048,{"jp":[1327760,36160],"us":[1334928,36160],"eu":[1206896,36160],"sh":[1183408,36160]}], -"actors/eyerok/eyerok_eye_closed.rgba16.png": [32,32,2048,{"jp":[1327760,44352],"us":[1334928,44352],"eu":[1206896,44352],"sh":[1183408,44352]}], -"actors/eyerok/eyerok_eye_mostly_closed.rgba16.png": [32,32,2048,{"jp":[1327760,42304],"us":[1334928,42304],"eu":[1206896,42304],"sh":[1183408,42304]}], -"actors/eyerok/eyerok_eye_mostly_open.rgba16.png": [32,32,2048,{"jp":[1327760,40256],"us":[1334928,40256],"eu":[1206896,40256],"sh":[1183408,40256]}], -"actors/eyerok/eyerok_eye_open.rgba16.png": [32,32,2048,{"jp":[1327760,38208],"us":[1334928,38208],"eu":[1206896,38208],"sh":[1183408,38208]}], -"actors/flame/flame_0.ia16.png": [32,32,2048,{"jp":[2094912,95008],"us":[2102288,95008],"eu":[1974256,95008],"sh":[1950768,95008]}], -"actors/flame/flame_1.ia16.png": [32,32,2048,{"jp":[2094912,97056],"us":[2102288,97056],"eu":[1974256,97056],"sh":[1950768,97056]}], -"actors/flame/flame_2.ia16.png": [32,32,2048,{"jp":[2094912,99104],"us":[2102288,99104],"eu":[1974256,99104],"sh":[1950768,99104]}], -"actors/flame/flame_3.ia16.png": [32,32,2048,{"jp":[2094912,101152],"us":[2102288,101152],"eu":[1974256,101152],"sh":[1950768,101152]}], -"actors/flame/flame_4.ia16.png": [32,32,2048,{"jp":[2094912,103200],"us":[2102288,103200],"eu":[1974256,103200],"sh":[1950768,103200]}], -"actors/flame/flame_5.ia16.png": [32,32,2048,{"jp":[2094912,105248],"us":[2102288,105248],"eu":[1974256,105248],"sh":[1950768,105248]}], -"actors/flame/flame_6.ia16.png": [32,32,2048,{"jp":[2094912,107296],"us":[2102288,107296],"eu":[1974256,107296],"sh":[1950768,107296]}], -"actors/flame/flame_7.ia16.png": [32,32,2048,{"jp":[2094912,109344],"us":[2102288,109344],"eu":[1974256,109344],"sh":[1950768,109344]}], -"actors/flyguy/flyguy_cloth_wrinkle.rgba16.png": [64,32,4096,{"jp":[2032944,57480],"us":[2040320,57480],"eu":[1912288,57480],"sh":[1888800,57480]}], -"actors/flyguy/flyguy_face.rgba16.png": [32,32,2048,{"jp":[2032944,61576],"us":[2040320,61576],"eu":[1912288,61576],"sh":[1888800,61576]}], -"actors/flyguy/flyguy_propeller.ia16.png": [32,32,2048,{"jp":[2032944,63624],"us":[2040320,63624],"eu":[1912288,63624],"sh":[1888800,63624]}], -"actors/fwoosh/fwoosh_face.ia16.png": [32,32,2048,{"jp":[1377744,88072],"us":[1384912,88072],"eu":[1256880,88072],"sh":[1233392,88072]}], -"actors/goomba/goomba_body.rgba16.png": [32,32,2048,{"jp":[2032944,103728],"us":[2040320,103728],"eu":[1912288,103728],"sh":[1888800,103728]}], -"actors/goomba/goomba_face.rgba16.png": [32,32,2048,{"jp":[2032944,105776],"us":[2040320,105776],"eu":[1912288,105776],"sh":[1888800,105776]}], -"actors/goomba/goomba_face_blink.rgba16.png": [32,32,2048,{"jp":[2032944,107824],"us":[2040320,107824],"eu":[1912288,107824],"sh":[1888800,107824]}], -"actors/haunted_cage/bbh_cage_bars.rgba16.png": [32,32,2048,{"jp":[1462368,55944],"us":[1469536,55944],"eu":[1341504,55944],"sh":[1318016,55944]}], -"actors/haunted_cage/bbh_cage_double_ornament.rgba16.png": [32,32,2048,{"jp":[1462368,51848],"us":[1469536,51848],"eu":[1341504,51848],"sh":[1318016,51848]}], -"actors/haunted_cage/bbh_cage_floor.rgba16.png": [32,32,2048,{"jp":[1462368,49800],"us":[1469536,49800],"eu":[1341504,49800],"sh":[1318016,49800]}], -"actors/haunted_cage/bbh_cage_garbage.rgba16.png": [32,32,2048,{"jp":[1462368,57992],"us":[1469536,57992],"eu":[1341504,57992],"sh":[1318016,57992]}], -"actors/haunted_cage/bbh_cage_ornament.rgba16.png": [32,16,1024,{"jp":[1462368,53896],"us":[1469536,53896],"eu":[1341504,53896],"sh":[1318016,53896]}], -"actors/haunted_cage/bbh_cage_wooden_base.rgba16.png": [32,16,1024,{"jp":[1462368,54920],"us":[1469536,54920],"eu":[1341504,54920],"sh":[1318016,54920]}], -"actors/heart/spinning_heart.rgba16.png": [32,32,2048,{"jp":[2032944,55264],"us":[2040320,55264],"eu":[1912288,55264],"sh":[1888800,55264]}], -"actors/heave_ho/heave-ho_arm_ornament.rgba16.png": [32,32,2048,{"jp":[1215456,68040],"us":[1222624,68040],"eu":[1094592,68040],"sh":[1071104,68040]}], -"actors/heave_ho/heave-ho_face.rgba16.png": [32,32,2048,{"jp":[1215456,59848],"us":[1222624,59848],"eu":[1094592,59848],"sh":[1071104,59848]}], -"actors/heave_ho/heave-ho_logo.rgba16.png": [64,32,4096,{"jp":[1215456,63944],"us":[1222624,63944],"eu":[1094592,63944],"sh":[1071104,63944]}], -"actors/heave_ho/heave-ho_platform.rgba16.png": [32,32,2048,{"jp":[1215456,61896],"us":[1222624,61896],"eu":[1094592,61896],"sh":[1071104,61896]}], -"actors/heave_ho/heave-ho_roller.rgba16.png": [16,16,512,{"jp":[1215456,70088],"us":[1222624,70088],"eu":[1094592,70088],"sh":[1071104,70088]}], -"actors/heave_ho/heave-ho_turnkey.rgba16.png": [32,32,2048,{"jp":[1215456,70600],"us":[1222624,70600],"eu":[1094592,70600],"sh":[1071104,70600]}], -"actors/hoot/hoot_eyes.rgba16.png": [32,32,2048,{"jp":[1215456,2592],"us":[1222624,2592],"eu":[1094592,2592],"sh":[1071104,2592]}], -"actors/hoot/hoot_wing.rgba16.png": [32,32,2048,{"jp":[1215456,7760],"us":[1222624,7760],"eu":[1094592,7760],"sh":[1071104,7760]}], -"actors/hoot/hoot_wing_tip.rgba16.png": [32,32,2048,{"jp":[1215456,9808],"us":[1222624,9808],"eu":[1094592,9808],"sh":[1071104,9808]}], -"actors/impact_ring/impact_ring_left_side.ia16.png": [32,64,4096,{"jp":[1599504,117328],"us":[1606720,117328],"eu":[1478688,117328],"sh":[1455200,117328]}], -"actors/impact_ring/impact_ring_right_side.ia16.png": [32,64,4096,{"jp":[1599504,121424],"us":[1606720,121424],"eu":[1478688,121424],"sh":[1455200,121424]}], -"actors/impact_smoke/impact_smoke_0.ia16.png": [64,64,8192,{"jp":[1599504,371240],"us":[1606720,371576],"eu":[1478688,371576],"sh":[1455200,371576]}], -"actors/impact_smoke/impact_smoke_1.ia16.png": [64,64,8192,{"jp":[1599504,379432],"us":[1606720,379768],"eu":[1478688,379768],"sh":[1455200,379768]}], -"actors/impact_smoke/impact_smoke_2.ia16.png": [64,64,8192,{"jp":[1599504,387624],"us":[1606720,387960],"eu":[1478688,387960],"sh":[1455200,387960]}], -"actors/impact_smoke/impact_smoke_3.ia16.png": [64,64,8192,{"jp":[1599504,395816],"us":[1606720,396152],"eu":[1478688,396152],"sh":[1455200,396152]}], -"actors/king_bobomb/bob-omb_buddy_body_unused.rgba16.png": [64,64,8192,{"jp":[1257760,25720],"us":[1264928,25720],"eu":[1136896,25720],"sh":[1113408,25720]}], -"actors/king_bobomb/bob-omb_buddy_left_side_unused.rgba16.png": [32,64,4096,{"jp":[1257760,120],"us":[1264928,120],"eu":[1136896,120],"sh":[1113408,120]}], -"actors/king_bobomb/bob-omb_buddy_right_side_unused.rgba16.png": [32,64,4096,{"jp":[1257760,4216],"us":[1264928,4216],"eu":[1136896,4216],"sh":[1113408,4216]}], -"actors/king_bobomb/king_bob-omb_arm.rgba16.png": [32,32,2048,{"jp":[1257760,8312],"us":[1264928,8312],"eu":[1136896,8312],"sh":[1113408,8312]}], -"actors/king_bobomb/king_bob-omb_body_unused.rgba16.png": [64,64,8192,{"jp":[1257760,10360],"us":[1264928,10360],"eu":[1136896,10360],"sh":[1113408,10360]}], -"actors/king_bobomb/king_bob-omb_crown_rim.rgba16.png": [32,16,1024,{"jp":[1257760,24696],"us":[1264928,24696],"eu":[1136896,24696],"sh":[1113408,24696]}], -"actors/king_bobomb/king_bob-omb_eyes.rgba16.png": [32,32,2048,{"jp":[1257760,18552],"us":[1264928,18552],"eu":[1136896,18552],"sh":[1113408,18552]}], -"actors/king_bobomb/king_bob-omb_eyes_blink.rgba16.png": [32,32,2048,{"jp":[1257760,20600],"us":[1264928,20600],"eu":[1136896,20600],"sh":[1113408,20600]}], -"actors/king_bobomb/king_bob-omb_hand.rgba16.png": [32,32,2048,{"jp":[1257760,22648],"us":[1264928,22648],"eu":[1136896,22648],"sh":[1113408,22648]}], -"actors/king_bobomb/king_bob-omb_left_side.rgba16.png": [32,64,4096,{"jp":[1257760,33912],"us":[1264928,33912],"eu":[1136896,33912],"sh":[1113408,33912]}], -"actors/king_bobomb/king_bob-omb_right_side.rgba16.png": [32,64,4096,{"jp":[1257760,38008],"us":[1264928,38008],"eu":[1136896,38008],"sh":[1113408,38008]}], -"actors/klepto/klepto_beak.rgba16.png": [32,64,4096,{"jp":[1327760,4104],"us":[1334928,4104],"eu":[1206896,4104],"sh":[1183408,4104]}], -"actors/klepto/klepto_chest_tuft.rgba16.png": [32,32,2048,{"jp":[1327760,8],"us":[1334928,8],"eu":[1206896,8],"sh":[1183408,8]}], -"actors/klepto/klepto_eye.rgba16.png": [32,32,2048,{"jp":[1327760,2056],"us":[1334928,2056],"eu":[1206896,2056],"sh":[1183408,2056]}], -"actors/klepto/klepto_wing.rgba16.png": [64,32,4096,{"jp":[1327760,8200],"us":[1334928,8200],"eu":[1206896,8200],"sh":[1183408,8200]}], -"actors/klepto/klepto_wing_flap.rgba16.png": [32,32,2048,{"jp":[1327760,12296],"us":[1334928,12296],"eu":[1206896,12296],"sh":[1183408,12296]}], -"actors/koopa/koopa_eye_border.rgba16.png": [32,32,2048,{"jp":[1844608,22088],"us":[1851952,22088],"eu":[1723920,22088],"sh":[1700432,22088]}], -"actors/koopa/koopa_eyes_closed.rgba16.png": [32,32,2048,{"jp":[1844608,20040],"us":[1851952,20040],"eu":[1723920,20040],"sh":[1700432,20040]}], -"actors/koopa/koopa_eyes_open.rgba16.png": [32,32,2048,{"jp":[1844608,17992],"us":[1851952,17992],"eu":[1723920,17992],"sh":[1700432,17992]}], -"actors/koopa/koopa_nostrils.rgba16.png": [64,32,4096,{"jp":[1844608,24136],"us":[1851952,24136],"eu":[1723920,24136],"sh":[1700432,24136]}], -"actors/koopa/koopa_shell_back.rgba16.png": [32,32,2048,{"jp":[1844608,11848],"us":[1851952,11848],"eu":[1723920,11848],"sh":[1700432,11848]}], -"actors/koopa/koopa_shell_front.rgba16.png": [32,32,2048,{"jp":[1844608,9800],"us":[1851952,9800],"eu":[1723920,9800],"sh":[1700432,9800]}], -"actors/koopa/koopa_shell_front_top.rgba16.png": [32,32,2048,{"jp":[1844608,15944],"us":[1851952,15944],"eu":[1723920,15944],"sh":[1700432,15944]}], -"actors/koopa/koopa_shoe.rgba16.png": [32,32,2048,{"jp":[1844608,13896],"us":[1851952,13896],"eu":[1723920,13896],"sh":[1700432,13896]}], -"actors/koopa_flag/koopa_flag_banner.rgba16.png": [32,32,2048,{"jp":[1844608,72],"us":[1851952,72],"eu":[1723920,72],"sh":[1700432,72]}], -"actors/koopa_shell/koopa_shell_back.rgba16.png": [32,32,2048,{"jp":[1844608,11848],"us":[1851952,11848],"eu":[1723920,11848],"sh":[1700432,11848]}], -"actors/koopa_shell/koopa_shell_front.rgba16.png": [32,32,2048,{"jp":[1844608,9800],"us":[1851952,9800],"eu":[1723920,9800],"sh":[1700432,9800]}], -"actors/lakitu_cameraman/lakitu_camera_lens.rgba16.png": [16,16,512,{"jp":[1926752,14336],"us":[1934096,14336],"eu":[1806064,14336],"sh":[1782576,14336]}], -"actors/lakitu_cameraman/lakitu_cameraman_cloud_face_unused.rgba16.png": [32,32,2048,{"jp":[1568640,60640],"us":[1575856,60640],"eu":[1447824,60640],"sh":[1424336,60640]}], -"actors/lakitu_cameraman/lakitu_cameraman_eyes_closed.rgba16.png": [64,32,4096,{"jp":[1568640,66784],"us":[1575856,66784],"eu":[1447824,66784],"sh":[1424336,66784]}], -"actors/lakitu_cameraman/lakitu_cameraman_eyes_open.rgba16.png": [64,32,4096,{"jp":[1568640,62688],"us":[1575856,62688],"eu":[1447824,62688],"sh":[1424336,62688]}], -"actors/lakitu_cameraman/lakitu_cameraman_frown.rgba16.png": [32,32,2048,{"jp":[1568640,72928],"us":[1575856,72928],"eu":[1447824,72928],"sh":[1424336,72928]}], -"actors/lakitu_cameraman/lakitu_cameraman_shell.rgba16.png": [32,32,2048,{"jp":[1568640,70880],"us":[1575856,70880],"eu":[1447824,70880],"sh":[1424336,70880]}], -"actors/lakitu_enemy/lakitu_enemy_cloud_face_unused.rgba16.png": [32,32,2048,{"jp":[1568640,60640],"us":[1575856,60640],"eu":[1447824,60640],"sh":[1424336,60640]}], -"actors/lakitu_enemy/lakitu_enemy_eyes_closed.rgba16.png": [64,32,4096,{"jp":[1568640,66784],"us":[1575856,66784],"eu":[1447824,66784],"sh":[1424336,66784]}], -"actors/lakitu_enemy/lakitu_enemy_eyes_open.rgba16.png": [64,32,4096,{"jp":[1568640,62688],"us":[1575856,62688],"eu":[1447824,62688],"sh":[1424336,62688]}], -"actors/lakitu_enemy/lakitu_enemy_frown.rgba16.png": [32,32,2048,{"jp":[1568640,72928],"us":[1575856,72928],"eu":[1447824,72928],"sh":[1424336,72928]}], -"actors/lakitu_enemy/lakitu_enemy_shell.rgba16.png": [32,32,2048,{"jp":[1568640,70880],"us":[1575856,70880],"eu":[1447824,70880],"sh":[1424336,70880]}], -"actors/leaves/leaf.rgba16.png": [16,16,512,{"jp":[2094912,117728],"us":[2102288,117728],"eu":[1974256,117728],"sh":[1950768,117728]}], -"actors/mad_piano/mad_piano_body.rgba16.png": [16,32,1024,{"jp":[1462368,29424],"us":[1469536,29424],"eu":[1341504,29424],"sh":[1318016,29424]}], -"actors/mad_piano/mad_piano_keys.rgba16.png": [32,16,1024,{"jp":[1462368,32496],"us":[1469536,32496],"eu":[1341504,32496],"sh":[1318016,32496]}], -"actors/mad_piano/mad_piano_keys_corner.rgba16.png": [32,16,1024,{"jp":[1462368,30448],"us":[1469536,30448],"eu":[1341504,30448],"sh":[1318016,30448]}], -"actors/mad_piano/mad_piano_keys_edge.rgba16.png": [32,16,1024,{"jp":[1462368,33520],"us":[1469536,33520],"eu":[1341504,33520],"sh":[1318016,33520]}], -"actors/mad_piano/mad_piano_mouth.rgba16.png": [16,32,1024,{"jp":[1462368,31472],"us":[1469536,31472],"eu":[1341504,31472],"sh":[1318016,31472]}], -"actors/mad_piano/mad_piano_tooth.rgba16.png": [32,32,2048,{"jp":[1462368,27376],"us":[1469536,27376],"eu":[1341504,27376],"sh":[1318016,27376]}], -"actors/manta/manta_eye.rgba16.png": [32,32,2048,{"jp":[1285392,12192],"us":[1292560,12192],"eu":[1164528,12192],"sh":[1141040,12192]}], -"actors/manta/manta_fin_corner.rgba16.png": [32,32,2048,{"jp":[1285392,6048],"us":[1292560,6048],"eu":[1164528,6048],"sh":[1141040,6048]}], -"actors/manta/manta_fin_edge.rgba16.png": [64,32,4096,{"jp":[1285392,14240],"us":[1292560,14240],"eu":[1164528,14240],"sh":[1141040,14240]}], -"actors/manta/manta_gills.rgba16.png": [32,64,4096,{"jp":[1285392,8096],"us":[1292560,8096],"eu":[1164528,8096],"sh":[1141040,8096]}], -"actors/mario/mario_eyes_center.rgba16.png": [32,32,2048,{"jp":[1125200,12432],"us":[1132368,12432],"eu":[1004336,12432],"sh":[980848,12432]}], -"actors/mario/mario_eyes_closed.rgba16.png": [32,32,2048,{"jp":[1125200,16528],"us":[1132368,16528],"eu":[1004336,16528],"sh":[980848,16528]}], -"actors/mario/mario_eyes_closed_unused_0.rgba16.png": [32,32,2048,{"jp":[1125200,16528],"us":[1132368,16528],"eu":[1004336,16528],"sh":[980848,16528]}], -"actors/mario/mario_eyes_closed_unused_1.rgba16.png": [32,32,2048,{"jp":[1125200,16528],"us":[1132368,16528],"eu":[1004336,16528],"sh":[980848,16528]}], -"actors/mario/mario_eyes_dead.rgba16.png": [32,32,2048,{"jp":[1125200,30864],"us":[1132368,30864],"eu":[1004336,30864],"sh":[980848,30864]}], -"actors/mario/mario_eyes_down_unused.rgba16.png": [32,32,2048,{"jp":[1125200,28816],"us":[1132368,28816],"eu":[1004336,28816],"sh":[980848,28816]}], -"actors/mario/mario_eyes_half_closed.rgba16.png": [32,32,2048,{"jp":[1125200,14480],"us":[1132368,14480],"eu":[1004336,14480],"sh":[980848,14480]}], -"actors/mario/mario_eyes_left_unused.rgba16.png": [32,32,2048,{"jp":[1125200,22672],"us":[1132368,22672],"eu":[1004336,22672],"sh":[980848,22672]}], -"actors/mario/mario_eyes_right_unused.rgba16.png": [32,32,2048,{"jp":[1125200,24720],"us":[1132368,24720],"eu":[1004336,24720],"sh":[980848,24720]}], -"actors/mario/mario_eyes_up_unused.rgba16.png": [32,32,2048,{"jp":[1125200,26768],"us":[1132368,26768],"eu":[1004336,26768],"sh":[980848,26768]}], -"actors/mario/mario_logo.rgba16.png": [32,32,2048,{"jp":[1125200,6288],"us":[1132368,6288],"eu":[1004336,6288],"sh":[980848,6288]}], -"actors/mario/mario_metal.rgba16.png": [64,32,4096,{"jp":[1125200,144],"us":[1132368,144],"eu":[1004336,144],"sh":[980848,144]}], -"actors/mario/mario_metal_wing_tip_unused.rgba16.png": [32,64,4096,{"jp":[1125200,45200],"us":[1132368,45200],"eu":[1004336,45200],"sh":[980848,45200]}], -"actors/mario/mario_metal_wing_unused.rgba16.png": [32,64,4096,{"jp":[1125200,41104],"us":[1132368,41104],"eu":[1004336,41104],"sh":[980848,41104]}], -"actors/mario/mario_mustache.rgba16.png": [32,32,2048,{"jp":[1125200,10384],"us":[1132368,10384],"eu":[1004336,10384],"sh":[980848,10384]}], -"actors/mario/mario_overalls_button.rgba16.png": [32,32,2048,{"jp":[1125200,4240],"us":[1132368,4240],"eu":[1004336,4240],"sh":[980848,4240]}], -"actors/mario/mario_sideburn.rgba16.png": [32,32,2048,{"jp":[1125200,8336],"us":[1132368,8336],"eu":[1004336,8336],"sh":[980848,8336]}], -"actors/mario/mario_wing.rgba16.png": [32,64,4096,{"jp":[1125200,32912],"us":[1132368,32912],"eu":[1004336,32912],"sh":[980848,32912]}], -"actors/mario/mario_wing_tip.rgba16.png": [32,64,4096,{"jp":[1125200,37008],"us":[1132368,37008],"eu":[1004336,37008],"sh":[980848,37008]}], -"actors/mario_cap/mario_cap_logo.rgba16.png": [32,32,2048,{"jp":[1125200,6288],"us":[1132368,6288],"eu":[1004336,6288],"sh":[980848,6288]}], -"actors/mario_cap/mario_cap_metal.rgba16.png": [64,32,4096,{"jp":[1125200,144],"us":[1132368,144],"eu":[1004336,144],"sh":[980848,144]}], -"actors/mario_cap/mario_cap_metal_wing_tip_unused.rgba16.png": [32,64,4096,{"jp":[1125200,45200],"us":[1132368,45200],"eu":[1004336,45200],"sh":[980848,45200]}], -"actors/mario_cap/mario_cap_metal_wing_unused.rgba16.png": [32,64,4096,{"jp":[1125200,41104],"us":[1132368,41104],"eu":[1004336,41104],"sh":[980848,41104]}], -"actors/mario_cap/mario_cap_wing.rgba16.png": [32,64,4096,{"jp":[1125200,32912],"us":[1132368,32912],"eu":[1004336,32912],"sh":[980848,32912]}], -"actors/mario_cap/mario_cap_wing_tip.rgba16.png": [32,64,4096,{"jp":[1125200,37008],"us":[1132368,37008],"eu":[1004336,37008],"sh":[980848,37008]}], -"actors/metal_box/metal_box_side.rgba16.png": [32,64,4096,{"jp":[2032944,145816],"us":[2040320,145816],"eu":[1912288,145816],"sh":[1888800,145816]}], -"actors/mips/mips_eyes.rgba16.png": [32,32,2048,{"jp":[1926752,64384],"us":[1934096,64624],"eu":[1806064,64624],"sh":[1782576,64624]}], -"actors/mist/mist.ia16.png": [32,32,2048,{"jp":[2094912,128],"us":[2102288,128],"eu":[1974256,128],"sh":[1950768,128]}], -"actors/moneybag/moneybag_eyes.rgba16.png": [32,32,2048,{"jp":[1979680,18864],"us":[1987056,18864],"eu":[1859024,18864],"sh":[1835536,18864]}], -"actors/moneybag/moneybag_mouth.rgba16.png": [64,32,4096,{"jp":[1979680,14768],"us":[1987056,14768],"eu":[1859024,14768],"sh":[1835536,14768]}], -"actors/monty_mole/monty_mole_cheek.rgba16.png": [32,32,2048,{"jp":[1377744,2416],"us":[1384912,2416],"eu":[1256880,2416],"sh":[1233392,2416]}], -"actors/monty_mole/monty_mole_claw.rgba16.png": [32,32,2048,{"jp":[1377744,10608],"us":[1384912,10608],"eu":[1256880,10608],"sh":[1233392,10608]}], -"actors/monty_mole/monty_mole_eye.rgba16.png": [32,32,2048,{"jp":[1377744,4464],"us":[1384912,4464],"eu":[1256880,4464],"sh":[1233392,4464]}], -"actors/monty_mole/monty_mole_nose.rgba16.png": [32,32,2048,{"jp":[1377744,6512],"us":[1384912,6512],"eu":[1256880,6512],"sh":[1233392,6512]}], -"actors/monty_mole/monty_mole_tooth.rgba16.png": [32,32,2048,{"jp":[1377744,8560],"us":[1384912,8560],"eu":[1256880,8560],"sh":[1233392,8560]}], -"actors/monty_mole_hole/monty_mole_hole.ia16.png": [32,32,2048,{"jp":[1377744,64],"us":[1384912,64],"eu":[1256880,64],"sh":[1233392,64]}], -"actors/mr_i_eyeball/mr_i_eyeball_left_side.rgba16.png": [32,64,4096,{"jp":[1991184,128],"us":[1998560,128],"eu":[1870528,128],"sh":[1847040,128]}], -"actors/mr_i_eyeball/mr_i_eyeball_right_side.rgba16.png": [32,64,4096,{"jp":[1991184,4224],"us":[1998560,4224],"eu":[1870528,4224],"sh":[1847040,4224]}], -"actors/mr_i_iris/mr_i_iris_closed.rgba16.png": [32,32,2048,{"jp":[1991184,14704],"us":[1998560,14704],"eu":[1870528,14704],"sh":[1847040,14704]}], -"actors/mr_i_iris/mr_i_iris_mostly_closed.rgba16.png": [32,32,2048,{"jp":[1991184,12656],"us":[1998560,12656],"eu":[1870528,12656],"sh":[1847040,12656]}], -"actors/mr_i_iris/mr_i_iris_mostly_open.rgba16.png": [32,32,2048,{"jp":[1991184,10608],"us":[1998560,10608],"eu":[1870528,10608],"sh":[1847040,10608]}], -"actors/mr_i_iris/mr_i_iris_open.rgba16.png": [32,32,2048,{"jp":[1991184,8560],"us":[1998560,8560],"eu":[1870528,8560],"sh":[1847040,8560]}], -"actors/mushroom_1up/1-up_mushroom.rgba16.png": [32,64,4096,{"jp":[2094912,169512],"us":[2102288,169512],"eu":[1974256,169512],"sh":[1950768,169512]}], -"actors/peach/peach_chest_jewel.rgba16.png": [16,16,512,{"jp":[1490032,11304],"us":[1497200,11304],"eu":[1369168,11304],"sh":[1345680,11304]}], -"actors/peach/peach_crown_jewel.rgba16.png": [16,16,512,{"jp":[1490032,10792],"us":[1497200,10792],"eu":[1369168,10792],"sh":[1345680,10792]}], -"actors/peach/peach_dress.rgba16.png": [32,32,2048,{"jp":[1490032,16424],"us":[1497200,16424],"eu":[1369168,16424],"sh":[1345680,16424]}], -"actors/peach/peach_eye_closed.rgba16.png": [32,32,2048,{"jp":[1490032,8744],"us":[1497200,8744],"eu":[1369168,8744],"sh":[1345680,8744]}], -"actors/peach/peach_eye_mostly_closed.rgba16.png": [32,32,2048,{"jp":[1490032,6696],"us":[1497200,6696],"eu":[1369168,6696],"sh":[1345680,6696]}], -"actors/peach/peach_eye_mostly_open.rgba16.png": [32,32,2048,{"jp":[1490032,4648],"us":[1497200,4648],"eu":[1369168,4648],"sh":[1345680,4648]}], -"actors/peach/peach_eye_open.rgba16.png": [32,32,2048,{"jp":[1490032,2600],"us":[1497200,2600],"eu":[1369168,2600],"sh":[1345680,2600]}], -"actors/peach/peach_lips.rgba16.png": [32,32,2048,{"jp":[1490032,13864],"us":[1497200,13864],"eu":[1369168,13864],"sh":[1345680,13864]}], -"actors/peach/peach_lips_scrunched.rgba16.png": [32,32,2048,{"jp":[1490032,11816],"us":[1497200,11816],"eu":[1369168,11816],"sh":[1345680,11816]}], -"actors/peach/peach_nostril.rgba16.png": [16,16,512,{"jp":[1490032,15912],"us":[1497200,15912],"eu":[1369168,15912],"sh":[1345680,15912]}], -"actors/pebble/pebble.rgba16.png": [32,32,2048,{"jp":[2094912,115456],"us":[2102288,115456],"eu":[1974256,115456],"sh":[1950768,115456]}], -"actors/penguin/penguin_beak.rgba16.png": [32,32,2048,{"jp":[1436272,21984],"us":[1443440,21984],"eu":[1315408,21984],"sh":[1291920,21984]}], -"actors/penguin/penguin_eye_angry.rgba16.png": [32,32,2048,{"jp":[1436272,17888],"us":[1443440,17888],"eu":[1315408,17888],"sh":[1291920,17888]}], -"actors/penguin/penguin_eye_angry_unused.rgba16.png": [32,32,2048,{"jp":[1436272,19936],"us":[1443440,19936],"eu":[1315408,19936],"sh":[1291920,19936]}], -"actors/penguin/penguin_eye_closed.rgba16.png": [32,32,2048,{"jp":[1436272,15840],"us":[1443440,15840],"eu":[1315408,15840],"sh":[1291920,15840]}], -"actors/penguin/penguin_eye_half_closed.rgba16.png": [32,32,2048,{"jp":[1436272,13792],"us":[1443440,13792],"eu":[1315408,13792],"sh":[1291920,13792]}], -"actors/penguin/penguin_eye_open.rgba16.png": [32,32,2048,{"jp":[1436272,11744],"us":[1443440,11744],"eu":[1315408,11744],"sh":[1291920,11744]}], -"actors/piranha_plant/piranha_plant_bottom_lip.rgba16.png": [32,32,2048,{"jp":[1844608,78840],"us":[1851952,78840],"eu":[1723920,78840],"sh":[1700432,78840]}], -"actors/piranha_plant/piranha_plant_leaf.rgba16.png": [32,64,4096,{"jp":[1844608,82936],"us":[1851952,82936],"eu":[1723920,82936],"sh":[1700432,82936]}], -"actors/piranha_plant/piranha_plant_skin.rgba16.png": [32,32,2048,{"jp":[1844608,74744],"us":[1851952,74744],"eu":[1723920,74744],"sh":[1700432,74744]}], -"actors/piranha_plant/piranha_plant_stem.rgba16.png": [32,32,2048,{"jp":[1844608,76792],"us":[1851952,76792],"eu":[1723920,76792],"sh":[1700432,76792]}], -"actors/piranha_plant/piranha_plant_tongue.rgba16.png": [32,64,4096,{"jp":[1599504,148536],"us":[1606720,148536],"eu":[1478688,148536],"sh":[1455200,148536]}], -"actors/piranha_plant/piranha_plant_tooth.rgba16.png": [32,32,2048,{"jp":[1844608,80888],"us":[1851952,80888],"eu":[1723920,80888],"sh":[1700432,80888]}], -"actors/pokey/pokey_body.rgba16.png": [32,32,2048,{"jp":[1327760,75896],"us":[1334928,75896],"eu":[1206896,75896],"sh":[1183408,75896]}], -"actors/pokey/pokey_face.rgba16.png": [32,32,2048,{"jp":[1327760,71504],"us":[1334928,71504],"eu":[1206896,71504],"sh":[1183408,71504]}], -"actors/pokey/pokey_face_blink.rgba16.png": [32,32,2048,{"jp":[1327760,73552],"us":[1334928,73552],"eu":[1206896,73552],"sh":[1183408,73552]}], -"actors/poundable_pole/poundable_pole_side.rgba16.png": [32,32,2048,{"jp":[1844608,6224],"us":[1851952,6224],"eu":[1723920,6224],"sh":[1700432,6224]}], -"actors/poundable_pole/poundable_pole_top.rgba16.png": [32,32,2048,{"jp":[1844608,4176],"us":[1851952,4176],"eu":[1723920,4176],"sh":[1700432,4176]}], -"actors/power_meter/power_meter_five_segments.rgba16.png": [32,32,2048,{"jp":[2094912,158688],"us":[2102288,158688],"eu":[1974256,158688],"sh":[1950768,158688]}], -"actors/power_meter/power_meter_four_segments.rgba16.png": [32,32,2048,{"jp":[2094912,160736],"us":[2102288,160736],"eu":[1974256,160736],"sh":[1950768,160736]}], -"actors/power_meter/power_meter_full.rgba16.png": [32,32,2048,{"jp":[2094912,152544],"us":[2102288,152544],"eu":[1974256,152544],"sh":[1950768,152544]}], +"@sound tbl sh": [2184688,{"sh":[5685952],"cn":[5758976]}], +"@sound ctl header sh": [624,{"sh":[864272],"cn":[876656]}], +"@sound tbl header sh": [192,{"sh":[865056],"cn":[877440]}], +"textures/ipl3_raw/ipl3_font_00.ia1.png": [13,14,23,{"jp":[2928],"us":[2928],"eu":[2928],"sh":[2928],"cn":[2928]}], +"textures/ipl3_raw/ipl3_font_01.ia1.png": [13,14,23,{"jp":[2951],"us":[2951],"eu":[2951],"sh":[2951],"cn":[2951]}], +"textures/ipl3_raw/ipl3_font_02.ia1.png": [13,14,23,{"jp":[2974],"us":[2974],"eu":[2974],"sh":[2974],"cn":[2974]}], +"textures/ipl3_raw/ipl3_font_03.ia1.png": [13,14,23,{"jp":[2997],"us":[2997],"eu":[2997],"sh":[2997],"cn":[2997]}], +"textures/ipl3_raw/ipl3_font_04.ia1.png": [13,14,23,{"jp":[3020],"us":[3020],"eu":[3020],"sh":[3020],"cn":[3020]}], +"textures/ipl3_raw/ipl3_font_05.ia1.png": [13,14,23,{"jp":[3043],"us":[3043],"eu":[3043],"sh":[3043],"cn":[3043]}], +"textures/ipl3_raw/ipl3_font_06.ia1.png": [13,14,23,{"jp":[3066],"us":[3066],"eu":[3066],"sh":[3066],"cn":[3066]}], +"textures/ipl3_raw/ipl3_font_07.ia1.png": [13,14,23,{"jp":[3089],"us":[3089],"eu":[3089],"sh":[3089],"cn":[3089]}], +"textures/ipl3_raw/ipl3_font_08.ia1.png": [13,14,23,{"jp":[3112],"us":[3112],"eu":[3112],"sh":[3112],"cn":[3112]}], +"textures/ipl3_raw/ipl3_font_09.ia1.png": [13,14,23,{"jp":[3135],"us":[3135],"eu":[3135],"sh":[3135],"cn":[3135]}], +"textures/ipl3_raw/ipl3_font_10.ia1.png": [13,14,23,{"jp":[3158],"us":[3158],"eu":[3158],"sh":[3158],"cn":[3158]}], +"textures/ipl3_raw/ipl3_font_11.ia1.png": [13,14,23,{"jp":[3181],"us":[3181],"eu":[3181],"sh":[3181],"cn":[3181]}], +"textures/ipl3_raw/ipl3_font_12.ia1.png": [13,14,23,{"jp":[3204],"us":[3204],"eu":[3204],"sh":[3204],"cn":[3204]}], +"textures/ipl3_raw/ipl3_font_13.ia1.png": [13,14,23,{"jp":[3227],"us":[3227],"eu":[3227],"sh":[3227],"cn":[3227]}], +"textures/ipl3_raw/ipl3_font_14.ia1.png": [13,14,23,{"jp":[3250],"us":[3250],"eu":[3250],"sh":[3250],"cn":[3250]}], +"textures/ipl3_raw/ipl3_font_15.ia1.png": [13,14,23,{"jp":[3273],"us":[3273],"eu":[3273],"sh":[3273],"cn":[3273]}], +"textures/ipl3_raw/ipl3_font_16.ia1.png": [13,14,23,{"jp":[3296],"us":[3296],"eu":[3296],"sh":[3296],"cn":[3296]}], +"textures/ipl3_raw/ipl3_font_17.ia1.png": [13,14,23,{"jp":[3319],"us":[3319],"eu":[3319],"sh":[3319],"cn":[3319]}], +"textures/ipl3_raw/ipl3_font_18.ia1.png": [13,14,23,{"jp":[3342],"us":[3342],"eu":[3342],"sh":[3342],"cn":[3342]}], +"textures/ipl3_raw/ipl3_font_19.ia1.png": [13,14,23,{"jp":[3365],"us":[3365],"eu":[3365],"sh":[3365],"cn":[3365]}], +"textures/ipl3_raw/ipl3_font_20.ia1.png": [13,14,23,{"jp":[3388],"us":[3388],"eu":[3388],"sh":[3388],"cn":[3388]}], +"textures/ipl3_raw/ipl3_font_21.ia1.png": [13,14,23,{"jp":[3411],"us":[3411],"eu":[3411],"sh":[3411],"cn":[3411]}], +"textures/ipl3_raw/ipl3_font_22.ia1.png": [13,14,23,{"jp":[3434],"us":[3434],"eu":[3434],"sh":[3434],"cn":[3434]}], +"textures/ipl3_raw/ipl3_font_23.ia1.png": [13,14,23,{"jp":[3457],"us":[3457],"eu":[3457],"sh":[3457],"cn":[3457]}], +"textures/ipl3_raw/ipl3_font_24.ia1.png": [13,14,23,{"jp":[3480],"us":[3480],"eu":[3480],"sh":[3480],"cn":[3480]}], +"textures/ipl3_raw/ipl3_font_25.ia1.png": [13,14,23,{"jp":[3503],"us":[3503],"eu":[3503],"sh":[3503],"cn":[3503]}], +"textures/ipl3_raw/ipl3_font_26.ia1.png": [13,14,23,{"jp":[3526],"us":[3526],"eu":[3526],"sh":[3526],"cn":[3526]}], +"textures/ipl3_raw/ipl3_font_27.ia1.png": [13,14,23,{"jp":[3549],"us":[3549],"eu":[3549],"sh":[3549],"cn":[3549]}], +"textures/ipl3_raw/ipl3_font_28.ia1.png": [13,14,23,{"jp":[3572],"us":[3572],"eu":[3572],"sh":[3572],"cn":[3572]}], +"textures/ipl3_raw/ipl3_font_29.ia1.png": [13,14,23,{"jp":[3595],"us":[3595],"eu":[3595],"sh":[3595],"cn":[3595]}], +"textures/ipl3_raw/ipl3_font_30.ia1.png": [13,14,23,{"jp":[3618],"us":[3618],"eu":[3618],"sh":[3618],"cn":[3618]}], +"textures/ipl3_raw/ipl3_font_31.ia1.png": [13,14,23,{"jp":[3641],"us":[3641],"eu":[3641],"sh":[3641],"cn":[3641]}], +"textures/ipl3_raw/ipl3_font_32.ia1.png": [13,14,23,{"jp":[3664],"us":[3664],"eu":[3664],"sh":[3664],"cn":[3664]}], +"textures/ipl3_raw/ipl3_font_33.ia1.png": [13,14,23,{"jp":[3687],"us":[3687],"eu":[3687],"sh":[3687],"cn":[3687]}], +"textures/ipl3_raw/ipl3_font_34.ia1.png": [13,14,23,{"jp":[3710],"us":[3710],"eu":[3710],"sh":[3710],"cn":[3710]}], +"textures/ipl3_raw/ipl3_font_35.ia1.png": [13,14,23,{"jp":[3733],"us":[3733],"eu":[3733],"sh":[3733],"cn":[3733]}], +"textures/ipl3_raw/ipl3_font_36.ia1.png": [13,14,23,{"jp":[3756],"us":[3756],"eu":[3756],"sh":[3756],"cn":[3756]}], +"textures/ipl3_raw/ipl3_font_37.ia1.png": [13,14,23,{"jp":[3779],"us":[3779],"eu":[3779],"sh":[3779],"cn":[3779]}], +"textures/ipl3_raw/ipl3_font_38.ia1.png": [13,14,23,{"jp":[3802],"us":[3802],"eu":[3802],"sh":[3802],"cn":[3802]}], +"textures/ipl3_raw/ipl3_font_39.ia1.png": [13,14,23,{"jp":[3825],"us":[3825],"eu":[3825],"sh":[3825],"cn":[3825]}], +"textures/ipl3_raw/ipl3_font_40.ia1.png": [13,14,23,{"jp":[3848],"us":[3848],"eu":[3848],"sh":[3848],"cn":[3848]}], +"textures/ipl3_raw/ipl3_font_41.ia1.png": [13,14,23,{"jp":[3871],"us":[3871],"eu":[3871],"sh":[3871],"cn":[3871]}], +"textures/ipl3_raw/ipl3_font_42.ia1.png": [13,14,23,{"jp":[3894],"us":[3894],"eu":[3894],"sh":[3894],"cn":[3894]}], +"textures/ipl3_raw/ipl3_font_43.ia1.png": [13,14,23,{"jp":[3917],"us":[3917],"eu":[3917],"sh":[3917],"cn":[3917]}], +"textures/ipl3_raw/ipl3_font_44.ia1.png": [13,14,23,{"jp":[3940],"us":[3940],"eu":[3940],"sh":[3940],"cn":[3940]}], +"textures/ipl3_raw/ipl3_font_45.ia1.png": [13,14,23,{"jp":[3963],"us":[3963],"eu":[3963],"sh":[3963],"cn":[3963]}], +"textures/ipl3_raw/ipl3_font_46.ia1.png": [13,14,23,{"jp":[3986],"us":[3986],"eu":[3986],"sh":[3986],"cn":[3986]}], +"textures/ipl3_raw/ipl3_font_47.ia1.png": [13,14,23,{"jp":[4009],"us":[4009],"eu":[4009],"sh":[4009],"cn":[4009]}], +"textures/ipl3_raw/ipl3_font_48.ia1.png": [13,14,23,{"jp":[4032],"us":[4032],"eu":[4032],"sh":[4032],"cn":[4032]}], +"textures/ipl3_raw/ipl3_font_49.ia1.png": [13,14,23,{"jp":[4055],"us":[4055],"eu":[4055],"sh":[4055],"cn":[4055]}], +"textures/crash_screen/crash_screen_font.ia1.png": [32,63,252,{"eu":[757168],"sh":[805680],"cn":[815248]}], +"actors/amp/amp_body.rgba16.png": [32,32,2048,{"jp":[2032944,6936],"us":[2040320,6936],"eu":[1912288,6936],"sh":[1888800,6936],"cn":[1955632,6936]}], +"actors/amp/amp_electricity.rgba16.png": [16,32,1024,{"jp":[2032944,3864],"us":[2040320,3864],"eu":[1912288,3864],"sh":[1888800,3864],"cn":[1955632,3864]}], +"actors/amp/amp_eyes.rgba16.png": [32,32,2048,{"jp":[2032944,4888],"us":[2040320,4888],"eu":[1912288,4888],"sh":[1888800,4888],"cn":[1955632,4888]}], +"actors/amp/amp_mouth.rgba16.png": [32,32,2048,{"jp":[2032944,8984],"us":[2040320,8984],"eu":[1912288,8984],"sh":[1888800,8984],"cn":[1955632,8984]}], +"actors/blue_coin_switch/blue_coin_switch_side.rgba16.png": [32,16,1024,{"jp":[2032944,24],"us":[2040320,24],"eu":[1912288,24],"sh":[1888800,24],"cn":[1955632,24]}], +"actors/blue_coin_switch/blue_coin_switch_top.rgba16.png": [32,32,2048,{"jp":[2032944,1048],"us":[2040320,1048],"eu":[1912288,1048],"sh":[1888800,1048],"cn":[1955632,1048]}], +"actors/blue_fish/blue_fish.rgba16.png": [32,32,2048,{"jp":[2094912,112096],"us":[2102288,112096],"eu":[1974256,112096],"sh":[1950768,112096],"cn":[2017600,112096]}], +"actors/bobomb/bob-omb_buddy_left_side.rgba16.png": [32,64,4096,{"jp":[1257760,120],"us":[1264928,120],"eu":[1136896,120],"sh":[1113408,120],"cn":[1180240,120]}], +"actors/bobomb/bob-omb_buddy_right_side.rgba16.png": [32,64,4096,{"jp":[1257760,4216],"us":[1264928,4216],"eu":[1136896,4216],"sh":[1113408,4216],"cn":[1180240,4216]}], +"actors/bobomb/bob-omb_eyes.rgba16.png": [32,32,2048,{"jp":[1257760,18552],"us":[1264928,18552],"eu":[1136896,18552],"sh":[1113408,18552],"cn":[1180240,18552]}], +"actors/bobomb/bob-omb_eyes_blink.rgba16.png": [32,32,2048,{"jp":[1257760,20600],"us":[1264928,20600],"eu":[1136896,20600],"sh":[1113408,20600],"cn":[1180240,20600]}], +"actors/bobomb/bob-omb_left_side.rgba16.png": [32,64,4096,{"jp":[2032944,121440],"us":[2040320,121440],"eu":[1912288,121440],"sh":[1888800,121440],"cn":[1955632,121440]}], +"actors/bobomb/bob-omb_right_side.rgba16.png": [32,64,4096,{"jp":[2032944,125536],"us":[2040320,125536],"eu":[1912288,125536],"sh":[1888800,125536],"cn":[1955632,125536]}], +"actors/bomb/bomb_left_side.rgba16.png": [32,64,4096,{"jp":[1599504,359104],"us":[1606720,359440],"eu":[1478688,359440],"sh":[1455200,359440],"cn":[1522032,359440]}], +"actors/bomb/bomb_right_side.rgba16.png": [32,64,4096,{"jp":[1599504,363200],"us":[1606720,363536],"eu":[1478688,363536],"sh":[1455200,363536],"cn":[1522032,363536]}], +"actors/bomb/bomb_spike.rgba16.png": [32,32,2048,{"jp":[1599504,367296],"us":[1606720,367632],"eu":[1478688,367632],"sh":[1455200,367632],"cn":[1522032,367632]}], +"actors/boo/boo_eyes.rgba16.png": [64,32,4096,{"jp":[1462368,39744],"us":[1469536,39744],"eu":[1341504,39744],"sh":[1318016,39744],"cn":[1384848,39744]}], +"actors/boo/boo_mouth.rgba16.png": [32,32,2048,{"jp":[1462368,43840],"us":[1469536,43840],"eu":[1341504,43840],"sh":[1318016,43840],"cn":[1384848,43840]}], +"actors/boo_castle/bbh_boo_eyes.rgba16.png": [64,32,4096,{"jp":[1462368,39744],"us":[1469536,39744],"eu":[1341504,39744],"sh":[1318016,39744],"cn":[1384848,39744]}], +"actors/boo_castle/bbh_boo_mouth.rgba16.png": [32,32,2048,{"jp":[1462368,43840],"us":[1469536,43840],"eu":[1341504,43840],"sh":[1318016,43840],"cn":[1384848,43840]}], +"actors/book/book_cover.rgba16.png": [32,32,2048,{"jp":[1462368,4192],"us":[1469536,4192],"eu":[1341504,4192],"sh":[1318016,4192],"cn":[1384848,4192]}], +"actors/bookend/bookend_cover.rgba16.png": [32,32,2048,{"jp":[1462368,4192],"us":[1469536,4192],"eu":[1341504,4192],"sh":[1318016,4192],"cn":[1384848,4192]}], +"actors/bookend/bookend_mouth.rgba16.png": [16,32,1024,{"jp":[1462368,2144],"us":[1469536,2144],"eu":[1341504,2144],"sh":[1318016,2144],"cn":[1384848,2144]}], +"actors/bookend/bookend_pages.rgba16.png": [16,32,1024,{"jp":[1462368,3168],"us":[1469536,3168],"eu":[1341504,3168],"sh":[1318016,3168],"cn":[1384848,3168]}], +"actors/bookend/bookend_spine.rgba16.png": [16,32,1024,{"jp":[1462368,96],"us":[1469536,96],"eu":[1341504,96],"sh":[1318016,96],"cn":[1384848,96]}], +"actors/bookend/bookend_tooth.rgba16.png": [16,32,1024,{"jp":[1462368,1120],"us":[1469536,1120],"eu":[1341504,1120],"sh":[1318016,1120],"cn":[1384848,1120]}], +"actors/bowser/bowser_armband.rgba16.png": [32,32,2048,{"jp":[1599504,146488],"us":[1606720,146488],"eu":[1478688,146488],"sh":[1455200,146488],"cn":[1522032,146488]}], +"actors/bowser/bowser_armband_spike.rgba16.png": [64,32,4096,{"jp":[1599504,142392],"us":[1606720,142392],"eu":[1478688,142392],"sh":[1455200,142392],"cn":[1522032,142392]}], +"actors/bowser/bowser_blue_eye_unused.rgba16.png": [64,32,4096,{"jp":[1599504,156728],"us":[1606720,156728],"eu":[1478688,156728],"sh":[1455200,156728],"cn":[1522032,156728]}], +"actors/bowser/bowser_body.rgba16.png": [32,32,2048,{"jp":[1599504,140344],"us":[1606720,140344],"eu":[1478688,140344],"sh":[1455200,140344],"cn":[1522032,140344]}], +"actors/bowser/bowser_chest.rgba16.png": [32,32,2048,{"jp":[1599504,152632],"us":[1606720,152632],"eu":[1478688,152632],"sh":[1455200,152632],"cn":[1522032,152632]}], +"actors/bowser/bowser_claw_edge.rgba16.png": [32,64,4096,{"jp":[1599504,171064],"us":[1606720,171064],"eu":[1478688,171064],"sh":[1455200,171064],"cn":[1522032,171064]}], +"actors/bowser/bowser_claw_horn_angle.rgba16.png": [32,64,4096,{"jp":[1599504,179256],"us":[1606720,179256],"eu":[1478688,179256],"sh":[1455200,179256],"cn":[1522032,179256]}], +"actors/bowser/bowser_claw_horn_tooth.rgba16.png": [32,64,4096,{"jp":[1599504,175160],"us":[1606720,175160],"eu":[1478688,175160],"sh":[1455200,175160],"cn":[1522032,175160]}], +"actors/bowser/bowser_eye_center_0.rgba16.png": [64,32,4096,{"jp":[1599504,195640],"us":[1606720,195640],"eu":[1478688,195640],"sh":[1455200,195640],"cn":[1522032,195640]}], +"actors/bowser/bowser_eye_center_1.rgba16.png": [64,32,4096,{"jp":[1599504,195640],"us":[1606720,195640],"eu":[1478688,195640],"sh":[1455200,195640],"cn":[1522032,195640]}], +"actors/bowser/bowser_eye_closed_0.rgba16.png": [64,32,4096,{"jp":[1599504,191544],"us":[1606720,191544],"eu":[1478688,191544],"sh":[1455200,191544],"cn":[1522032,191544]}], +"actors/bowser/bowser_eye_closed_1.rgba16.png": [64,32,4096,{"jp":[1599504,191544],"us":[1606720,191544],"eu":[1478688,191544],"sh":[1455200,191544],"cn":[1522032,191544]}], +"actors/bowser/bowser_eye_far_left_0.rgba16.png": [64,32,4096,{"jp":[1599504,203832],"us":[1606720,203832],"eu":[1478688,203832],"sh":[1455200,203832],"cn":[1522032,203832]}], +"actors/bowser/bowser_eye_far_left_1.rgba16.png": [64,32,4096,{"jp":[1599504,203832],"us":[1606720,203832],"eu":[1478688,203832],"sh":[1455200,203832],"cn":[1522032,203832]}], +"actors/bowser/bowser_eye_half_closed_0.rgba16.png": [64,32,4096,{"jp":[1599504,187448],"us":[1606720,187448],"eu":[1478688,187448],"sh":[1455200,187448],"cn":[1522032,187448]}], +"actors/bowser/bowser_eye_half_closed_1.rgba16.png": [64,32,4096,{"jp":[1599504,187448],"us":[1606720,187448],"eu":[1478688,187448],"sh":[1455200,187448],"cn":[1522032,187448]}], +"actors/bowser/bowser_eye_left_0.rgba16.png": [64,32,4096,{"jp":[1599504,183352],"us":[1606720,183352],"eu":[1478688,183352],"sh":[1455200,183352],"cn":[1522032,183352]}], +"actors/bowser/bowser_eye_left_1.rgba16.png": [64,32,4096,{"jp":[1599504,183352],"us":[1606720,183352],"eu":[1478688,183352],"sh":[1455200,183352],"cn":[1522032,183352]}], +"actors/bowser/bowser_eye_right_0.rgba16.png": [64,32,4096,{"jp":[1599504,199736],"us":[1606720,199736],"eu":[1478688,199736],"sh":[1455200,199736],"cn":[1522032,199736]}], +"actors/bowser/bowser_eye_right_1.rgba16.png": [64,32,4096,{"jp":[1599504,199736],"us":[1606720,199736],"eu":[1478688,199736],"sh":[1455200,199736],"cn":[1522032,199736]}], +"actors/bowser/bowser_eyebrow.rgba16.png": [64,32,4096,{"jp":[1599504,130104],"us":[1606720,130104],"eu":[1478688,130104],"sh":[1455200,130104],"cn":[1522032,130104]}], +"actors/bowser/bowser_hair.rgba16.png": [32,64,4096,{"jp":[1599504,166968],"us":[1606720,166968],"eu":[1478688,166968],"sh":[1455200,166968],"cn":[1522032,166968]}], +"actors/bowser/bowser_mouth_unused.rgba16.png": [64,32,4096,{"jp":[1599504,160824],"us":[1606720,160824],"eu":[1478688,160824],"sh":[1455200,160824],"cn":[1522032,160824]}], +"actors/bowser/bowser_muzzle.rgba16.png": [32,32,2048,{"jp":[1599504,134200],"us":[1606720,134200],"eu":[1478688,134200],"sh":[1455200,134200],"cn":[1522032,134200]}], +"actors/bowser/bowser_nostrils.rgba16.png": [64,32,4096,{"jp":[1599504,136248],"us":[1606720,136248],"eu":[1478688,136248],"sh":[1455200,136248],"cn":[1522032,136248]}], +"actors/bowser/bowser_shell.rgba16.png": [32,32,2048,{"jp":[1599504,128056],"us":[1606720,128056],"eu":[1478688,128056],"sh":[1455200,128056],"cn":[1522032,128056]}], +"actors/bowser/bowser_shell_edge.rgba16.png": [32,32,2048,{"jp":[1599504,154680],"us":[1606720,154680],"eu":[1478688,154680],"sh":[1455200,154680],"cn":[1522032,154680]}], +"actors/bowser/bowser_tongue.rgba16.png": [32,64,4096,{"jp":[1599504,148536],"us":[1606720,148536],"eu":[1478688,148536],"sh":[1455200,148536],"cn":[1522032,148536]}], +"actors/bowser/bowser_upper_face.rgba16.png": [32,32,2048,{"jp":[1599504,164920],"us":[1606720,164920],"eu":[1478688,164920],"sh":[1455200,164920],"cn":[1522032,164920]}], +"actors/bowser_flame/bowser_flame_0.rgba16.png": [64,64,8192,{"jp":[1599504,0],"us":[1606720,0],"eu":[1478688,0],"sh":[1455200,0],"cn":[1522032,0]}], +"actors/bowser_flame/bowser_flame_1.rgba16.png": [64,64,8192,{"jp":[1599504,8192],"us":[1606720,8192],"eu":[1478688,8192],"sh":[1455200,8192],"cn":[1522032,8192]}], +"actors/bowser_flame/bowser_flame_10.rgba16.png": [64,64,8192,{"jp":[1599504,81920],"us":[1606720,81920],"eu":[1478688,81920],"sh":[1455200,81920],"cn":[1522032,81920]}], +"actors/bowser_flame/bowser_flame_11.rgba16.png": [64,64,8192,{"jp":[1599504,90112],"us":[1606720,90112],"eu":[1478688,90112],"sh":[1455200,90112],"cn":[1522032,90112]}], +"actors/bowser_flame/bowser_flame_12.rgba16.png": [64,64,8192,{"jp":[1599504,98304],"us":[1606720,98304],"eu":[1478688,98304],"sh":[1455200,98304],"cn":[1522032,98304]}], +"actors/bowser_flame/bowser_flame_13.rgba16.png": [64,64,8192,{"jp":[1599504,106496],"us":[1606720,106496],"eu":[1478688,106496],"sh":[1455200,106496],"cn":[1522032,106496]}], +"actors/bowser_flame/bowser_flame_2.rgba16.png": [64,64,8192,{"jp":[1599504,16384],"us":[1606720,16384],"eu":[1478688,16384],"sh":[1455200,16384],"cn":[1522032,16384]}], +"actors/bowser_flame/bowser_flame_3.rgba16.png": [64,64,8192,{"jp":[1599504,24576],"us":[1606720,24576],"eu":[1478688,24576],"sh":[1455200,24576],"cn":[1522032,24576]}], +"actors/bowser_flame/bowser_flame_4.rgba16.png": [64,64,8192,{"jp":[1599504,32768],"us":[1606720,32768],"eu":[1478688,32768],"sh":[1455200,32768],"cn":[1522032,32768]}], +"actors/bowser_flame/bowser_flame_5.rgba16.png": [64,64,8192,{"jp":[1599504,40960],"us":[1606720,40960],"eu":[1478688,40960],"sh":[1455200,40960],"cn":[1522032,40960]}], +"actors/bowser_flame/bowser_flame_6.rgba16.png": [64,64,8192,{"jp":[1599504,49152],"us":[1606720,49152],"eu":[1478688,49152],"sh":[1455200,49152],"cn":[1522032,49152]}], +"actors/bowser_flame/bowser_flame_7.rgba16.png": [64,64,8192,{"jp":[1599504,57344],"us":[1606720,57344],"eu":[1478688,57344],"sh":[1455200,57344],"cn":[1522032,57344]}], +"actors/bowser_flame/bowser_flame_8.rgba16.png": [64,64,8192,{"jp":[1599504,65536],"us":[1606720,65536],"eu":[1478688,65536],"sh":[1455200,65536],"cn":[1522032,65536]}], +"actors/bowser_flame/bowser_flame_9.rgba16.png": [64,64,8192,{"jp":[1599504,73728],"us":[1606720,73728],"eu":[1478688,73728],"sh":[1455200,73728],"cn":[1522032,73728]}], +"actors/breakable_box/cork_box_surface.rgba16.png": [32,32,2048,{"jp":[2032944,74384],"us":[2040320,74384],"eu":[1912288,74384],"sh":[1888800,74384],"cn":[1955632,74384]}], +"actors/breakable_box/crazy_box_surface.rgba16.png": [32,32,2048,{"jp":[2032944,72336],"us":[2040320,72336],"eu":[1912288,72336],"sh":[1888800,72336],"cn":[1955632,72336]}], +"actors/bub/bub_eye_border.rgba16.png": [32,32,2048,{"jp":[1568640,5128],"us":[1575856,5128],"eu":[1447824,5128],"sh":[1424336,5128],"cn":[1491168,5128]}], +"actors/bub/bub_eyes.rgba16.png": [64,32,4096,{"jp":[1568640,1032],"us":[1575856,1032],"eu":[1447824,1032],"sh":[1424336,1032],"cn":[1491168,1032]}], +"actors/bub/bub_fins.rgba16.png": [32,32,2048,{"jp":[1568640,7176],"us":[1575856,7176],"eu":[1447824,7176],"sh":[1424336,7176],"cn":[1491168,7176]}], +"actors/bub/bub_scales.rgba16.png": [64,32,4096,{"jp":[1568640,9224],"us":[1575856,9224],"eu":[1447824,9224],"sh":[1424336,9224],"cn":[1491168,9224]}], +"actors/bubba/bubba_eye_border.rgba16.png": [32,32,2048,{"jp":[1568640,5128],"us":[1575856,5128],"eu":[1447824,5128],"sh":[1424336,5128],"cn":[1491168,5128]}], +"actors/bubba/bubba_eyes_unused.rgba16.png": [64,32,4096,{"jp":[1568640,1032],"us":[1575856,1032],"eu":[1447824,1032],"sh":[1424336,1032],"cn":[1491168,1032]}], +"actors/bubba/bubba_fins.rgba16.png": [32,32,2048,{"jp":[1568640,7176],"us":[1575856,7176],"eu":[1447824,7176],"sh":[1424336,7176],"cn":[1491168,7176]}], +"actors/bubba/bubba_scales.rgba16.png": [64,64,8192,{"jp":[1568640,9224],"us":[1575856,9224],"eu":[1447824,9224],"sh":[1424336,9224],"cn":[1491168,9224]}], +"actors/bubba/bubba_sunglasses.rgba16.png": [16,32,1024,{"jp":[1568640,8],"us":[1575856,8],"eu":[1447824,8],"sh":[1424336,8],"cn":[1491168,8]}], +"actors/bubble/bubble.rgba16.png": [32,32,2048,{"jp":[1125200,118112],"us":[1132368,118112],"eu":[1004336,118112],"sh":[980848,118112],"cn":[1047664,118112]}], +"actors/bubble/mr_i_bubble.rgba16.png": [32,32,2048,{"jp":[1125200,120160],"us":[1132368,120160],"eu":[1004336,120160],"sh":[980848,120160],"cn":[1047664,120160]}], +"actors/bullet_bill/bullet_bill_eye.rgba16.png": [64,32,4096,{"jp":[1215456,47784],"us":[1222624,47784],"eu":[1094592,47784],"sh":[1071104,47784],"cn":[1137936,47784]}], +"actors/bullet_bill/bullet_bill_mouth.rgba16.png": [64,32,4096,{"jp":[1215456,51880],"us":[1222624,51880],"eu":[1094592,51880],"sh":[1071104,51880],"cn":[1137936,51880]}], +"actors/bully/bully_eye.rgba16.png": [32,32,2048,{"jp":[1249376,9320],"us":[1256544,9320],"eu":[1128512,9320],"sh":[1105024,9320],"cn":[1171856,9320]}], +"actors/bully/bully_horn.rgba16.png": [16,16,512,{"jp":[1249376,224],"us":[1256544,224],"eu":[1128512,224],"sh":[1105024,224],"cn":[1171856,224]}], +"actors/bully/bully_left_side.rgba16.png": [32,64,4096,{"jp":[1249376,1128],"us":[1256544,1128],"eu":[1128512,1128],"sh":[1105024,1128],"cn":[1171856,1128]}], +"actors/bully/bully_right_side.rgba16.png": [32,64,4096,{"jp":[1249376,5224],"us":[1256544,5224],"eu":[1128512,5224],"sh":[1105024,5224],"cn":[1171856,5224]}], +"actors/burn_smoke/burn_smoke.ia16.png": [32,32,2048,{"jp":[1125200,137216],"us":[1132368,137216],"eu":[1004336,137216],"sh":[980848,137216],"cn":[1047664,137216]}], +"actors/butterfly/butterfly_wing.rgba16.png": [32,64,4096,{"jp":[2094912,17320],"us":[2102288,17320],"eu":[1974256,17320],"sh":[1950768,17320],"cn":[2017600,17320]}], +"actors/cannon_barrel/cannon_barrel.rgba16.png": [32,32,2048,{"jp":[2032944,22696],"us":[2040320,22696],"eu":[1912288,22696],"sh":[1888800,22696],"cn":[1955632,22696]}], +"actors/cannon_base/cannon_base.rgba16.png": [32,32,2048,{"jp":[2032944,18872],"us":[2040320,18872],"eu":[1912288,18872],"sh":[1888800,18872],"cn":[1955632,18872]}], +"actors/cannon_lid/cannon_lid.rgba16.png": [32,32,2048,{"jp":[2032944,16472],"us":[2040320,16472],"eu":[1912288,16472],"sh":[1888800,16472],"cn":[1955632,16472]}], +"actors/capswitch/cap_switch_base.rgba16.png": [16,4,128,{"jp":[1457744,11336],"us":[1464912,11336],"eu":[1336880,11336],"sh":[1313392,11336],"cn":[1380224,11336]}], +"actors/capswitch/cap_switch_head.ia16.png": [32,64,4096,{"jp":[1457744,7240],"us":[1464912,7240],"eu":[1336880,7240],"sh":[1313392,7240],"cn":[1380224,7240]}], +"actors/chain_ball/chain_ball.rgba16.png": [32,32,2048,{"jp":[1844608,133864],"us":[1851952,133864],"eu":[1723920,133864],"sh":[1700432,133864],"cn":[1767264,133864]}], +"actors/chain_chomp/chain_chomp_bright_shine.rgba16.png": [32,32,2048,{"jp":[1844608,136144],"us":[1851952,136144],"eu":[1723920,136144],"sh":[1700432,136144],"cn":[1767264,136144]}], +"actors/chain_chomp/chain_chomp_dull_shine.rgba16.png": [32,32,2048,{"jp":[1844608,138192],"us":[1851952,138192],"eu":[1723920,138192],"sh":[1700432,138192],"cn":[1767264,138192]}], +"actors/chain_chomp/chain_chomp_eye.rgba16.png": [32,32,2048,{"jp":[1844608,144336],"us":[1851952,144336],"eu":[1723920,144336],"sh":[1700432,144336],"cn":[1767264,144336]}], +"actors/chain_chomp/chain_chomp_tongue.rgba16.png": [32,32,2048,{"jp":[1844608,140240],"us":[1851952,140240],"eu":[1723920,140240],"sh":[1700432,140240],"cn":[1767264,140240]}], +"actors/chain_chomp/chain_chomp_tooth.rgba16.png": [32,32,2048,{"jp":[1462368,27376],"us":[1469536,27376],"eu":[1341504,27376],"sh":[1318016,27376],"cn":[1384848,27376]}], +"actors/chair/chair_bottom.rgba16.png": [32,16,1024,{"jp":[1462368,16480],"us":[1469536,16480],"eu":[1341504,16480],"sh":[1318016,16480],"cn":[1384848,16480]}], +"actors/chair/chair_front.rgba16.png": [32,32,2048,{"jp":[1462368,12384],"us":[1469536,12384],"eu":[1341504,12384],"sh":[1318016,12384],"cn":[1384848,12384]}], +"actors/chair/chair_leg.rgba16.png": [32,32,2048,{"jp":[1462368,14432],"us":[1469536,14432],"eu":[1341504,14432],"sh":[1318016,14432],"cn":[1384848,14432]}], +"actors/chair/chair_surface_unused.rgba16.png": [32,32,2048,{"jp":[1462368,17504],"us":[1469536,17504],"eu":[1341504,17504],"sh":[1318016,17504],"cn":[1384848,17504]}], +"actors/checkerboard_platform/checkerboard_platform.rgba16.png": [32,32,2048,{"jp":[2032944,52288],"us":[2040320,52288],"eu":[1912288,52288],"sh":[1888800,52288],"cn":[1955632,52288]}], +"actors/checkerboard_platform/checkerboard_platform_side.rgba16.png": [32,16,1024,{"jp":[2032944,51264],"us":[2040320,51264],"eu":[1912288,51264],"sh":[1888800,51264],"cn":[1955632,51264]}], +"actors/chillychief/chill_bully_eye.rgba16.png": [32,32,2048,{"jp":[1249376,9320],"us":[1256544,9320],"eu":[1128512,9320],"sh":[1105024,9320],"cn":[1171856,9320]}], +"actors/chillychief/chill_bully_left_side.rgba16.png": [32,64,4096,{"jp":[1979680,96],"us":[1987056,96],"eu":[1859024,96],"sh":[1835536,96],"cn":[1902368,96]}], +"actors/chillychief/chill_bully_right_side.rgba16.png": [32,64,4096,{"jp":[1979680,4192],"us":[1987056,4192],"eu":[1859024,4192],"sh":[1835536,4192],"cn":[1902368,4192]}], +"actors/chuckya/chuckya_body_arm_left_side.rgba16.png": [32,64,4096,{"jp":[2032944,32632],"us":[2040320,32632],"eu":[1912288,32632],"sh":[1888800,32632],"cn":[1955632,32632]}], +"actors/chuckya/chuckya_body_arm_right_side.rgba16.png": [32,64,4096,{"jp":[2032944,36728],"us":[2040320,36728],"eu":[1912288,36728],"sh":[1888800,36728],"cn":[1955632,36728]}], +"actors/chuckya/chuckya_eyes.rgba16.png": [32,64,4096,{"jp":[2032944,26488],"us":[2040320,26488],"eu":[1912288,26488],"sh":[1888800,26488],"cn":[1955632,26488]}], +"actors/chuckya/chuckya_hand_antenna.rgba16.png": [32,32,2048,{"jp":[2032944,30584],"us":[2040320,30584],"eu":[1912288,30584],"sh":[1888800,30584],"cn":[1955632,30584]}], +"actors/clam_shell/clam_shell.rgba16.png": [32,32,2048,{"jp":[1285392,48],"us":[1292560,48],"eu":[1164528,48],"sh":[1141040,48],"cn":[1207872,48]}], +"actors/clam_shell/clam_shell_mouth.rgba16.png": [32,32,2048,{"jp":[1285392,2096],"us":[1292560,2096],"eu":[1164528,2096],"sh":[1141040,2096],"cn":[1207872,2096]}], +"actors/coin/coin_front.ia16.png": [32,32,2048,{"jp":[2094912,22400],"us":[2102288,22400],"eu":[1974256,22400],"sh":[1950768,22400],"cn":[2017600,22400]}], +"actors/coin/coin_side.ia16.png": [32,32,2048,{"jp":[2094912,26496],"us":[2102288,26496],"eu":[1974256,26496],"sh":[1950768,26496],"cn":[2017600,26496]}], +"actors/coin/coin_tilt_left.ia16.png": [32,32,2048,{"jp":[2094912,28544],"us":[2102288,28544],"eu":[1974256,28544],"sh":[1950768,28544],"cn":[2017600,28544]}], +"actors/coin/coin_tilt_right.ia16.png": [32,32,2048,{"jp":[2094912,24448],"us":[2102288,24448],"eu":[1974256,24448],"sh":[1950768,24448],"cn":[2017600,24448]}], +"actors/cyan_fish/cyan_fish.rgba16.png": [32,32,2048,{"jp":[1802256,54376],"us":[1809600,54376],"eu":[1681568,54376],"sh":[1658080,54376],"cn":[1724912,54376]}], +"actors/dirt/dirt_particle.rgba16.png": [16,16,512,{"jp":[2094912,179704],"us":[2102288,179704],"eu":[1974256,179704],"sh":[1950768,179704],"cn":[2017600,179704]}], +"actors/door/bbh_door.rgba16.png": [32,64,4096,{"jp":[2094912,66832],"us":[2102288,66832],"eu":[1974256,66832],"sh":[1950768,66832],"cn":[2017600,66832]}], +"actors/door/bbh_door_overlay.rgba16.png": [32,32,2048,{"jp":[2094912,70928],"us":[2102288,70928],"eu":[1974256,70928],"sh":[1950768,70928],"cn":[2017600,70928]}], +"actors/door/door_lock.rgba16.png": [16,32,1024,{"jp":[2094912,79120],"us":[2102288,79120],"eu":[1974256,79120],"sh":[1950768,79120],"cn":[2017600,79120]}], +"actors/door/hmc_mural_door.rgba16.png": [32,64,4096,{"jp":[2094912,60688],"us":[2102288,60688],"eu":[1974256,60688],"sh":[1950768,60688],"cn":[2017600,60688]}], +"actors/door/hmc_mural_door_overlay.rgba16.png": [32,32,2048,{"jp":[2094912,64784],"us":[2102288,64784],"eu":[1974256,64784],"sh":[1950768,64784],"cn":[2017600,64784]}], +"actors/door/metal_door.rgba16.png": [32,64,4096,{"jp":[2094912,54544],"us":[2102288,54544],"eu":[1974256,54544],"sh":[1950768,54544],"cn":[2017600,54544]}], +"actors/door/metal_door_overlay.rgba16.png": [32,32,2048,{"jp":[2094912,58640],"us":[2102288,58640],"eu":[1974256,58640],"sh":[1950768,58640],"cn":[2017600,58640]}], +"actors/door/one_star_door_sign.rgba16.png": [32,32,2048,{"jp":[2094912,75024],"us":[2102288,75024],"eu":[1974256,75024],"sh":[1950768,75024],"cn":[2017600,75024]}], +"actors/door/polished_wooden_door.rgba16.png": [32,64,4096,{"jp":[2094912,40208],"us":[2102288,40208],"eu":[1974256,40208],"sh":[1950768,40208],"cn":[2017600,40208]}], +"actors/door/polished_wooden_door_overlay.rgba16.png": [32,64,4096,{"jp":[2094912,44304],"us":[2102288,44304],"eu":[1974256,44304],"sh":[1950768,44304],"cn":[2017600,44304]}], +"actors/door/rough_wooden_door.rgba16.png": [32,64,4096,{"jp":[2094912,48400],"us":[2102288,48400],"eu":[1974256,48400],"sh":[1950768,48400],"cn":[2017600,48400]}], +"actors/door/rough_wooden_door_overlay.rgba16.png": [32,32,2048,{"jp":[2094912,52496],"us":[2102288,52496],"eu":[1974256,52496],"sh":[1950768,52496],"cn":[2017600,52496]}], +"actors/door/three_star_door_sign.rgba16.png": [32,32,2048,{"jp":[2094912,77072],"us":[2102288,77072],"eu":[1974256,77072],"sh":[1950768,77072],"cn":[2017600,77072]}], +"actors/door/zero_star_door_sign.rgba16.png": [32,32,2048,{"jp":[2094912,72976],"us":[2102288,72976],"eu":[1974256,72976],"sh":[1950768,72976],"cn":[2017600,72976]}], +"actors/dorrie/dorrie_eye.rgba16.png": [16,16,512,{"jp":[1991184,39840],"us":[1998560,39840],"eu":[1870528,39840],"sh":[1847040,39840],"cn":[1913872,39840]}], +"actors/dorrie/dorrie_skin.rgba16.png": [32,64,4096,{"jp":[1991184,40352],"us":[1998560,40352],"eu":[1870528,40352],"sh":[1847040,40352],"cn":[1913872,40352]}], +"actors/dorrie/dorrie_tongue.rgba16.png": [32,32,2048,{"jp":[1844608,140240],"us":[1851952,140240],"eu":[1723920,140240],"sh":[1700432,140240],"cn":[1767264,140240]}], +"actors/exclamation_box/exclamation_box_front.rgba16.png": [32,32,2048,{"jp":[2032944,95784],"us":[2040320,95784],"eu":[1912288,95784],"sh":[1888800,95784],"cn":[1955632,95784]}], +"actors/exclamation_box/exclamation_box_side.rgba16.png": [64,32,4096,{"jp":[2032944,97832],"us":[2040320,97832],"eu":[1912288,97832],"sh":[1888800,97832],"cn":[1955632,97832]}], +"actors/exclamation_box/metal_cap_box_front.rgba16.png": [32,32,2048,{"jp":[2032944,83496],"us":[2040320,83496],"eu":[1912288,83496],"sh":[1888800,83496],"cn":[1955632,83496]}], +"actors/exclamation_box/metal_cap_box_side.rgba16.png": [64,32,4096,{"jp":[2032944,85544],"us":[2040320,85544],"eu":[1912288,85544],"sh":[1888800,85544],"cn":[1955632,85544]}], +"actors/exclamation_box/vanish_cap_box_front.rgba16.png": [32,32,2048,{"jp":[2032944,77352],"us":[2040320,77352],"eu":[1912288,77352],"sh":[1888800,77352],"cn":[1955632,77352]}], +"actors/exclamation_box/vanish_cap_box_side.rgba16.png": [32,64,4096,{"jp":[2032944,79400],"us":[2040320,79400],"eu":[1912288,79400],"sh":[1888800,79400],"cn":[1955632,79400]}], +"actors/exclamation_box/wing_cap_box_front.rgba16.png": [32,32,2048,{"jp":[2032944,89640],"us":[2040320,89640],"eu":[1912288,89640],"sh":[1888800,89640],"cn":[1955632,89640]}], +"actors/exclamation_box/wing_cap_box_side.rgba16.png": [32,64,4096,{"jp":[2032944,91688],"us":[2040320,91688],"eu":[1912288,91688],"sh":[1888800,91688],"cn":[1955632,91688]}], +"actors/exclamation_box_outline/exclamation_box_outline.rgba16.png": [32,32,2048,{"jp":[2032944,151912],"us":[2040320,151912],"eu":[1912288,151912],"sh":[1888800,151912],"cn":[1955632,151912]}], +"actors/exclamation_box_outline/exclamation_point.rgba16.png": [16,32,1024,{"jp":[2032944,154240],"us":[2040320,154240],"eu":[1912288,154240],"sh":[1888800,154240],"cn":[1955632,154240]}], +"actors/explosion/explosion_0.rgba16.png": [32,32,2048,{"jp":[2094912,2568],"us":[2102288,2568],"eu":[1974256,2568],"sh":[1950768,2568],"cn":[2017600,2568]}], +"actors/explosion/explosion_1.rgba16.png": [32,32,2048,{"jp":[2094912,4616],"us":[2102288,4616],"eu":[1974256,4616],"sh":[1950768,4616],"cn":[2017600,4616]}], +"actors/explosion/explosion_2.rgba16.png": [32,32,2048,{"jp":[2094912,6664],"us":[2102288,6664],"eu":[1974256,6664],"sh":[1950768,6664],"cn":[2017600,6664]}], +"actors/explosion/explosion_3.rgba16.png": [32,32,2048,{"jp":[2094912,8712],"us":[2102288,8712],"eu":[1974256,8712],"sh":[1950768,8712],"cn":[2017600,8712]}], +"actors/explosion/explosion_4.rgba16.png": [32,32,2048,{"jp":[2094912,10760],"us":[2102288,10760],"eu":[1974256,10760],"sh":[1950768,10760],"cn":[2017600,10760]}], +"actors/explosion/explosion_5.rgba16.png": [32,32,2048,{"jp":[2094912,12808],"us":[2102288,12808],"eu":[1974256,12808],"sh":[1950768,12808],"cn":[2017600,12808]}], +"actors/explosion/explosion_6.rgba16.png": [32,32,2048,{"jp":[2094912,14856],"us":[2102288,14856],"eu":[1974256,14856],"sh":[1950768,14856],"cn":[2017600,14856]}], +"actors/eyerok/eyerok_bricks.rgba16.png": [32,32,2048,{"jp":[1327760,36160],"us":[1334928,36160],"eu":[1206896,36160],"sh":[1183408,36160],"cn":[1250240,36160]}], +"actors/eyerok/eyerok_eye_closed.rgba16.png": [32,32,2048,{"jp":[1327760,44352],"us":[1334928,44352],"eu":[1206896,44352],"sh":[1183408,44352],"cn":[1250240,44352]}], +"actors/eyerok/eyerok_eye_mostly_closed.rgba16.png": [32,32,2048,{"jp":[1327760,42304],"us":[1334928,42304],"eu":[1206896,42304],"sh":[1183408,42304],"cn":[1250240,42304]}], +"actors/eyerok/eyerok_eye_mostly_open.rgba16.png": [32,32,2048,{"jp":[1327760,40256],"us":[1334928,40256],"eu":[1206896,40256],"sh":[1183408,40256],"cn":[1250240,40256]}], +"actors/eyerok/eyerok_eye_open.rgba16.png": [32,32,2048,{"jp":[1327760,38208],"us":[1334928,38208],"eu":[1206896,38208],"sh":[1183408,38208],"cn":[1250240,38208]}], +"actors/flame/flame_0.ia16.png": [32,32,2048,{"jp":[2094912,95008],"us":[2102288,95008],"eu":[1974256,95008],"sh":[1950768,95008],"cn":[2017600,95008]}], +"actors/flame/flame_1.ia16.png": [32,32,2048,{"jp":[2094912,97056],"us":[2102288,97056],"eu":[1974256,97056],"sh":[1950768,97056],"cn":[2017600,97056]}], +"actors/flame/flame_2.ia16.png": [32,32,2048,{"jp":[2094912,99104],"us":[2102288,99104],"eu":[1974256,99104],"sh":[1950768,99104],"cn":[2017600,99104]}], +"actors/flame/flame_3.ia16.png": [32,32,2048,{"jp":[2094912,101152],"us":[2102288,101152],"eu":[1974256,101152],"sh":[1950768,101152],"cn":[2017600,101152]}], +"actors/flame/flame_4.ia16.png": [32,32,2048,{"jp":[2094912,103200],"us":[2102288,103200],"eu":[1974256,103200],"sh":[1950768,103200],"cn":[2017600,103200]}], +"actors/flame/flame_5.ia16.png": [32,32,2048,{"jp":[2094912,105248],"us":[2102288,105248],"eu":[1974256,105248],"sh":[1950768,105248],"cn":[2017600,105248]}], +"actors/flame/flame_6.ia16.png": [32,32,2048,{"jp":[2094912,107296],"us":[2102288,107296],"eu":[1974256,107296],"sh":[1950768,107296],"cn":[2017600,107296]}], +"actors/flame/flame_7.ia16.png": [32,32,2048,{"jp":[2094912,109344],"us":[2102288,109344],"eu":[1974256,109344],"sh":[1950768,109344],"cn":[2017600,109344]}], +"actors/flyguy/flyguy_cloth_wrinkle.rgba16.png": [64,32,4096,{"jp":[2032944,57480],"us":[2040320,57480],"eu":[1912288,57480],"sh":[1888800,57480],"cn":[1955632,57480]}], +"actors/flyguy/flyguy_face.rgba16.png": [32,32,2048,{"jp":[2032944,61576],"us":[2040320,61576],"eu":[1912288,61576],"sh":[1888800,61576],"cn":[1955632,61576]}], +"actors/flyguy/flyguy_propeller.ia16.png": [32,32,2048,{"jp":[2032944,63624],"us":[2040320,63624],"eu":[1912288,63624],"sh":[1888800,63624],"cn":[1955632,63624]}], +"actors/fwoosh/fwoosh_face.ia16.png": [32,32,2048,{"jp":[1377744,88072],"us":[1384912,88072],"eu":[1256880,88072],"sh":[1233392,88072],"cn":[1300224,88072]}], +"actors/goomba/goomba_body.rgba16.png": [32,32,2048,{"jp":[2032944,103728],"us":[2040320,103728],"eu":[1912288,103728],"sh":[1888800,103728],"cn":[1955632,103728]}], +"actors/goomba/goomba_face.rgba16.png": [32,32,2048,{"jp":[2032944,105776],"us":[2040320,105776],"eu":[1912288,105776],"sh":[1888800,105776],"cn":[1955632,105776]}], +"actors/goomba/goomba_face_blink.rgba16.png": [32,32,2048,{"jp":[2032944,107824],"us":[2040320,107824],"eu":[1912288,107824],"sh":[1888800,107824],"cn":[1955632,107824]}], +"actors/haunted_cage/bbh_cage_bars.rgba16.png": [32,32,2048,{"jp":[1462368,55944],"us":[1469536,55944],"eu":[1341504,55944],"sh":[1318016,55944],"cn":[1384848,55944]}], +"actors/haunted_cage/bbh_cage_double_ornament.rgba16.png": [32,32,2048,{"jp":[1462368,51848],"us":[1469536,51848],"eu":[1341504,51848],"sh":[1318016,51848],"cn":[1384848,51848]}], +"actors/haunted_cage/bbh_cage_floor.rgba16.png": [32,32,2048,{"jp":[1462368,49800],"us":[1469536,49800],"eu":[1341504,49800],"sh":[1318016,49800],"cn":[1384848,49800]}], +"actors/haunted_cage/bbh_cage_garbage.rgba16.png": [32,32,2048,{"jp":[1462368,57992],"us":[1469536,57992],"eu":[1341504,57992],"sh":[1318016,57992],"cn":[1384848,57992]}], +"actors/haunted_cage/bbh_cage_ornament.rgba16.png": [32,16,1024,{"jp":[1462368,53896],"us":[1469536,53896],"eu":[1341504,53896],"sh":[1318016,53896],"cn":[1384848,53896]}], +"actors/haunted_cage/bbh_cage_wooden_base.rgba16.png": [32,16,1024,{"jp":[1462368,54920],"us":[1469536,54920],"eu":[1341504,54920],"sh":[1318016,54920],"cn":[1384848,54920]}], +"actors/heart/spinning_heart.rgba16.png": [32,32,2048,{"jp":[2032944,55264],"us":[2040320,55264],"eu":[1912288,55264],"sh":[1888800,55264],"cn":[1955632,55264]}], +"actors/heave_ho/heave-ho_arm_ornament.rgba16.png": [32,32,2048,{"jp":[1215456,68040],"us":[1222624,68040],"eu":[1094592,68040],"sh":[1071104,68040],"cn":[1137936,68040]}], +"actors/heave_ho/heave-ho_face.rgba16.png": [32,32,2048,{"jp":[1215456,59848],"us":[1222624,59848],"eu":[1094592,59848],"sh":[1071104,59848],"cn":[1137936,59848]}], +"actors/heave_ho/heave-ho_logo.rgba16.png": [64,32,4096,{"jp":[1215456,63944],"us":[1222624,63944],"eu":[1094592,63944],"sh":[1071104,63944],"cn":[1137936,63944]}], +"actors/heave_ho/heave-ho_platform.rgba16.png": [32,32,2048,{"jp":[1215456,61896],"us":[1222624,61896],"eu":[1094592,61896],"sh":[1071104,61896],"cn":[1137936,61896]}], +"actors/heave_ho/heave-ho_roller.rgba16.png": [16,16,512,{"jp":[1215456,70088],"us":[1222624,70088],"eu":[1094592,70088],"sh":[1071104,70088],"cn":[1137936,70088]}], +"actors/heave_ho/heave-ho_turnkey.rgba16.png": [32,32,2048,{"jp":[1215456,70600],"us":[1222624,70600],"eu":[1094592,70600],"sh":[1071104,70600],"cn":[1137936,70600]}], +"actors/hoot/hoot_eyes.rgba16.png": [32,32,2048,{"jp":[1215456,2592],"us":[1222624,2592],"eu":[1094592,2592],"sh":[1071104,2592],"cn":[1137936,2592]}], +"actors/hoot/hoot_wing.rgba16.png": [32,32,2048,{"jp":[1215456,7760],"us":[1222624,7760],"eu":[1094592,7760],"sh":[1071104,7760],"cn":[1137936,7760]}], +"actors/hoot/hoot_wing_tip.rgba16.png": [32,32,2048,{"jp":[1215456,9808],"us":[1222624,9808],"eu":[1094592,9808],"sh":[1071104,9808],"cn":[1137936,9808]}], +"actors/impact_ring/impact_ring_left_side.ia16.png": [32,64,4096,{"jp":[1599504,117328],"us":[1606720,117328],"eu":[1478688,117328],"sh":[1455200,117328],"cn":[1522032,117328]}], +"actors/impact_ring/impact_ring_right_side.ia16.png": [32,64,4096,{"jp":[1599504,121424],"us":[1606720,121424],"eu":[1478688,121424],"sh":[1455200,121424],"cn":[1522032,121424]}], +"actors/impact_smoke/impact_smoke_0.ia16.png": [64,64,8192,{"jp":[1599504,371240],"us":[1606720,371576],"eu":[1478688,371576],"sh":[1455200,371576],"cn":[1522032,371576]}], +"actors/impact_smoke/impact_smoke_1.ia16.png": [64,64,8192,{"jp":[1599504,379432],"us":[1606720,379768],"eu":[1478688,379768],"sh":[1455200,379768],"cn":[1522032,379768]}], +"actors/impact_smoke/impact_smoke_2.ia16.png": [64,64,8192,{"jp":[1599504,387624],"us":[1606720,387960],"eu":[1478688,387960],"sh":[1455200,387960],"cn":[1522032,387960]}], +"actors/impact_smoke/impact_smoke_3.ia16.png": [64,64,8192,{"jp":[1599504,395816],"us":[1606720,396152],"eu":[1478688,396152],"sh":[1455200,396152],"cn":[1522032,396152]}], +"actors/king_bobomb/bob-omb_buddy_body_unused.rgba16.png": [64,64,8192,{"jp":[1257760,25720],"us":[1264928,25720],"eu":[1136896,25720],"sh":[1113408,25720],"cn":[1180240,25720]}], +"actors/king_bobomb/bob-omb_buddy_left_side_unused.rgba16.png": [32,64,4096,{"jp":[1257760,120],"us":[1264928,120],"eu":[1136896,120],"sh":[1113408,120],"cn":[1180240,120]}], +"actors/king_bobomb/bob-omb_buddy_right_side_unused.rgba16.png": [32,64,4096,{"jp":[1257760,4216],"us":[1264928,4216],"eu":[1136896,4216],"sh":[1113408,4216],"cn":[1180240,4216]}], +"actors/king_bobomb/king_bob-omb_arm.rgba16.png": [32,32,2048,{"jp":[1257760,8312],"us":[1264928,8312],"eu":[1136896,8312],"sh":[1113408,8312],"cn":[1180240,8312]}], +"actors/king_bobomb/king_bob-omb_body_unused.rgba16.png": [64,64,8192,{"jp":[1257760,10360],"us":[1264928,10360],"eu":[1136896,10360],"sh":[1113408,10360],"cn":[1180240,10360]}], +"actors/king_bobomb/king_bob-omb_crown_rim.rgba16.png": [32,16,1024,{"jp":[1257760,24696],"us":[1264928,24696],"eu":[1136896,24696],"sh":[1113408,24696],"cn":[1180240,24696]}], +"actors/king_bobomb/king_bob-omb_eyes.rgba16.png": [32,32,2048,{"jp":[1257760,18552],"us":[1264928,18552],"eu":[1136896,18552],"sh":[1113408,18552],"cn":[1180240,18552]}], +"actors/king_bobomb/king_bob-omb_eyes_blink.rgba16.png": [32,32,2048,{"jp":[1257760,20600],"us":[1264928,20600],"eu":[1136896,20600],"sh":[1113408,20600],"cn":[1180240,20600]}], +"actors/king_bobomb/king_bob-omb_hand.rgba16.png": [32,32,2048,{"jp":[1257760,22648],"us":[1264928,22648],"eu":[1136896,22648],"sh":[1113408,22648],"cn":[1180240,22648]}], +"actors/king_bobomb/king_bob-omb_left_side.rgba16.png": [32,64,4096,{"jp":[1257760,33912],"us":[1264928,33912],"eu":[1136896,33912],"sh":[1113408,33912],"cn":[1180240,33912]}], +"actors/king_bobomb/king_bob-omb_right_side.rgba16.png": [32,64,4096,{"jp":[1257760,38008],"us":[1264928,38008],"eu":[1136896,38008],"sh":[1113408,38008],"cn":[1180240,38008]}], +"actors/klepto/klepto_beak.rgba16.png": [32,64,4096,{"jp":[1327760,4104],"us":[1334928,4104],"eu":[1206896,4104],"sh":[1183408,4104],"cn":[1250240,4104]}], +"actors/klepto/klepto_chest_tuft.rgba16.png": [32,32,2048,{"jp":[1327760,8],"us":[1334928,8],"eu":[1206896,8],"sh":[1183408,8],"cn":[1250240,8]}], +"actors/klepto/klepto_eye.rgba16.png": [32,32,2048,{"jp":[1327760,2056],"us":[1334928,2056],"eu":[1206896,2056],"sh":[1183408,2056],"cn":[1250240,2056]}], +"actors/klepto/klepto_wing.rgba16.png": [64,32,4096,{"jp":[1327760,8200],"us":[1334928,8200],"eu":[1206896,8200],"sh":[1183408,8200],"cn":[1250240,8200]}], +"actors/klepto/klepto_wing_flap.rgba16.png": [32,32,2048,{"jp":[1327760,12296],"us":[1334928,12296],"eu":[1206896,12296],"sh":[1183408,12296],"cn":[1250240,12296]}], +"actors/koopa/koopa_eye_border.rgba16.png": [32,32,2048,{"jp":[1844608,22088],"us":[1851952,22088],"eu":[1723920,22088],"sh":[1700432,22088],"cn":[1767264,22088]}], +"actors/koopa/koopa_eyes_closed.rgba16.png": [32,32,2048,{"jp":[1844608,20040],"us":[1851952,20040],"eu":[1723920,20040],"sh":[1700432,20040],"cn":[1767264,20040]}], +"actors/koopa/koopa_eyes_open.rgba16.png": [32,32,2048,{"jp":[1844608,17992],"us":[1851952,17992],"eu":[1723920,17992],"sh":[1700432,17992],"cn":[1767264,17992]}], +"actors/koopa/koopa_nostrils.rgba16.png": [64,32,4096,{"jp":[1844608,24136],"us":[1851952,24136],"eu":[1723920,24136],"sh":[1700432,24136],"cn":[1767264,24136]}], +"actors/koopa/koopa_shell_back.rgba16.png": [32,32,2048,{"jp":[1844608,11848],"us":[1851952,11848],"eu":[1723920,11848],"sh":[1700432,11848],"cn":[1767264,11848]}], +"actors/koopa/koopa_shell_front.rgba16.png": [32,32,2048,{"jp":[1844608,9800],"us":[1851952,9800],"eu":[1723920,9800],"sh":[1700432,9800],"cn":[1767264,9800]}], +"actors/koopa/koopa_shell_front_top.rgba16.png": [32,32,2048,{"jp":[1844608,15944],"us":[1851952,15944],"eu":[1723920,15944],"sh":[1700432,15944],"cn":[1767264,15944]}], +"actors/koopa/koopa_shoe.rgba16.png": [32,32,2048,{"jp":[1844608,13896],"us":[1851952,13896],"eu":[1723920,13896],"sh":[1700432,13896],"cn":[1767264,13896]}], +"actors/koopa_flag/koopa_flag_banner.rgba16.png": [32,32,2048,{"jp":[1844608,72],"us":[1851952,72],"eu":[1723920,72],"sh":[1700432,72],"cn":[1767264,72]}], +"actors/koopa_shell/koopa_shell_back.rgba16.png": [32,32,2048,{"jp":[1844608,11848],"us":[1851952,11848],"eu":[1723920,11848],"sh":[1700432,11848],"cn":[1767264,11848]}], +"actors/koopa_shell/koopa_shell_front.rgba16.png": [32,32,2048,{"jp":[1844608,9800],"us":[1851952,9800],"eu":[1723920,9800],"sh":[1700432,9800],"cn":[1767264,9800]}], +"actors/lakitu_cameraman/lakitu_camera_lens.rgba16.png": [16,16,512,{"jp":[1926752,14336],"us":[1934096,14336],"eu":[1806064,14336],"sh":[1782576,14336],"cn":[1849408,14336]}], +"actors/lakitu_cameraman/lakitu_cameraman_cloud_face_unused.rgba16.png": [32,32,2048,{"jp":[1568640,60640],"us":[1575856,60640],"eu":[1447824,60640],"sh":[1424336,60640],"cn":[1491168,60640]}], +"actors/lakitu_cameraman/lakitu_cameraman_eyes_closed.rgba16.png": [64,32,4096,{"jp":[1568640,66784],"us":[1575856,66784],"eu":[1447824,66784],"sh":[1424336,66784],"cn":[1491168,66784]}], +"actors/lakitu_cameraman/lakitu_cameraman_eyes_open.rgba16.png": [64,32,4096,{"jp":[1568640,62688],"us":[1575856,62688],"eu":[1447824,62688],"sh":[1424336,62688],"cn":[1491168,62688]}], +"actors/lakitu_cameraman/lakitu_cameraman_frown.rgba16.png": [32,32,2048,{"jp":[1568640,72928],"us":[1575856,72928],"eu":[1447824,72928],"sh":[1424336,72928],"cn":[1491168,72928]}], +"actors/lakitu_cameraman/lakitu_cameraman_shell.rgba16.png": [32,32,2048,{"jp":[1568640,70880],"us":[1575856,70880],"eu":[1447824,70880],"sh":[1424336,70880],"cn":[1491168,70880]}], +"actors/lakitu_enemy/lakitu_enemy_cloud_face_unused.rgba16.png": [32,32,2048,{"jp":[1568640,60640],"us":[1575856,60640],"eu":[1447824,60640],"sh":[1424336,60640],"cn":[1491168,60640]}], +"actors/lakitu_enemy/lakitu_enemy_eyes_closed.rgba16.png": [64,32,4096,{"jp":[1568640,66784],"us":[1575856,66784],"eu":[1447824,66784],"sh":[1424336,66784],"cn":[1491168,66784]}], +"actors/lakitu_enemy/lakitu_enemy_eyes_open.rgba16.png": [64,32,4096,{"jp":[1568640,62688],"us":[1575856,62688],"eu":[1447824,62688],"sh":[1424336,62688],"cn":[1491168,62688]}], +"actors/lakitu_enemy/lakitu_enemy_frown.rgba16.png": [32,32,2048,{"jp":[1568640,72928],"us":[1575856,72928],"eu":[1447824,72928],"sh":[1424336,72928],"cn":[1491168,72928]}], +"actors/lakitu_enemy/lakitu_enemy_shell.rgba16.png": [32,32,2048,{"jp":[1568640,70880],"us":[1575856,70880],"eu":[1447824,70880],"sh":[1424336,70880],"cn":[1491168,70880]}], +"actors/leaves/leaf.rgba16.png": [16,16,512,{"jp":[2094912,117728],"us":[2102288,117728],"eu":[1974256,117728],"sh":[1950768,117728],"cn":[2017600,117728]}], +"actors/mad_piano/mad_piano_body.rgba16.png": [16,32,1024,{"jp":[1462368,29424],"us":[1469536,29424],"eu":[1341504,29424],"sh":[1318016,29424],"cn":[1384848,29424]}], +"actors/mad_piano/mad_piano_keys.rgba16.png": [32,16,1024,{"jp":[1462368,32496],"us":[1469536,32496],"eu":[1341504,32496],"sh":[1318016,32496],"cn":[1384848,32496]}], +"actors/mad_piano/mad_piano_keys_corner.rgba16.png": [32,16,1024,{"jp":[1462368,30448],"us":[1469536,30448],"eu":[1341504,30448],"sh":[1318016,30448],"cn":[1384848,30448]}], +"actors/mad_piano/mad_piano_keys_edge.rgba16.png": [32,16,1024,{"jp":[1462368,33520],"us":[1469536,33520],"eu":[1341504,33520],"sh":[1318016,33520],"cn":[1384848,33520]}], +"actors/mad_piano/mad_piano_mouth.rgba16.png": [16,32,1024,{"jp":[1462368,31472],"us":[1469536,31472],"eu":[1341504,31472],"sh":[1318016,31472],"cn":[1384848,31472]}], +"actors/mad_piano/mad_piano_tooth.rgba16.png": [32,32,2048,{"jp":[1462368,27376],"us":[1469536,27376],"eu":[1341504,27376],"sh":[1318016,27376],"cn":[1384848,27376]}], +"actors/manta/manta_eye.rgba16.png": [32,32,2048,{"jp":[1285392,12192],"us":[1292560,12192],"eu":[1164528,12192],"sh":[1141040,12192],"cn":[1207872,12192]}], +"actors/manta/manta_fin_corner.rgba16.png": [32,32,2048,{"jp":[1285392,6048],"us":[1292560,6048],"eu":[1164528,6048],"sh":[1141040,6048],"cn":[1207872,6048]}], +"actors/manta/manta_fin_edge.rgba16.png": [64,32,4096,{"jp":[1285392,14240],"us":[1292560,14240],"eu":[1164528,14240],"sh":[1141040,14240],"cn":[1207872,14240]}], +"actors/manta/manta_gills.rgba16.png": [32,64,4096,{"jp":[1285392,8096],"us":[1292560,8096],"eu":[1164528,8096],"sh":[1141040,8096],"cn":[1207872,8096]}], +"actors/mario/mario_eyes_center.rgba16.png": [32,32,2048,{"jp":[1125200,12432],"us":[1132368,12432],"eu":[1004336,12432],"sh":[980848,12432],"cn":[1047664,12432]}], +"actors/mario/mario_eyes_closed.rgba16.png": [32,32,2048,{"jp":[1125200,16528],"us":[1132368,16528],"eu":[1004336,16528],"sh":[980848,16528],"cn":[1047664,16528]}], +"actors/mario/mario_eyes_closed_unused_0.rgba16.png": [32,32,2048,{"jp":[1125200,16528],"us":[1132368,16528],"eu":[1004336,16528],"sh":[980848,16528],"cn":[1047664,16528]}], +"actors/mario/mario_eyes_closed_unused_1.rgba16.png": [32,32,2048,{"jp":[1125200,16528],"us":[1132368,16528],"eu":[1004336,16528],"sh":[980848,16528],"cn":[1047664,16528]}], +"actors/mario/mario_eyes_dead.rgba16.png": [32,32,2048,{"jp":[1125200,30864],"us":[1132368,30864],"eu":[1004336,30864],"sh":[980848,30864],"cn":[1047664,30864]}], +"actors/mario/mario_eyes_down_unused.rgba16.png": [32,32,2048,{"jp":[1125200,28816],"us":[1132368,28816],"eu":[1004336,28816],"sh":[980848,28816],"cn":[1047664,28816]}], +"actors/mario/mario_eyes_half_closed.rgba16.png": [32,32,2048,{"jp":[1125200,14480],"us":[1132368,14480],"eu":[1004336,14480],"sh":[980848,14480],"cn":[1047664,14480]}], +"actors/mario/mario_eyes_left_unused.rgba16.png": [32,32,2048,{"jp":[1125200,22672],"us":[1132368,22672],"eu":[1004336,22672],"sh":[980848,22672],"cn":[1047664,22672]}], +"actors/mario/mario_eyes_right_unused.rgba16.png": [32,32,2048,{"jp":[1125200,24720],"us":[1132368,24720],"eu":[1004336,24720],"sh":[980848,24720],"cn":[1047664,24720]}], +"actors/mario/mario_eyes_up_unused.rgba16.png": [32,32,2048,{"jp":[1125200,26768],"us":[1132368,26768],"eu":[1004336,26768],"sh":[980848,26768],"cn":[1047664,26768]}], +"actors/mario/mario_logo.rgba16.png": [32,32,2048,{"jp":[1125200,6288],"us":[1132368,6288],"eu":[1004336,6288],"sh":[980848,6288],"cn":[1047664,6288]}], +"actors/mario/mario_metal.rgba16.png": [64,32,4096,{"jp":[1125200,144],"us":[1132368,144],"eu":[1004336,144],"sh":[980848,144],"cn":[1047664,144]}], +"actors/mario/mario_metal_wing_tip_unused.rgba16.png": [32,64,4096,{"jp":[1125200,45200],"us":[1132368,45200],"eu":[1004336,45200],"sh":[980848,45200],"cn":[1047664,45200]}], +"actors/mario/mario_metal_wing_unused.rgba16.png": [32,64,4096,{"jp":[1125200,41104],"us":[1132368,41104],"eu":[1004336,41104],"sh":[980848,41104],"cn":[1047664,41104]}], +"actors/mario/mario_mustache.rgba16.png": [32,32,2048,{"jp":[1125200,10384],"us":[1132368,10384],"eu":[1004336,10384],"sh":[980848,10384],"cn":[1047664,10384]}], +"actors/mario/mario_overalls_button.rgba16.png": [32,32,2048,{"jp":[1125200,4240],"us":[1132368,4240],"eu":[1004336,4240],"sh":[980848,4240],"cn":[1047664,4240]}], +"actors/mario/mario_sideburn.rgba16.png": [32,32,2048,{"jp":[1125200,8336],"us":[1132368,8336],"eu":[1004336,8336],"sh":[980848,8336],"cn":[1047664,8336]}], +"actors/mario/mario_wing.rgba16.png": [32,64,4096,{"jp":[1125200,32912],"us":[1132368,32912],"eu":[1004336,32912],"sh":[980848,32912],"cn":[1047664,32912]}], +"actors/mario/mario_wing_tip.rgba16.png": [32,64,4096,{"jp":[1125200,37008],"us":[1132368,37008],"eu":[1004336,37008],"sh":[980848,37008],"cn":[1047664,37008]}], +"actors/mario_cap/mario_cap_logo.rgba16.png": [32,32,2048,{"jp":[1125200,6288],"us":[1132368,6288],"eu":[1004336,6288],"sh":[980848,6288],"cn":[1047664,6288]}], +"actors/mario_cap/mario_cap_metal.rgba16.png": [64,32,4096,{"jp":[1125200,144],"us":[1132368,144],"eu":[1004336,144],"sh":[980848,144],"cn":[1047664,144]}], +"actors/mario_cap/mario_cap_metal_wing_tip_unused.rgba16.png": [32,64,4096,{"jp":[1125200,45200],"us":[1132368,45200],"eu":[1004336,45200],"sh":[980848,45200],"cn":[1047664,45200]}], +"actors/mario_cap/mario_cap_metal_wing_unused.rgba16.png": [32,64,4096,{"jp":[1125200,41104],"us":[1132368,41104],"eu":[1004336,41104],"sh":[980848,41104],"cn":[1047664,41104]}], +"actors/mario_cap/mario_cap_wing.rgba16.png": [32,64,4096,{"jp":[1125200,32912],"us":[1132368,32912],"eu":[1004336,32912],"sh":[980848,32912],"cn":[1047664,32912]}], +"actors/mario_cap/mario_cap_wing_tip.rgba16.png": [32,64,4096,{"jp":[1125200,37008],"us":[1132368,37008],"eu":[1004336,37008],"sh":[980848,37008],"cn":[1047664,37008]}], +"actors/metal_box/metal_box_side.rgba16.png": [32,64,4096,{"jp":[2032944,145816],"us":[2040320,145816],"eu":[1912288,145816],"sh":[1888800,145816],"cn":[1955632,145816]}], +"actors/mips/mips_eyes.rgba16.png": [32,32,2048,{"jp":[1926752,64384],"us":[1934096,64624],"eu":[1806064,64624],"sh":[1782576,64624],"cn":[1849408,64624]}], +"actors/mist/mist.ia16.png": [32,32,2048,{"jp":[2094912,128],"us":[2102288,128],"eu":[1974256,128],"sh":[1950768,128],"cn":[2017600,128]}], +"actors/moneybag/moneybag_eyes.rgba16.png": [32,32,2048,{"jp":[1979680,18864],"us":[1987056,18864],"eu":[1859024,18864],"sh":[1835536,18864],"cn":[1902368,18864]}], +"actors/moneybag/moneybag_mouth.rgba16.png": [64,32,4096,{"jp":[1979680,14768],"us":[1987056,14768],"eu":[1859024,14768],"sh":[1835536,14768],"cn":[1902368,14768]}], +"actors/monty_mole/monty_mole_cheek.rgba16.png": [32,32,2048,{"jp":[1377744,2416],"us":[1384912,2416],"eu":[1256880,2416],"sh":[1233392,2416],"cn":[1300224,2416]}], +"actors/monty_mole/monty_mole_claw.rgba16.png": [32,32,2048,{"jp":[1377744,10608],"us":[1384912,10608],"eu":[1256880,10608],"sh":[1233392,10608],"cn":[1300224,10608]}], +"actors/monty_mole/monty_mole_eye.rgba16.png": [32,32,2048,{"jp":[1377744,4464],"us":[1384912,4464],"eu":[1256880,4464],"sh":[1233392,4464],"cn":[1300224,4464]}], +"actors/monty_mole/monty_mole_nose.rgba16.png": [32,32,2048,{"jp":[1377744,6512],"us":[1384912,6512],"eu":[1256880,6512],"sh":[1233392,6512],"cn":[1300224,6512]}], +"actors/monty_mole/monty_mole_tooth.rgba16.png": [32,32,2048,{"jp":[1377744,8560],"us":[1384912,8560],"eu":[1256880,8560],"sh":[1233392,8560],"cn":[1300224,8560]}], +"actors/monty_mole_hole/monty_mole_hole.ia16.png": [32,32,2048,{"jp":[1377744,64],"us":[1384912,64],"eu":[1256880,64],"sh":[1233392,64],"cn":[1300224,64]}], +"actors/mr_i_eyeball/mr_i_eyeball_left_side.rgba16.png": [32,64,4096,{"jp":[1991184,128],"us":[1998560,128],"eu":[1870528,128],"sh":[1847040,128],"cn":[1913872,128]}], +"actors/mr_i_eyeball/mr_i_eyeball_right_side.rgba16.png": [32,64,4096,{"jp":[1991184,4224],"us":[1998560,4224],"eu":[1870528,4224],"sh":[1847040,4224],"cn":[1913872,4224]}], +"actors/mr_i_iris/mr_i_iris_closed.rgba16.png": [32,32,2048,{"jp":[1991184,14704],"us":[1998560,14704],"eu":[1870528,14704],"sh":[1847040,14704],"cn":[1913872,14704]}], +"actors/mr_i_iris/mr_i_iris_mostly_closed.rgba16.png": [32,32,2048,{"jp":[1991184,12656],"us":[1998560,12656],"eu":[1870528,12656],"sh":[1847040,12656],"cn":[1913872,12656]}], +"actors/mr_i_iris/mr_i_iris_mostly_open.rgba16.png": [32,32,2048,{"jp":[1991184,10608],"us":[1998560,10608],"eu":[1870528,10608],"sh":[1847040,10608],"cn":[1913872,10608]}], +"actors/mr_i_iris/mr_i_iris_open.rgba16.png": [32,32,2048,{"jp":[1991184,8560],"us":[1998560,8560],"eu":[1870528,8560],"sh":[1847040,8560],"cn":[1913872,8560]}], +"actors/mushroom_1up/1-up_mushroom.rgba16.png": [32,64,4096,{"jp":[2094912,169512],"us":[2102288,169512],"eu":[1974256,169512],"sh":[1950768,169512],"cn":[2017600,169512]}], +"actors/peach/peach_chest_jewel.rgba16.png": [16,16,512,{"jp":[1490032,11304],"us":[1497200,11304],"eu":[1369168,11304],"sh":[1345680,11304],"cn":[1412512,11304]}], +"actors/peach/peach_crown_jewel.rgba16.png": [16,16,512,{"jp":[1490032,10792],"us":[1497200,10792],"eu":[1369168,10792],"sh":[1345680,10792],"cn":[1412512,10792]}], +"actors/peach/peach_dress.rgba16.png": [32,32,2048,{"jp":[1490032,16424],"us":[1497200,16424],"eu":[1369168,16424],"sh":[1345680,16424],"cn":[1412512,16424]}], +"actors/peach/peach_eye_closed.rgba16.png": [32,32,2048,{"jp":[1490032,8744],"us":[1497200,8744],"eu":[1369168,8744],"sh":[1345680,8744],"cn":[1412512,8744]}], +"actors/peach/peach_eye_mostly_closed.rgba16.png": [32,32,2048,{"jp":[1490032,6696],"us":[1497200,6696],"eu":[1369168,6696],"sh":[1345680,6696],"cn":[1412512,6696]}], +"actors/peach/peach_eye_mostly_open.rgba16.png": [32,32,2048,{"jp":[1490032,4648],"us":[1497200,4648],"eu":[1369168,4648],"sh":[1345680,4648],"cn":[1412512,4648]}], +"actors/peach/peach_eye_open.rgba16.png": [32,32,2048,{"jp":[1490032,2600],"us":[1497200,2600],"eu":[1369168,2600],"sh":[1345680,2600],"cn":[1412512,2600]}], +"actors/peach/peach_lips.rgba16.png": [32,32,2048,{"jp":[1490032,13864],"us":[1497200,13864],"eu":[1369168,13864],"sh":[1345680,13864],"cn":[1412512,13864]}], +"actors/peach/peach_lips_scrunched.rgba16.png": [32,32,2048,{"jp":[1490032,11816],"us":[1497200,11816],"eu":[1369168,11816],"sh":[1345680,11816],"cn":[1412512,11816]}], +"actors/peach/peach_nostril.rgba16.png": [16,16,512,{"jp":[1490032,15912],"us":[1497200,15912],"eu":[1369168,15912],"sh":[1345680,15912],"cn":[1412512,15912]}], +"actors/pebble/pebble.rgba16.png": [32,32,2048,{"jp":[2094912,115456],"us":[2102288,115456],"eu":[1974256,115456],"sh":[1950768,115456],"cn":[2017600,115456]}], +"actors/penguin/penguin_beak.rgba16.png": [32,32,2048,{"jp":[1436272,21984],"us":[1443440,21984],"eu":[1315408,21984],"sh":[1291920,21984],"cn":[1358752,21984]}], +"actors/penguin/penguin_eye_angry.rgba16.png": [32,32,2048,{"jp":[1436272,17888],"us":[1443440,17888],"eu":[1315408,17888],"sh":[1291920,17888],"cn":[1358752,17888]}], +"actors/penguin/penguin_eye_angry_unused.rgba16.png": [32,32,2048,{"jp":[1436272,19936],"us":[1443440,19936],"eu":[1315408,19936],"sh":[1291920,19936],"cn":[1358752,19936]}], +"actors/penguin/penguin_eye_closed.rgba16.png": [32,32,2048,{"jp":[1436272,15840],"us":[1443440,15840],"eu":[1315408,15840],"sh":[1291920,15840],"cn":[1358752,15840]}], +"actors/penguin/penguin_eye_half_closed.rgba16.png": [32,32,2048,{"jp":[1436272,13792],"us":[1443440,13792],"eu":[1315408,13792],"sh":[1291920,13792],"cn":[1358752,13792]}], +"actors/penguin/penguin_eye_open.rgba16.png": [32,32,2048,{"jp":[1436272,11744],"us":[1443440,11744],"eu":[1315408,11744],"sh":[1291920,11744],"cn":[1358752,11744]}], +"actors/piranha_plant/piranha_plant_bottom_lip.rgba16.png": [32,32,2048,{"jp":[1844608,78840],"us":[1851952,78840],"eu":[1723920,78840],"sh":[1700432,78840],"cn":[1767264,78840]}], +"actors/piranha_plant/piranha_plant_leaf.rgba16.png": [32,64,4096,{"jp":[1844608,82936],"us":[1851952,82936],"eu":[1723920,82936],"sh":[1700432,82936],"cn":[1767264,82936]}], +"actors/piranha_plant/piranha_plant_skin.rgba16.png": [32,32,2048,{"jp":[1844608,74744],"us":[1851952,74744],"eu":[1723920,74744],"sh":[1700432,74744],"cn":[1767264,74744]}], +"actors/piranha_plant/piranha_plant_stem.rgba16.png": [32,32,2048,{"jp":[1844608,76792],"us":[1851952,76792],"eu":[1723920,76792],"sh":[1700432,76792],"cn":[1767264,76792]}], +"actors/piranha_plant/piranha_plant_tongue.rgba16.png": [32,64,4096,{"jp":[1599504,148536],"us":[1606720,148536],"eu":[1478688,148536],"sh":[1455200,148536],"cn":[1522032,148536]}], +"actors/piranha_plant/piranha_plant_tooth.rgba16.png": [32,32,2048,{"jp":[1844608,80888],"us":[1851952,80888],"eu":[1723920,80888],"sh":[1700432,80888],"cn":[1767264,80888]}], +"actors/pokey/pokey_body.rgba16.png": [32,32,2048,{"jp":[1327760,75896],"us":[1334928,75896],"eu":[1206896,75896],"sh":[1183408,75896],"cn":[1250240,75896]}], +"actors/pokey/pokey_face.rgba16.png": [32,32,2048,{"jp":[1327760,71504],"us":[1334928,71504],"eu":[1206896,71504],"sh":[1183408,71504],"cn":[1250240,71504]}], +"actors/pokey/pokey_face_blink.rgba16.png": [32,32,2048,{"jp":[1327760,73552],"us":[1334928,73552],"eu":[1206896,73552],"sh":[1183408,73552],"cn":[1250240,73552]}], +"actors/poundable_pole/poundable_pole_side.rgba16.png": [32,32,2048,{"jp":[1844608,6224],"us":[1851952,6224],"eu":[1723920,6224],"sh":[1700432,6224],"cn":[1767264,6224]}], +"actors/poundable_pole/poundable_pole_top.rgba16.png": [32,32,2048,{"jp":[1844608,4176],"us":[1851952,4176],"eu":[1723920,4176],"sh":[1700432,4176],"cn":[1767264,4176]}], +"actors/power_meter/power_meter_five_segments.rgba16.png": [32,32,2048,{"jp":[2094912,158688],"us":[2102288,158688],"eu":[1974256,158688],"sh":[1950768,158688],"cn":[2017600,158688]}], +"actors/power_meter/power_meter_four_segments.rgba16.png": [32,32,2048,{"jp":[2094912,160736],"us":[2102288,160736],"eu":[1974256,160736],"sh":[1950768,160736],"cn":[2017600,160736]}], +"actors/power_meter/power_meter_full.rgba16.png": [32,32,2048,{"jp":[2094912,152544],"us":[2102288,152544],"eu":[1974256,152544],"sh":[1950768,152544],"cn":[2017600,152544]}], "actors/power_meter/power_meter_left_side.rgba16.png": [32,64,4096,{"jp":[2094912,144352],"us":[2102288,144352],"eu":[1974256,144352],"sh":[1950768,144352]}], -"actors/power_meter/power_meter_one_segment.rgba16.png": [32,32,2048,{"jp":[2094912,166880],"us":[2102288,166880],"eu":[1974256,166880],"sh":[1950768,166880]}], +"actors/power_meter/power_meter_left_side_cn.rgba16.png": [32,64,4096,{"cn":[2017600,144352]}], +"actors/power_meter/power_meter_one_segment.rgba16.png": [32,32,2048,{"jp":[2094912,166880],"us":[2102288,166880],"eu":[1974256,166880],"sh":[1950768,166880],"cn":[2017600,166880]}], "actors/power_meter/power_meter_right_side.rgba16.png": [32,64,4096,{"jp":[2094912,148448],"us":[2102288,148448],"eu":[1974256,148448],"sh":[1950768,148448]}], -"actors/power_meter/power_meter_seven_segments.rgba16.png": [32,32,2048,{"jp":[2094912,154592],"us":[2102288,154592],"eu":[1974256,154592],"sh":[1950768,154592]}], -"actors/power_meter/power_meter_six_segments.rgba16.png": [32,32,2048,{"jp":[2094912,156640],"us":[2102288,156640],"eu":[1974256,156640],"sh":[1950768,156640]}], -"actors/power_meter/power_meter_three_segments.rgba16.png": [32,32,2048,{"jp":[2094912,162784],"us":[2102288,162784],"eu":[1974256,162784],"sh":[1950768,162784]}], -"actors/power_meter/power_meter_two_segments.rgba16.png": [32,32,2048,{"jp":[2094912,164832],"us":[2102288,164832],"eu":[1974256,164832],"sh":[1950768,164832]}], -"actors/purple_switch/purple_switch_base.rgba16.png": [16,4,128,{"jp":[2032944,49320],"us":[2040320,49320],"eu":[1912288,49320],"sh":[1888800,49320]}], -"actors/purple_switch/purple_switch_exclamation_point.rgba16.png": [16,32,1024,{"jp":[2032944,49448],"us":[2040320,49448],"eu":[1912288,49448],"sh":[1888800,49448]}], -"actors/sand/sand_particle.rgba16.png": [16,16,512,{"jp":[2094912,178896],"us":[2102288,178896],"eu":[1974256,178896],"sh":[1950768,178896]}], -"actors/scuttlebug/scuttlebug_eye.rgba16.png": [32,32,2048,{"jp":[1991184,65800],"us":[1998560,65800],"eu":[1870528,65800],"sh":[1847040,65800]}], -"actors/scuttlebug/scuttlebug_iris.rgba16.png": [32,32,2048,{"jp":[1991184,76040],"us":[1998560,76040],"eu":[1870528,76040],"sh":[1847040,76040]}], -"actors/scuttlebug/scuttlebug_left_side.rgba16.png": [32,64,4096,{"jp":[1991184,67848],"us":[1998560,67848],"eu":[1870528,67848],"sh":[1847040,67848]}], -"actors/scuttlebug/scuttlebug_leg.rgba16.png": [32,32,2048,{"jp":[1991184,78088],"us":[1998560,78088],"eu":[1870528,78088],"sh":[1847040,78088]}], -"actors/scuttlebug/scuttlebug_right_side.rgba16.png": [32,64,4096,{"jp":[1991184,71944],"us":[1998560,71944],"eu":[1870528,71944],"sh":[1847040,71944]}], -"actors/seaweed/seaweed_base.rgba16.png": [32,32,2048,{"jp":[1802256,38416],"us":[1809600,38416],"eu":[1681568,38416],"sh":[1658080,38416]}], -"actors/seaweed/seaweed_lower_center.rgba16.png": [32,32,2048,{"jp":[1802256,36368],"us":[1809600,36368],"eu":[1681568,36368],"sh":[1658080,36368]}], -"actors/seaweed/seaweed_tip.rgba16.png": [32,32,2048,{"jp":[1802256,32272],"us":[1809600,32272],"eu":[1681568,32272],"sh":[1658080,32272]}], -"actors/seaweed/seaweed_upper_center.rgba16.png": [32,32,2048,{"jp":[1802256,34320],"us":[1809600,34320],"eu":[1681568,34320],"sh":[1658080,34320]}], -"actors/skeeter/skeeter_eye.rgba16.png": [32,32,2048,{"jp":[1802256,144],"us":[1809600,144],"eu":[1681568,144],"sh":[1658080,144]}], -"actors/skeeter/skeeter_iris.rgba16.png": [16,8,256,{"jp":[1802256,2192],"us":[1809600,2192],"eu":[1681568,2192],"sh":[1658080,2192]}], -"actors/smoke/smoke.ia16.png": [32,32,2048,{"jp":[1377744,29376],"us":[1384912,29376],"eu":[1256880,29376],"sh":[1233392,29376]}], -"actors/snowman/mr_blizzard_eye.rgba16.png": [32,32,2048,{"jp":[1436272,46192],"us":[1443440,46192],"eu":[1315408,46192],"sh":[1291920,46192]}], -"actors/snowman/mr_blizzard_left_side.rgba16.png": [32,64,4096,{"jp":[1436272,38000],"us":[1443440,38000],"eu":[1315408,38000],"sh":[1291920,38000]}], -"actors/snowman/mr_blizzard_mitten.rgba16.png": [32,32,2048,{"jp":[1436272,35952],"us":[1443440,35952],"eu":[1315408,35952],"sh":[1291920,35952]}], -"actors/snowman/mr_blizzard_mouth.rgba16.png": [32,32,2048,{"jp":[1436272,48240],"us":[1443440,48240],"eu":[1315408,48240],"sh":[1291920,48240]}], -"actors/snowman/mr_blizzard_right_side.rgba16.png": [32,64,4096,{"jp":[1436272,42096],"us":[1443440,42096],"eu":[1315408,42096],"sh":[1291920,42096]}], -"actors/snufit/snufit_body.rgba16.png": [32,32,2048,{"jp":[1991184,28896],"us":[1998560,28896],"eu":[1870528,28896],"sh":[1847040,28896]}], -"actors/snufit/snufit_eye.rgba16.png": [32,32,2048,{"jp":[1991184,30944],"us":[1998560,30944],"eu":[1870528,30944],"sh":[1847040,30944]}], -"actors/snufit/snufit_mask_strap.rgba16.png": [16,32,1024,{"jp":[1991184,32992],"us":[1998560,32992],"eu":[1870528,32992],"sh":[1847040,32992]}], -"actors/snufit/snufit_mouth.rgba16.png": [32,32,2048,{"jp":[1991184,34016],"us":[1998560,34016],"eu":[1870528,34016],"sh":[1847040,34016]}], -"actors/sparkle/sparkle_0.rgba16.png": [32,32,2048,{"jp":[1125200,160912],"us":[1132368,160912],"eu":[1004336,160912],"sh":[980848,160912]}], -"actors/sparkle/sparkle_1.rgba16.png": [32,32,2048,{"jp":[1125200,162960],"us":[1132368,162960],"eu":[1004336,162960],"sh":[980848,162960]}], -"actors/sparkle/sparkle_2.rgba16.png": [32,32,2048,{"jp":[1125200,165008],"us":[1132368,165008],"eu":[1004336,165008],"sh":[980848,165008]}], -"actors/sparkle/sparkle_3.rgba16.png": [32,32,2048,{"jp":[1125200,167056],"us":[1132368,167056],"eu":[1004336,167056],"sh":[980848,167056]}], -"actors/sparkle/sparkle_4.rgba16.png": [32,32,2048,{"jp":[1125200,169104],"us":[1132368,169104],"eu":[1004336,169104],"sh":[980848,169104]}], -"actors/sparkle/sparkle_5.rgba16.png": [32,32,2048,{"jp":[1125200,171152],"us":[1132368,171152],"eu":[1004336,171152],"sh":[980848,171152]}], -"actors/sparkle_animation/sparkle_animation_0.ia16.png": [32,32,2048,{"jp":[1125200,207496],"us":[1132368,207496],"eu":[1004336,207496],"sh":[980848,207496]}], -"actors/sparkle_animation/sparkle_animation_1.ia16.png": [32,32,2048,{"jp":[1125200,209544],"us":[1132368,209544],"eu":[1004336,209544],"sh":[980848,209544]}], -"actors/sparkle_animation/sparkle_animation_2.ia16.png": [32,32,2048,{"jp":[1125200,211592],"us":[1132368,211592],"eu":[1004336,211592],"sh":[980848,211592]}], -"actors/sparkle_animation/sparkle_animation_3.ia16.png": [32,32,2048,{"jp":[1125200,213640],"us":[1132368,213640],"eu":[1004336,213640],"sh":[980848,213640]}], -"actors/sparkle_animation/sparkle_animation_4.ia16.png": [32,32,2048,{"jp":[1125200,215688],"us":[1132368,215688],"eu":[1004336,215688],"sh":[980848,215688]}], -"actors/spindrift/spindrift_face.rgba16.png": [32,32,2048,{"jp":[1436272,1744],"us":[1443440,1744],"eu":[1315408,1744],"sh":[1291920,1744]}], -"actors/spindrift/spindrift_head.rgba16.png": [32,32,2048,{"jp":[1436272,7888],"us":[1443440,7888],"eu":[1315408,7888],"sh":[1291920,7888]}], -"actors/spindrift/spindrift_leaf.rgba16.png": [32,32,2048,{"jp":[1436272,5840],"us":[1443440,5840],"eu":[1315408,5840],"sh":[1291920,5840]}], -"actors/spindrift/spindrift_petal.rgba16.png": [32,32,2048,{"jp":[1436272,3792],"us":[1443440,3792],"eu":[1315408,3792],"sh":[1291920,3792]}], -"actors/springboard/springboard_base_unused.rgba16.png": [32,32,2048,{"jp":[1457744,2072],"us":[1464912,2072],"eu":[1336880,2072],"sh":[1313392,2072]}], -"actors/springboard/springboard_top_unused.rgba16.png": [32,32,2048,{"jp":[1457744,24],"us":[1464912,24],"eu":[1336880,24],"sh":[1313392,24]}], -"actors/star/star_eye.rgba16.png": [32,32,2048,{"jp":[1568640,31280],"us":[1575856,31280],"eu":[1447824,31280],"sh":[1424336,31280]}], -"actors/star/star_surface.rgba16.png": [32,32,2048,{"jp":[2094912,173808],"us":[2102288,173808],"eu":[1974256,173808],"sh":[1950768,173808]}], -"actors/stomp_smoke/stomp_smoke_0.ia16.png": [32,32,2048,{"jp":[1125200,139592],"us":[1132368,139592],"eu":[1004336,139592],"sh":[980848,139592]}], -"actors/stomp_smoke/stomp_smoke_1.ia16.png": [32,32,2048,{"jp":[1125200,141640],"us":[1132368,141640],"eu":[1004336,141640],"sh":[980848,141640]}], -"actors/stomp_smoke/stomp_smoke_2.ia16.png": [32,32,2048,{"jp":[1125200,143688],"us":[1132368,143688],"eu":[1004336,143688],"sh":[980848,143688]}], -"actors/stomp_smoke/stomp_smoke_3.ia16.png": [32,32,2048,{"jp":[1125200,145736],"us":[1132368,145736],"eu":[1004336,145736],"sh":[980848,145736]}], -"actors/stomp_smoke/stomp_smoke_4.ia16.png": [32,32,2048,{"jp":[1125200,147784],"us":[1132368,147784],"eu":[1004336,147784],"sh":[980848,147784]}], -"actors/stomp_smoke/stomp_smoke_5.ia16.png": [32,32,2048,{"jp":[1125200,149832],"us":[1132368,149832],"eu":[1004336,149832],"sh":[980848,149832]}], -"actors/sushi/sushi_eye.rgba16.png": [32,16,1024,{"jp":[1285392,38608],"us":[1292560,38608],"eu":[1164528,38608],"sh":[1141040,38608]}], -"actors/sushi/sushi_snout.rgba16.png": [32,32,2048,{"jp":[1285392,36560],"us":[1292560,36560],"eu":[1164528,36560],"sh":[1141040,36560]}], -"actors/sushi/sushi_tooth.rgba16.png": [8,8,128,{"jp":[1285392,39632],"us":[1292560,39632],"eu":[1164528,39632],"sh":[1141040,39632]}], -"actors/swoop/swoop_body.rgba16.png": [32,32,2048,{"jp":[1991184,17008],"us":[1998560,17008],"eu":[1870528,17008],"sh":[1847040,17008]}], -"actors/swoop/swoop_eye.rgba16.png": [32,32,2048,{"jp":[1991184,19056],"us":[1998560,19056],"eu":[1870528,19056],"sh":[1847040,19056]}], -"actors/swoop/swoop_nose.rgba16.png": [32,32,2048,{"jp":[1991184,21104],"us":[1998560,21104],"eu":[1870528,21104],"sh":[1847040,21104]}], -"actors/swoop/swoop_wing.rgba16.png": [32,32,2048,{"jp":[1991184,23152],"us":[1998560,23152],"eu":[1870528,23152],"sh":[1847040,23152]}], -"actors/thwomp/thwomp_face.rgba16.png": [32,64,4096,{"jp":[1215456,39168],"us":[1222624,39168],"eu":[1094592,39168],"sh":[1071104,39168]}], -"actors/thwomp/thwomp_surface.rgba16.png": [32,32,2048,{"jp":[1215456,43264],"us":[1222624,43264],"eu":[1094592,43264],"sh":[1071104,43264]}], -"actors/toad/toad_face.rgba16.png": [32,32,2048,{"jp":[1926752,22816],"us":[1934096,22816],"eu":[1806064,22816],"sh":[1782576,22816]}], -"actors/toad/toad_head.rgba16.png": [32,32,2048,{"jp":[1926752,24864],"us":[1934096,24864],"eu":[1806064,24864],"sh":[1782576,24864]}], -"actors/tornado/tornado.ia16.png": [32,64,4096,{"jp":[1285392,75848],"us":[1292560,75848],"eu":[1164528,75848],"sh":[1141040,75848]}], -"actors/treasure_chest/treasure_chest_front.rgba16.png": [64,32,4096,{"jp":[1802256,87976],"us":[1809600,87976],"eu":[1681568,87976],"sh":[1658080,87976]}], -"actors/treasure_chest/treasure_chest_lock.rgba16.png": [32,32,2048,{"jp":[1802256,81832],"us":[1809600,81832],"eu":[1681568,81832],"sh":[1658080,81832]}], -"actors/treasure_chest/treasure_chest_lock_top.rgba16.png": [32,32,2048,{"jp":[1802256,85928],"us":[1809600,85928],"eu":[1681568,85928],"sh":[1658080,85928]}], -"actors/treasure_chest/treasure_chest_side.rgba16.png": [32,32,2048,{"jp":[1802256,83880],"us":[1809600,83880],"eu":[1681568,83880],"sh":[1658080,83880]}], -"actors/tree/palm_tree.rgba16.png": [32,64,4096,{"jp":[2094912,205336],"us":[2102288,205336],"eu":[1974256,205336],"sh":[1950768,205336]}], -"actors/tree/pine_tree.rgba16.png": [32,64,4096,{"jp":[2094912,196448],"us":[2102288,196448],"eu":[1974256,196448],"sh":[1950768,196448]}], -"actors/tree/snowy_pine_tree.rgba16.png": [32,64,4096,{"jp":[2094912,200776],"us":[2102288,200776],"eu":[1974256,200776],"sh":[1950768,200776]}], -"actors/tree/tree_left_side.rgba16.png": [32,64,4096,{"jp":[2094912,187944],"us":[2102288,187944],"eu":[1974256,187944],"sh":[1950768,187944]}], -"actors/tree/tree_right_side.rgba16.png": [32,64,4096,{"jp":[2094912,192040],"us":[2102288,192040],"eu":[1974256,192040],"sh":[1950768,192040]}], -"actors/ukiki/ukiki_butt.rgba16.png": [32,32,2048,{"jp":[1377744,39872],"us":[1384912,39872],"eu":[1256880,39872],"sh":[1233392,39872]}], -"actors/ukiki/ukiki_face.rgba16.png": [64,32,4096,{"jp":[1377744,31680],"us":[1384912,31680],"eu":[1256880,31680],"sh":[1233392,31680]}], -"actors/ukiki/ukiki_face_blink.rgba16.png": [64,32,4096,{"jp":[1377744,35776],"us":[1384912,35776],"eu":[1256880,35776],"sh":[1233392,35776]}], -"actors/ukiki/ukiki_fur.rgba16.png": [32,32,2048,{"jp":[1377744,41920],"us":[1384912,41920],"eu":[1256880,41920],"sh":[1233392,41920]}], -"actors/unagi/unagi_body.rgba16.png": [32,32,2048,{"jp":[1285392,44832],"us":[1292560,44832],"eu":[1164528,44832],"sh":[1141040,44832]}], -"actors/unagi/unagi_eye.rgba16.png": [16,16,512,{"jp":[1285392,46880],"us":[1292560,46880],"eu":[1164528,46880],"sh":[1141040,46880]}], -"actors/unagi/unagi_head_base.rgba16.png": [32,32,2048,{"jp":[1285392,47392],"us":[1292560,47392],"eu":[1164528,47392],"sh":[1141040,47392]}], -"actors/unagi/unagi_mouth.rgba16.png": [8,8,128,{"jp":[1285392,49952],"us":[1292560,49952],"eu":[1164528,49952],"sh":[1141040,49952]}], -"actors/unagi/unagi_tail.rgba16.png": [32,32,2048,{"jp":[1285392,50080],"us":[1292560,50080],"eu":[1164528,50080],"sh":[1141040,50080]}], -"actors/unagi/unagi_tooth.rgba16.png": [16,16,512,{"jp":[1285392,49440],"us":[1292560,49440],"eu":[1164528,49440],"sh":[1141040,49440]}], -"actors/walk_smoke/walk_smoke_0.ia16.png": [32,32,2048,{"jp":[1125200,122528],"us":[1132368,122528],"eu":[1004336,122528],"sh":[980848,122528]}], -"actors/walk_smoke/walk_smoke_1.ia16.png": [32,32,2048,{"jp":[1125200,124576],"us":[1132368,124576],"eu":[1004336,124576],"sh":[980848,124576]}], -"actors/walk_smoke/walk_smoke_2.ia16.png": [32,32,2048,{"jp":[1125200,126624],"us":[1132368,126624],"eu":[1004336,126624],"sh":[980848,126624]}], -"actors/walk_smoke/walk_smoke_3.ia16.png": [32,32,2048,{"jp":[1125200,128672],"us":[1132368,128672],"eu":[1004336,128672],"sh":[980848,128672]}], -"actors/walk_smoke/walk_smoke_4.ia16.png": [32,32,2048,{"jp":[1125200,130720],"us":[1132368,130720],"eu":[1004336,130720],"sh":[980848,130720]}], -"actors/walk_smoke/walk_smoke_5.ia16.png": [32,32,2048,{"jp":[1125200,132768],"us":[1132368,132768],"eu":[1004336,132768],"sh":[980848,132768]}], -"actors/walk_smoke/walk_smoke_6.ia16.png": [32,32,2048,{"jp":[1125200,134816],"us":[1132368,134816],"eu":[1004336,134816],"sh":[980848,134816]}], -"actors/warp_pipe/warp_pipe_side.rgba16.png": [32,64,4096,{"jp":[2094912,32320],"us":[2102288,32320],"eu":[1974256,32320],"sh":[1950768,32320]}], -"actors/warp_pipe/warp_pipe_top.rgba16.png": [32,32,2048,{"jp":[2094912,37224],"us":[2102288,37224],"eu":[1974256,37224],"sh":[1950768,37224]}], -"actors/water_bubble/water_bubble.rgba16.png": [32,32,2048,{"jp":[1257760,65152],"us":[1264928,65152],"eu":[1136896,65152],"sh":[1113408,65152]}], -"actors/water_mine/water_mine_left_side_unused.rgba16.png": [32,64,4096,{"jp":[1599504,359104],"us":[1606720,359440],"eu":[1478688,359440],"sh":[1455200,359440]}], -"actors/water_mine/water_mine_right_side_unused.rgba16.png": [32,64,4096,{"jp":[1599504,363200],"us":[1606720,363536],"eu":[1478688,363536],"sh":[1455200,363536]}], -"actors/water_mine/water_mine_spike_unused.rgba16.png": [32,32,2048,{"jp":[1599504,367296],"us":[1606720,367632],"eu":[1478688,367632],"sh":[1455200,367632]}], -"actors/water_ring/water_ring.rgba16.png": [64,32,4096,{"jp":[1802256,74624],"us":[1809600,74624],"eu":[1681568,74624],"sh":[1658080,74624]}], -"actors/water_splash/water_splash_0.rgba16.png": [32,64,4096,{"jp":[1125200,173512],"us":[1132368,173512],"eu":[1004336,173512],"sh":[980848,173512]}], -"actors/water_splash/water_splash_1.rgba16.png": [32,64,4096,{"jp":[1125200,177608],"us":[1132368,177608],"eu":[1004336,177608],"sh":[980848,177608]}], -"actors/water_splash/water_splash_2.rgba16.png": [32,64,4096,{"jp":[1125200,181704],"us":[1132368,181704],"eu":[1004336,181704],"sh":[980848,181704]}], -"actors/water_splash/water_splash_3.rgba16.png": [32,64,4096,{"jp":[1125200,185800],"us":[1132368,185800],"eu":[1004336,185800],"sh":[980848,185800]}], -"actors/water_splash/water_splash_4.rgba16.png": [32,64,4096,{"jp":[1125200,189896],"us":[1132368,189896],"eu":[1004336,189896],"sh":[980848,189896]}], -"actors/water_splash/water_splash_5.rgba16.png": [32,64,4096,{"jp":[1125200,193992],"us":[1132368,193992],"eu":[1004336,193992],"sh":[980848,193992]}], -"actors/water_splash/water_splash_6.rgba16.png": [32,64,4096,{"jp":[1125200,198088],"us":[1132368,198088],"eu":[1004336,198088],"sh":[980848,198088]}], -"actors/water_splash/water_splash_7.rgba16.png": [32,64,4096,{"jp":[1125200,202184],"us":[1132368,202184],"eu":[1004336,202184],"sh":[980848,202184]}], -"actors/water_wave/water_wave_0.ia16.png": [32,32,2048,{"jp":[1125200,152408],"us":[1132368,152408],"eu":[1004336,152408],"sh":[980848,152408]}], -"actors/water_wave/water_wave_1.ia16.png": [32,32,2048,{"jp":[1125200,154456],"us":[1132368,154456],"eu":[1004336,154456],"sh":[980848,154456]}], -"actors/water_wave/water_wave_2.ia16.png": [32,32,2048,{"jp":[1125200,156504],"us":[1132368,156504],"eu":[1004336,156504],"sh":[980848,156504]}], -"actors/water_wave/water_wave_3.ia16.png": [32,32,2048,{"jp":[1125200,158552],"us":[1132368,158552],"eu":[1004336,158552],"sh":[980848,158552]}], -"actors/whirlpool/whirlpool.ia16.png": [32,64,4096,{"jp":[1285392,75848],"us":[1292560,75848],"eu":[1164528,75848],"sh":[1141040,75848]}], -"actors/white_particle/snow_particle.rgba16.png": [16,16,512,{"jp":[2094912,181920],"us":[2102288,181920],"eu":[1974256,181920],"sh":[1950768,181920]}], -"actors/white_particle_small/small_snow_particle.rgba16.png": [16,16,512,{"jp":[1125200,206720],"us":[1132368,206720],"eu":[1004336,206720],"sh":[980848,206720]}], -"actors/whomp/whomp_back.rgba16.png": [32,64,4096,{"jp":[1844608,115552],"us":[1851952,115552],"eu":[1723920,115552],"sh":[1700432,115552]}], -"actors/whomp/whomp_face.rgba16.png": [32,64,4096,{"jp":[1844608,119648],"us":[1851952,119648],"eu":[1723920,119648],"sh":[1700432,119648]}], -"actors/whomp/whomp_hand.rgba16.png": [32,32,2048,{"jp":[1844608,123744],"us":[1851952,123744],"eu":[1723920,123744],"sh":[1700432,123744]}], -"actors/whomp/whomp_surface.rgba16.png": [32,32,2048,{"jp":[1844608,125792],"us":[1851952,125792],"eu":[1723920,125792],"sh":[1700432,125792]}], -"actors/wiggler/wiggler_eye.rgba16.png": [32,32,2048,{"jp":[1568640,31280],"us":[1575856,31280],"eu":[1447824,31280],"sh":[1424336,31280]}], -"actors/wiggler/wiggler_flower.rgba16.png": [32,32,2048,{"jp":[1568640,33328],"us":[1575856,33328],"eu":[1447824,33328],"sh":[1424336,33328]}], -"actors/wiggler/wiggler_frown.rgba16.png": [32,32,2048,{"jp":[1568640,35376],"us":[1575856,35376],"eu":[1447824,35376],"sh":[1424336,35376]}], -"actors/wiggler/wiggler_nose_left_side.rgba16.png": [32,64,4096,{"jp":[1568640,37424],"us":[1575856,37424],"eu":[1447824,37424],"sh":[1424336,37424]}], -"actors/wiggler/wiggler_nose_right_side.rgba16.png": [32,64,4096,{"jp":[1568640,41520],"us":[1575856,41520],"eu":[1447824,41520],"sh":[1424336,41520]}], -"actors/wiggler/wiggler_segment_left_side.rgba16.png": [32,64,4096,{"jp":[1568640,23088],"us":[1575856,23088],"eu":[1447824,23088],"sh":[1424336,23088]}], -"actors/wiggler/wiggler_segment_right_side.rgba16.png": [32,64,4096,{"jp":[1568640,27184],"us":[1575856,27184],"eu":[1447824,27184],"sh":[1424336,27184]}], -"actors/wooden_signpost/wooden_signpost_back.rgba16.png": [32,32,2048,{"jp":[2094912,182728],"us":[2102288,182728],"eu":[1974256,182728],"sh":[1950768,182728]}], -"actors/wooden_signpost/wooden_signpost_front.rgba16.png": [32,32,2048,{"jp":[2094912,184776],"us":[2102288,184776],"eu":[1974256,184776],"sh":[1950768,184776]}], -"actors/yellow_sphere/yellow_sphere.rgba16.png": [32,32,2048,{"jp":[1215456,64],"us":[1222624,64],"eu":[1094592,64],"sh":[1071104,64]}], -"actors/yellow_sphere_small/small_yellow_sphere.rgba16.png": [32,32,2048,{"jp":[1215456,64],"us":[1222624,64],"eu":[1094592,64],"sh":[1071104,64]}], -"actors/yoshi/yoshi_eye.rgba16.png": [16,16,512,{"jp":[1490032,115872],"us":[1497200,116104],"eu":[1369168,116104],"sh":[1345680,116104]}], -"actors/yoshi/yoshi_eye_blink.rgba16.png": [16,16,512,{"jp":[1490032,116384],"us":[1497200,116616],"eu":[1369168,116616],"sh":[1345680,116616]}], -"actors/yoshi/yoshi_nostril.rgba16.png": [16,16,512,{"jp":[1490032,116896],"us":[1497200,117128],"eu":[1369168,117128],"sh":[1345680,117128]}], -"actors/yoshi_egg/yoshi_egg_0_unused.rgba16.png": [32,32,2048,{"jp":[1215456,22456],"us":[1222624,22456],"eu":[1094592,22456],"sh":[1071104,22456]}], -"actors/yoshi_egg/yoshi_egg_1_unused.rgba16.png": [32,32,2048,{"jp":[1215456,24504],"us":[1222624,24504],"eu":[1094592,24504],"sh":[1071104,24504]}], -"actors/yoshi_egg/yoshi_egg_2_unused.rgba16.png": [32,32,2048,{"jp":[1215456,26552],"us":[1222624,26552],"eu":[1094592,26552],"sh":[1071104,26552]}], -"actors/yoshi_egg/yoshi_egg_3_unused.rgba16.png": [32,32,2048,{"jp":[1215456,28600],"us":[1222624,28600],"eu":[1094592,28600],"sh":[1071104,28600]}], -"actors/yoshi_egg/yoshi_egg_4_unused.rgba16.png": [32,32,2048,{"jp":[1215456,30648],"us":[1222624,30648],"eu":[1094592,30648],"sh":[1071104,30648]}], -"actors/yoshi_egg/yoshi_egg_5_unused.rgba16.png": [32,32,2048,{"jp":[1215456,32696],"us":[1222624,32696],"eu":[1094592,32696],"sh":[1071104,32696]}], -"actors/yoshi_egg/yoshi_egg_6_unused.rgba16.png": [32,32,2048,{"jp":[1215456,34744],"us":[1222624,34744],"eu":[1094592,34744],"sh":[1071104,34744]}], -"actors/yoshi_egg/yoshi_egg_7_unused.rgba16.png": [32,32,2048,{"jp":[1215456,36792],"us":[1222624,36792],"eu":[1094592,36792],"sh":[1071104,36792]}], -"assets/demos/bbh.bin": [988,{"jp":[5733368],"us":[5741664],"eu":[5620584],"sh":[5589632]}], -"assets/demos/bitdw.bin": [1412,{"us":[5747100],"sh":[5595068]}], -"assets/demos/ccm.bin": [1320,{"jp":[5734356],"us":[5742652],"eu":[5621572],"sh":[5590620]}], -"assets/demos/hmc.bin": [980,{"jp":[5735676],"us":[5743972],"eu":[5622892],"sh":[5591940]}], -"assets/demos/jrb.bin": [620,{"jp":[5736656],"us":[5744952],"eu":[5623872],"sh":[5592920]}], -"assets/demos/pss.bin": [748,{"jp":[5737948],"us":[5746244],"eu":[5625164],"sh":[5594212]}], -"assets/demos/unused.bin": [108,{"jp":[5738696],"us":[5746992],"eu":[5625912],"sh":[5594960]}], -"assets/demos/wf.bin": [672,{"jp":[5737276],"us":[5745572],"eu":[5624492],"sh":[5593540]}], -"levels/bbh/0.rgba16.png": [32,64,4096,{"jp":[3604960,0],"us":[3611712,0],"eu":[3485312,0],"sh":[3459680,0]}], -"levels/bbh/1.rgba16.png": [32,32,2048,{"jp":[3604960,4096],"us":[3611712,4096],"eu":[3485312,4096],"sh":[3459680,4096]}], -"levels/bbh/2.rgba16.png": [32,32,2048,{"jp":[3604960,6144],"us":[3611712,6144],"eu":[3485312,6144],"sh":[3459680,6144]}], -"levels/bbh/3.rgba16.png": [32,64,4096,{"jp":[3604960,8192],"us":[3611712,8192],"eu":[3485312,8192],"sh":[3459680,8192]}], -"levels/bbh/4.rgba16.png": [16,32,1024,{"jp":[3604960,12288],"us":[3611712,12288],"eu":[3485312,12288],"sh":[3459680,12288]}], -"levels/bbh/5.rgba16.png": [32,64,4096,{"jp":[3604960,13312],"us":[3611712,13312],"eu":[3485312,13312],"sh":[3459680,13312]}], -"levels/bbh/6.rgba16.png": [16,32,1024,{"jp":[3604960,17408],"us":[3611712,17408],"eu":[3485312,17408],"sh":[3459680,17408]}], -"levels/bitdw/0.rgba16.png": [32,32,2048,{"jp":[4533568,0],"us":[4541952,0],"eu":[4415552,0],"sh":[4389920,0]}], -"levels/bitdw/1.rgba16.png": [32,32,2048,{"jp":[4533568,2048],"us":[4541952,2048],"eu":[4415552,2048],"sh":[4389920,2048]}], -"levels/bitdw/2.rgba16.png": [32,32,2048,{"jp":[4533568,4096],"us":[4541952,4096],"eu":[4415552,4096],"sh":[4389920,4096]}], -"levels/bitdw/3.rgba16.png": [32,32,2048,{"jp":[4533568,6144],"us":[4541952,6144],"eu":[4415552,6144],"sh":[4389920,6144]}], -"levels/bitfs/0.rgba16.png": [32,64,4096,{"jp":[4584464,0],"us":[4592848,0],"eu":[4466448,0],"sh":[4440816,0]}], -"levels/bitfs/1.rgba16.png": [32,32,2048,{"jp":[4584464,4096],"us":[4592848,4096],"eu":[4466448,4096],"sh":[4440816,4096]}], -"levels/bitfs/2.rgba16.png": [32,32,2048,{"jp":[4584464,6144],"us":[4592848,6144],"eu":[4466448,6144],"sh":[4440816,6144]}], -"levels/bits/0.rgba16.png": [32,64,4096,{"jp":[4629216,0],"us":[4637600,0],"eu":[4511200,0],"sh":[4485568,0]}], -"levels/bits/1.rgba16.png": [64,32,4096,{"jp":[4629216,4096],"us":[4637600,4096],"eu":[4511200,4096],"sh":[4485568,4096]}], -"levels/bits/2.rgba16.png": [32,32,2048,{"jp":[4629216,8192],"us":[4637600,8192],"eu":[4511200,8192],"sh":[4485568,8192]}], -"levels/bob/0.rgba16.png": [32,32,2048,{"jp":[4170512,0],"us":[4178608,0],"eu":[4052208,0],"sh":[4026576,0]}], -"levels/bob/1.rgba16.png": [32,32,2048,{"jp":[4170512,2048],"us":[4178608,2048],"eu":[4052208,2048],"sh":[4026576,2048]}], -"levels/bob/2.rgba16.png": [32,32,2048,{"jp":[4170512,4096],"us":[4178608,4096],"eu":[4052208,4096],"sh":[4026576,4096]}], -"levels/bob/3.rgba16.png": [32,32,2048,{"jp":[4170512,6144],"us":[4178608,6144],"eu":[4052208,6144],"sh":[4026576,6144]}], -"levels/bob/4.rgba16.png": [32,32,2048,{"jp":[4170512,8192],"us":[4178608,8192],"eu":[4052208,8192],"sh":[4026576,8192]}], -"levels/bowser_1/0.rgba16.png": [32,64,4096,{"jp":[4982976,0],"us":[4991264,0],"eu":[4870192,0],"sh":[4839232,0]}], -"levels/bowser_1/1.rgba16.png": [32,32,2048,{"jp":[4982976,4096],"us":[4991264,4096],"eu":[4870192,4096],"sh":[4839232,4096]}], -"levels/bowser_1/2.rgba16.png": [32,32,2048,{"jp":[4982976,6144],"us":[4991264,6144],"eu":[4870192,6144],"sh":[4839232,6144]}], -"levels/bowser_2/0.rgba16.png": [32,32,2048,{"jp":[5028720,0],"us":[5037008,0],"eu":[4915936,0],"sh":[4884976,0]}], -"levels/bowser_3/0.rgba16.png": [32,32,2048,{"jp":[5032864,0],"us":[5041152,0],"eu":[4920080,0],"sh":[4889120,0]}], -"levels/bowser_3/1.rgba16.png": [32,32,2048,{"jp":[5032864,2048],"us":[5041152,2048],"eu":[4920080,2048],"sh":[4889120,2048]}], -"levels/bowser_3/2.rgba16.png": [32,64,4096,{"jp":[5032864,4096],"us":[5041152,4096],"eu":[4920080,4096],"sh":[4889120,4096]}], -"levels/castle_grounds/0.rgba16.png": [32,64,4096,{"jp":[4492416,0],"us":[4500416,0],"eu":[4374016,0],"sh":[4348384,0]}], -"levels/castle_grounds/1.rgba16.png": [64,32,4096,{"jp":[4492416,4096],"us":[4500416,4096],"eu":[4374016,4096],"sh":[4348384,4096]}], -"levels/castle_grounds/2.rgba16.png": [64,32,4096,{"jp":[4492416,8192],"us":[4500416,8192],"eu":[4374016,8192],"sh":[4348384,8192]}], -"levels/castle_grounds/3.rgba16.png": [32,64,4096,{"jp":[4492416,51688],"us":[4500416,51688],"eu":[4374016,51688],"sh":[4348384,51688]}], -"levels/castle_grounds/4.rgba16.png": [32,64,4096,{"jp":[4492416,55784],"us":[4500416,55784],"eu":[4374016,55784],"sh":[4348384,55784]}], -"levels/castle_grounds/5.ia8.png": [64,32,2048,{"us":[4500416,60136],"eu":[4374016,60136],"sh":[4348384,60136]}], -"levels/castle_inside/1.rgba16.png": [32,32,2048,{"jp":[3754192,2048],"us":[3760960,2048],"eu":[3634560,2048],"sh":[3608928,2048]}], -"levels/castle_inside/10.rgba16.png": [32,32,2048,{"jp":[3754192,28672],"us":[3760960,28672],"eu":[3634560,28672],"sh":[3608928,28672]}], -"levels/castle_inside/11.rgba16.png": [32,32,2048,{"jp":[3754192,30720],"us":[3760960,30720],"eu":[3634560,30720],"sh":[3608928,30720]}], -"levels/castle_inside/12.rgba16.png": [32,32,2048,{"jp":[3754192,32768],"us":[3760960,32768],"eu":[3634560,32768],"sh":[3608928,32768]}], -"levels/castle_inside/13.rgba16.png": [32,32,2048,{"jp":[3754192,34816],"us":[3760960,34816],"eu":[3634560,34816],"sh":[3608928,34816]}], -"levels/castle_inside/14.rgba16.png": [32,32,2048,{"jp":[3754192,36864],"us":[3760960,36864],"eu":[3634560,36864],"sh":[3608928,36864]}], -"levels/castle_inside/15.rgba16.png": [32,32,2048,{"jp":[3754192,38912],"us":[3760960,38912],"eu":[3634560,38912],"sh":[3608928,38912]}], -"levels/castle_inside/16.ia16.png": [32,32,2048,{"jp":[3754192,40960],"us":[3760960,40960],"eu":[3634560,40960],"sh":[3608928,40960]}], -"levels/castle_inside/17.rgba16.png": [64,32,4096,{"jp":[3754192,43008],"us":[3760960,43008],"eu":[3634560,43008],"sh":[3608928,43008]}], -"levels/castle_inside/18.rgba16.png": [64,32,4096,{"jp":[3754192,47104],"us":[3760960,47104],"eu":[3634560,47104],"sh":[3608928,47104]}], -"levels/castle_inside/19.rgba16.png": [64,32,4096,{"jp":[3754192,51200],"us":[3760960,51200],"eu":[3634560,51200],"sh":[3608928,51200]}], -"levels/castle_inside/2.ia16.png": [32,64,4096,{"jp":[3298272,47104],"us":[3305024,47104],"eu":[3178624,47104],"sh":[3152992,47104]}], -"levels/castle_inside/20.rgba16.png": [64,32,4096,{"jp":[3754192,55296],"us":[3760960,55296],"eu":[3634560,55296],"sh":[3608928,55296]}], -"levels/castle_inside/21.rgba16.png": [64,32,4096,{"jp":[3754192,59392],"us":[3760960,59392],"eu":[3634560,59392],"sh":[3608928,59392]}], -"levels/castle_inside/22.rgba16.png": [64,32,4096,{"jp":[3754192,63488],"us":[3760960,63488],"eu":[3634560,63488],"sh":[3608928,63488]}], +"actors/power_meter/power_meter_right_side_cn.rgba16.png": [32,64,4096,{"cn":[2017600,148448]}], +"actors/power_meter/power_meter_seven_segments.rgba16.png": [32,32,2048,{"jp":[2094912,154592],"us":[2102288,154592],"eu":[1974256,154592],"sh":[1950768,154592],"cn":[2017600,154592]}], +"actors/power_meter/power_meter_six_segments.rgba16.png": [32,32,2048,{"jp":[2094912,156640],"us":[2102288,156640],"eu":[1974256,156640],"sh":[1950768,156640],"cn":[2017600,156640]}], +"actors/power_meter/power_meter_three_segments.rgba16.png": [32,32,2048,{"jp":[2094912,162784],"us":[2102288,162784],"eu":[1974256,162784],"sh":[1950768,162784],"cn":[2017600,162784]}], +"actors/power_meter/power_meter_two_segments.rgba16.png": [32,32,2048,{"jp":[2094912,164832],"us":[2102288,164832],"eu":[1974256,164832],"sh":[1950768,164832],"cn":[2017600,164832]}], +"actors/purple_switch/purple_switch_base.rgba16.png": [16,4,128,{"jp":[2032944,49320],"us":[2040320,49320],"eu":[1912288,49320],"sh":[1888800,49320],"cn":[1955632,49320]}], +"actors/purple_switch/purple_switch_exclamation_point.rgba16.png": [16,32,1024,{"jp":[2032944,49448],"us":[2040320,49448],"eu":[1912288,49448],"sh":[1888800,49448],"cn":[1955632,49448]}], +"actors/sand/sand_particle.rgba16.png": [16,16,512,{"jp":[2094912,178896],"us":[2102288,178896],"eu":[1974256,178896],"sh":[1950768,178896],"cn":[2017600,178896]}], +"actors/scuttlebug/scuttlebug_eye.rgba16.png": [32,32,2048,{"jp":[1991184,65800],"us":[1998560,65800],"eu":[1870528,65800],"sh":[1847040,65800],"cn":[1913872,65800]}], +"actors/scuttlebug/scuttlebug_iris.rgba16.png": [32,32,2048,{"jp":[1991184,76040],"us":[1998560,76040],"eu":[1870528,76040],"sh":[1847040,76040],"cn":[1913872,76040]}], +"actors/scuttlebug/scuttlebug_left_side.rgba16.png": [32,64,4096,{"jp":[1991184,67848],"us":[1998560,67848],"eu":[1870528,67848],"sh":[1847040,67848],"cn":[1913872,67848]}], +"actors/scuttlebug/scuttlebug_leg.rgba16.png": [32,32,2048,{"jp":[1991184,78088],"us":[1998560,78088],"eu":[1870528,78088],"sh":[1847040,78088],"cn":[1913872,78088]}], +"actors/scuttlebug/scuttlebug_right_side.rgba16.png": [32,64,4096,{"jp":[1991184,71944],"us":[1998560,71944],"eu":[1870528,71944],"sh":[1847040,71944],"cn":[1913872,71944]}], +"actors/seaweed/seaweed_base.rgba16.png": [32,32,2048,{"jp":[1802256,38416],"us":[1809600,38416],"eu":[1681568,38416],"sh":[1658080,38416],"cn":[1724912,38416]}], +"actors/seaweed/seaweed_lower_center.rgba16.png": [32,32,2048,{"jp":[1802256,36368],"us":[1809600,36368],"eu":[1681568,36368],"sh":[1658080,36368],"cn":[1724912,36368]}], +"actors/seaweed/seaweed_tip.rgba16.png": [32,32,2048,{"jp":[1802256,32272],"us":[1809600,32272],"eu":[1681568,32272],"sh":[1658080,32272],"cn":[1724912,32272]}], +"actors/seaweed/seaweed_upper_center.rgba16.png": [32,32,2048,{"jp":[1802256,34320],"us":[1809600,34320],"eu":[1681568,34320],"sh":[1658080,34320],"cn":[1724912,34320]}], +"actors/skeeter/skeeter_eye.rgba16.png": [32,32,2048,{"jp":[1802256,144],"us":[1809600,144],"eu":[1681568,144],"sh":[1658080,144],"cn":[1724912,144]}], +"actors/skeeter/skeeter_iris.rgba16.png": [16,8,256,{"jp":[1802256,2192],"us":[1809600,2192],"eu":[1681568,2192],"sh":[1658080,2192],"cn":[1724912,2192]}], +"actors/smoke/smoke.ia16.png": [32,32,2048,{"jp":[1377744,29376],"us":[1384912,29376],"eu":[1256880,29376],"sh":[1233392,29376],"cn":[1300224,29376]}], +"actors/snowman/mr_blizzard_eye.rgba16.png": [32,32,2048,{"jp":[1436272,46192],"us":[1443440,46192],"eu":[1315408,46192],"sh":[1291920,46192],"cn":[1358752,46192]}], +"actors/snowman/mr_blizzard_left_side.rgba16.png": [32,64,4096,{"jp":[1436272,38000],"us":[1443440,38000],"eu":[1315408,38000],"sh":[1291920,38000],"cn":[1358752,38000]}], +"actors/snowman/mr_blizzard_mitten.rgba16.png": [32,32,2048,{"jp":[1436272,35952],"us":[1443440,35952],"eu":[1315408,35952],"sh":[1291920,35952],"cn":[1358752,35952]}], +"actors/snowman/mr_blizzard_mouth.rgba16.png": [32,32,2048,{"jp":[1436272,48240],"us":[1443440,48240],"eu":[1315408,48240],"sh":[1291920,48240],"cn":[1358752,48240]}], +"actors/snowman/mr_blizzard_right_side.rgba16.png": [32,64,4096,{"jp":[1436272,42096],"us":[1443440,42096],"eu":[1315408,42096],"sh":[1291920,42096],"cn":[1358752,42096]}], +"actors/snufit/snufit_body.rgba16.png": [32,32,2048,{"jp":[1991184,28896],"us":[1998560,28896],"eu":[1870528,28896],"sh":[1847040,28896],"cn":[1913872,28896]}], +"actors/snufit/snufit_eye.rgba16.png": [32,32,2048,{"jp":[1991184,30944],"us":[1998560,30944],"eu":[1870528,30944],"sh":[1847040,30944],"cn":[1913872,30944]}], +"actors/snufit/snufit_mask_strap.rgba16.png": [16,32,1024,{"jp":[1991184,32992],"us":[1998560,32992],"eu":[1870528,32992],"sh":[1847040,32992],"cn":[1913872,32992]}], +"actors/snufit/snufit_mouth.rgba16.png": [32,32,2048,{"jp":[1991184,34016],"us":[1998560,34016],"eu":[1870528,34016],"sh":[1847040,34016],"cn":[1913872,34016]}], +"actors/sparkle/sparkle_0.rgba16.png": [32,32,2048,{"jp":[1125200,160912],"us":[1132368,160912],"eu":[1004336,160912],"sh":[980848,160912],"cn":[1047664,160912]}], +"actors/sparkle/sparkle_1.rgba16.png": [32,32,2048,{"jp":[1125200,162960],"us":[1132368,162960],"eu":[1004336,162960],"sh":[980848,162960],"cn":[1047664,162960]}], +"actors/sparkle/sparkle_2.rgba16.png": [32,32,2048,{"jp":[1125200,165008],"us":[1132368,165008],"eu":[1004336,165008],"sh":[980848,165008],"cn":[1047664,165008]}], +"actors/sparkle/sparkle_3.rgba16.png": [32,32,2048,{"jp":[1125200,167056],"us":[1132368,167056],"eu":[1004336,167056],"sh":[980848,167056],"cn":[1047664,167056]}], +"actors/sparkle/sparkle_4.rgba16.png": [32,32,2048,{"jp":[1125200,169104],"us":[1132368,169104],"eu":[1004336,169104],"sh":[980848,169104],"cn":[1047664,169104]}], +"actors/sparkle/sparkle_5.rgba16.png": [32,32,2048,{"jp":[1125200,171152],"us":[1132368,171152],"eu":[1004336,171152],"sh":[980848,171152],"cn":[1047664,171152]}], +"actors/sparkle_animation/sparkle_animation_0.ia16.png": [32,32,2048,{"jp":[1125200,207496],"us":[1132368,207496],"eu":[1004336,207496],"sh":[980848,207496],"cn":[1047664,207496]}], +"actors/sparkle_animation/sparkle_animation_1.ia16.png": [32,32,2048,{"jp":[1125200,209544],"us":[1132368,209544],"eu":[1004336,209544],"sh":[980848,209544],"cn":[1047664,209544]}], +"actors/sparkle_animation/sparkle_animation_2.ia16.png": [32,32,2048,{"jp":[1125200,211592],"us":[1132368,211592],"eu":[1004336,211592],"sh":[980848,211592],"cn":[1047664,211592]}], +"actors/sparkle_animation/sparkle_animation_3.ia16.png": [32,32,2048,{"jp":[1125200,213640],"us":[1132368,213640],"eu":[1004336,213640],"sh":[980848,213640],"cn":[1047664,213640]}], +"actors/sparkle_animation/sparkle_animation_4.ia16.png": [32,32,2048,{"jp":[1125200,215688],"us":[1132368,215688],"eu":[1004336,215688],"sh":[980848,215688],"cn":[1047664,215688]}], +"actors/spindrift/spindrift_face.rgba16.png": [32,32,2048,{"jp":[1436272,1744],"us":[1443440,1744],"eu":[1315408,1744],"sh":[1291920,1744],"cn":[1358752,1744]}], +"actors/spindrift/spindrift_head.rgba16.png": [32,32,2048,{"jp":[1436272,7888],"us":[1443440,7888],"eu":[1315408,7888],"sh":[1291920,7888],"cn":[1358752,7888]}], +"actors/spindrift/spindrift_leaf.rgba16.png": [32,32,2048,{"jp":[1436272,5840],"us":[1443440,5840],"eu":[1315408,5840],"sh":[1291920,5840],"cn":[1358752,5840]}], +"actors/spindrift/spindrift_petal.rgba16.png": [32,32,2048,{"jp":[1436272,3792],"us":[1443440,3792],"eu":[1315408,3792],"sh":[1291920,3792],"cn":[1358752,3792]}], +"actors/springboard/springboard_base_unused.rgba16.png": [32,32,2048,{"jp":[1457744,2072],"us":[1464912,2072],"eu":[1336880,2072],"sh":[1313392,2072],"cn":[1380224,2072]}], +"actors/springboard/springboard_top_unused.rgba16.png": [32,32,2048,{"jp":[1457744,24],"us":[1464912,24],"eu":[1336880,24],"sh":[1313392,24],"cn":[1380224,24]}], +"actors/star/star_eye.rgba16.png": [32,32,2048,{"jp":[1568640,31280],"us":[1575856,31280],"eu":[1447824,31280],"sh":[1424336,31280],"cn":[1491168,31280]}], +"actors/star/star_surface.rgba16.png": [32,32,2048,{"jp":[2094912,173808],"us":[2102288,173808],"eu":[1974256,173808],"sh":[1950768,173808],"cn":[2017600,173808]}], +"actors/stomp_smoke/stomp_smoke_0.ia16.png": [32,32,2048,{"jp":[1125200,139592],"us":[1132368,139592],"eu":[1004336,139592],"sh":[980848,139592],"cn":[1047664,139592]}], +"actors/stomp_smoke/stomp_smoke_1.ia16.png": [32,32,2048,{"jp":[1125200,141640],"us":[1132368,141640],"eu":[1004336,141640],"sh":[980848,141640],"cn":[1047664,141640]}], +"actors/stomp_smoke/stomp_smoke_2.ia16.png": [32,32,2048,{"jp":[1125200,143688],"us":[1132368,143688],"eu":[1004336,143688],"sh":[980848,143688],"cn":[1047664,143688]}], +"actors/stomp_smoke/stomp_smoke_3.ia16.png": [32,32,2048,{"jp":[1125200,145736],"us":[1132368,145736],"eu":[1004336,145736],"sh":[980848,145736],"cn":[1047664,145736]}], +"actors/stomp_smoke/stomp_smoke_4.ia16.png": [32,32,2048,{"jp":[1125200,147784],"us":[1132368,147784],"eu":[1004336,147784],"sh":[980848,147784],"cn":[1047664,147784]}], +"actors/stomp_smoke/stomp_smoke_5.ia16.png": [32,32,2048,{"jp":[1125200,149832],"us":[1132368,149832],"eu":[1004336,149832],"sh":[980848,149832],"cn":[1047664,149832]}], +"actors/sushi/sushi_eye.rgba16.png": [32,16,1024,{"jp":[1285392,38608],"us":[1292560,38608],"eu":[1164528,38608],"sh":[1141040,38608],"cn":[1207872,38608]}], +"actors/sushi/sushi_snout.rgba16.png": [32,32,2048,{"jp":[1285392,36560],"us":[1292560,36560],"eu":[1164528,36560],"sh":[1141040,36560],"cn":[1207872,36560]}], +"actors/sushi/sushi_tooth.rgba16.png": [8,8,128,{"jp":[1285392,39632],"us":[1292560,39632],"eu":[1164528,39632],"sh":[1141040,39632],"cn":[1207872,39632]}], +"actors/swoop/swoop_body.rgba16.png": [32,32,2048,{"jp":[1991184,17008],"us":[1998560,17008],"eu":[1870528,17008],"sh":[1847040,17008],"cn":[1913872,17008]}], +"actors/swoop/swoop_eye.rgba16.png": [32,32,2048,{"jp":[1991184,19056],"us":[1998560,19056],"eu":[1870528,19056],"sh":[1847040,19056],"cn":[1913872,19056]}], +"actors/swoop/swoop_nose.rgba16.png": [32,32,2048,{"jp":[1991184,21104],"us":[1998560,21104],"eu":[1870528,21104],"sh":[1847040,21104],"cn":[1913872,21104]}], +"actors/swoop/swoop_wing.rgba16.png": [32,32,2048,{"jp":[1991184,23152],"us":[1998560,23152],"eu":[1870528,23152],"sh":[1847040,23152],"cn":[1913872,23152]}], +"actors/thwomp/thwomp_face.rgba16.png": [32,64,4096,{"jp":[1215456,39168],"us":[1222624,39168],"eu":[1094592,39168],"sh":[1071104,39168],"cn":[1137936,39168]}], +"actors/thwomp/thwomp_surface.rgba16.png": [32,32,2048,{"jp":[1215456,43264],"us":[1222624,43264],"eu":[1094592,43264],"sh":[1071104,43264],"cn":[1137936,43264]}], +"actors/toad/toad_face.rgba16.png": [32,32,2048,{"jp":[1926752,22816],"us":[1934096,22816],"eu":[1806064,22816],"sh":[1782576,22816],"cn":[1849408,22816]}], +"actors/toad/toad_head.rgba16.png": [32,32,2048,{"jp":[1926752,24864],"us":[1934096,24864],"eu":[1806064,24864],"sh":[1782576,24864],"cn":[1849408,24864]}], +"actors/tornado/tornado.ia16.png": [32,64,4096,{"jp":[1285392,75848],"us":[1292560,75848],"eu":[1164528,75848],"sh":[1141040,75848],"cn":[1207872,75848]}], +"actors/treasure_chest/treasure_chest_front.rgba16.png": [64,32,4096,{"jp":[1802256,87976],"us":[1809600,87976],"eu":[1681568,87976],"sh":[1658080,87976],"cn":[1724912,87976]}], +"actors/treasure_chest/treasure_chest_lock.rgba16.png": [32,32,2048,{"jp":[1802256,81832],"us":[1809600,81832],"eu":[1681568,81832],"sh":[1658080,81832],"cn":[1724912,81832]}], +"actors/treasure_chest/treasure_chest_lock_top.rgba16.png": [32,32,2048,{"jp":[1802256,85928],"us":[1809600,85928],"eu":[1681568,85928],"sh":[1658080,85928],"cn":[1724912,85928]}], +"actors/treasure_chest/treasure_chest_side.rgba16.png": [32,32,2048,{"jp":[1802256,83880],"us":[1809600,83880],"eu":[1681568,83880],"sh":[1658080,83880],"cn":[1724912,83880]}], +"actors/tree/palm_tree.rgba16.png": [32,64,4096,{"jp":[2094912,205336],"us":[2102288,205336],"eu":[1974256,205336],"sh":[1950768,205336],"cn":[2017600,205336]}], +"actors/tree/pine_tree.rgba16.png": [32,64,4096,{"jp":[2094912,196448],"us":[2102288,196448],"eu":[1974256,196448],"sh":[1950768,196448],"cn":[2017600,196448]}], +"actors/tree/snowy_pine_tree.rgba16.png": [32,64,4096,{"jp":[2094912,200776],"us":[2102288,200776],"eu":[1974256,200776],"sh":[1950768,200776],"cn":[2017600,200776]}], +"actors/tree/tree_left_side.rgba16.png": [32,64,4096,{"jp":[2094912,187944],"us":[2102288,187944],"eu":[1974256,187944],"sh":[1950768,187944],"cn":[2017600,187944]}], +"actors/tree/tree_right_side.rgba16.png": [32,64,4096,{"jp":[2094912,192040],"us":[2102288,192040],"eu":[1974256,192040],"sh":[1950768,192040],"cn":[2017600,192040]}], +"actors/ukiki/ukiki_butt.rgba16.png": [32,32,2048,{"jp":[1377744,39872],"us":[1384912,39872],"eu":[1256880,39872],"sh":[1233392,39872],"cn":[1300224,39872]}], +"actors/ukiki/ukiki_face.rgba16.png": [64,32,4096,{"jp":[1377744,31680],"us":[1384912,31680],"eu":[1256880,31680],"sh":[1233392,31680],"cn":[1300224,31680]}], +"actors/ukiki/ukiki_face_blink.rgba16.png": [64,32,4096,{"jp":[1377744,35776],"us":[1384912,35776],"eu":[1256880,35776],"sh":[1233392,35776],"cn":[1300224,35776]}], +"actors/ukiki/ukiki_fur.rgba16.png": [32,32,2048,{"jp":[1377744,41920],"us":[1384912,41920],"eu":[1256880,41920],"sh":[1233392,41920],"cn":[1300224,41920]}], +"actors/unagi/unagi_body.rgba16.png": [32,32,2048,{"jp":[1285392,44832],"us":[1292560,44832],"eu":[1164528,44832],"sh":[1141040,44832],"cn":[1207872,44832]}], +"actors/unagi/unagi_eye.rgba16.png": [16,16,512,{"jp":[1285392,46880],"us":[1292560,46880],"eu":[1164528,46880],"sh":[1141040,46880],"cn":[1207872,46880]}], +"actors/unagi/unagi_head_base.rgba16.png": [32,32,2048,{"jp":[1285392,47392],"us":[1292560,47392],"eu":[1164528,47392],"sh":[1141040,47392],"cn":[1207872,47392]}], +"actors/unagi/unagi_mouth.rgba16.png": [8,8,128,{"jp":[1285392,49952],"us":[1292560,49952],"eu":[1164528,49952],"sh":[1141040,49952],"cn":[1207872,49952]}], +"actors/unagi/unagi_tail.rgba16.png": [32,32,2048,{"jp":[1285392,50080],"us":[1292560,50080],"eu":[1164528,50080],"sh":[1141040,50080],"cn":[1207872,50080]}], +"actors/unagi/unagi_tooth.rgba16.png": [16,16,512,{"jp":[1285392,49440],"us":[1292560,49440],"eu":[1164528,49440],"sh":[1141040,49440],"cn":[1207872,49440]}], +"actors/walk_smoke/walk_smoke_0.ia16.png": [32,32,2048,{"jp":[1125200,122528],"us":[1132368,122528],"eu":[1004336,122528],"sh":[980848,122528],"cn":[1047664,122528]}], +"actors/walk_smoke/walk_smoke_1.ia16.png": [32,32,2048,{"jp":[1125200,124576],"us":[1132368,124576],"eu":[1004336,124576],"sh":[980848,124576],"cn":[1047664,124576]}], +"actors/walk_smoke/walk_smoke_2.ia16.png": [32,32,2048,{"jp":[1125200,126624],"us":[1132368,126624],"eu":[1004336,126624],"sh":[980848,126624],"cn":[1047664,126624]}], +"actors/walk_smoke/walk_smoke_3.ia16.png": [32,32,2048,{"jp":[1125200,128672],"us":[1132368,128672],"eu":[1004336,128672],"sh":[980848,128672],"cn":[1047664,128672]}], +"actors/walk_smoke/walk_smoke_4.ia16.png": [32,32,2048,{"jp":[1125200,130720],"us":[1132368,130720],"eu":[1004336,130720],"sh":[980848,130720],"cn":[1047664,130720]}], +"actors/walk_smoke/walk_smoke_5.ia16.png": [32,32,2048,{"jp":[1125200,132768],"us":[1132368,132768],"eu":[1004336,132768],"sh":[980848,132768],"cn":[1047664,132768]}], +"actors/walk_smoke/walk_smoke_6.ia16.png": [32,32,2048,{"jp":[1125200,134816],"us":[1132368,134816],"eu":[1004336,134816],"sh":[980848,134816],"cn":[1047664,134816]}], +"actors/warp_pipe/warp_pipe_side.rgba16.png": [32,64,4096,{"jp":[2094912,32320],"us":[2102288,32320],"eu":[1974256,32320],"sh":[1950768,32320],"cn":[2017600,32320]}], +"actors/warp_pipe/warp_pipe_top.rgba16.png": [32,32,2048,{"jp":[2094912,37224],"us":[2102288,37224],"eu":[1974256,37224],"sh":[1950768,37224],"cn":[2017600,37224]}], +"actors/water_bubble/water_bubble.rgba16.png": [32,32,2048,{"jp":[1257760,65152],"us":[1264928,65152],"eu":[1136896,65152],"sh":[1113408,65152],"cn":[1180240,65152]}], +"actors/water_mine/water_mine_left_side_unused.rgba16.png": [32,64,4096,{"jp":[1599504,359104],"us":[1606720,359440],"eu":[1478688,359440],"sh":[1455200,359440],"cn":[1522032,359440]}], +"actors/water_mine/water_mine_right_side_unused.rgba16.png": [32,64,4096,{"jp":[1599504,363200],"us":[1606720,363536],"eu":[1478688,363536],"sh":[1455200,363536],"cn":[1522032,363536]}], +"actors/water_mine/water_mine_spike_unused.rgba16.png": [32,32,2048,{"jp":[1599504,367296],"us":[1606720,367632],"eu":[1478688,367632],"sh":[1455200,367632],"cn":[1522032,367632]}], +"actors/water_ring/water_ring.rgba16.png": [64,32,4096,{"jp":[1802256,74624],"us":[1809600,74624],"eu":[1681568,74624],"sh":[1658080,74624],"cn":[1724912,74624]}], +"actors/water_splash/water_splash_0.rgba16.png": [32,64,4096,{"jp":[1125200,173512],"us":[1132368,173512],"eu":[1004336,173512],"sh":[980848,173512],"cn":[1047664,173512]}], +"actors/water_splash/water_splash_1.rgba16.png": [32,64,4096,{"jp":[1125200,177608],"us":[1132368,177608],"eu":[1004336,177608],"sh":[980848,177608],"cn":[1047664,177608]}], +"actors/water_splash/water_splash_2.rgba16.png": [32,64,4096,{"jp":[1125200,181704],"us":[1132368,181704],"eu":[1004336,181704],"sh":[980848,181704],"cn":[1047664,181704]}], +"actors/water_splash/water_splash_3.rgba16.png": [32,64,4096,{"jp":[1125200,185800],"us":[1132368,185800],"eu":[1004336,185800],"sh":[980848,185800],"cn":[1047664,185800]}], +"actors/water_splash/water_splash_4.rgba16.png": [32,64,4096,{"jp":[1125200,189896],"us":[1132368,189896],"eu":[1004336,189896],"sh":[980848,189896],"cn":[1047664,189896]}], +"actors/water_splash/water_splash_5.rgba16.png": [32,64,4096,{"jp":[1125200,193992],"us":[1132368,193992],"eu":[1004336,193992],"sh":[980848,193992],"cn":[1047664,193992]}], +"actors/water_splash/water_splash_6.rgba16.png": [32,64,4096,{"jp":[1125200,198088],"us":[1132368,198088],"eu":[1004336,198088],"sh":[980848,198088],"cn":[1047664,198088]}], +"actors/water_splash/water_splash_7.rgba16.png": [32,64,4096,{"jp":[1125200,202184],"us":[1132368,202184],"eu":[1004336,202184],"sh":[980848,202184],"cn":[1047664,202184]}], +"actors/water_wave/water_wave_0.ia16.png": [32,32,2048,{"jp":[1125200,152408],"us":[1132368,152408],"eu":[1004336,152408],"sh":[980848,152408],"cn":[1047664,152408]}], +"actors/water_wave/water_wave_1.ia16.png": [32,32,2048,{"jp":[1125200,154456],"us":[1132368,154456],"eu":[1004336,154456],"sh":[980848,154456],"cn":[1047664,154456]}], +"actors/water_wave/water_wave_2.ia16.png": [32,32,2048,{"jp":[1125200,156504],"us":[1132368,156504],"eu":[1004336,156504],"sh":[980848,156504],"cn":[1047664,156504]}], +"actors/water_wave/water_wave_3.ia16.png": [32,32,2048,{"jp":[1125200,158552],"us":[1132368,158552],"eu":[1004336,158552],"sh":[980848,158552],"cn":[1047664,158552]}], +"actors/whirlpool/whirlpool.ia16.png": [32,64,4096,{"jp":[1285392,75848],"us":[1292560,75848],"eu":[1164528,75848],"sh":[1141040,75848],"cn":[1207872,75848]}], +"actors/white_particle/snow_particle.rgba16.png": [16,16,512,{"jp":[2094912,181920],"us":[2102288,181920],"eu":[1974256,181920],"sh":[1950768,181920],"cn":[2017600,181920]}], +"actors/white_particle_small/small_snow_particle.rgba16.png": [16,16,512,{"jp":[1125200,206720],"us":[1132368,206720],"eu":[1004336,206720],"sh":[980848,206720],"cn":[1047664,206720]}], +"actors/whomp/whomp_back.rgba16.png": [32,64,4096,{"jp":[1844608,115552],"us":[1851952,115552],"eu":[1723920,115552],"sh":[1700432,115552],"cn":[1767264,115552]}], +"actors/whomp/whomp_face.rgba16.png": [32,64,4096,{"jp":[1844608,119648],"us":[1851952,119648],"eu":[1723920,119648],"sh":[1700432,119648],"cn":[1767264,119648]}], +"actors/whomp/whomp_hand.rgba16.png": [32,32,2048,{"jp":[1844608,123744],"us":[1851952,123744],"eu":[1723920,123744],"sh":[1700432,123744],"cn":[1767264,123744]}], +"actors/whomp/whomp_surface.rgba16.png": [32,32,2048,{"jp":[1844608,125792],"us":[1851952,125792],"eu":[1723920,125792],"sh":[1700432,125792],"cn":[1767264,125792]}], +"actors/wiggler/wiggler_eye.rgba16.png": [32,32,2048,{"jp":[1568640,31280],"us":[1575856,31280],"eu":[1447824,31280],"sh":[1424336,31280],"cn":[1491168,31280]}], +"actors/wiggler/wiggler_flower.rgba16.png": [32,32,2048,{"jp":[1568640,33328],"us":[1575856,33328],"eu":[1447824,33328],"sh":[1424336,33328],"cn":[1491168,33328]}], +"actors/wiggler/wiggler_frown.rgba16.png": [32,32,2048,{"jp":[1568640,35376],"us":[1575856,35376],"eu":[1447824,35376],"sh":[1424336,35376],"cn":[1491168,35376]}], +"actors/wiggler/wiggler_nose_left_side.rgba16.png": [32,64,4096,{"jp":[1568640,37424],"us":[1575856,37424],"eu":[1447824,37424],"sh":[1424336,37424],"cn":[1491168,37424]}], +"actors/wiggler/wiggler_nose_right_side.rgba16.png": [32,64,4096,{"jp":[1568640,41520],"us":[1575856,41520],"eu":[1447824,41520],"sh":[1424336,41520],"cn":[1491168,41520]}], +"actors/wiggler/wiggler_segment_left_side.rgba16.png": [32,64,4096,{"jp":[1568640,23088],"us":[1575856,23088],"eu":[1447824,23088],"sh":[1424336,23088],"cn":[1491168,23088]}], +"actors/wiggler/wiggler_segment_right_side.rgba16.png": [32,64,4096,{"jp":[1568640,27184],"us":[1575856,27184],"eu":[1447824,27184],"sh":[1424336,27184],"cn":[1491168,27184]}], +"actors/wooden_signpost/wooden_signpost_back.rgba16.png": [32,32,2048,{"jp":[2094912,182728],"us":[2102288,182728],"eu":[1974256,182728],"sh":[1950768,182728],"cn":[2017600,182728]}], +"actors/wooden_signpost/wooden_signpost_front.rgba16.png": [32,32,2048,{"jp":[2094912,184776],"us":[2102288,184776],"eu":[1974256,184776],"sh":[1950768,184776],"cn":[2017600,184776]}], +"actors/yellow_sphere/yellow_sphere.rgba16.png": [32,32,2048,{"jp":[1215456,64],"us":[1222624,64],"eu":[1094592,64],"sh":[1071104,64],"cn":[1137936,64]}], +"actors/yellow_sphere_small/small_yellow_sphere.rgba16.png": [32,32,2048,{"jp":[1215456,64],"us":[1222624,64],"eu":[1094592,64],"sh":[1071104,64],"cn":[1137936,64]}], +"actors/yoshi/yoshi_eye.rgba16.png": [16,16,512,{"jp":[1490032,115872],"us":[1497200,116104],"eu":[1369168,116104],"sh":[1345680,116104],"cn":[1412512,116104]}], +"actors/yoshi/yoshi_eye_blink.rgba16.png": [16,16,512,{"jp":[1490032,116384],"us":[1497200,116616],"eu":[1369168,116616],"sh":[1345680,116616],"cn":[1412512,116616]}], +"actors/yoshi/yoshi_nostril.rgba16.png": [16,16,512,{"jp":[1490032,116896],"us":[1497200,117128],"eu":[1369168,117128],"sh":[1345680,117128],"cn":[1412512,117128]}], +"actors/yoshi_egg/yoshi_egg_0_unused.rgba16.png": [32,32,2048,{"jp":[1215456,22456],"us":[1222624,22456],"eu":[1094592,22456],"sh":[1071104,22456],"cn":[1137936,22456]}], +"actors/yoshi_egg/yoshi_egg_1_unused.rgba16.png": [32,32,2048,{"jp":[1215456,24504],"us":[1222624,24504],"eu":[1094592,24504],"sh":[1071104,24504],"cn":[1137936,24504]}], +"actors/yoshi_egg/yoshi_egg_2_unused.rgba16.png": [32,32,2048,{"jp":[1215456,26552],"us":[1222624,26552],"eu":[1094592,26552],"sh":[1071104,26552],"cn":[1137936,26552]}], +"actors/yoshi_egg/yoshi_egg_3_unused.rgba16.png": [32,32,2048,{"jp":[1215456,28600],"us":[1222624,28600],"eu":[1094592,28600],"sh":[1071104,28600],"cn":[1137936,28600]}], +"actors/yoshi_egg/yoshi_egg_4_unused.rgba16.png": [32,32,2048,{"jp":[1215456,30648],"us":[1222624,30648],"eu":[1094592,30648],"sh":[1071104,30648],"cn":[1137936,30648]}], +"actors/yoshi_egg/yoshi_egg_5_unused.rgba16.png": [32,32,2048,{"jp":[1215456,32696],"us":[1222624,32696],"eu":[1094592,32696],"sh":[1071104,32696],"cn":[1137936,32696]}], +"actors/yoshi_egg/yoshi_egg_6_unused.rgba16.png": [32,32,2048,{"jp":[1215456,34744],"us":[1222624,34744],"eu":[1094592,34744],"sh":[1071104,34744],"cn":[1137936,34744]}], +"actors/yoshi_egg/yoshi_egg_7_unused.rgba16.png": [32,32,2048,{"jp":[1215456,36792],"us":[1222624,36792],"eu":[1094592,36792],"sh":[1071104,36792],"cn":[1137936,36792]}], +"assets/demos/bbh.bin": [988,{"jp":[5733368],"us":[5741664],"eu":[5620584],"sh":[5589632],"cn":[5662656]}], +"assets/demos/bitdw.bin": [1412,{"us":[5747100],"sh":[5595068],"cn":[5668092]}], +"assets/demos/ccm.bin": [1320,{"jp":[5734356],"us":[5742652],"eu":[5621572],"sh":[5590620],"cn":[5663644]}], +"assets/demos/hmc.bin": [980,{"jp":[5735676],"us":[5743972],"eu":[5622892],"sh":[5591940],"cn":[5664964]}], +"assets/demos/jrb.bin": [620,{"jp":[5736656],"us":[5744952],"eu":[5623872],"sh":[5592920],"cn":[5665944]}], +"assets/demos/pss.bin": [748,{"jp":[5737948],"us":[5746244],"eu":[5625164],"sh":[5594212],"cn":[5667236]}], +"assets/demos/unused.bin": [108,{"jp":[5738696],"us":[5746992],"eu":[5625912],"sh":[5594960],"cn":[5667984]}], +"assets/demos/wf.bin": [672,{"jp":[5737276],"us":[5745572],"eu":[5624492],"sh":[5593540],"cn":[5666564]}], +"levels/bbh/0.rgba16.png": [32,64,4096,{"jp":[3604960,0],"us":[3611712,0],"eu":[3485312,0],"sh":[3459680,0],"cn":[3533440,0]}], +"levels/bbh/1.rgba16.png": [32,32,2048,{"jp":[3604960,4096],"us":[3611712,4096],"eu":[3485312,4096],"sh":[3459680,4096],"cn":[3533440,4096]}], +"levels/bbh/2.rgba16.png": [32,32,2048,{"jp":[3604960,6144],"us":[3611712,6144],"eu":[3485312,6144],"sh":[3459680,6144],"cn":[3533440,6144]}], +"levels/bbh/3.rgba16.png": [32,64,4096,{"jp":[3604960,8192],"us":[3611712,8192],"eu":[3485312,8192],"sh":[3459680,8192],"cn":[3533440,8192]}], +"levels/bbh/4.rgba16.png": [16,32,1024,{"jp":[3604960,12288],"us":[3611712,12288],"eu":[3485312,12288],"sh":[3459680,12288],"cn":[3533440,12288]}], +"levels/bbh/5.rgba16.png": [32,64,4096,{"jp":[3604960,13312],"us":[3611712,13312],"eu":[3485312,13312],"sh":[3459680,13312],"cn":[3533440,13312]}], +"levels/bbh/6.rgba16.png": [16,32,1024,{"jp":[3604960,17408],"us":[3611712,17408],"eu":[3485312,17408],"sh":[3459680,17408],"cn":[3533440,17408]}], +"levels/bitdw/0.rgba16.png": [32,32,2048,{"jp":[4533568,0],"us":[4541952,0],"eu":[4415552,0],"sh":[4389920,0],"cn":[4463696,0]}], +"levels/bitdw/1.rgba16.png": [32,32,2048,{"jp":[4533568,2048],"us":[4541952,2048],"eu":[4415552,2048],"sh":[4389920,2048],"cn":[4463696,2048]}], +"levels/bitdw/2.rgba16.png": [32,32,2048,{"jp":[4533568,4096],"us":[4541952,4096],"eu":[4415552,4096],"sh":[4389920,4096],"cn":[4463696,4096]}], +"levels/bitdw/3.rgba16.png": [32,32,2048,{"jp":[4533568,6144],"us":[4541952,6144],"eu":[4415552,6144],"sh":[4389920,6144],"cn":[4463696,6144]}], +"levels/bitfs/0.rgba16.png": [32,64,4096,{"jp":[4584464,0],"us":[4592848,0],"eu":[4466448,0],"sh":[4440816,0],"cn":[4514592,0]}], +"levels/bitfs/1.rgba16.png": [32,32,2048,{"jp":[4584464,4096],"us":[4592848,4096],"eu":[4466448,4096],"sh":[4440816,4096],"cn":[4514592,4096]}], +"levels/bitfs/2.rgba16.png": [32,32,2048,{"jp":[4584464,6144],"us":[4592848,6144],"eu":[4466448,6144],"sh":[4440816,6144],"cn":[4514592,6144]}], +"levels/bits/0.rgba16.png": [32,64,4096,{"jp":[4629216,0],"us":[4637600,0],"eu":[4511200,0],"sh":[4485568,0],"cn":[4559344,0]}], +"levels/bits/1.rgba16.png": [64,32,4096,{"jp":[4629216,4096],"us":[4637600,4096],"eu":[4511200,4096],"sh":[4485568,4096],"cn":[4559344,4096]}], +"levels/bits/2.rgba16.png": [32,32,2048,{"jp":[4629216,8192],"us":[4637600,8192],"eu":[4511200,8192],"sh":[4485568,8192],"cn":[4559344,8192]}], +"levels/bob/0.rgba16.png": [32,32,2048,{"jp":[4170512,0],"us":[4178608,0],"eu":[4052208,0],"sh":[4026576,0],"cn":[4100352,0]}], +"levels/bob/1.rgba16.png": [32,32,2048,{"jp":[4170512,2048],"us":[4178608,2048],"eu":[4052208,2048],"sh":[4026576,2048],"cn":[4100352,2048]}], +"levels/bob/2.rgba16.png": [32,32,2048,{"jp":[4170512,4096],"us":[4178608,4096],"eu":[4052208,4096],"sh":[4026576,4096],"cn":[4100352,4096]}], +"levels/bob/3.rgba16.png": [32,32,2048,{"jp":[4170512,6144],"us":[4178608,6144],"eu":[4052208,6144],"sh":[4026576,6144],"cn":[4100352,6144]}], +"levels/bob/4.rgba16.png": [32,32,2048,{"jp":[4170512,8192],"us":[4178608,8192],"eu":[4052208,8192],"sh":[4026576,8192],"cn":[4100352,8192]}], +"levels/bowser_1/0.rgba16.png": [32,64,4096,{"jp":[4982976,0],"us":[4991264,0],"eu":[4870192,0],"sh":[4839232,0],"cn":[4912256,0]}], +"levels/bowser_1/1.rgba16.png": [32,32,2048,{"jp":[4982976,4096],"us":[4991264,4096],"eu":[4870192,4096],"sh":[4839232,4096],"cn":[4912256,4096]}], +"levels/bowser_1/2.rgba16.png": [32,32,2048,{"jp":[4982976,6144],"us":[4991264,6144],"eu":[4870192,6144],"sh":[4839232,6144],"cn":[4912256,6144]}], +"levels/bowser_2/0.rgba16.png": [32,32,2048,{"jp":[5028720,0],"us":[5037008,0],"eu":[4915936,0],"sh":[4884976,0],"cn":[4958000,0]}], +"levels/bowser_3/0.rgba16.png": [32,32,2048,{"jp":[5032864,0],"us":[5041152,0],"eu":[4920080,0],"sh":[4889120,0],"cn":[4962144,0]}], +"levels/bowser_3/1.rgba16.png": [32,32,2048,{"jp":[5032864,2048],"us":[5041152,2048],"eu":[4920080,2048],"sh":[4889120,2048],"cn":[4962144,2048]}], +"levels/bowser_3/2.rgba16.png": [32,64,4096,{"jp":[5032864,4096],"us":[5041152,4096],"eu":[4920080,4096],"sh":[4889120,4096],"cn":[4962144,4096]}], +"levels/castle_grounds/0.rgba16.png": [32,64,4096,{"jp":[4492416,0],"us":[4500416,0],"eu":[4374016,0],"sh":[4348384,0],"cn":[4422160,0]}], +"levels/castle_grounds/1.rgba16.png": [64,32,4096,{"jp":[4492416,4096],"us":[4500416,4096],"eu":[4374016,4096],"sh":[4348384,4096],"cn":[4422160,4096]}], +"levels/castle_grounds/2.rgba16.png": [64,32,4096,{"jp":[4492416,8192],"us":[4500416,8192],"eu":[4374016,8192],"sh":[4348384,8192],"cn":[4422160,8192]}], +"levels/castle_grounds/3.rgba16.png": [32,64,4096,{"jp":[4492416,51688],"us":[4500416,51688],"eu":[4374016,51688],"sh":[4348384,51688],"cn":[4422160,51688]}], +"levels/castle_grounds/4.rgba16.png": [32,64,4096,{"jp":[4492416,55784],"us":[4500416,55784],"eu":[4374016,55784],"sh":[4348384,55784],"cn":[4422160,55784]}], +"levels/castle_grounds/5.ia8.png": [64,32,2048,{"us":[4500416,60136],"eu":[4374016,60136],"sh":[4348384,60136],"cn":[4422160,60136]}], +"levels/castle_inside/1.rgba16.png": [32,32,2048,{"jp":[3754192,2048],"us":[3760960,2048],"eu":[3634560,2048],"sh":[3608928,2048],"cn":[3682704,2048]}], +"levels/castle_inside/10.rgba16.png": [32,32,2048,{"jp":[3754192,28672],"us":[3760960,28672],"eu":[3634560,28672],"sh":[3608928,28672],"cn":[3682704,28672]}], +"levels/castle_inside/11.rgba16.png": [32,32,2048,{"jp":[3754192,30720],"us":[3760960,30720],"eu":[3634560,30720],"sh":[3608928,30720],"cn":[3682704,30720]}], +"levels/castle_inside/12.rgba16.png": [32,32,2048,{"jp":[3754192,32768],"us":[3760960,32768],"eu":[3634560,32768],"sh":[3608928,32768],"cn":[3682704,32768]}], +"levels/castle_inside/13.rgba16.png": [32,32,2048,{"jp":[3754192,34816],"us":[3760960,34816],"eu":[3634560,34816],"sh":[3608928,34816],"cn":[3682704,34816]}], +"levels/castle_inside/14.rgba16.png": [32,32,2048,{"jp":[3754192,36864],"us":[3760960,36864],"eu":[3634560,36864],"sh":[3608928,36864],"cn":[3682704,36864]}], +"levels/castle_inside/15.rgba16.png": [32,32,2048,{"jp":[3754192,38912],"us":[3760960,38912],"eu":[3634560,38912],"sh":[3608928,38912],"cn":[3682704,38912]}], +"levels/castle_inside/16.ia16.png": [32,32,2048,{"jp":[3754192,40960],"us":[3760960,40960],"eu":[3634560,40960],"sh":[3608928,40960],"cn":[3682704,40960]}], +"levels/castle_inside/17.rgba16.png": [64,32,4096,{"jp":[3754192,43008],"us":[3760960,43008],"eu":[3634560,43008],"sh":[3608928,43008],"cn":[3682704,43008]}], +"levels/castle_inside/18.rgba16.png": [64,32,4096,{"jp":[3754192,47104],"us":[3760960,47104],"eu":[3634560,47104],"sh":[3608928,47104],"cn":[3682704,47104]}], +"levels/castle_inside/19.rgba16.png": [64,32,4096,{"jp":[3754192,51200],"us":[3760960,51200],"eu":[3634560,51200],"sh":[3608928,51200],"cn":[3682704,51200]}], +"levels/castle_inside/2.ia16.png": [32,64,4096,{"jp":[3298272,47104],"us":[3305024,47104],"eu":[3178624,47104],"sh":[3152992,47104],"cn":[3226752,47104]}], +"levels/castle_inside/20.rgba16.png": [64,32,4096,{"jp":[3754192,55296],"us":[3760960,55296],"eu":[3634560,55296],"sh":[3608928,55296],"cn":[3682704,55296]}], +"levels/castle_inside/21.rgba16.png": [64,32,4096,{"jp":[3754192,59392],"us":[3760960,59392],"eu":[3634560,59392],"sh":[3608928,59392],"cn":[3682704,59392]}], +"levels/castle_inside/22.rgba16.png": [64,32,4096,{"jp":[3754192,63488],"us":[3760960,63488],"eu":[3634560,63488],"sh":[3608928,63488],"cn":[3682704,63488]}], "levels/castle_inside/23.rgba16.png": [64,32,4096,{"jp":[3754192,67584]}], -"levels/castle_inside/23_us.rgba16.png": [64,32,4096,{"us":[3760960,67584],"eu":[3634560,67584],"sh":[3608928,67584]}], +"levels/castle_inside/23_us.rgba16.png": [64,32,4096,{"us":[3760960,67584],"eu":[3634560,67584],"sh":[3608928,67584],"cn":[3682704,67584]}], "levels/castle_inside/24.rgba16.png": [64,32,4096,{"jp":[3754192,71680]}], -"levels/castle_inside/24_us.rgba16.png": [64,32,4096,{"us":[3760960,71680],"eu":[3634560,71680],"sh":[3608928,71680]}], -"levels/castle_inside/25.rgba16.png": [64,32,4096,{"jp":[3754192,75776],"us":[3760960,75776],"eu":[3634560,75776],"sh":[3608928,75776]}], -"levels/castle_inside/26.rgba16.png": [64,32,4096,{"jp":[3754192,79872],"us":[3760960,79872],"eu":[3634560,79872],"sh":[3608928,79872]}], -"levels/castle_inside/27.rgba16.png": [64,32,4096,{"jp":[3754192,83968],"us":[3760960,83968],"eu":[3634560,83968],"sh":[3608928,83968]}], -"levels/castle_inside/28.rgba16.png": [64,32,4096,{"jp":[3754192,88064],"us":[3760960,88064],"eu":[3634560,88064],"sh":[3608928,88064]}], -"levels/castle_inside/29.rgba16.png": [32,32,2048,{"jp":[3754192,92160],"us":[3760960,92160],"eu":[3634560,92160],"sh":[3608928,92160]}], -"levels/castle_inside/3.rgba16.png": [32,64,4096,{"jp":[3754192,8192],"us":[3760960,8192],"eu":[3634560,8192],"sh":[3608928,8192]}], -"levels/castle_inside/30.rgba16.png": [32,32,2048,{"jp":[3754192,94208],"us":[3760960,94208],"eu":[3634560,94208],"sh":[3608928,94208]}], -"levels/castle_inside/31.rgba16.png": [64,32,4096,{"jp":[3754192,96256],"us":[3760960,96256],"eu":[3634560,96256],"sh":[3608928,96256]}], -"levels/castle_inside/32.rgba16.png": [64,32,4096,{"jp":[3754192,100352],"us":[3760960,100352],"eu":[3634560,100352],"sh":[3608928,100352]}], -"levels/castle_inside/33.rgba16.png": [64,32,4096,{"jp":[3754192,104448],"us":[3760960,104448],"eu":[3634560,104448],"sh":[3608928,104448]}], -"levels/castle_inside/34.rgba16.png": [64,32,4096,{"jp":[3754192,108544],"us":[3760960,108544],"eu":[3634560,108544],"sh":[3608928,108544]}], -"levels/castle_inside/35.rgba16.png": [64,32,4096,{"jp":[3754192,112640],"us":[3760960,112640],"eu":[3634560,112640],"sh":[3608928,112640]}], -"levels/castle_inside/36.rgba16.png": [64,32,4096,{"jp":[3754192,116736],"us":[3760960,116736],"eu":[3634560,116736],"sh":[3608928,116736]}], -"levels/castle_inside/37.rgba16.png": [64,32,4096,{"jp":[3754192,120832],"us":[3760960,120832],"eu":[3634560,120832],"sh":[3608928,120832]}], -"levels/castle_inside/38.rgba16.png": [64,32,4096,{"jp":[3754192,124928],"us":[3760960,124928],"eu":[3634560,124928],"sh":[3608928,124928]}], -"levels/castle_inside/39.rgba16.png": [64,32,4096,{"jp":[3754192,129024],"us":[3760960,129024],"eu":[3634560,129024],"sh":[3608928,129024]}], -"levels/castle_inside/4.rgba16.png": [32,32,2048,{"jp":[3754192,12288],"us":[3760960,12288],"eu":[3634560,12288],"sh":[3608928,12288]}], -"levels/castle_inside/40.rgba16.png": [64,32,4096,{"jp":[3754192,133120],"us":[3760960,133120],"eu":[3634560,133120],"sh":[3608928,133120]}], -"levels/castle_inside/5.rgba16.png": [32,64,4096,{"jp":[3754192,14336],"us":[3760960,14336],"eu":[3634560,14336],"sh":[3608928,14336]}], -"levels/castle_inside/6.rgba16.png": [32,64,4096,{"jp":[3754192,18432],"us":[3760960,18432],"eu":[3634560,18432],"sh":[3608928,18432]}], -"levels/castle_inside/7.rgba16.png": [32,32,2048,{"jp":[3754192,22528],"us":[3760960,22528],"eu":[3634560,22528],"sh":[3608928,22528]}], -"levels/castle_inside/8.rgba16.png": [32,32,2048,{"jp":[3754192,24576],"us":[3760960,24576],"eu":[3634560,24576],"sh":[3608928,24576]}], -"levels/castle_inside/9.rgba16.png": [32,32,2048,{"jp":[3754192,26624],"us":[3760960,26624],"eu":[3634560,26624],"sh":[3608928,26624]}], -"levels/castle_inside/castle_light.ia16.png": [32,32,2048,{"jp":[3432432,47104],"us":[3439184,47104],"eu":[3312784,47104],"sh":[3287152,47104]}], -"levels/ccm/0.rgba16.png": [32,32,2048,{"jp":[3677936,0],"us":[3684688,0],"eu":[3558288,0],"sh":[3532656,0]}], -"levels/ccm/1.rgba16.png": [32,4,256,{"jp":[3677936,2048],"us":[3684688,2048],"eu":[3558288,2048],"sh":[3532656,2048]}], -"levels/ccm/10.rgba16.png": [32,32,2048,{"jp":[3677936,17152],"us":[3684688,17152],"eu":[3558288,17152],"sh":[3532656,17152]}], -"levels/ccm/11.rgba16.png": [32,32,2048,{"jp":[3677936,19200],"us":[3684688,19200],"eu":[3558288,19200],"sh":[3532656,19200]}], -"levels/ccm/12.rgba16.png": [32,32,2048,{"jp":[3677936,72024],"us":[3684688,72024],"eu":[3558288,72024],"sh":[3532656,72024]}], -"levels/ccm/2.rgba16.png": [32,32,2048,{"jp":[3677936,2304],"us":[3684688,2304],"eu":[3558288,2304],"sh":[3532656,2304]}], -"levels/ccm/3.rgba16.png": [32,32,2048,{"jp":[3677936,4352],"us":[3684688,4352],"eu":[3558288,4352],"sh":[3532656,4352]}], -"levels/ccm/4.rgba16.png": [32,32,2048,{"jp":[3677936,6400],"us":[3684688,6400],"eu":[3558288,6400],"sh":[3532656,6400]}], -"levels/ccm/5.rgba16.png": [32,32,2048,{"jp":[1436272,48240],"us":[1443440,48240],"eu":[1315408,48240],"sh":[1291920,48240]}], -"levels/ccm/6.rgba16.png": [32,32,2048,{"jp":[1436272,46192],"us":[1443440,46192],"eu":[1315408,46192],"sh":[1291920,46192]}], -"levels/ccm/7.rgba16.png": [32,32,2048,{"jp":[3677936,12544],"us":[3684688,12544],"eu":[3558288,12544],"sh":[3532656,12544]}], -"levels/ccm/8.ia16.png": [16,16,512,{"jp":[3677936,14592],"us":[3684688,14592],"eu":[3558288,14592],"sh":[3532656,14592]}], -"levels/ccm/9.ia16.png": [32,32,2048,{"jp":[3677936,15104],"us":[3684688,15104],"eu":[3558288,15104],"sh":[3532656,15104]}], -"levels/cotmc/0.rgba16.png": [64,32,4096,{"jp":[4939888,0],"us":[4948176,0],"eu":[4827104,0],"sh":[4796144,0]}], -"levels/cotmc/1.rgba16.png": [32,32,2048,{"jp":[4939888,4096],"us":[4948176,4096],"eu":[4827104,4096],"sh":[4796144,4096]}], -"levels/cotmc/2.rgba16.png": [32,32,2048,{"jp":[4939888,6144],"us":[4948176,6144],"eu":[4827104,6144],"sh":[4796144,6144]}], -"levels/cotmc/3.rgba16.png": [32,32,2048,{"jp":[4939888,8192],"us":[4948176,8192],"eu":[4827104,8192],"sh":[4796144,8192]}], -"levels/cotmc/4.rgba16.png": [64,16,2048,{"jp":[4939888,10240],"us":[4948176,10240],"eu":[4827104,10240],"sh":[4796144,10240]}], -"levels/ddd/0.rgba16.png": [32,64,4096,{"jp":[4765904,0],"us":[4774192,0],"eu":[4647792,0],"sh":[4622160,0]}], -"levels/ddd/1.rgba16.png": [32,32,2048,{"jp":[3432432,4096],"us":[3439184,4096],"eu":[3312784,4096],"sh":[3287152,4096]}], -"levels/ddd/2.rgba16.png": [32,32,2048,{"jp":[4765904,6144],"us":[4774192,6144],"eu":[4647792,6144],"sh":[4622160,6144]}], -"levels/ddd/3.rgba16.png": [64,32,4096,{"jp":[4765904,8192],"us":[4774192,8192],"eu":[4647792,8192],"sh":[4622160,8192]}], -"levels/ddd/4.rgba16.png": [32,32,2048,{"jp":[4765904,12288],"us":[4774192,12288],"eu":[4647792,12288],"sh":[4622160,12288]}], +"levels/castle_inside/24_us.rgba16.png": [64,32,4096,{"us":[3760960,71680],"eu":[3634560,71680],"sh":[3608928,71680],"cn":[3682704,71680]}], +"levels/castle_inside/25.rgba16.png": [64,32,4096,{"jp":[3754192,75776],"us":[3760960,75776],"eu":[3634560,75776],"sh":[3608928,75776],"cn":[3682704,75776]}], +"levels/castle_inside/26.rgba16.png": [64,32,4096,{"jp":[3754192,79872],"us":[3760960,79872],"eu":[3634560,79872],"sh":[3608928,79872],"cn":[3682704,79872]}], +"levels/castle_inside/27.rgba16.png": [64,32,4096,{"jp":[3754192,83968],"us":[3760960,83968],"eu":[3634560,83968],"sh":[3608928,83968],"cn":[3682704,83968]}], +"levels/castle_inside/28.rgba16.png": [64,32,4096,{"jp":[3754192,88064],"us":[3760960,88064],"eu":[3634560,88064],"sh":[3608928,88064],"cn":[3682704,88064]}], +"levels/castle_inside/29.rgba16.png": [32,32,2048,{"jp":[3754192,92160],"us":[3760960,92160],"eu":[3634560,92160],"sh":[3608928,92160],"cn":[3682704,92160]}], +"levels/castle_inside/3.rgba16.png": [32,64,4096,{"jp":[3754192,8192],"us":[3760960,8192],"eu":[3634560,8192],"sh":[3608928,8192],"cn":[3682704,8192]}], +"levels/castle_inside/30.rgba16.png": [32,32,2048,{"jp":[3754192,94208],"us":[3760960,94208],"eu":[3634560,94208],"sh":[3608928,94208],"cn":[3682704,94208]}], +"levels/castle_inside/31.rgba16.png": [64,32,4096,{"jp":[3754192,96256],"us":[3760960,96256],"eu":[3634560,96256],"sh":[3608928,96256],"cn":[3682704,96256]}], +"levels/castle_inside/32.rgba16.png": [64,32,4096,{"jp":[3754192,100352],"us":[3760960,100352],"eu":[3634560,100352],"sh":[3608928,100352],"cn":[3682704,100352]}], +"levels/castle_inside/33.rgba16.png": [64,32,4096,{"jp":[3754192,104448],"us":[3760960,104448],"eu":[3634560,104448],"sh":[3608928,104448],"cn":[3682704,104448]}], +"levels/castle_inside/34.rgba16.png": [64,32,4096,{"jp":[3754192,108544],"us":[3760960,108544],"eu":[3634560,108544],"sh":[3608928,108544],"cn":[3682704,108544]}], +"levels/castle_inside/35.rgba16.png": [64,32,4096,{"jp":[3754192,112640],"us":[3760960,112640],"eu":[3634560,112640],"sh":[3608928,112640],"cn":[3682704,112640]}], +"levels/castle_inside/36.rgba16.png": [64,32,4096,{"jp":[3754192,116736],"us":[3760960,116736],"eu":[3634560,116736],"sh":[3608928,116736],"cn":[3682704,116736]}], +"levels/castle_inside/37.rgba16.png": [64,32,4096,{"jp":[3754192,120832],"us":[3760960,120832],"eu":[3634560,120832],"sh":[3608928,120832],"cn":[3682704,120832]}], +"levels/castle_inside/38.rgba16.png": [64,32,4096,{"jp":[3754192,124928],"us":[3760960,124928],"eu":[3634560,124928],"sh":[3608928,124928],"cn":[3682704,124928]}], +"levels/castle_inside/39.rgba16.png": [64,32,4096,{"jp":[3754192,129024],"us":[3760960,129024],"eu":[3634560,129024],"sh":[3608928,129024],"cn":[3682704,129024]}], +"levels/castle_inside/4.rgba16.png": [32,32,2048,{"jp":[3754192,12288],"us":[3760960,12288],"eu":[3634560,12288],"sh":[3608928,12288],"cn":[3682704,12288]}], +"levels/castle_inside/40.rgba16.png": [64,32,4096,{"jp":[3754192,133120],"us":[3760960,133120],"eu":[3634560,133120],"sh":[3608928,133120],"cn":[3682704,133120]}], +"levels/castle_inside/5.rgba16.png": [32,64,4096,{"jp":[3754192,14336],"us":[3760960,14336],"eu":[3634560,14336],"sh":[3608928,14336],"cn":[3682704,14336]}], +"levels/castle_inside/6.rgba16.png": [32,64,4096,{"jp":[3754192,18432],"us":[3760960,18432],"eu":[3634560,18432],"sh":[3608928,18432],"cn":[3682704,18432]}], +"levels/castle_inside/7.rgba16.png": [32,32,2048,{"jp":[3754192,22528],"us":[3760960,22528],"eu":[3634560,22528],"sh":[3608928,22528],"cn":[3682704,22528]}], +"levels/castle_inside/8.rgba16.png": [32,32,2048,{"jp":[3754192,24576],"us":[3760960,24576],"eu":[3634560,24576],"sh":[3608928,24576],"cn":[3682704,24576]}], +"levels/castle_inside/9.rgba16.png": [32,32,2048,{"jp":[3754192,26624],"us":[3760960,26624],"eu":[3634560,26624],"sh":[3608928,26624],"cn":[3682704,26624]}], +"levels/castle_inside/castle_light.ia16.png": [32,32,2048,{"jp":[3432432,47104],"us":[3439184,47104],"eu":[3312784,47104],"sh":[3287152,47104],"cn":[3360912,47104]}], +"levels/ccm/0.rgba16.png": [32,32,2048,{"jp":[3677936,0],"us":[3684688,0],"eu":[3558288,0],"sh":[3532656,0],"cn":[3606416,0]}], +"levels/ccm/1.rgba16.png": [32,4,256,{"jp":[3677936,2048],"us":[3684688,2048],"eu":[3558288,2048],"sh":[3532656,2048],"cn":[3606416,2048]}], +"levels/ccm/10.rgba16.png": [32,32,2048,{"jp":[3677936,17152],"us":[3684688,17152],"eu":[3558288,17152],"sh":[3532656,17152],"cn":[3606416,17152]}], +"levels/ccm/11.rgba16.png": [32,32,2048,{"jp":[3677936,19200],"us":[3684688,19200],"eu":[3558288,19200],"sh":[3532656,19200],"cn":[3606416,19200]}], +"levels/ccm/12.rgba16.png": [32,32,2048,{"jp":[3677936,72024],"us":[3684688,72024],"eu":[3558288,72024],"sh":[3532656,72024],"cn":[3606416,72024]}], +"levels/ccm/2.rgba16.png": [32,32,2048,{"jp":[3677936,2304],"us":[3684688,2304],"eu":[3558288,2304],"sh":[3532656,2304],"cn":[3606416,2304]}], +"levels/ccm/3.rgba16.png": [32,32,2048,{"jp":[3677936,4352],"us":[3684688,4352],"eu":[3558288,4352],"sh":[3532656,4352],"cn":[3606416,4352]}], +"levels/ccm/4.rgba16.png": [32,32,2048,{"jp":[3677936,6400],"us":[3684688,6400],"eu":[3558288,6400],"sh":[3532656,6400],"cn":[3606416,6400]}], +"levels/ccm/5.rgba16.png": [32,32,2048,{"jp":[1436272,48240],"us":[1443440,48240],"eu":[1315408,48240],"sh":[1291920,48240],"cn":[1358752,48240]}], +"levels/ccm/6.rgba16.png": [32,32,2048,{"jp":[1436272,46192],"us":[1443440,46192],"eu":[1315408,46192],"sh":[1291920,46192],"cn":[1358752,46192]}], +"levels/ccm/7.rgba16.png": [32,32,2048,{"jp":[3677936,12544],"us":[3684688,12544],"eu":[3558288,12544],"sh":[3532656,12544],"cn":[3606416,12544]}], +"levels/ccm/8.ia16.png": [16,16,512,{"jp":[3677936,14592],"us":[3684688,14592],"eu":[3558288,14592],"sh":[3532656,14592],"cn":[3606416,14592]}], +"levels/ccm/9.ia16.png": [32,32,2048,{"jp":[3677936,15104],"us":[3684688,15104],"eu":[3558288,15104],"sh":[3532656,15104],"cn":[3606416,15104]}], +"levels/cotmc/0.rgba16.png": [64,32,4096,{"jp":[4939888,0],"us":[4948176,0],"eu":[4827104,0],"sh":[4796144,0],"cn":[4869152,0]}], +"levels/cotmc/1.rgba16.png": [32,32,2048,{"jp":[4939888,4096],"us":[4948176,4096],"eu":[4827104,4096],"sh":[4796144,4096],"cn":[4869152,4096]}], +"levels/cotmc/2.rgba16.png": [32,32,2048,{"jp":[4939888,6144],"us":[4948176,6144],"eu":[4827104,6144],"sh":[4796144,6144],"cn":[4869152,6144]}], +"levels/cotmc/3.rgba16.png": [32,32,2048,{"jp":[4939888,8192],"us":[4948176,8192],"eu":[4827104,8192],"sh":[4796144,8192],"cn":[4869152,8192]}], +"levels/cotmc/4.rgba16.png": [64,16,2048,{"jp":[4939888,10240],"us":[4948176,10240],"eu":[4827104,10240],"sh":[4796144,10240],"cn":[4869152,10240]}], +"levels/ddd/0.rgba16.png": [32,64,4096,{"jp":[4765904,0],"us":[4774192,0],"eu":[4647792,0],"sh":[4622160,0],"cn":[4695936,0]}], +"levels/ddd/1.rgba16.png": [32,32,2048,{"jp":[3432432,4096],"us":[3439184,4096],"eu":[3312784,4096],"sh":[3287152,4096],"cn":[3360912,4096]}], +"levels/ddd/2.rgba16.png": [32,32,2048,{"jp":[4765904,6144],"us":[4774192,6144],"eu":[4647792,6144],"sh":[4622160,6144],"cn":[4695936,6144]}], +"levels/ddd/3.rgba16.png": [64,32,4096,{"jp":[4765904,8192],"us":[4774192,8192],"eu":[4647792,8192],"sh":[4622160,8192],"cn":[4695936,8192]}], +"levels/ddd/4.rgba16.png": [32,32,2048,{"jp":[4765904,12288],"us":[4774192,12288],"eu":[4647792,12288],"sh":[4622160,12288],"cn":[4695936,12288]}], "levels/ending/cake.png": [153600,{"jp":[4834992,0],"us":[4843280,0],"sh":[4691248,0]}], "levels/ending/cake_eu.png": [143360,{"eu":[4716880,0]}], +"levels/ending/cake_cn.png": [153600,{"cn":[4765024,0]}], "levels/ending/eu_023000.rgba16.png": [64,32,4096,{"eu":[4716880,143360]}], "levels/ending/eu_024000.rgba16.png": [64,32,4096,{"eu":[4716880,147456]}], "levels/ending/eu_025000.rgba16.png": [64,32,4096,{"eu":[4716880,151552]}], "levels/ending/eu_026000.rgba16.png": [64,32,4096,{"eu":[4716880,155648]}], "levels/ending/eu_027000.rgba16.png": [64,32,4096,{"eu":[4716880,159744]}], "levels/ending/eu_028000.rgba16.png": [64,32,4096,{"eu":[4716880,163840]}], -"levels/hmc/0.rgba16.png": [32,64,4096,{"jp":[3993136,0],"us":[4001216,0],"eu":[3874816,0],"sh":[3849184,0]}], -"levels/hmc/1.rgba16.png": [32,64,4096,{"jp":[3993136,4096],"us":[4001216,4096],"eu":[3874816,4096],"sh":[3849184,4096]}], -"levels/hmc/2.rgba16.png": [32,64,4096,{"jp":[3993136,8192],"us":[4001216,8192],"eu":[3874816,8192],"sh":[3849184,8192]}], -"levels/hmc/3.rgba16.png": [32,32,2048,{"jp":[3993136,12288],"us":[4001216,12288],"eu":[3874816,12288],"sh":[3849184,12288]}], -"levels/hmc/4.rgba16.png": [32,32,2048,{"jp":[3993136,14336],"us":[4001216,14336],"eu":[3874816,14336],"sh":[3849184,14336]}], -"levels/hmc/5.rgba16.png": [32,32,2048,{"jp":[3993136,16384],"us":[4001216,16384],"eu":[3874816,16384],"sh":[3849184,16384]}], -"levels/hmc/6.rgba16.png": [32,64,4096,{"jp":[3993136,18432],"us":[4001216,18432],"eu":[3874816,18432],"sh":[3849184,18432]}], -"levels/hmc/7.rgba16.png": [32,32,2048,{"jp":[3754192,92160],"us":[3760960,92160],"eu":[3634560,92160],"sh":[3608928,92160]}], -"levels/intro/0.rgba16.png": [32,32,2048,{"jp":[2524448,32416],"us":[2532256,32416],"eu":[2401056,32416],"sh":[2377888,32416]}], -"levels/intro/1.rgba16.png": [32,32,2048,{"jp":[2524448,34464],"us":[2532256,34464],"eu":[2401056,34464],"sh":[2377888,34464]}], +"levels/hmc/0.rgba16.png": [32,64,4096,{"jp":[3993136,0],"us":[4001216,0],"eu":[3874816,0],"sh":[3849184,0],"cn":[3922960,0]}], +"levels/hmc/1.rgba16.png": [32,64,4096,{"jp":[3993136,4096],"us":[4001216,4096],"eu":[3874816,4096],"sh":[3849184,4096],"cn":[3922960,4096]}], +"levels/hmc/2.rgba16.png": [32,64,4096,{"jp":[3993136,8192],"us":[4001216,8192],"eu":[3874816,8192],"sh":[3849184,8192],"cn":[3922960,8192]}], +"levels/hmc/3.rgba16.png": [32,32,2048,{"jp":[3993136,12288],"us":[4001216,12288],"eu":[3874816,12288],"sh":[3849184,12288],"cn":[3922960,12288]}], +"levels/hmc/4.rgba16.png": [32,32,2048,{"jp":[3993136,14336],"us":[4001216,14336],"eu":[3874816,14336],"sh":[3849184,14336],"cn":[3922960,14336]}], +"levels/hmc/5.rgba16.png": [32,32,2048,{"jp":[3993136,16384],"us":[4001216,16384],"eu":[3874816,16384],"sh":[3849184,16384],"cn":[3922960,16384]}], +"levels/hmc/6.rgba16.png": [32,64,4096,{"jp":[3993136,18432],"us":[4001216,18432],"eu":[3874816,18432],"sh":[3849184,18432],"cn":[3922960,18432]}], +"levels/hmc/7.rgba16.png": [32,32,2048,{"jp":[3754192,92160],"us":[3760960,92160],"eu":[3634560,92160],"sh":[3608928,92160],"cn":[3682704,92160]}], +"levels/intro/0.rgba16.png": [32,32,2048,{"jp":[2524448,32416],"us":[2532256,32416],"eu":[2401056,32416],"sh":[2377888,32416],"cn":[2448576,31392]}], +"levels/intro/1.rgba16.png": [32,32,2048,{"jp":[2524448,34464],"us":[2532256,34464],"eu":[2401056,34464],"sh":[2377888,34464],"cn":[2448576,33440]}], "levels/intro/2_copyright.rgba16.png": [128,16,4096,{"jp":[2524448,46240],"us":[2532256,46240]}], +"levels/intro/2_cn_copyright.rgba16.png": [128,16,4096,{"cn":[2448576,47392]}], +"levels/intro/2_cn_copyright_ique.rgba16.png": [128,16,4096,{"cn":[2448576,51488]}], "levels/intro/2_eu_copyright.rgba16.png": [128,16,4096,{"eu":[2401056,46240],"sh":[2377888,46240]}], "levels/intro/3_eu_tm.rgba16.png": [16,16,512,{"eu":[2401056,50336]}], "levels/intro/3_tm.rgba16.png": [16,16,512,{"jp":[2524448,50336],"us":[2532256,50336]}], -"levels/intro/3_sh_tm.rgba16.png": [16,16,512,{"sh":[2377888,50336]}], -"levels/jrb/0.rgba16.png": [32,32,2048,{"jp":[3432432,4096],"us":[3439184,4096],"eu":[3312784,4096],"sh":[3287152,4096]}], -"levels/jrb/1.rgba16.png": [64,32,4096,{"jp":[4294592,2048],"us":[4302688,2048],"eu":[4176288,2048],"sh":[4150656,2048]}], -"levels/jrb/2.rgba16.png": [32,32,2048,{"jp":[4294592,6144],"us":[4302688,6144],"eu":[4176288,6144],"sh":[4150656,6144]}], -"levels/jrb/3.rgba16.png": [32,32,2048,{"jp":[4294592,8192],"us":[4302688,8192],"eu":[4176288,8192],"sh":[4150656,8192]}], -"levels/lll/0.rgba16.png": [32,32,2048,{"jp":[4678592,0],"us":[4687008,0],"eu":[4560608,0],"sh":[4534976,0]}], -"levels/lll/1.rgba16.png": [32,32,2048,{"jp":[4678592,2048],"us":[4687008,2048],"eu":[4560608,2048],"sh":[4534976,2048]}], -"levels/lll/10.rgba16.png": [32,32,2048,{"jp":[4678592,20480],"us":[4687008,20480],"eu":[4560608,20480],"sh":[4534976,20480]}], -"levels/lll/11.rgba16.png": [32,32,2048,{"jp":[4678592,22528],"us":[4687008,22528],"eu":[4560608,22528],"sh":[4534976,22528]}], -"levels/lll/12.rgba16.png": [32,32,2048,{"jp":[4678592,24576],"us":[4687008,24576],"eu":[4560608,24576],"sh":[4534976,24576]}], -"levels/lll/13.rgba16.png": [32,32,2048,{"jp":[4678592,26624],"us":[4687008,26624],"eu":[4560608,26624],"sh":[4534976,26624]}], -"levels/lll/14.rgba16.png": [32,32,2048,{"jp":[4678592,28672],"us":[4687008,28672],"eu":[4560608,28672],"sh":[4534976,28672]}], -"levels/lll/15.rgba16.png": [32,32,2048,{"jp":[4678592,30720],"us":[4687008,30720],"eu":[4560608,30720],"sh":[4534976,30720]}], -"levels/lll/16.rgba16.png": [32,32,2048,{"jp":[4678592,32768],"us":[4687008,32768],"eu":[4560608,32768],"sh":[4534976,32768]}], -"levels/lll/17.rgba16.png": [32,32,2048,{"jp":[4678592,34816],"us":[4687008,34816],"eu":[4560608,34816],"sh":[4534976,34816]}], -"levels/lll/18.rgba16.png": [32,32,2048,{"jp":[4678592,36864],"us":[4687008,36864],"eu":[4560608,36864],"sh":[4534976,36864]}], -"levels/lll/19.rgba16.png": [32,32,2048,{"jp":[4678592,38912],"us":[4687008,38912],"eu":[4560608,38912],"sh":[4534976,38912]}], -"levels/lll/2.rgba16.png": [32,32,2048,{"jp":[4678592,4096],"us":[4687008,4096],"eu":[4560608,4096],"sh":[4534976,4096]}], -"levels/lll/20.rgba16.png": [32,32,2048,{"jp":[4678592,40960],"us":[4687008,40960],"eu":[4560608,40960],"sh":[4534976,40960]}], -"levels/lll/21.rgba16.png": [32,32,2048,{"jp":[4678592,43008],"us":[4687008,43008],"eu":[4560608,43008],"sh":[4534976,43008]}], -"levels/lll/22.rgba16.png": [32,32,2048,{"jp":[4678592,45056],"us":[4687008,45056],"eu":[4560608,45056],"sh":[4534976,45056]}], -"levels/lll/23.rgba16.png": [32,32,2048,{"jp":[4678592,47104],"us":[4687008,47104],"eu":[4560608,47104],"sh":[4534976,47104]}], -"levels/lll/24.rgba16.png": [32,32,2048,{"jp":[4678592,49152],"us":[4687008,49152],"eu":[4560608,49152],"sh":[4534976,49152]}], -"levels/lll/25.rgba16.png": [32,32,2048,{"jp":[4678592,51200],"us":[4687008,51200],"eu":[4560608,51200],"sh":[4534976,51200]}], -"levels/lll/26.rgba16.png": [16,16,512,{"jp":[4678592,53248],"us":[4687008,53248],"eu":[4560608,53248],"sh":[4534976,53248]}], -"levels/lll/27.ia16.png": [16,16,512,{"jp":[3677936,14592],"us":[3684688,14592],"eu":[3558288,14592],"sh":[3532656,14592]}], -"levels/lll/28.rgba16.png": [32,32,2048,{"jp":[4678592,54272],"us":[4687008,54272],"eu":[4560608,54272],"sh":[4534976,54272]}], -"levels/lll/29.rgba16.png": [32,32,2048,{"jp":[4678592,56320],"us":[4687008,56320],"eu":[4560608,56320],"sh":[4534976,56320]}], -"levels/lll/3.rgba16.png": [32,32,2048,{"jp":[4678592,6144],"us":[4687008,6144],"eu":[4560608,6144],"sh":[4534976,6144]}], -"levels/lll/30.rgba16.png": [32,32,2048,{"jp":[4678592,58368],"us":[4687008,58368],"eu":[4560608,58368],"sh":[4534976,58368]}], -"levels/lll/31.rgba16.png": [32,32,2048,{"jp":[4678592,60416],"us":[4687008,60416],"eu":[4560608,60416],"sh":[4534976,60416]}], -"levels/lll/32.rgba16.png": [64,16,2048,{"jp":[4678592,62464],"us":[4687008,62464],"eu":[4560608,62464],"sh":[4534976,62464]}], -"levels/lll/4.rgba16.png": [32,32,2048,{"jp":[4678592,8192],"us":[4687008,8192],"eu":[4560608,8192],"sh":[4534976,8192]}], -"levels/lll/5.rgba16.png": [32,32,2048,{"jp":[4678592,10240],"us":[4687008,10240],"eu":[4560608,10240],"sh":[4534976,10240]}], -"levels/lll/6.rgba16.png": [32,32,2048,{"jp":[4678592,12288],"us":[4687008,12288],"eu":[4560608,12288],"sh":[4534976,12288]}], -"levels/lll/7.rgba16.png": [32,32,2048,{"jp":[3262320,6144],"us":[3269072,6144],"eu":[3142672,6144],"sh":[3117040,6144]}], -"levels/lll/8.rgba16.png": [32,32,2048,{"jp":[4678592,16384],"us":[4687008,16384],"eu":[4560608,16384],"sh":[4534976,16384]}], -"levels/lll/9.rgba16.png": [32,32,2048,{"jp":[4678592,18432],"us":[4687008,18432],"eu":[4560608,18432],"sh":[4534976,18432]}], -"levels/menu/main_menu_seg7.00018.rgba16.png": [32,32,2048,{"jp":[2770736,24],"us":[2778544,24],"eu":[2647072,24],"sh":[2625456,24]}], -"levels/menu/main_menu_seg7.00818.rgba16.png": [32,32,2048,{"jp":[2770736,2072],"us":[2778544,2072],"eu":[2647072,2072],"sh":[2625456,2072]}], -"levels/menu/main_menu_seg7.01018.rgba16.png": [64,32,4096,{"jp":[2770736,4120],"us":[2778544,4120],"eu":[2647072,4120],"sh":[2625456,4120]}], -"levels/menu/main_menu_seg7.02018.rgba16.png": [64,32,4096,{"jp":[2770736,8216],"us":[2778544,8216],"eu":[2647072,8216],"sh":[2625456,8216]}], -"levels/menu/main_menu_seg7.03468.rgba16.png": [32,32,2048,{"jp":[2770736,13416],"us":[2778544,13416],"eu":[2647072,13416],"sh":[2625456,13416]}], -"levels/menu/main_menu_seg7.03C68.rgba16.png": [32,32,2048,{"jp":[2770736,15464],"us":[2778544,15464],"eu":[2647072,15464],"sh":[2625456,15464]}], -"levels/menu/main_menu_seg7.04468.rgba16.png": [32,32,2048,{"jp":[2770736,17512],"us":[2778544,17512],"eu":[2647072,17512],"sh":[2625456,17512]}], -"levels/menu/main_menu_seg7.04C68.rgba16.png": [32,32,2048,{"jp":[2770736,19560],"us":[2778544,19560],"eu":[2647072,19560],"sh":[2625456,19560]}], -"levels/menu/main_menu_seg7.05468.rgba16.png": [32,32,2048,{"jp":[2770736,21608],"us":[2778544,21608],"eu":[2647072,21608],"sh":[2625456,21608]}], -"levels/menu/main_menu_seg7.06328.rgba16.png": [32,32,2048,{"jp":[2770736,25384],"us":[2778544,25384],"eu":[2647072,25384],"sh":[2625456,25384]}], -"levels/menu/main_menu_seg7.06B28.rgba16.png": [32,32,2048,{"jp":[2770736,27432],"us":[2778544,27432],"eu":[2647072,27432],"sh":[2625456,27432]}], -"levels/menu/main_menu_seg7.073D0.rgba16.png": [16,16,512,{"jp":[2770736,29648],"us":[2778544,29648],"eu":[2647072,29648],"sh":[2625456,29648]}], -"levels/menu/main_menu_seg7.075D0.rgba16.png": [16,16,512,{"jp":[2770736,30160],"us":[2778544,30160],"eu":[2647072,30160],"sh":[2625456,30160]}], -"levels/menu/main_menu_seg7.077D0.rgba16.png": [16,16,512,{"jp":[2770736,30672],"us":[2778544,30672],"eu":[2647072,30672],"sh":[2625456,30672]}], -"levels/menu/main_menu_seg7.079D0.rgba16.png": [16,16,512,{"jp":[2770736,31184],"us":[2778544,31184],"eu":[2647072,31184],"sh":[2625456,31184]}], -"levels/menu/main_menu_seg7.07BD0.rgba16.png": [16,16,512,{"jp":[2770736,31696],"us":[2778544,31696],"eu":[2647072,31696],"sh":[2625456,31696]}], -"levels/menu/main_menu_seg7.07DD0.rgba16.png": [16,16,512,{"jp":[2770736,32208],"us":[2778544,32208],"eu":[2647072,32208],"sh":[2625456,32208]}], -"levels/menu/main_menu_seg7.07FD0.rgba16.png": [16,16,512,{"jp":[2770736,32720],"us":[2778544,32720],"eu":[2647072,32720],"sh":[2625456,32720]}], -"levels/menu/main_menu_seg7.081D0.rgba16.png": [16,16,512,{"jp":[2770736,33232],"us":[2778544,33232],"eu":[2647072,33232],"sh":[2625456,33232]}], -"levels/menu/main_menu_seg7.083D0.rgba16.png": [16,16,512,{"jp":[2770736,33744],"us":[2778544,33744],"eu":[2647072,33744],"sh":[2625456,33744]}], -"levels/menu/main_menu_seg7.085D0.rgba16.png": [16,16,512,{"jp":[2770736,34256],"us":[2778544,34256],"eu":[2647072,34256],"sh":[2625456,34256]}], -"levels/menu/main_menu_seg7.087D0.rgba16.png": [16,16,512,{"jp":[2770736,34768],"us":[2778544,34768],"eu":[2647072,34768],"sh":[2625456,34768]}], -"levels/menu/main_menu_seg7.089D0.rgba16.png": [16,16,512,{"jp":[2770736,35280],"us":[2778544,35280],"eu":[2647072,35280],"sh":[2625456,35280]}], -"levels/menu/main_menu_seg7.08BD0.rgba16.png": [16,16,512,{"jp":[2770736,35792],"us":[2778544,35792],"eu":[2647072,35792],"sh":[2625456,35792]}], -"levels/menu/main_menu_seg7.08DD0.rgba16.png": [16,16,512,{"jp":[2770736,36304],"us":[2778544,36304],"eu":[2647072,36304],"sh":[2625456,36304]}], -"levels/menu/main_menu_seg7.08FD0.rgba16.png": [16,16,512,{"jp":[2770736,36816],"us":[2778544,36816],"eu":[2647072,36816],"sh":[2625456,36816]}], -"levels/menu/main_menu_seg7.091D0.rgba16.png": [16,16,512,{"jp":[2770736,37328],"us":[2778544,37328],"eu":[2647072,37328],"sh":[2625456,37328]}], -"levels/menu/main_menu_seg7.093D0.rgba16.png": [16,16,512,{"jp":[2770736,37840],"us":[2778544,37840],"eu":[2647072,37840],"sh":[2625456,37840]}], -"levels/menu/main_menu_seg7.095D0.rgba16.png": [16,16,512,{"jp":[2770736,38352],"us":[2778544,38352],"eu":[2647072,38352],"sh":[2625456,38352]}], -"levels/menu/main_menu_seg7.097D0.rgba16.png": [16,16,512,{"jp":[2770736,38864],"us":[2778544,38864],"eu":[2647072,38864],"sh":[2625456,38864]}], -"levels/menu/main_menu_seg7.099D0.rgba16.png": [16,16,512,{"jp":[2770736,39376],"us":[2778544,39376],"eu":[2647072,39376],"sh":[2625456,39376]}], -"levels/menu/main_menu_seg7.09BD0.rgba16.png": [16,16,512,{"jp":[2770736,39888],"us":[2778544,39888],"eu":[2647072,39888],"sh":[2625456,39888]}], -"levels/menu/main_menu_seg7.09DD0.rgba16.png": [16,16,512,{"jp":[2770736,40400],"us":[2778544,40400],"eu":[2647072,40400],"sh":[2625456,40400]}], -"levels/menu/main_menu_seg7.09FD0.rgba16.png": [16,16,512,{"jp":[2770736,40912],"us":[2778544,40912],"eu":[2647072,40912],"sh":[2625456,40912]}], -"levels/menu/main_menu_seg7.0A1D0.rgba16.png": [16,16,512,{"jp":[1078992,20480],"us":[2778544,41424],"eu":[2647072,41424],"sh":[934640,20480]}], -"levels/menu/main_menu_seg7.0A3D0.rgba16.png": [16,16,512,{"jp":[2770736,41936],"us":[2778544,41936],"eu":[2647072,41936],"sh":[2625456,41936]}], -"levels/menu/main_menu_seg7.0A5D0.rgba16.png": [16,16,512,{"jp":[2770736,42448],"us":[2778544,42448],"eu":[2647072,42448],"sh":[2625456,42448]}], -"levels/menu/main_menu_seg7.0A7D0.rgba16.png": [16,16,512,{"jp":[2770736,42960],"us":[2778544,42960],"eu":[2647072,42960],"sh":[2625456,42960]}], -"levels/menu/main_menu_seg7.0A9D0.rgba16.png": [16,16,512,{"jp":[2770736,43472],"us":[2778544,43472],"eu":[2647072,43472],"sh":[2625456,43472]}], +"levels/intro/3_sh_tm.rgba16.png": [16,16,512,{"sh":[2377888,50336],"cn":[2448576,55584]}], +"levels/jrb/0.rgba16.png": [32,32,2048,{"jp":[3432432,4096],"us":[3439184,4096],"eu":[3312784,4096],"sh":[3287152,4096],"cn":[3360912,4096]}], +"levels/jrb/1.rgba16.png": [64,32,4096,{"jp":[4294592,2048],"us":[4302688,2048],"eu":[4176288,2048],"sh":[4150656,2048],"cn":[4224432,2048]}], +"levels/jrb/2.rgba16.png": [32,32,2048,{"jp":[4294592,6144],"us":[4302688,6144],"eu":[4176288,6144],"sh":[4150656,6144],"cn":[4224432,6144]}], +"levels/jrb/3.rgba16.png": [32,32,2048,{"jp":[4294592,8192],"us":[4302688,8192],"eu":[4176288,8192],"sh":[4150656,8192],"cn":[4224432,8192]}], +"levels/lll/0.rgba16.png": [32,32,2048,{"jp":[4678592,0],"us":[4687008,0],"eu":[4560608,0],"sh":[4534976,0],"cn":[4608752,0]}], +"levels/lll/1.rgba16.png": [32,32,2048,{"jp":[4678592,2048],"us":[4687008,2048],"eu":[4560608,2048],"sh":[4534976,2048],"cn":[4608752,2048]}], +"levels/lll/10.rgba16.png": [32,32,2048,{"jp":[4678592,20480],"us":[4687008,20480],"eu":[4560608,20480],"sh":[4534976,20480],"cn":[4608752,20480]}], +"levels/lll/11.rgba16.png": [32,32,2048,{"jp":[4678592,22528],"us":[4687008,22528],"eu":[4560608,22528],"sh":[4534976,22528],"cn":[4608752,22528]}], +"levels/lll/12.rgba16.png": [32,32,2048,{"jp":[4678592,24576],"us":[4687008,24576],"eu":[4560608,24576],"sh":[4534976,24576],"cn":[4608752,24576]}], +"levels/lll/13.rgba16.png": [32,32,2048,{"jp":[4678592,26624],"us":[4687008,26624],"eu":[4560608,26624],"sh":[4534976,26624],"cn":[4608752,26624]}], +"levels/lll/14.rgba16.png": [32,32,2048,{"jp":[4678592,28672],"us":[4687008,28672],"eu":[4560608,28672],"sh":[4534976,28672],"cn":[4608752,28672]}], +"levels/lll/15.rgba16.png": [32,32,2048,{"jp":[4678592,30720],"us":[4687008,30720],"eu":[4560608,30720],"sh":[4534976,30720],"cn":[4608752,30720]}], +"levels/lll/16.rgba16.png": [32,32,2048,{"jp":[4678592,32768],"us":[4687008,32768],"eu":[4560608,32768],"sh":[4534976,32768],"cn":[4608752,32768]}], +"levels/lll/17.rgba16.png": [32,32,2048,{"jp":[4678592,34816],"us":[4687008,34816],"eu":[4560608,34816],"sh":[4534976,34816],"cn":[4608752,34816]}], +"levels/lll/18.rgba16.png": [32,32,2048,{"jp":[4678592,36864],"us":[4687008,36864],"eu":[4560608,36864],"sh":[4534976,36864],"cn":[4608752,36864]}], +"levels/lll/19.rgba16.png": [32,32,2048,{"jp":[4678592,38912],"us":[4687008,38912],"eu":[4560608,38912],"sh":[4534976,38912],"cn":[4608752,38912]}], +"levels/lll/2.rgba16.png": [32,32,2048,{"jp":[4678592,4096],"us":[4687008,4096],"eu":[4560608,4096],"sh":[4534976,4096],"cn":[4608752,4096]}], +"levels/lll/20.rgba16.png": [32,32,2048,{"jp":[4678592,40960],"us":[4687008,40960],"eu":[4560608,40960],"sh":[4534976,40960],"cn":[4608752,40960]}], +"levels/lll/21.rgba16.png": [32,32,2048,{"jp":[4678592,43008],"us":[4687008,43008],"eu":[4560608,43008],"sh":[4534976,43008],"cn":[4608752,43008]}], +"levels/lll/22.rgba16.png": [32,32,2048,{"jp":[4678592,45056],"us":[4687008,45056],"eu":[4560608,45056],"sh":[4534976,45056],"cn":[4608752,45056]}], +"levels/lll/23.rgba16.png": [32,32,2048,{"jp":[4678592,47104],"us":[4687008,47104],"eu":[4560608,47104],"sh":[4534976,47104],"cn":[4608752,47104]}], +"levels/lll/24.rgba16.png": [32,32,2048,{"jp":[4678592,49152],"us":[4687008,49152],"eu":[4560608,49152],"sh":[4534976,49152],"cn":[4608752,49152]}], +"levels/lll/25.rgba16.png": [32,32,2048,{"jp":[4678592,51200],"us":[4687008,51200],"eu":[4560608,51200],"sh":[4534976,51200],"cn":[4608752,51200]}], +"levels/lll/26.rgba16.png": [16,16,512,{"jp":[4678592,53248],"us":[4687008,53248],"eu":[4560608,53248],"sh":[4534976,53248],"cn":[4608752,53248]}], +"levels/lll/27.ia16.png": [16,16,512,{"jp":[3677936,14592],"us":[3684688,14592],"eu":[3558288,14592],"sh":[3532656,14592],"cn":[3606416,14592]}], +"levels/lll/28.rgba16.png": [32,32,2048,{"jp":[4678592,54272],"us":[4687008,54272],"eu":[4560608,54272],"sh":[4534976,54272],"cn":[4608752,54272]}], +"levels/lll/29.rgba16.png": [32,32,2048,{"jp":[4678592,56320],"us":[4687008,56320],"eu":[4560608,56320],"sh":[4534976,56320],"cn":[4608752,56320]}], +"levels/lll/3.rgba16.png": [32,32,2048,{"jp":[4678592,6144],"us":[4687008,6144],"eu":[4560608,6144],"sh":[4534976,6144],"cn":[4608752,6144]}], +"levels/lll/30.rgba16.png": [32,32,2048,{"jp":[4678592,58368],"us":[4687008,58368],"eu":[4560608,58368],"sh":[4534976,58368],"cn":[4608752,58368]}], +"levels/lll/31.rgba16.png": [32,32,2048,{"jp":[4678592,60416],"us":[4687008,60416],"eu":[4560608,60416],"sh":[4534976,60416],"cn":[4608752,60416]}], +"levels/lll/32.rgba16.png": [64,16,2048,{"jp":[4678592,62464],"us":[4687008,62464],"eu":[4560608,62464],"sh":[4534976,62464],"cn":[4608752,62464]}], +"levels/lll/4.rgba16.png": [32,32,2048,{"jp":[4678592,8192],"us":[4687008,8192],"eu":[4560608,8192],"sh":[4534976,8192],"cn":[4608752,8192]}], +"levels/lll/5.rgba16.png": [32,32,2048,{"jp":[4678592,10240],"us":[4687008,10240],"eu":[4560608,10240],"sh":[4534976,10240],"cn":[4608752,10240]}], +"levels/lll/6.rgba16.png": [32,32,2048,{"jp":[4678592,12288],"us":[4687008,12288],"eu":[4560608,12288],"sh":[4534976,12288],"cn":[4608752,12288]}], +"levels/lll/7.rgba16.png": [32,32,2048,{"jp":[3262320,6144],"us":[3269072,6144],"eu":[3142672,6144],"sh":[3117040,6144],"cn":[3190800,6144]}], +"levels/lll/8.rgba16.png": [32,32,2048,{"jp":[4678592,16384],"us":[4687008,16384],"eu":[4560608,16384],"sh":[4534976,16384],"cn":[4608752,16384]}], +"levels/lll/9.rgba16.png": [32,32,2048,{"jp":[4678592,18432],"us":[4687008,18432],"eu":[4560608,18432],"sh":[4534976,18432],"cn":[4608752,18432]}], +"levels/menu/main_menu_seg7.00018.rgba16.png": [32,32,2048,{"jp":[2770736,24],"us":[2778544,24],"eu":[2647072,24],"sh":[2625456,24],"cn":[2700128,24]}], +"levels/menu/main_menu_seg7.00818.rgba16.png": [32,32,2048,{"jp":[2770736,2072],"us":[2778544,2072],"eu":[2647072,2072],"sh":[2625456,2072],"cn":[2700128,2072]}], +"levels/menu/main_menu_seg7.01018.rgba16.png": [64,32,4096,{"jp":[2770736,4120],"us":[2778544,4120],"eu":[2647072,4120],"sh":[2625456,4120],"cn":[2700128,4120]}], +"levels/menu/main_menu_seg7.02018.rgba16.png": [64,32,4096,{"jp":[2770736,8216],"us":[2778544,8216],"eu":[2647072,8216],"sh":[2625456,8216],"cn":[2700128,8216]}], +"levels/menu/main_menu_seg7.03468.rgba16.png": [32,32,2048,{"jp":[2770736,13416],"us":[2778544,13416],"eu":[2647072,13416],"sh":[2625456,13416],"cn":[2700128,13416]}], +"levels/menu/main_menu_seg7.03C68.rgba16.png": [32,32,2048,{"jp":[2770736,15464],"us":[2778544,15464],"eu":[2647072,15464],"sh":[2625456,15464],"cn":[2700128,15464]}], +"levels/menu/main_menu_seg7.04468.rgba16.png": [32,32,2048,{"jp":[2770736,17512],"us":[2778544,17512],"eu":[2647072,17512],"sh":[2625456,17512],"cn":[2700128,17512]}], +"levels/menu/main_menu_seg7.04C68.rgba16.png": [32,32,2048,{"jp":[2770736,19560],"us":[2778544,19560],"eu":[2647072,19560],"sh":[2625456,19560],"cn":[2700128,19560]}], +"levels/menu/main_menu_seg7.05468.rgba16.png": [32,32,2048,{"jp":[2770736,21608],"us":[2778544,21608],"eu":[2647072,21608],"sh":[2625456,21608],"cn":[2700128,21608]}], +"levels/menu/main_menu_seg7.06328.rgba16.png": [32,32,2048,{"jp":[2770736,25384],"us":[2778544,25384],"eu":[2647072,25384],"sh":[2625456,25384],"cn":[2700128,25384]}], +"levels/menu/main_menu_seg7.06B28.rgba16.png": [32,32,2048,{"jp":[2770736,27432],"us":[2778544,27432],"eu":[2647072,27432],"sh":[2625456,27432],"cn":[2700128,27432]}], +"levels/menu/main_menu_seg7.073D0.rgba16.png": [16,16,512,{"jp":[2770736,29648],"us":[2778544,29648],"eu":[2647072,29648],"sh":[2625456,29648],"cn":[2700128,29648]}], +"levels/menu/main_menu_seg7.075D0.rgba16.png": [16,16,512,{"jp":[2770736,30160],"us":[2778544,30160],"eu":[2647072,30160],"sh":[2625456,30160],"cn":[2700128,30160]}], +"levels/menu/main_menu_seg7.077D0.rgba16.png": [16,16,512,{"jp":[2770736,30672],"us":[2778544,30672],"eu":[2647072,30672],"sh":[2625456,30672],"cn":[2700128,30672]}], +"levels/menu/main_menu_seg7.079D0.rgba16.png": [16,16,512,{"jp":[2770736,31184],"us":[2778544,31184],"eu":[2647072,31184],"sh":[2625456,31184],"cn":[2700128,31184]}], +"levels/menu/main_menu_seg7.07BD0.rgba16.png": [16,16,512,{"jp":[2770736,31696],"us":[2778544,31696],"eu":[2647072,31696],"sh":[2625456,31696],"cn":[2700128,31696]}], +"levels/menu/main_menu_seg7.07DD0.rgba16.png": [16,16,512,{"jp":[2770736,32208],"us":[2778544,32208],"eu":[2647072,32208],"sh":[2625456,32208],"cn":[2700128,32208]}], +"levels/menu/main_menu_seg7.07FD0.rgba16.png": [16,16,512,{"jp":[2770736,32720],"us":[2778544,32720],"eu":[2647072,32720],"sh":[2625456,32720],"cn":[2700128,32720]}], +"levels/menu/main_menu_seg7.081D0.rgba16.png": [16,16,512,{"jp":[2770736,33232],"us":[2778544,33232],"eu":[2647072,33232],"sh":[2625456,33232],"cn":[2700128,33232]}], +"levels/menu/main_menu_seg7.083D0.rgba16.png": [16,16,512,{"jp":[2770736,33744],"us":[2778544,33744],"eu":[2647072,33744],"sh":[2625456,33744],"cn":[2700128,33744]}], +"levels/menu/main_menu_seg7.085D0.rgba16.png": [16,16,512,{"jp":[2770736,34256],"us":[2778544,34256],"eu":[2647072,34256],"sh":[2625456,34256],"cn":[2700128,34256]}], +"levels/menu/main_menu_seg7.087D0.rgba16.png": [16,16,512,{"jp":[2770736,34768],"us":[2778544,34768],"eu":[2647072,34768],"sh":[2625456,34768],"cn":[2700128,34768]}], +"levels/menu/main_menu_seg7.089D0.rgba16.png": [16,16,512,{"jp":[2770736,35280],"us":[2778544,35280],"eu":[2647072,35280],"sh":[2625456,35280],"cn":[2700128,35280]}], +"levels/menu/main_menu_seg7.08BD0.rgba16.png": [16,16,512,{"jp":[2770736,35792],"us":[2778544,35792],"eu":[2647072,35792],"sh":[2625456,35792],"cn":[2700128,35792]}], +"levels/menu/main_menu_seg7.08DD0.rgba16.png": [16,16,512,{"jp":[2770736,36304],"us":[2778544,36304],"eu":[2647072,36304],"sh":[2625456,36304],"cn":[2700128,36304]}], +"levels/menu/main_menu_seg7.08FD0.rgba16.png": [16,16,512,{"jp":[2770736,36816],"us":[2778544,36816],"eu":[2647072,36816],"sh":[2625456,36816],"cn":[2700128,36816]}], +"levels/menu/main_menu_seg7.091D0.rgba16.png": [16,16,512,{"jp":[2770736,37328],"us":[2778544,37328],"eu":[2647072,37328],"sh":[2625456,37328],"cn":[2700128,37328]}], +"levels/menu/main_menu_seg7.093D0.rgba16.png": [16,16,512,{"jp":[2770736,37840],"us":[2778544,37840],"eu":[2647072,37840],"sh":[2625456,37840],"cn":[2700128,37840]}], +"levels/menu/main_menu_seg7.095D0.rgba16.png": [16,16,512,{"jp":[2770736,38352],"us":[2778544,38352],"eu":[2647072,38352],"sh":[2625456,38352],"cn":[2700128,38352]}], +"levels/menu/main_menu_seg7.097D0.rgba16.png": [16,16,512,{"jp":[2770736,38864],"us":[2778544,38864],"eu":[2647072,38864],"sh":[2625456,38864],"cn":[2700128,38864]}], +"levels/menu/main_menu_seg7.099D0.rgba16.png": [16,16,512,{"jp":[2770736,39376],"us":[2778544,39376],"eu":[2647072,39376],"sh":[2625456,39376],"cn":[2700128,39376]}], +"levels/menu/main_menu_seg7.09BD0.rgba16.png": [16,16,512,{"jp":[2770736,39888],"us":[2778544,39888],"eu":[2647072,39888],"sh":[2625456,39888],"cn":[2700128,39888]}], +"levels/menu/main_menu_seg7.09DD0.rgba16.png": [16,16,512,{"jp":[2770736,40400],"us":[2778544,40400],"eu":[2647072,40400],"sh":[2625456,40400],"cn":[2700128,40400]}], +"levels/menu/main_menu_seg7.09FD0.rgba16.png": [16,16,512,{"jp":[2770736,40912],"us":[2778544,40912],"eu":[2647072,40912],"sh":[2625456,40912],"cn":[2700128,40912]}], +"levels/menu/main_menu_seg7.0A1D0.rgba16.png": [16,16,512,{"jp":[1078992,20480],"us":[2778544,41424],"eu":[2647072,41424],"sh":[934640,20480],"cn":[2700128,41424]}], +"levels/menu/main_menu_seg7.0A3D0.rgba16.png": [16,16,512,{"jp":[2770736,41936],"us":[2778544,41936],"eu":[2647072,41936],"sh":[2625456,41936],"cn":[2700128,41936]}], +"levels/menu/main_menu_seg7.0A5D0.rgba16.png": [16,16,512,{"jp":[2770736,42448],"us":[2778544,42448],"eu":[2647072,42448],"sh":[2625456,42448],"cn":[2700128,42448]}], +"levels/menu/main_menu_seg7.0A7D0.rgba16.png": [16,16,512,{"jp":[2770736,42960],"us":[2778544,42960],"eu":[2647072,42960],"sh":[2625456,42960],"cn":[2700128,42960]}], +"levels/menu/main_menu_seg7.0A9D0.rgba16.png": [16,16,512,{"jp":[2770736,43472],"us":[2778544,43472],"eu":[2647072,43472],"sh":[2625456,43472],"cn":[2700128,43472]}], "levels/menu/main_menu_seg7.0AC48.ia8.png": [8,8,64,{"jp":[2770736,44104],"sh":[2625456,44104]}], "levels/menu/main_menu_seg7.0AC88.ia8.png": [8,8,64,{"jp":[2770736,44168],"sh":[2625456,44168]}], "levels/menu/main_menu_seg7.0ACC8.ia8.png": [8,8,64,{"jp":[2770736,44232],"sh":[2625456,44232]}], @@ -866,6 +871,8 @@ "levels/menu/main_menu_seg7.0CCC8.ia8.png": [8,8,64,{"jp":[2770736,52424],"sh":[2625456,52424]}], "levels/menu/main_menu_seg7.0D1A8.rgba16.png": [64,32,4096,{"jp":[2770736,53672],"us":[2778544,48352],"sh":[2625456,53672]}], "levels/menu/main_menu_seg7.0E1A8.rgba16.png": [64,32,4096,{"jp":[2770736,57768],"us":[2778544,52448],"sh":[2625456,57768]}], +"levels/menu/main_menu_seg7_cn.0BCE0.rgba16.png": [64,32,4096,{"cn":[2700128,48352]}], +"levels/menu/main_menu_seg7_cn.0CCE0.rgba16.png": [64,32,4096,{"cn":[2700128,52448]}], "levels/menu/main_menu_seg7_eu.0AF80.ia8.png": [8,8,64,{"eu":[2647072,44928]}], "levels/menu/main_menu_seg7_eu.0B640.ia8.png": [8,8,64,{"eu":[2647072,46656]}], "levels/menu/main_menu_seg7_eu.0B680.ia8.png": [8,8,64,{"eu":[2647072,46720]}], @@ -876,115 +883,115 @@ "levels/menu/main_menu_seg7_eu.0CDA0.rgba16.png": [64,32,4096,{"eu":[2647072,52640]}], "levels/menu/main_menu_seg7_eu.0DDA0.rgba16.png": [64,32,4096,{"eu":[2647072,56736]}], "levels/menu/main_menu_seg7_eu.0EDA0.rgba16.png": [64,32,4096,{"eu":[2647072,60832]}], -"levels/menu/main_menu_seg7_us.0AC40.ia8.png": [8,8,64,{"us":[2778544,44096],"eu":[2647072,44096]}], -"levels/menu/main_menu_seg7_us.0AC80.ia8.png": [8,8,64,{"us":[2778544,44160],"eu":[2647072,44160]}], -"levels/menu/main_menu_seg7_us.0ACC0.ia8.png": [8,8,64,{"us":[2778544,44224],"eu":[2647072,44224]}], -"levels/menu/main_menu_seg7_us.0AD00.ia8.png": [8,8,64,{"us":[2778544,44288],"eu":[2647072,44288]}], -"levels/menu/main_menu_seg7_us.0AD40.ia8.png": [8,8,64,{"us":[2778544,44352],"eu":[2647072,44352]}], -"levels/menu/main_menu_seg7_us.0AD80.ia8.png": [8,8,64,{"us":[2778544,44416],"eu":[2647072,44416]}], -"levels/menu/main_menu_seg7_us.0ADC0.ia8.png": [8,8,64,{"us":[2778544,44480],"eu":[2647072,44480]}], -"levels/menu/main_menu_seg7_us.0AE00.ia8.png": [8,8,64,{"us":[2778544,44544],"eu":[2647072,44544]}], -"levels/menu/main_menu_seg7_us.0AE40.ia8.png": [8,8,64,{"us":[2778544,44608],"eu":[2647072,44608]}], -"levels/menu/main_menu_seg7_us.0AE80.ia8.png": [8,8,64,{"us":[2778544,44672],"eu":[2647072,44672]}], -"levels/menu/main_menu_seg7_us.0AEC0.ia8.png": [8,8,64,{"us":[2778544,44736],"eu":[2647072,44736]}], -"levels/menu/main_menu_seg7_us.0AF00.ia8.png": [8,8,64,{"us":[2778544,44800],"eu":[2647072,44800]}], -"levels/menu/main_menu_seg7_us.0AF40.ia8.png": [8,8,64,{"us":[2778544,44864],"eu":[2647072,44864]}], -"levels/menu/main_menu_seg7_us.0AF80.ia8.png": [8,8,64,{"us":[2778544,44928]}], -"levels/menu/main_menu_seg7_us.0AFC0.ia8.png": [8,8,64,{"us":[2778544,44992],"eu":[2647072,44992]}], -"levels/menu/main_menu_seg7_us.0B000.ia8.png": [8,8,64,{"us":[2778544,45056],"eu":[2647072,45056]}], -"levels/menu/main_menu_seg7_us.0B040.ia8.png": [8,8,64,{"us":[2778544,45120],"eu":[2647072,45120]}], -"levels/menu/main_menu_seg7_us.0B080.ia8.png": [8,8,64,{"us":[2778544,45184],"eu":[2647072,45184]}], -"levels/menu/main_menu_seg7_us.0B0C0.ia8.png": [8,8,64,{"us":[2778544,45248],"eu":[2647072,45248]}], -"levels/menu/main_menu_seg7_us.0B100.ia8.png": [8,8,64,{"us":[2778544,45312],"eu":[2647072,45312]}], -"levels/menu/main_menu_seg7_us.0B140.ia8.png": [8,8,64,{"us":[2778544,45376],"eu":[2647072,45376]}], -"levels/menu/main_menu_seg7_us.0B180.ia8.png": [8,8,64,{"us":[2778544,45440],"eu":[2647072,45440]}], -"levels/menu/main_menu_seg7_us.0B1C0.ia8.png": [8,8,64,{"us":[2778544,45504],"eu":[2647072,45504]}], -"levels/menu/main_menu_seg7_us.0B200.ia8.png": [8,8,64,{"us":[2778544,45568],"eu":[2647072,45568]}], -"levels/menu/main_menu_seg7_us.0B240.ia8.png": [8,8,64,{"us":[2778544,45632],"eu":[2647072,45632]}], -"levels/menu/main_menu_seg7_us.0B280.ia8.png": [8,8,64,{"us":[2778544,45696],"eu":[2647072,45696]}], -"levels/menu/main_menu_seg7_us.0B2C0.ia8.png": [8,8,64,{"us":[2778544,45760],"eu":[2647072,45760]}], -"levels/menu/main_menu_seg7_us.0B300.ia8.png": [8,8,64,{"us":[2778544,45824],"eu":[2647072,45824]}], -"levels/menu/main_menu_seg7_us.0B340.ia8.png": [8,8,64,{"us":[2778544,45888],"eu":[2647072,45888]}], -"levels/menu/main_menu_seg7_us.0B380.ia8.png": [8,8,64,{"us":[2778544,45952],"eu":[2647072,45952]}], -"levels/menu/main_menu_seg7_us.0B3C0.ia8.png": [8,8,64,{"us":[2778544,46016],"eu":[2647072,46016]}], -"levels/menu/main_menu_seg7_us.0B400.ia8.png": [8,8,64,{"us":[2778544,46080],"eu":[2647072,46080]}], -"levels/menu/main_menu_seg7_us.0B440.ia8.png": [8,8,64,{"us":[2778544,46144],"eu":[2647072,46144]}], -"levels/menu/main_menu_seg7_us.0B480.ia8.png": [8,8,64,{"us":[2778544,46208],"eu":[2647072,46208]}], -"levels/menu/main_menu_seg7_us.0B4C0.ia8.png": [8,8,64,{"us":[2778544,46272],"eu":[2647072,46272]}], -"levels/menu/main_menu_seg7_us.0B500.ia8.png": [8,8,64,{"us":[2778544,46336],"eu":[2647072,46336]}], -"levels/menu/main_menu_seg7_us.0B540.ia8.png": [8,8,64,{"us":[2778544,46400],"eu":[2647072,46400]}], -"levels/menu/main_menu_seg7_us.0B580.ia8.png": [8,8,64,{"us":[2778544,46464],"eu":[2647072,46464]}], -"levels/menu/main_menu_seg7_us.0B5C0.ia8.png": [8,8,64,{"us":[2778544,46528],"eu":[2647072,46528]}], -"levels/menu/main_menu_seg7_us.0B600.ia8.png": [8,8,64,{"us":[2778544,46592],"eu":[2647072,46592]}], -"levels/menu/main_menu_seg7_us.0B640.ia8.png": [8,8,64,{"us":[2778544,46656]}], -"levels/menu/main_menu_seg7_us.0B680.ia8.png": [8,8,64,{"us":[2778544,46720]}], -"levels/menu/main_menu_seg7_us.0B6C0.ia8.png": [8,8,64,{"us":[2778544,46784],"eu":[2647072,46784]}], -"levels/menu/main_menu_seg7_us.0B700.ia8.png": [8,8,64,{"us":[2778544,46848],"eu":[2647072,46848]}], -"levels/menu/main_menu_seg7_us.0B740.ia8.png": [8,8,64,{"us":[2778544,46912],"eu":[2647072,46912]}], -"levels/menu/main_menu_seg7_us.0B780.ia8.png": [8,8,64,{"us":[2778544,46976],"eu":[2647072,46976]}], -"levels/menu/main_menu_seg7_us.0B7C0.ia8.png": [8,8,64,{"us":[2778544,46648],"eu":[2647072,47040]}], -"levels/menu/main_menu_seg7_us.0B800.ia8.png": [8,8,64,{"us":[2778544,47104],"eu":[2647072,47104]}], -"levels/pss/0.rgba16.png": [32,32,2048,{"jp":[4905168,0],"us":[4913456,0],"eu":[4792384,0],"sh":[4761424,0]}], -"levels/pss/1.ia16.png": [32,32,2048,{"jp":[4905168,2048],"us":[4913456,2048],"eu":[4792384,2048],"sh":[4761424,2048]}], -"levels/pss/2.rgba16.png": [32,32,2048,{"jp":[4905168,4096],"us":[4913456,4096],"eu":[4792384,4096],"sh":[4761424,4096]}], -"levels/rr/1.rgba16.png": [64,32,4096,{"jp":[4413648,2048],"us":[4421744,2048],"eu":[4295344,2048],"sh":[4269712,2048]}], -"levels/rr/2.rgba16.png": [32,32,2048,{"jp":[4413648,6144],"us":[4421744,6144],"eu":[4295344,6144],"sh":[4269712,6144]}], -"levels/rr/quarter_flying_carpet.rgba16.png": [32,32,2048,{"jp":[4413648,0],"us":[4421744,0],"eu":[4295344,0],"sh":[4269712,0]}], -"levels/sl/0.rgba16.png": [32,32,2048,{"jp":[4210704,0],"us":[4218800,0],"eu":[4092400,0],"sh":[4066768,0]}], -"levels/sl/1.rgba16.png": [32,32,2048,{"jp":[4210704,2048],"us":[4218800,2048],"eu":[4092400,2048],"sh":[4066768,2048]}], -"levels/sl/2.rgba16.png": [32,32,2048,{"jp":[4210704,4096],"us":[4218800,4096],"eu":[4092400,4096],"sh":[4066768,4096]}], -"levels/sl/3.rgba16.png": [32,32,2048,{"jp":[4210704,6144],"us":[4218800,6144],"eu":[4092400,6144],"sh":[4066768,6144]}], -"levels/sl/4.rgba16.png": [32,32,2048,{"jp":[4210704,8192],"us":[4218800,8192],"eu":[4092400,8192],"sh":[4066768,8192]}], -"levels/ssl/0.rgba16.png": [32,32,2048,{"jp":[4085520,0],"us":[4093616,0],"eu":[3967216,0],"sh":[3941584,0]}], -"levels/ssl/1.ia16.png": [32,32,2048,{"jp":[4085520,2048],"us":[4093616,2048],"eu":[3967216,2048],"sh":[3941584,2048]}], -"levels/ssl/10.rgba16.png": [32,64,4096,{"jp":[4085520,55208],"us":[4093616,55208],"eu":[3967216,55208],"sh":[3941584,55208]}], -"levels/ssl/11.rgba16.png": [32,64,4096,{"jp":[4085520,59304],"us":[4093616,59304],"eu":[3967216,59304],"sh":[3941584,59304]}], -"levels/ssl/2.rgba16.png": [32,32,2048,{"jp":[4085520,4096],"us":[4093616,4096],"eu":[3967216,4096],"sh":[3941584,4096]}], -"levels/ssl/3.rgba16.png": [32,32,2048,{"jp":[4085520,6144],"us":[4093616,6144],"eu":[3967216,6144],"sh":[3941584,6144]}], -"levels/ssl/4.rgba16.png": [32,32,2048,{"jp":[4085520,8192],"us":[4093616,8192],"eu":[3967216,8192],"sh":[3941584,8192]}], -"levels/ssl/5.rgba16.png": [32,64,4096,{"jp":[4085520,10240],"us":[4093616,10240],"eu":[3967216,10240],"sh":[3941584,10240]}], -"levels/ssl/6.rgba16.png": [32,32,2048,{"jp":[4085520,14336],"us":[4093616,14336],"eu":[3967216,14336],"sh":[3941584,14336]}], -"levels/ssl/7.rgba16.png": [32,32,2048,{"jp":[3323408,32768],"us":[3330160,32768],"eu":[3203760,32768],"sh":[3178128,32768]}], -"levels/ssl/8.rgba16.png": [32,32,2048,{"jp":[4085520,49064],"us":[4093616,49064],"eu":[3967216,49064],"sh":[3941584,49064]}], -"levels/ssl/9.rgba16.png": [32,64,4096,{"jp":[4085520,51112],"us":[4093616,51112],"eu":[3967216,51112],"sh":[3941584,51112]}], -"levels/thi/0.rgba16.png": [32,32,2048,{"jp":[4335408,0],"us":[4343504,0],"eu":[4217104,0],"sh":[4191472,0]}], -"levels/thi/1.rgba16.png": [32,32,2048,{"jp":[4335408,2048],"us":[4343504,2048],"eu":[4217104,2048],"sh":[4191472,2048]}], -"levels/totwc/0.rgba16.png": [32,64,4096,{"jp":[4967376,0],"us":[4975664,0],"eu":[4854592,0],"sh":[4823632,0]}], -"levels/totwc/1.rgba16.png": [32,32,2048,{"jp":[4967376,4096],"us":[4975664,4096],"eu":[4854592,4096],"sh":[4823632,4096]}], -"levels/totwc/2.rgba16.png": [32,32,2048,{"jp":[4967376,6144],"us":[4975664,6144],"eu":[4854592,6144],"sh":[4823632,6144]}], -"levels/totwc/3.ia16.png": [32,32,2048,{"jp":[4967376,8192],"us":[4975664,8192],"eu":[4854592,8192],"sh":[4823632,8192]}], -"levels/ttc/0.rgba16.png": [32,32,2048,{"jp":[4370304,0],"us":[4378400,0],"eu":[4252000,0],"sh":[4226368,0]}], -"levels/ttc/1.rgba16.png": [16,64,2048,{"jp":[4370304,2048],"us":[4378400,2048],"eu":[4252000,2048],"sh":[4226368,2048]}], -"levels/ttc/2.rgba16.png": [32,32,2048,{"jp":[4370304,90000],"us":[4378400,90000],"eu":[4252000,90000],"sh":[4226368,90000]}], -"levels/ttm/0.ia16.png": [32,32,2048,{"jp":[5044400,0],"us":[5052688,0],"eu":[4931616,0],"sh":[4900656,0]}], -"levels/ttm/1.rgba16.png": [32,32,2048,{"jp":[5044400,2048],"us":[5052688,2048],"eu":[4931616,2048],"sh":[4900656,2048]}], -"levels/ttm/2.rgba16.png": [32,32,2048,{"jp":[5044400,4096],"us":[5052688,4096],"eu":[4931616,4096],"sh":[4900656,4096]}], -"levels/ttm/3.rgba16.png": [32,32,2048,{"jp":[5044400,6144],"us":[5052688,6144],"eu":[4931616,6144],"sh":[4900656,6144]}], -"levels/ttm/4.rgba16.png": [32,32,2048,{"jp":[5044400,8192],"us":[5052688,8192],"eu":[4931616,8192],"sh":[4900656,8192]}], -"levels/ttm/5.rgba16.png": [32,32,2048,{"jp":[5044400,10240],"us":[5052688,10240],"eu":[4931616,10240],"sh":[4900656,10240]}], -"levels/ttm/6.rgba16.png": [64,32,4096,{"jp":[5044400,12288],"us":[5052688,12288],"eu":[4931616,12288],"sh":[4900656,12288]}], -"levels/ttm/7.rgba16.png": [64,32,4096,{"jp":[5044400,16384],"us":[5052688,16384],"eu":[4931616,16384],"sh":[4900656,16384]}], -"levels/ttm/8.rgba16.png": [32,32,2048,{"jp":[3473152,43008],"us":[3479904,43008],"eu":[3353504,43008],"sh":[3327872,43008]}], -"levels/vcutm/0.rgba16.png": [32,32,2048,{"jp":[4564288,0],"us":[4572672,0],"eu":[4446272,0],"sh":[4420640,0]}], -"levels/vcutm/1.rgba16.png": [64,32,4096,{"jp":[4564288,2048],"us":[4572672,2048],"eu":[4446272,2048],"sh":[4420640,2048]}], -"levels/vcutm/2.rgba16.png": [32,64,4096,{"jp":[4564288,6144],"us":[4572672,6144],"eu":[4446272,6144],"sh":[4420640,6144]}], -"levels/vcutm/3.rgba16.png": [32,32,2048,{"jp":[4564288,10240],"us":[4572672,10240],"eu":[4446272,10240],"sh":[4420640,10240]}], -"levels/wdw/0.rgba16.png": [32,32,2048,{"jp":[4246992,0],"us":[4255088,0],"eu":[4128688,0],"sh":[4103056,0]}], -"levels/wdw/1.rgba16.png": [32,32,2048,{"jp":[4246992,2048],"us":[4255088,2048],"eu":[4128688,2048],"sh":[4103056,2048]}], -"levels/wdw/2.rgba16.png": [32,32,2048,{"jp":[4246992,4096],"us":[4255088,4096],"eu":[4128688,4096],"sh":[4103056,4096]}], -"levels/wdw/3.rgba16.png": [32,32,2048,{"jp":[4246992,6144],"us":[4255088,6144],"eu":[4128688,6144],"sh":[4103056,6144]}], -"levels/wdw/4.rgba16.png": [32,32,2048,{"jp":[4246992,8192],"us":[4255088,8192],"eu":[4128688,8192],"sh":[4103056,8192]}], -"levels/wf/0.rgba16.png": [32,32,2048,{"jp":[4800560,0],"us":[4808848,0],"eu":[4682448,0],"sh":[4656816,0]}], -"levels/wf/1.rgba16.png": [32,32,2048,{"jp":[4800560,2048],"us":[4808848,2048],"eu":[4682448,2048],"sh":[4656816,2048]}], -"levels/wf/2.rgba16.png": [32,32,2048,{"jp":[4800560,4096],"us":[4808848,4096],"eu":[4682448,4096],"sh":[4656816,4096]}], -"levels/wf/3.rgba16.png": [32,32,2048,{"jp":[4800560,6144],"us":[4808848,6144],"eu":[4682448,6144],"sh":[4656816,6144]}], -"levels/wf/4.rgba16.png": [32,32,2048,{"jp":[4800560,8192],"us":[4808848,8192],"eu":[4682448,8192],"sh":[4656816,8192]}], -"levels/wf/5.ia8.png": [16,16,256,{"jp":[1078992,62296],"us":[1083968,74168],"eu":[909712,30840],"sh":[934640,62296]}], -"levels/wmotr/0.rgba16.png": [32,32,2048,{"jp":[4989632,0],"us":[4997920,0],"eu":[4876848,0],"sh":[4845888,0]}], -"levels/wmotr/1.rgba16.png": [32,16,1024,{"jp":[4989632,2048],"us":[4997920,2048],"eu":[4876848,2048],"sh":[4845888,2048]}], -"levels/wmotr/2.rgba16.png": [32,32,2048,{"jp":[4989632,3072],"us":[4997920,3072],"eu":[4876848,3072],"sh":[4845888,3072]}], -"levels/wmotr/3.rgba16.png": [32,8,512,{"jp":[4989632,5120],"us":[4997920,5120],"eu":[4876848,5120],"sh":[4845888,5120]}], -"levels/wmotr/4.rgba16.png": [8,32,512,{"jp":[4989632,5632],"us":[4997920,5632],"eu":[4876848,5632],"sh":[4845888,5632]}], +"levels/menu/main_menu_seg7_us.0AC40.ia8.png": [8,8,64,{"us":[2778544,44096],"eu":[2647072,44096],"cn":[2700128,44096]}], +"levels/menu/main_menu_seg7_us.0AC80.ia8.png": [8,8,64,{"us":[2778544,44160],"eu":[2647072,44160],"cn":[2700128,44160]}], +"levels/menu/main_menu_seg7_us.0ACC0.ia8.png": [8,8,64,{"us":[2778544,44224],"eu":[2647072,44224],"cn":[2700128,44224]}], +"levels/menu/main_menu_seg7_us.0AD00.ia8.png": [8,8,64,{"us":[2778544,44288],"eu":[2647072,44288],"cn":[2700128,44288]}], +"levels/menu/main_menu_seg7_us.0AD40.ia8.png": [8,8,64,{"us":[2778544,44352],"eu":[2647072,44352],"cn":[2700128,44352]}], +"levels/menu/main_menu_seg7_us.0AD80.ia8.png": [8,8,64,{"us":[2778544,44416],"eu":[2647072,44416],"cn":[2700128,44416]}], +"levels/menu/main_menu_seg7_us.0ADC0.ia8.png": [8,8,64,{"us":[2778544,44480],"eu":[2647072,44480],"cn":[2700128,44480]}], +"levels/menu/main_menu_seg7_us.0AE00.ia8.png": [8,8,64,{"us":[2778544,44544],"eu":[2647072,44544],"cn":[2700128,44544]}], +"levels/menu/main_menu_seg7_us.0AE40.ia8.png": [8,8,64,{"us":[2778544,44608],"eu":[2647072,44608],"cn":[2700128,44608]}], +"levels/menu/main_menu_seg7_us.0AE80.ia8.png": [8,8,64,{"us":[2778544,44672],"eu":[2647072,44672],"cn":[2700128,44672]}], +"levels/menu/main_menu_seg7_us.0AEC0.ia8.png": [8,8,64,{"us":[2778544,44736],"eu":[2647072,44736],"cn":[2700128,44736]}], +"levels/menu/main_menu_seg7_us.0AF00.ia8.png": [8,8,64,{"us":[2778544,44800],"eu":[2647072,44800],"cn":[2700128,44800]}], +"levels/menu/main_menu_seg7_us.0AF40.ia8.png": [8,8,64,{"us":[2778544,44864],"eu":[2647072,44864],"cn":[2700128,44864]}], +"levels/menu/main_menu_seg7_us.0AF80.ia8.png": [8,8,64,{"us":[2778544,44928],"cn":[2700128,44928]}], +"levels/menu/main_menu_seg7_us.0AFC0.ia8.png": [8,8,64,{"us":[2778544,44992],"eu":[2647072,44992],"cn":[2700128,44992]}], +"levels/menu/main_menu_seg7_us.0B000.ia8.png": [8,8,64,{"us":[2778544,45056],"eu":[2647072,45056],"cn":[2700128,45056]}], +"levels/menu/main_menu_seg7_us.0B040.ia8.png": [8,8,64,{"us":[2778544,45120],"eu":[2647072,45120],"cn":[2700128,45120]}], +"levels/menu/main_menu_seg7_us.0B080.ia8.png": [8,8,64,{"us":[2778544,45184],"eu":[2647072,45184],"cn":[2700128,45184]}], +"levels/menu/main_menu_seg7_us.0B0C0.ia8.png": [8,8,64,{"us":[2778544,45248],"eu":[2647072,45248],"cn":[2700128,45248]}], +"levels/menu/main_menu_seg7_us.0B100.ia8.png": [8,8,64,{"us":[2778544,45312],"eu":[2647072,45312],"cn":[2700128,45312]}], +"levels/menu/main_menu_seg7_us.0B140.ia8.png": [8,8,64,{"us":[2778544,45376],"eu":[2647072,45376],"cn":[2700128,45376]}], +"levels/menu/main_menu_seg7_us.0B180.ia8.png": [8,8,64,{"us":[2778544,45440],"eu":[2647072,45440],"cn":[2700128,45440]}], +"levels/menu/main_menu_seg7_us.0B1C0.ia8.png": [8,8,64,{"us":[2778544,45504],"eu":[2647072,45504],"cn":[2700128,45504]}], +"levels/menu/main_menu_seg7_us.0B200.ia8.png": [8,8,64,{"us":[2778544,45568],"eu":[2647072,45568],"cn":[2700128,45568]}], +"levels/menu/main_menu_seg7_us.0B240.ia8.png": [8,8,64,{"us":[2778544,45632],"eu":[2647072,45632],"cn":[2700128,45632]}], +"levels/menu/main_menu_seg7_us.0B280.ia8.png": [8,8,64,{"us":[2778544,45696],"eu":[2647072,45696],"cn":[2700128,45696]}], +"levels/menu/main_menu_seg7_us.0B2C0.ia8.png": [8,8,64,{"us":[2778544,45760],"eu":[2647072,45760],"cn":[2700128,45760]}], +"levels/menu/main_menu_seg7_us.0B300.ia8.png": [8,8,64,{"us":[2778544,45824],"eu":[2647072,45824],"cn":[2700128,45824]}], +"levels/menu/main_menu_seg7_us.0B340.ia8.png": [8,8,64,{"us":[2778544,45888],"eu":[2647072,45888],"cn":[2700128,45888]}], +"levels/menu/main_menu_seg7_us.0B380.ia8.png": [8,8,64,{"us":[2778544,45952],"eu":[2647072,45952],"cn":[2700128,45952]}], +"levels/menu/main_menu_seg7_us.0B3C0.ia8.png": [8,8,64,{"us":[2778544,46016],"eu":[2647072,46016],"cn":[2700128,46016]}], +"levels/menu/main_menu_seg7_us.0B400.ia8.png": [8,8,64,{"us":[2778544,46080],"eu":[2647072,46080],"cn":[2700128,46080]}], +"levels/menu/main_menu_seg7_us.0B440.ia8.png": [8,8,64,{"us":[2778544,46144],"eu":[2647072,46144],"cn":[2700128,46144]}], +"levels/menu/main_menu_seg7_us.0B480.ia8.png": [8,8,64,{"us":[2778544,46208],"eu":[2647072,46208],"cn":[2700128,46208]}], +"levels/menu/main_menu_seg7_us.0B4C0.ia8.png": [8,8,64,{"us":[2778544,46272],"eu":[2647072,46272],"cn":[2700128,46272]}], +"levels/menu/main_menu_seg7_us.0B500.ia8.png": [8,8,64,{"us":[2778544,46336],"eu":[2647072,46336],"cn":[2700128,46336]}], +"levels/menu/main_menu_seg7_us.0B540.ia8.png": [8,8,64,{"us":[2778544,46400],"eu":[2647072,46400],"cn":[2700128,46400]}], +"levels/menu/main_menu_seg7_us.0B580.ia8.png": [8,8,64,{"us":[2778544,46464],"eu":[2647072,46464],"cn":[2700128,46464]}], +"levels/menu/main_menu_seg7_us.0B5C0.ia8.png": [8,8,64,{"us":[2778544,46528],"eu":[2647072,46528],"cn":[2700128,46528]}], +"levels/menu/main_menu_seg7_us.0B600.ia8.png": [8,8,64,{"us":[2778544,46592],"eu":[2647072,46592],"cn":[2700128,46592]}], +"levels/menu/main_menu_seg7_us.0B640.ia8.png": [8,8,64,{"us":[2778544,46656],"cn":[2700128,46656]}], +"levels/menu/main_menu_seg7_us.0B680.ia8.png": [8,8,64,{"us":[2778544,46720],"cn":[2700128,46720]}], +"levels/menu/main_menu_seg7_us.0B6C0.ia8.png": [8,8,64,{"us":[2778544,46784],"eu":[2647072,46784],"cn":[2700128,46784]}], +"levels/menu/main_menu_seg7_us.0B700.ia8.png": [8,8,64,{"us":[2778544,46848],"eu":[2647072,46848],"cn":[2700128,46848]}], +"levels/menu/main_menu_seg7_us.0B740.ia8.png": [8,8,64,{"us":[2778544,46912],"eu":[2647072,46912],"cn":[2700128,46912]}], +"levels/menu/main_menu_seg7_us.0B780.ia8.png": [8,8,64,{"us":[2778544,46976],"eu":[2647072,46976],"cn":[2700128,46976]}], +"levels/menu/main_menu_seg7_us.0B7C0.ia8.png": [8,8,64,{"us":[2778544,46648],"eu":[2647072,47040],"cn":[2700128,46648]}], +"levels/menu/main_menu_seg7_us.0B800.ia8.png": [8,8,64,{"us":[2778544,47104],"eu":[2647072,47104],"cn":[2700128,47104]}], +"levels/pss/0.rgba16.png": [32,32,2048,{"jp":[4905168,0],"us":[4913456,0],"eu":[4792384,0],"sh":[4761424,0],"cn":[4834432,0]}], +"levels/pss/1.ia16.png": [32,32,2048,{"jp":[4905168,2048],"us":[4913456,2048],"eu":[4792384,2048],"sh":[4761424,2048],"cn":[4834432,2048]}], +"levels/pss/2.rgba16.png": [32,32,2048,{"jp":[4905168,4096],"us":[4913456,4096],"eu":[4792384,4096],"sh":[4761424,4096],"cn":[4834432,4096]}], +"levels/rr/1.rgba16.png": [64,32,4096,{"jp":[4413648,2048],"us":[4421744,2048],"eu":[4295344,2048],"sh":[4269712,2048],"cn":[4343488,2048]}], +"levels/rr/2.rgba16.png": [32,32,2048,{"jp":[4413648,6144],"us":[4421744,6144],"eu":[4295344,6144],"sh":[4269712,6144],"cn":[4343488,6144]}], +"levels/rr/quarter_flying_carpet.rgba16.png": [32,32,2048,{"jp":[4413648,0],"us":[4421744,0],"eu":[4295344,0],"sh":[4269712,0],"cn":[4343488,0]}], +"levels/sl/0.rgba16.png": [32,32,2048,{"jp":[4210704,0],"us":[4218800,0],"eu":[4092400,0],"sh":[4066768,0],"cn":[4140544,0]}], +"levels/sl/1.rgba16.png": [32,32,2048,{"jp":[4210704,2048],"us":[4218800,2048],"eu":[4092400,2048],"sh":[4066768,2048],"cn":[4140544,2048]}], +"levels/sl/2.rgba16.png": [32,32,2048,{"jp":[4210704,4096],"us":[4218800,4096],"eu":[4092400,4096],"sh":[4066768,4096],"cn":[4140544,4096]}], +"levels/sl/3.rgba16.png": [32,32,2048,{"jp":[4210704,6144],"us":[4218800,6144],"eu":[4092400,6144],"sh":[4066768,6144],"cn":[4140544,6144]}], +"levels/sl/4.rgba16.png": [32,32,2048,{"jp":[4210704,8192],"us":[4218800,8192],"eu":[4092400,8192],"sh":[4066768,8192],"cn":[4140544,8192]}], +"levels/ssl/0.rgba16.png": [32,32,2048,{"jp":[4085520,0],"us":[4093616,0],"eu":[3967216,0],"sh":[3941584,0],"cn":[4015360,0]}], +"levels/ssl/1.ia16.png": [32,32,2048,{"jp":[4085520,2048],"us":[4093616,2048],"eu":[3967216,2048],"sh":[3941584,2048],"cn":[4015360,2048]}], +"levels/ssl/10.rgba16.png": [32,64,4096,{"jp":[4085520,55208],"us":[4093616,55208],"eu":[3967216,55208],"sh":[3941584,55208],"cn":[4015360,55208]}], +"levels/ssl/11.rgba16.png": [32,64,4096,{"jp":[4085520,59304],"us":[4093616,59304],"eu":[3967216,59304],"sh":[3941584,59304],"cn":[4015360,59304]}], +"levels/ssl/2.rgba16.png": [32,32,2048,{"jp":[4085520,4096],"us":[4093616,4096],"eu":[3967216,4096],"sh":[3941584,4096],"cn":[4015360,4096]}], +"levels/ssl/3.rgba16.png": [32,32,2048,{"jp":[4085520,6144],"us":[4093616,6144],"eu":[3967216,6144],"sh":[3941584,6144],"cn":[4015360,6144]}], +"levels/ssl/4.rgba16.png": [32,32,2048,{"jp":[4085520,8192],"us":[4093616,8192],"eu":[3967216,8192],"sh":[3941584,8192],"cn":[4015360,8192]}], +"levels/ssl/5.rgba16.png": [32,64,4096,{"jp":[4085520,10240],"us":[4093616,10240],"eu":[3967216,10240],"sh":[3941584,10240],"cn":[4015360,10240]}], +"levels/ssl/6.rgba16.png": [32,32,2048,{"jp":[4085520,14336],"us":[4093616,14336],"eu":[3967216,14336],"sh":[3941584,14336],"cn":[4015360,14336]}], +"levels/ssl/7.rgba16.png": [32,32,2048,{"jp":[3323408,32768],"us":[3330160,32768],"eu":[3203760,32768],"sh":[3178128,32768],"cn":[3251888,32768]}], +"levels/ssl/8.rgba16.png": [32,32,2048,{"jp":[4085520,49064],"us":[4093616,49064],"eu":[3967216,49064],"sh":[3941584,49064],"cn":[4015360,49064]}], +"levels/ssl/9.rgba16.png": [32,64,4096,{"jp":[4085520,51112],"us":[4093616,51112],"eu":[3967216,51112],"sh":[3941584,51112],"cn":[4015360,51112]}], +"levels/thi/0.rgba16.png": [32,32,2048,{"jp":[4335408,0],"us":[4343504,0],"eu":[4217104,0],"sh":[4191472,0],"cn":[4265248,0]}], +"levels/thi/1.rgba16.png": [32,32,2048,{"jp":[4335408,2048],"us":[4343504,2048],"eu":[4217104,2048],"sh":[4191472,2048],"cn":[4265248,2048]}], +"levels/totwc/0.rgba16.png": [32,64,4096,{"jp":[4967376,0],"us":[4975664,0],"eu":[4854592,0],"sh":[4823632,0],"cn":[4896640,0]}], +"levels/totwc/1.rgba16.png": [32,32,2048,{"jp":[4967376,4096],"us":[4975664,4096],"eu":[4854592,4096],"sh":[4823632,4096],"cn":[4896640,4096]}], +"levels/totwc/2.rgba16.png": [32,32,2048,{"jp":[4967376,6144],"us":[4975664,6144],"eu":[4854592,6144],"sh":[4823632,6144],"cn":[4896640,6144]}], +"levels/totwc/3.ia16.png": [32,32,2048,{"jp":[4967376,8192],"us":[4975664,8192],"eu":[4854592,8192],"sh":[4823632,8192],"cn":[4896640,8192]}], +"levels/ttc/0.rgba16.png": [32,32,2048,{"jp":[4370304,0],"us":[4378400,0],"eu":[4252000,0],"sh":[4226368,0],"cn":[4300144,0]}], +"levels/ttc/1.rgba16.png": [16,64,2048,{"jp":[4370304,2048],"us":[4378400,2048],"eu":[4252000,2048],"sh":[4226368,2048],"cn":[4300144,2048]}], +"levels/ttc/2.rgba16.png": [32,32,2048,{"jp":[4370304,90000],"us":[4378400,90000],"eu":[4252000,90000],"sh":[4226368,90000],"cn":[4300144,90000]}], +"levels/ttm/0.ia16.png": [32,32,2048,{"jp":[5044400,0],"us":[5052688,0],"eu":[4931616,0],"sh":[4900656,0],"cn":[4973680,0]}], +"levels/ttm/1.rgba16.png": [32,32,2048,{"jp":[5044400,2048],"us":[5052688,2048],"eu":[4931616,2048],"sh":[4900656,2048],"cn":[4973680,2048]}], +"levels/ttm/2.rgba16.png": [32,32,2048,{"jp":[5044400,4096],"us":[5052688,4096],"eu":[4931616,4096],"sh":[4900656,4096],"cn":[4973680,4096]}], +"levels/ttm/3.rgba16.png": [32,32,2048,{"jp":[5044400,6144],"us":[5052688,6144],"eu":[4931616,6144],"sh":[4900656,6144],"cn":[4973680,6144]}], +"levels/ttm/4.rgba16.png": [32,32,2048,{"jp":[5044400,8192],"us":[5052688,8192],"eu":[4931616,8192],"sh":[4900656,8192],"cn":[4973680,8192]}], +"levels/ttm/5.rgba16.png": [32,32,2048,{"jp":[5044400,10240],"us":[5052688,10240],"eu":[4931616,10240],"sh":[4900656,10240],"cn":[4973680,10240]}], +"levels/ttm/6.rgba16.png": [64,32,4096,{"jp":[5044400,12288],"us":[5052688,12288],"eu":[4931616,12288],"sh":[4900656,12288],"cn":[4973680,12288]}], +"levels/ttm/7.rgba16.png": [64,32,4096,{"jp":[5044400,16384],"us":[5052688,16384],"eu":[4931616,16384],"sh":[4900656,16384],"cn":[4973680,16384]}], +"levels/ttm/8.rgba16.png": [32,32,2048,{"jp":[3473152,43008],"us":[3479904,43008],"eu":[3353504,43008],"sh":[3327872,43008],"cn":[3401632,43008]}], +"levels/vcutm/0.rgba16.png": [32,32,2048,{"jp":[4564288,0],"us":[4572672,0],"eu":[4446272,0],"sh":[4420640,0],"cn":[4494416,0]}], +"levels/vcutm/1.rgba16.png": [64,32,4096,{"jp":[4564288,2048],"us":[4572672,2048],"eu":[4446272,2048],"sh":[4420640,2048],"cn":[4494416,2048]}], +"levels/vcutm/2.rgba16.png": [32,64,4096,{"jp":[4564288,6144],"us":[4572672,6144],"eu":[4446272,6144],"sh":[4420640,6144],"cn":[4494416,6144]}], +"levels/vcutm/3.rgba16.png": [32,32,2048,{"jp":[4564288,10240],"us":[4572672,10240],"eu":[4446272,10240],"sh":[4420640,10240],"cn":[4494416,10240]}], +"levels/wdw/0.rgba16.png": [32,32,2048,{"jp":[4246992,0],"us":[4255088,0],"eu":[4128688,0],"sh":[4103056,0],"cn":[4176832,0]}], +"levels/wdw/1.rgba16.png": [32,32,2048,{"jp":[4246992,2048],"us":[4255088,2048],"eu":[4128688,2048],"sh":[4103056,2048],"cn":[4176832,2048]}], +"levels/wdw/2.rgba16.png": [32,32,2048,{"jp":[4246992,4096],"us":[4255088,4096],"eu":[4128688,4096],"sh":[4103056,4096],"cn":[4176832,4096]}], +"levels/wdw/3.rgba16.png": [32,32,2048,{"jp":[4246992,6144],"us":[4255088,6144],"eu":[4128688,6144],"sh":[4103056,6144],"cn":[4176832,6144]}], +"levels/wdw/4.rgba16.png": [32,32,2048,{"jp":[4246992,8192],"us":[4255088,8192],"eu":[4128688,8192],"sh":[4103056,8192],"cn":[4176832,8192]}], +"levels/wf/0.rgba16.png": [32,32,2048,{"jp":[4800560,0],"us":[4808848,0],"eu":[4682448,0],"sh":[4656816,0],"cn":[4730592,0]}], +"levels/wf/1.rgba16.png": [32,32,2048,{"jp":[4800560,2048],"us":[4808848,2048],"eu":[4682448,2048],"sh":[4656816,2048],"cn":[4730592,2048]}], +"levels/wf/2.rgba16.png": [32,32,2048,{"jp":[4800560,4096],"us":[4808848,4096],"eu":[4682448,4096],"sh":[4656816,4096],"cn":[4730592,4096]}], +"levels/wf/3.rgba16.png": [32,32,2048,{"jp":[4800560,6144],"us":[4808848,6144],"eu":[4682448,6144],"sh":[4656816,6144],"cn":[4730592,6144]}], +"levels/wf/4.rgba16.png": [32,32,2048,{"jp":[4800560,8192],"us":[4808848,8192],"eu":[4682448,8192],"sh":[4656816,8192],"cn":[4730592,8192]}], +"levels/wf/5.ia8.png": [16,16,256,{"jp":[1078992,62296],"us":[1083968,74168],"eu":[909712,30840],"sh":[934640,62296],"cn":[947456,174632]}], +"levels/wmotr/0.rgba16.png": [32,32,2048,{"jp":[4989632,0],"us":[4997920,0],"eu":[4876848,0],"sh":[4845888,0],"cn":[4918912,0]}], +"levels/wmotr/1.rgba16.png": [32,16,1024,{"jp":[4989632,2048],"us":[4997920,2048],"eu":[4876848,2048],"sh":[4845888,2048],"cn":[4918912,2048]}], +"levels/wmotr/2.rgba16.png": [32,32,2048,{"jp":[4989632,3072],"us":[4997920,3072],"eu":[4876848,3072],"sh":[4845888,3072],"cn":[4918912,3072]}], +"levels/wmotr/3.rgba16.png": [32,8,512,{"jp":[4989632,5120],"us":[4997920,5120],"eu":[4876848,5120],"sh":[4845888,5120],"cn":[4918912,5120]}], +"levels/wmotr/4.rgba16.png": [8,32,512,{"jp":[4989632,5632],"us":[4997920,5632],"eu":[4876848,5632],"sh":[4845888,5632],"cn":[4918912,5632]}], "sound/sequences/eu/01_cutscene_collect_star.m64": [626,{"eu":[7954384]}], "sound/sequences/eu/02_menu_title_screen.m64": [8282,{"eu":[7955024]}], "sound/sequences/eu/03_level_grass.m64": [5131,{"eu":[7963312]}], @@ -1052,40 +1059,40 @@ "sound/sequences/jp/1F_cutscene_victory.m64": [2074,{"jp":[7735392]}], "sound/sequences/jp/20_cutscene_ending.m64": [1892,{"jp":[7737472]}], "sound/sequences/jp/21_menu_file_select.m64": [789,{"jp":[7739376]}], -"sound/sequences/sh/01_cutscene_collect_star.m64": [626,{"sh":[7884144]}], -"sound/sequences/sh/02_menu_title_screen.m64": [8282,{"sh":[7884784]}], -"sound/sequences/sh/03_level_grass.m64": [5129,{"sh":[7893072]}], -"sound/sequences/sh/04_level_inside_castle.m64": [2503,{"sh":[7898208]}], -"sound/sequences/sh/05_level_water.m64": [4788,{"sh":[7900720]}], -"sound/sequences/sh/06_level_hot.m64": [2455,{"sh":[7905520]}], -"sound/sequences/sh/07_level_boss_koopa.m64": [3424,{"sh":[7907984]}], -"sound/sequences/sh/08_level_snow.m64": [8150,{"sh":[7911408]}], -"sound/sequences/sh/09_level_slide.m64": [7443,{"sh":[7919568]}], -"sound/sequences/sh/0A_level_spooky.m64": [5681,{"sh":[7927024]}], -"sound/sequences/sh/0B_event_piranha_plant.m64": [1400,{"sh":[7932720]}], -"sound/sequences/sh/0C_level_underground.m64": [4899,{"sh":[7934128]}], -"sound/sequences/sh/0D_menu_star_select.m64": [136,{"sh":[7939040]}], -"sound/sequences/sh/0E_event_powerup.m64": [3137,{"sh":[7939184]}], -"sound/sequences/sh/0F_event_metal_cap.m64": [2779,{"sh":[7942336]}], -"sound/sequences/sh/10_event_koopa_message.m64": [558,{"sh":[7945120]}], -"sound/sequences/sh/11_level_koopa_road.m64": [4753,{"sh":[7945680]}], -"sound/sequences/sh/12_event_high_score.m64": [275,{"sh":[7950448]}], -"sound/sequences/sh/13_event_merry_go_round.m64": [1660,{"sh":[7950736]}], -"sound/sequences/sh/14_event_race.m64": [200,{"sh":[7952400]}], -"sound/sequences/sh/15_cutscene_star_spawn.m64": [649,{"sh":[7952608]}], -"sound/sequences/sh/16_event_boss.m64": [3444,{"sh":[7953264]}], -"sound/sequences/sh/17_cutscene_collect_key.m64": [677,{"sh":[7956720]}], -"sound/sequences/sh/18_event_endless_stairs.m64": [1783,{"sh":[7957408]}], -"sound/sequences/sh/19_level_boss_koopa_final.m64": [3521,{"sh":[7959200]}], -"sound/sequences/sh/1A_cutscene_credits.m64": [14328,{"sh":[7962736]}], -"sound/sequences/sh/1B_event_solve_puzzle.m64": [219,{"sh":[7977072]}], -"sound/sequences/sh/1C_event_toad_message.m64": [211,{"sh":[7977296]}], -"sound/sequences/sh/1D_event_peach_message.m64": [436,{"sh":[7977520]}], -"sound/sequences/sh/1E_cutscene_intro.m64": [1770,{"sh":[7977968]}], -"sound/sequences/sh/1F_cutscene_victory.m64": [2066,{"sh":[7979744]}], -"sound/sequences/sh/20_cutscene_ending.m64": [1887,{"sh":[7981824]}], -"sound/sequences/sh/21_menu_file_select.m64": [786,{"sh":[7983712]}], -"sound/sequences/sh/22_cutscene_lakitu.m64": [317,{"sh":[7984512]}], +"sound/sequences/sh/01_cutscene_collect_star.m64": [626,{"sh":[7884144],"cn":[7957168]}], +"sound/sequences/sh/02_menu_title_screen.m64": [8282,{"sh":[7884784],"cn":[7957808]}], +"sound/sequences/sh/03_level_grass.m64": [5129,{"sh":[7893072],"cn":[7966096]}], +"sound/sequences/sh/04_level_inside_castle.m64": [2503,{"sh":[7898208],"cn":[7971232]}], +"sound/sequences/sh/05_level_water.m64": [4788,{"sh":[7900720],"cn":[7973744]}], +"sound/sequences/sh/06_level_hot.m64": [2455,{"sh":[7905520],"cn":[7978544]}], +"sound/sequences/sh/07_level_boss_koopa.m64": [3424,{"sh":[7907984],"cn":[7981008]}], +"sound/sequences/sh/08_level_snow.m64": [8150,{"sh":[7911408],"cn":[7984432]}], +"sound/sequences/sh/09_level_slide.m64": [7443,{"sh":[7919568],"cn":[7992592]}], +"sound/sequences/sh/0A_level_spooky.m64": [5681,{"sh":[7927024],"cn":[8000048]}], +"sound/sequences/sh/0B_event_piranha_plant.m64": [1400,{"sh":[7932720],"cn":[8005744]}], +"sound/sequences/sh/0C_level_underground.m64": [4899,{"sh":[7934128],"cn":[8007152]}], +"sound/sequences/sh/0D_menu_star_select.m64": [136,{"sh":[7939040],"cn":[8012064]}], +"sound/sequences/sh/0E_event_powerup.m64": [3137,{"sh":[7939184],"cn":[8012208]}], +"sound/sequences/sh/0F_event_metal_cap.m64": [2779,{"sh":[7942336],"cn":[8015360]}], +"sound/sequences/sh/10_event_koopa_message.m64": [558,{"sh":[7945120],"cn":[8018144]}], +"sound/sequences/sh/11_level_koopa_road.m64": [4753,{"sh":[7945680],"cn":[8018704]}], +"sound/sequences/sh/12_event_high_score.m64": [275,{"sh":[7950448],"cn":[8023472]}], +"sound/sequences/sh/13_event_merry_go_round.m64": [1660,{"sh":[7950736],"cn":[8023760]}], +"sound/sequences/sh/14_event_race.m64": [200,{"sh":[7952400],"cn":[8025424]}], +"sound/sequences/sh/15_cutscene_star_spawn.m64": [649,{"sh":[7952608],"cn":[8025632]}], +"sound/sequences/sh/16_event_boss.m64": [3444,{"sh":[7953264],"cn":[8026288]}], +"sound/sequences/sh/17_cutscene_collect_key.m64": [677,{"sh":[7956720],"cn":[8029744]}], +"sound/sequences/sh/18_event_endless_stairs.m64": [1783,{"sh":[7957408],"cn":[8030432]}], +"sound/sequences/sh/19_level_boss_koopa_final.m64": [3521,{"sh":[7959200],"cn":[8032224]}], +"sound/sequences/sh/1A_cutscene_credits.m64": [14328,{"sh":[7962736],"cn":[8035760]}], +"sound/sequences/sh/1B_event_solve_puzzle.m64": [219,{"sh":[7977072],"cn":[8050096]}], +"sound/sequences/sh/1C_event_toad_message.m64": [211,{"sh":[7977296],"cn":[8050320]}], +"sound/sequences/sh/1D_event_peach_message.m64": [436,{"sh":[7977520],"cn":[8050544]}], +"sound/sequences/sh/1E_cutscene_intro.m64": [1770,{"sh":[7977968],"cn":[8050992]}], +"sound/sequences/sh/1F_cutscene_victory.m64": [2066,{"sh":[7979744],"cn":[8052768]}], +"sound/sequences/sh/20_cutscene_ending.m64": [1887,{"sh":[7981824],"cn":[8054848]}], +"sound/sequences/sh/21_menu_file_select.m64": [786,{"sh":[7983712],"cn":[8056736]}], +"sound/sequences/sh/22_cutscene_lakitu.m64": [317,{"sh":[7984512],"cn":[8057536]}], "sound/sequences/us/01_cutscene_collect_star.m64": [619,{"us":[8076816]}], "sound/sequences/us/02_menu_title_screen.m64": [8254,{"us":[8077440]}], "sound/sequences/us/03_level_grass.m64": [5122,{"us":[8085696]}], @@ -1120,490 +1127,490 @@ "sound/sequences/us/20_cutscene_ending.m64": [1882,{"us":[8174192]}], "sound/sequences/us/21_menu_file_select.m64": [781,{"us":[8176080]}], "sound/sequences/us/22_cutscene_lakitu.m64": [313,{"us":[8176864]}], -"textures/cave/hmc_textures.00000.rgba16.png": [32,64,4096,{"jp":[3432432,0],"us":[3439184,0],"eu":[3312784,0],"sh":[3287152,0]}], -"textures/cave/hmc_textures.01000.rgba16.png": [32,32,2048,{"jp":[3432432,4096],"us":[3439184,4096],"eu":[3312784,4096],"sh":[3287152,4096]}], -"textures/cave/hmc_textures.01800.rgba16.png": [32,64,4096,{"jp":[3432432,6144],"us":[3439184,6144],"eu":[3312784,6144],"sh":[3287152,6144]}], -"textures/cave/hmc_textures.02800.rgba16.png": [32,32,2048,{"jp":[3432432,10240],"us":[3439184,10240],"eu":[3312784,10240],"sh":[3287152,10240]}], -"textures/cave/hmc_textures.03000.rgba16.png": [32,32,2048,{"jp":[3432432,12288],"us":[3439184,12288],"eu":[3312784,12288],"sh":[3287152,12288]}], -"textures/cave/hmc_textures.03800.rgba16.png": [32,64,4096,{"jp":[3432432,14336],"us":[3439184,14336],"eu":[3312784,14336],"sh":[3287152,14336]}], -"textures/cave/hmc_textures.04800.rgba16.png": [64,32,4096,{"jp":[3432432,18432],"us":[3439184,18432],"eu":[3312784,18432],"sh":[3287152,18432]}], -"textures/cave/hmc_textures.05800.rgba16.png": [32,64,4096,{"jp":[3432432,22528],"us":[3439184,22528],"eu":[3312784,22528],"sh":[3287152,22528]}], -"textures/cave/hmc_textures.06800.rgba16.png": [32,32,2048,{"jp":[3432432,26624],"us":[3439184,26624],"eu":[3312784,26624],"sh":[3287152,26624]}], -"textures/cave/hmc_textures.07000.rgba16.png": [32,32,2048,{"jp":[3432432,28672],"us":[3439184,28672],"eu":[3312784,28672],"sh":[3287152,28672]}], -"textures/cave/hmc_textures.07800.rgba16.png": [32,64,4096,{"jp":[3432432,30720],"us":[3439184,30720],"eu":[3312784,30720],"sh":[3287152,30720]}], -"textures/cave/hmc_textures.08800.rgba16.png": [32,64,4096,{"jp":[3432432,34816],"us":[3439184,34816],"eu":[3312784,34816],"sh":[3287152,34816]}], -"textures/cave/hmc_textures.09800.rgba16.png": [32,32,2048,{"jp":[3432432,38912],"us":[3439184,38912],"eu":[3312784,38912],"sh":[3287152,38912]}], -"textures/cave/hmc_textures.0A000.rgba16.png": [32,32,2048,{"jp":[3432432,40960],"us":[3439184,40960],"eu":[3312784,40960],"sh":[3287152,40960]}], -"textures/cave/hmc_textures.0A800.rgba16.png": [32,64,4096,{"jp":[3432432,43008],"us":[3439184,43008],"eu":[3312784,43008],"sh":[3287152,43008]}], -"textures/cave/hmc_textures.0B800.ia16.png": [32,32,2048,{"jp":[3432432,47104],"us":[3439184,47104],"eu":[3312784,47104],"sh":[3287152,47104]}], -"textures/cave/hmc_textures.0C000.ia16.png": [32,32,2048,{"jp":[3298272,43008],"us":[3305024,43008],"eu":[3178624,43008],"sh":[3152992,43008]}], -"textures/skyboxes/bbh.png": [84288,{"jp":[3118928,0],"us":[3125680,0],"eu":[2999280,0],"sh":[2973648,0]}], -"textures/skyboxes/bidw.png": [131392,{"jp":[3146352,0],"us":[3153104,0],"eu":[3026704,0],"sh":[3001072,0]}], -"textures/skyboxes/bitfs.png": [102720,{"jp":[2942432,0],"us":[2949184,0],"eu":[2822784,0],"sh":[2797152,0]}], -"textures/skyboxes/bits.png": [131392,{"jp":[3191904,0],"us":[3198656,0],"eu":[3072256,0],"sh":[3046624,0]}], -"textures/skyboxes/ccm.png": [131392,{"jp":[2847920,0],"us":[2854672,0],"eu":[2728272,0],"sh":[2702640,0]}], -"textures/skyboxes/cloud_floor.png": [131392,{"jp":[3038752,0],"us":[3045504,0],"eu":[2919104,0],"sh":[2893472,0]}], -"textures/skyboxes/clouds.png": [84288,{"jp":[2906480,0],"us":[2913232,0],"eu":[2786832,0],"sh":[2761200,0]}], -"textures/skyboxes/ssl.png": [131392,{"jp":[3078784,0],"us":[3085536,0],"eu":[2959136,0],"sh":[2933504,0]}], -"textures/skyboxes/water.png": [131392,{"jp":[2796624,0],"us":[2803376,0],"eu":[2676976,0],"sh":[2651344,0]}], -"textures/skyboxes/wdw.png": [131392,{"jp":[2968208,0],"us":[2974960,0],"eu":[2848560,0],"sh":[2822928,0]}], -"textures/effect/bubble.06048.rgba16.png": [32,32,2048,{"jp":[3594960,24648],"us":[3601712,24648],"eu":[3475312,24648],"sh":[3449680,24648]}], -"textures/effect/flower.00008.rgba16.png": [32,32,2048,{"jp":[3594960,8],"us":[3601712,8],"eu":[3475312,8],"sh":[3449680,8]}], -"textures/effect/flower.00808.rgba16.png": [32,32,2048,{"jp":[3594960,2056],"us":[3601712,2056],"eu":[3475312,2056],"sh":[3449680,2056]}], -"textures/effect/flower.01008.rgba16.png": [32,32,2048,{"jp":[3594960,4104],"us":[3601712,4104],"eu":[3475312,4104],"sh":[3449680,4104]}], -"textures/effect/flower.01808.rgba16.png": [32,32,2048,{"jp":[3594960,6152],"us":[3601712,6152],"eu":[3475312,6152],"sh":[3449680,6152]}], -"textures/effect/lava_bubble.02020.rgba16.png": [32,32,2048,{"jp":[3594960,8224],"us":[3601712,8224],"eu":[3475312,8224],"sh":[3449680,8224]}], -"textures/effect/lava_bubble.02820.rgba16.png": [32,32,2048,{"jp":[3594960,10272],"us":[3601712,10272],"eu":[3475312,10272],"sh":[3449680,10272]}], -"textures/effect/lava_bubble.03020.rgba16.png": [32,32,2048,{"jp":[3594960,12320],"us":[3601712,12320],"eu":[3475312,12320],"sh":[3449680,12320]}], -"textures/effect/lava_bubble.03820.rgba16.png": [32,32,2048,{"jp":[3594960,14368],"us":[3601712,14368],"eu":[3475312,14368],"sh":[3449680,14368]}], -"textures/effect/lava_bubble.04020.rgba16.png": [32,32,2048,{"jp":[3594960,16416],"us":[3601712,16416],"eu":[3475312,16416],"sh":[3449680,16416]}], -"textures/effect/lava_bubble.04820.rgba16.png": [32,32,2048,{"jp":[3594960,18464],"us":[3601712,18464],"eu":[3475312,18464],"sh":[3449680,18464]}], -"textures/effect/lava_bubble.05020.rgba16.png": [32,32,2048,{"jp":[3594960,20512],"us":[3601712,20512],"eu":[3475312,20512],"sh":[3449680,20512]}], -"textures/effect/lava_bubble.05820.rgba16.png": [32,32,2048,{"jp":[3594960,22560],"us":[3601712,22560],"eu":[3475312,22560],"sh":[3449680,22560]}], -"textures/effect/tiny_bubble.0684C.rgba16.png": [16,16,512,{"jp":[3594960,26700],"us":[3601712,26700],"eu":[3475312,26700],"sh":[3449680,26700]}], -"textures/effect/tiny_bubble.06AD8.rgba16.png": [16,16,512,{"jp":[3594960,27352],"us":[3601712,27352],"eu":[3475312,27352],"sh":[3449680,27352]}], -"textures/fire/lll_textures.00000.rgba16.png": [32,32,2048,{"jp":[3262320,0],"us":[3269072,0],"eu":[3142672,0],"sh":[3117040,0]}], -"textures/fire/lll_textures.00800.rgba16.png": [32,32,2048,{"jp":[3262320,2048],"us":[3269072,2048],"eu":[3142672,2048],"sh":[3117040,2048]}], -"textures/fire/lll_textures.01000.rgba16.png": [32,32,2048,{"jp":[3262320,4096],"us":[3269072,4096],"eu":[3142672,4096],"sh":[3117040,4096]}], -"textures/fire/lll_textures.01800.rgba16.png": [32,32,2048,{"jp":[3262320,6144],"us":[3269072,6144],"eu":[3142672,6144],"sh":[3117040,6144]}], -"textures/fire/lll_textures.02000.rgba16.png": [32,32,2048,{"jp":[3262320,8192],"us":[3269072,8192],"eu":[3142672,8192],"sh":[3117040,8192]}], -"textures/fire/lll_textures.02800.rgba16.png": [32,32,2048,{"jp":[3262320,10240],"us":[3269072,10240],"eu":[3142672,10240],"sh":[3117040,10240]}], -"textures/fire/lll_textures.03000.rgba16.png": [32,32,2048,{"jp":[3262320,12288],"us":[3269072,12288],"eu":[3142672,12288],"sh":[3117040,12288]}], -"textures/fire/lll_textures.03800.rgba16.png": [32,32,2048,{"jp":[3262320,14336],"us":[3269072,14336],"eu":[3142672,14336],"sh":[3117040,14336]}], -"textures/fire/lll_textures.04000.rgba16.png": [32,32,2048,{"jp":[3262320,16384],"us":[3269072,16384],"eu":[3142672,16384],"sh":[3117040,16384]}], -"textures/fire/lll_textures.04800.rgba16.png": [32,32,2048,{"jp":[3262320,18432],"us":[3269072,18432],"eu":[3142672,18432],"sh":[3117040,18432]}], -"textures/fire/lll_textures.05000.rgba16.png": [32,32,2048,{"jp":[3262320,20480],"us":[3269072,20480],"eu":[3142672,20480],"sh":[3117040,20480]}], -"textures/fire/lll_textures.05800.rgba16.png": [32,32,2048,{"jp":[3262320,22528],"us":[3269072,22528],"eu":[3142672,22528],"sh":[3117040,22528]}], -"textures/fire/lll_textures.06000.rgba16.png": [32,32,2048,{"jp":[3262320,24576],"us":[3269072,24576],"eu":[3142672,24576],"sh":[3117040,24576]}], -"textures/fire/lll_textures.06800.rgba16.png": [32,32,2048,{"jp":[3262320,26624],"us":[3269072,26624],"eu":[3142672,26624],"sh":[3117040,26624]}], -"textures/fire/lll_textures.07000.rgba16.png": [32,32,2048,{"jp":[3262320,28672],"us":[3269072,28672],"eu":[3142672,28672],"sh":[3117040,28672]}], -"textures/fire/lll_textures.07800.rgba16.png": [32,32,2048,{"jp":[3262320,30720],"us":[3269072,30720],"eu":[3142672,30720],"sh":[3117040,30720]}], -"textures/fire/lll_textures.08000.rgba16.png": [32,32,2048,{"jp":[3262320,32768],"us":[3269072,32768],"eu":[3142672,32768],"sh":[3117040,32768]}], -"textures/fire/lll_textures.08800.rgba16.png": [32,32,2048,{"jp":[3262320,34816],"us":[3269072,34816],"eu":[3142672,34816],"sh":[3117040,34816]}], -"textures/fire/lll_textures.09000.rgba16.png": [32,32,2048,{"jp":[1078992,80984],"us":[1083968,92856],"eu":[909712,49528],"sh":[934640,80984]}], -"textures/fire/lll_textures.09800.rgba16.png": [32,32,2048,{"jp":[3262320,38912],"us":[3269072,38912],"eu":[3142672,38912],"sh":[3117040,38912]}], -"textures/fire/lll_textures.0A000.rgba16.png": [32,32,2048,{"jp":[3262320,40960],"us":[3269072,40960],"eu":[3142672,40960],"sh":[3117040,40960]}], -"textures/fire/lll_textures.0A800.rgba16.png": [32,32,2048,{"jp":[3262320,43008],"us":[3269072,43008],"eu":[3142672,43008],"sh":[3117040,43008]}], -"textures/fire/lll_textures.0B000.rgba16.png": [32,32,2048,{"jp":[3262320,45056],"us":[3269072,45056],"eu":[3142672,45056],"sh":[3117040,45056]}], -"textures/fire/lll_textures.0B800.rgba16.png": [32,32,2048,{"jp":[3262320,47104],"us":[3269072,47104],"eu":[3142672,47104],"sh":[3117040,47104]}], -"textures/generic/bob_textures.00000.rgba16.png": [32,32,2048,{"jp":[3323408,0],"us":[3330160,0],"eu":[3203760,0],"sh":[3178128,0]}], -"textures/generic/bob_textures.00800.rgba16.png": [32,32,2048,{"jp":[1327760,36160],"us":[1334928,36160],"eu":[1206896,36160],"sh":[1183408,36160]}], -"textures/generic/bob_textures.01000.rgba16.png": [32,32,2048,{"jp":[3323408,4096],"us":[3330160,4096],"eu":[3203760,4096],"sh":[3178128,4096]}], -"textures/generic/bob_textures.01800.rgba16.png": [32,32,2048,{"jp":[3323408,6144],"us":[3330160,6144],"eu":[3203760,6144],"sh":[3178128,6144]}], -"textures/generic/bob_textures.02000.rgba16.png": [32,32,2048,{"jp":[3323408,8192],"us":[3330160,8192],"eu":[3203760,8192],"sh":[3178128,8192]}], -"textures/generic/bob_textures.02800.rgba16.png": [32,32,2048,{"jp":[3323408,10240],"us":[3330160,10240],"eu":[3203760,10240],"sh":[3178128,10240]}], -"textures/generic/bob_textures.03000.rgba16.png": [32,32,2048,{"jp":[3323408,12288],"us":[3330160,12288],"eu":[3203760,12288],"sh":[3178128,12288]}], -"textures/generic/bob_textures.03800.rgba16.png": [32,32,2048,{"jp":[3323408,14336],"us":[3330160,14336],"eu":[3203760,14336],"sh":[3178128,14336]}], -"textures/generic/bob_textures.04000.rgba16.png": [32,32,2048,{"jp":[3323408,16384],"us":[3330160,16384],"eu":[3203760,16384],"sh":[3178128,16384]}], -"textures/generic/bob_textures.04800.rgba16.png": [32,32,2048,{"jp":[3323408,18432],"us":[3330160,18432],"eu":[3203760,18432],"sh":[3178128,18432]}], -"textures/generic/bob_textures.05000.rgba16.png": [32,32,2048,{"jp":[3323408,20480],"us":[3330160,20480],"eu":[3203760,20480],"sh":[3178128,20480]}], -"textures/generic/bob_textures.05800.rgba16.png": [32,32,2048,{"jp":[3323408,22528],"us":[3330160,22528],"eu":[3203760,22528],"sh":[3178128,22528]}], -"textures/generic/bob_textures.06000.rgba16.png": [32,64,4096,{"jp":[3323408,24576],"us":[3330160,24576],"eu":[3203760,24576],"sh":[3178128,24576]}], -"textures/generic/bob_textures.07000.rgba16.png": [32,32,2048,{"jp":[3323408,28672],"us":[3330160,28672],"eu":[3203760,28672],"sh":[3178128,28672]}], -"textures/generic/bob_textures.07800.rgba16.png": [32,32,2048,{"jp":[3323408,30720],"us":[3330160,30720],"eu":[3203760,30720],"sh":[3178128,30720]}], -"textures/generic/bob_textures.08000.rgba16.png": [32,32,2048,{"jp":[3323408,32768],"us":[3330160,32768],"eu":[3203760,32768],"sh":[3178128,32768]}], -"textures/generic/bob_textures.08800.rgba16.png": [32,32,2048,{"jp":[3323408,34816],"us":[3330160,34816],"eu":[3203760,34816],"sh":[3178128,34816]}], -"textures/generic/bob_textures.09000.rgba16.png": [32,32,2048,{"jp":[3323408,36864],"us":[3330160,36864],"eu":[3203760,36864],"sh":[3178128,36864]}], -"textures/generic/bob_textures.09800.rgba16.png": [32,32,2048,{"jp":[3323408,38912],"us":[3330160,38912],"eu":[3203760,38912],"sh":[3178128,38912]}], -"textures/generic/bob_textures.0A000.rgba16.png": [32,32,2048,{"jp":[3323408,40960],"us":[3330160,40960],"eu":[3203760,40960],"sh":[3178128,40960]}], -"textures/generic/bob_textures.0A800.rgba16.png": [32,32,2048,{"jp":[3323408,43008],"us":[3330160,43008],"eu":[3203760,43008],"sh":[3178128,43008]}], -"textures/generic/bob_textures.0B000.ia16.png": [32,32,2048,{"jp":[3323408,45056],"us":[3330160,45056],"eu":[3203760,45056],"sh":[3178128,45056]}], -"textures/grass/wf_textures.00000.rgba16.png": [32,32,2048,{"jp":[3496176,0],"us":[3502928,0],"eu":[3376528,0],"sh":[3350896,0]}], -"textures/grass/wf_textures.00800.rgba16.png": [32,32,2048,{"jp":[3496176,2048],"us":[3502928,2048],"eu":[3376528,2048],"sh":[3350896,2048]}], -"textures/grass/wf_textures.01000.rgba16.png": [32,32,2048,{"jp":[3496176,4096],"us":[3502928,4096],"eu":[3376528,4096],"sh":[3350896,4096]}], -"textures/grass/wf_textures.01800.rgba16.png": [32,32,2048,{"jp":[3496176,6144],"us":[3502928,6144],"eu":[3376528,6144],"sh":[3350896,6144]}], -"textures/grass/wf_textures.02000.rgba16.png": [32,32,2048,{"jp":[3496176,8192],"us":[3502928,8192],"eu":[3376528,8192],"sh":[3350896,8192]}], -"textures/grass/wf_textures.02800.rgba16.png": [32,32,2048,{"jp":[3496176,10240],"us":[3502928,10240],"eu":[3376528,10240],"sh":[3350896,10240]}], -"textures/grass/wf_textures.03000.rgba16.png": [32,32,2048,{"jp":[3496176,12288],"us":[3502928,12288],"eu":[3376528,12288],"sh":[3350896,12288]}], -"textures/grass/wf_textures.03800.rgba16.png": [32,32,2048,{"jp":[3496176,14336],"us":[3502928,14336],"eu":[3376528,14336],"sh":[3350896,14336]}], -"textures/grass/wf_textures.04000.rgba16.png": [32,32,2048,{"jp":[3496176,16384],"us":[3502928,16384],"eu":[3376528,16384],"sh":[3350896,16384]}], -"textures/grass/wf_textures.04800.rgba16.png": [32,32,2048,{"jp":[3496176,18432],"us":[3502928,18432],"eu":[3376528,18432],"sh":[3350896,18432]}], -"textures/grass/wf_textures.05000.rgba16.png": [32,32,2048,{"jp":[3496176,20480],"us":[3502928,20480],"eu":[3376528,20480],"sh":[3350896,20480]}], -"textures/grass/wf_textures.05800.rgba16.png": [32,32,2048,{"jp":[3496176,22528],"us":[3502928,22528],"eu":[3376528,22528],"sh":[3350896,22528]}], -"textures/grass/wf_textures.06000.rgba16.png": [32,32,2048,{"jp":[3390640,20480],"us":[3397392,20480],"eu":[3270992,20480],"sh":[3245360,20480]}], -"textures/grass/wf_textures.06800.rgba16.png": [32,32,2048,{"jp":[3496176,26624],"us":[3502928,26624],"eu":[3376528,26624],"sh":[3350896,26624]}], -"textures/grass/wf_textures.07000.rgba16.png": [32,32,2048,{"jp":[3496176,28672],"us":[3502928,28672],"eu":[3376528,28672],"sh":[3350896,28672]}], -"textures/grass/wf_textures.07800.rgba16.png": [32,32,2048,{"jp":[3496176,30720],"us":[3502928,30720],"eu":[3376528,30720],"sh":[3350896,30720]}], -"textures/grass/wf_textures.08000.rgba16.png": [32,32,2048,{"jp":[3496176,32768],"us":[3502928,32768],"eu":[3376528,32768],"sh":[3350896,32768]}], -"textures/grass/wf_textures.08800.rgba16.png": [32,32,2048,{"jp":[3496176,34816],"us":[3502928,34816],"eu":[3376528,34816],"sh":[3350896,34816]}], -"textures/grass/wf_textures.09000.rgba16.png": [32,32,2048,{"jp":[3496176,36864],"us":[3502928,36864],"eu":[3376528,36864],"sh":[3350896,36864]}], -"textures/grass/wf_textures.09800.rgba16.png": [32,32,2048,{"jp":[3496176,38912],"us":[3502928,38912],"eu":[3376528,38912],"sh":[3350896,38912]}], -"textures/grass/wf_textures.0A000.rgba16.png": [32,32,2048,{"jp":[3496176,40960],"us":[3502928,40960],"eu":[3376528,40960],"sh":[3350896,40960]}], -"textures/grass/wf_textures.0A800.rgba16.png": [32,32,2048,{"jp":[3496176,43008],"us":[3502928,43008],"eu":[3376528,43008],"sh":[3350896,43008]}], -"textures/grass/wf_textures.0B000.ia16.png": [32,32,2048,{"jp":[3323408,45056],"us":[3330160,45056],"eu":[3203760,45056],"sh":[3178128,45056]}], -"textures/grass/wf_textures.0B800.ia16.png": [32,32,2048,{"jp":[3496176,47104],"us":[3502928,47104],"eu":[3376528,47104],"sh":[3350896,47104]}], -"textures/inside/inside_castle_textures.00000.rgba16.png": [64,32,4096,{"jp":[3555104,0],"us":[3561856,0],"eu":[3435456,0],"sh":[3409824,0]}], -"textures/inside/inside_castle_textures.01000.rgba16.png": [64,32,4096,{"jp":[3555104,4096],"us":[3561856,4096],"eu":[3435456,4096],"sh":[3409824,4096]}], -"textures/inside/inside_castle_textures.02000.rgba16.png": [32,64,4096,{"jp":[3555104,8192],"us":[3561856,8192],"eu":[3435456,8192],"sh":[3409824,8192]}], -"textures/inside/inside_castle_textures.03000.rgba16.png": [32,32,2048,{"jp":[3555104,12288],"us":[3561856,12288],"eu":[3435456,12288],"sh":[3409824,12288]}], -"textures/inside/inside_castle_textures.03800.rgba16.png": [32,32,2048,{"jp":[3555104,14336],"us":[3561856,14336],"eu":[3435456,14336],"sh":[3409824,14336]}], -"textures/inside/inside_castle_textures.04000.rgba16.png": [32,32,2048,{"jp":[3555104,16384],"us":[3561856,16384],"eu":[3435456,16384],"sh":[3409824,16384]}], -"textures/inside/inside_castle_textures.04800.rgba16.png": [32,32,2048,{"jp":[3460352,2048],"us":[3467104,2048],"eu":[3340704,2048],"sh":[3315072,2048]}], -"textures/inside/inside_castle_textures.05000.rgba16.png": [32,32,2048,{"jp":[3555104,20480],"us":[3561856,20480],"eu":[3435456,20480],"sh":[3409824,20480]}], -"textures/inside/inside_castle_textures.05800.rgba16.png": [32,32,2048,{"jp":[3555104,22528],"us":[3561856,22528],"eu":[3435456,22528],"sh":[3409824,22528]}], -"textures/inside/inside_castle_textures.06000.rgba16.png": [32,64,4096,{"jp":[3555104,24576],"us":[3561856,24576],"eu":[3435456,24576],"sh":[3409824,24576]}], -"textures/inside/inside_castle_textures.07000.rgba16.png": [32,64,4096,{"jp":[3555104,28672],"us":[3561856,28672],"eu":[3435456,28672],"sh":[3409824,28672]}], -"textures/inside/inside_castle_textures.08000.rgba16.png": [32,32,2048,{"jp":[3555104,32768],"us":[3561856,32768],"eu":[3435456,32768],"sh":[3409824,32768]}], -"textures/inside/inside_castle_textures.08800.rgba16.png": [32,32,2048,{"jp":[3555104,34816],"us":[3561856,34816],"eu":[3435456,34816],"sh":[3409824,34816]}], -"textures/inside/inside_castle_textures.09000.rgba16.png": [32,64,4096,{"jp":[3555104,36864],"us":[3561856,36864],"eu":[3435456,36864],"sh":[3409824,36864]}], -"textures/inside/inside_castle_textures.0A000.rgba16.png": [32,64,4096,{"jp":[3555104,40960],"us":[3561856,40960],"eu":[3435456,40960],"sh":[3409824,40960]}], -"textures/inside/inside_castle_textures.0B000.rgba16.png": [32,32,2048,{"jp":[3555104,45056],"us":[3561856,45056],"eu":[3435456,45056],"sh":[3409824,45056]}], -"textures/inside/inside_castle_textures.0B800.rgba16.png": [64,32,4096,{"jp":[3555104,47104],"us":[3561856,47104],"eu":[3435456,47104],"sh":[3409824,47104]}], -"textures/intro_raw/hand_closed.rgba16.png": [32,32,2048,{"jp":[2455304],"us":[2463112],"eu":[2331912],"sh":[2308680]}], -"textures/intro_raw/hand_open.rgba16.png": [32,32,2048,{"jp":[2453248],"us":[2461056],"eu":[2329856],"sh":[2306624]}], -"textures/intro_raw/mario_face_shine.ia8.png": [32,32,1024,{"jp":[2503888],"us":[2511696],"eu":[2380496],"sh":[2357264]}], -"textures/intro_raw/red_star_0.rgba16.png": [32,32,2048,{"jp":[2457352],"us":[2465160],"eu":[2333960],"sh":[2310728]}], -"textures/intro_raw/red_star_1.rgba16.png": [32,32,2048,{"jp":[2459400],"us":[2467208],"eu":[2336008],"sh":[2312776]}], -"textures/intro_raw/red_star_2.rgba16.png": [32,32,2048,{"jp":[2461448],"us":[2469256],"eu":[2338056],"sh":[2314824]}], -"textures/intro_raw/red_star_3.rgba16.png": [32,32,2048,{"jp":[2463496],"us":[2471304],"eu":[2340104],"sh":[2316872]}], -"textures/intro_raw/red_star_4.rgba16.png": [32,32,2048,{"jp":[2465544],"us":[2473352],"eu":[2342152],"sh":[2318920]}], -"textures/intro_raw/red_star_5.rgba16.png": [32,32,2048,{"jp":[2467592],"us":[2475400],"eu":[2344200],"sh":[2320968]}], -"textures/intro_raw/red_star_6.rgba16.png": [32,32,2048,{"jp":[2469640],"us":[2477448],"eu":[2346248],"sh":[2323016]}], -"textures/intro_raw/red_star_7.rgba16.png": [32,32,2048,{"jp":[2471688],"us":[2479496],"eu":[2348296],"sh":[2325064]}], -"textures/intro_raw/sparkle_0.rgba16.png": [32,32,2048,{"jp":[2490888],"us":[2498696],"eu":[2367496],"sh":[2344264]}], -"textures/intro_raw/sparkle_1.rgba16.png": [32,32,2048,{"jp":[2492936],"us":[2500744],"eu":[2369544],"sh":[2346312]}], -"textures/intro_raw/sparkle_2.rgba16.png": [32,32,2048,{"jp":[2494984],"us":[2502792],"eu":[2371592],"sh":[2348360]}], -"textures/intro_raw/sparkle_3.rgba16.png": [32,32,2048,{"jp":[2497032],"us":[2504840],"eu":[2373640],"sh":[2350408]}], -"textures/intro_raw/sparkle_4.rgba16.png": [32,32,2048,{"jp":[2499080],"us":[2506888],"eu":[2375688],"sh":[2352456]}], -"textures/intro_raw/sparkle_5.rgba16.png": [32,32,2048,{"jp":[2501128],"us":[2508936],"eu":[2377736],"sh":[2354504]}], -"textures/intro_raw/white_star_0.rgba16.png": [32,32,2048,{"jp":[2473736],"us":[2481544],"eu":[2350344],"sh":[2327112]}], -"textures/intro_raw/white_star_1.rgba16.png": [32,32,2048,{"jp":[2475784],"us":[2483592],"eu":[2352392],"sh":[2329160]}], -"textures/intro_raw/white_star_2.rgba16.png": [32,32,2048,{"jp":[2477832],"us":[2485640],"eu":[2354440],"sh":[2331208]}], -"textures/intro_raw/white_star_3.rgba16.png": [32,32,2048,{"jp":[2479880],"us":[2487688],"eu":[2356488],"sh":[2333256]}], -"textures/intro_raw/white_star_4.rgba16.png": [32,32,2048,{"jp":[2481928],"us":[2489736],"eu":[2358536],"sh":[2335304]}], -"textures/intro_raw/white_star_5.rgba16.png": [32,32,2048,{"jp":[2483976],"us":[2491784],"eu":[2360584],"sh":[2337352]}], -"textures/intro_raw/white_star_6.rgba16.png": [32,32,2048,{"jp":[2486024],"us":[2493832],"eu":[2362632],"sh":[2339400]}], -"textures/intro_raw/white_star_7.rgba16.png": [32,32,2048,{"jp":[2488072],"us":[2495880],"eu":[2364680],"sh":[2341448]}], -"textures/machine/ttc_textures.00000.rgba16.png": [32,32,2048,{"jp":[3460352,0],"us":[3467104,0],"eu":[3340704,0],"sh":[3315072,0]}], -"textures/machine/ttc_textures.00800.rgba16.png": [32,32,2048,{"jp":[3460352,2048],"us":[3467104,2048],"eu":[3340704,2048],"sh":[3315072,2048]}], -"textures/machine/ttc_textures.01000.rgba16.png": [32,32,2048,{"jp":[3460352,4096],"us":[3467104,4096],"eu":[3340704,4096],"sh":[3315072,4096]}], -"textures/machine/ttc_textures.01800.rgba16.png": [32,32,2048,{"jp":[3460352,6144],"us":[3467104,6144],"eu":[3340704,6144],"sh":[3315072,6144]}], -"textures/machine/ttc_textures.02000.rgba16.png": [32,32,2048,{"jp":[3460352,8192],"us":[3467104,8192],"eu":[3340704,8192],"sh":[3315072,8192]}], -"textures/machine/ttc_textures.02800.rgba16.png": [32,32,2048,{"jp":[3460352,10240],"us":[3467104,10240],"eu":[3340704,10240],"sh":[3315072,10240]}], -"textures/machine/ttc_textures.03000.rgba16.png": [32,32,2048,{"jp":[3460352,12288],"us":[3467104,12288],"eu":[3340704,12288],"sh":[3315072,12288]}], -"textures/machine/ttc_textures.03800.rgba16.png": [32,32,2048,{"jp":[3460352,14336],"us":[3467104,14336],"eu":[3340704,14336],"sh":[3315072,14336]}], -"textures/machine/ttc_textures.04000.rgba16.png": [32,64,4096,{"jp":[3460352,16384],"us":[3467104,16384],"eu":[3340704,16384],"sh":[3315072,16384]}], -"textures/machine/ttc_textures.05000.rgba16.png": [32,32,2048,{"jp":[3460352,20480],"us":[3467104,20480],"eu":[3340704,20480],"sh":[3315072,20480]}], -"textures/machine/ttc_textures.05800.rgba16.png": [32,32,2048,{"jp":[3460352,22528],"us":[3467104,22528],"eu":[3340704,22528],"sh":[3315072,22528]}], -"textures/machine/ttc_textures.06000.rgba16.png": [32,32,2048,{"jp":[3460352,24576],"us":[3467104,24576],"eu":[3340704,24576],"sh":[3315072,24576]}], -"textures/machine/ttc_textures.06800.rgba16.png": [32,32,2048,{"jp":[3460352,26624],"us":[3467104,26624],"eu":[3340704,26624],"sh":[3315072,26624]}], -"textures/machine/ttc_textures.07000.rgba16.png": [32,32,2048,{"jp":[3460352,28672],"us":[3467104,28672],"eu":[3340704,28672],"sh":[3315072,28672]}], -"textures/machine/ttc_textures.07800.rgba16.png": [16,64,2048,{"jp":[3460352,30720],"us":[3467104,30720],"eu":[3340704,30720],"sh":[3315072,30720]}], -"textures/machine/ttc_textures.08000.rgba16.png": [64,8,1024,{"jp":[3460352,32768],"us":[3467104,32768],"eu":[3340704,32768],"sh":[3315072,32768]}], -"textures/machine/ttc_textures.08400.rgba16.png": [32,32,2048,{"jp":[3460352,33792],"us":[3467104,33792],"eu":[3340704,33792],"sh":[3315072,33792]}], -"textures/mountain/ttm_textures.00000.rgba16.png": [32,32,2048,{"jp":[3473152,0],"us":[3479904,0],"eu":[3353504,0],"sh":[3327872,0]}], -"textures/mountain/ttm_textures.00800.rgba16.png": [64,32,4096,{"jp":[3473152,2048],"us":[3479904,2048],"eu":[3353504,2048],"sh":[3327872,2048]}], -"textures/mountain/ttm_textures.01800.rgba16.png": [32,64,4096,{"jp":[3473152,6144],"us":[3479904,6144],"eu":[3353504,6144],"sh":[3327872,6144]}], -"textures/mountain/ttm_textures.02800.rgba16.png": [32,32,2048,{"jp":[3473152,10240],"us":[3479904,10240],"eu":[3353504,10240],"sh":[3327872,10240]}], -"textures/mountain/ttm_textures.03000.rgba16.png": [32,32,2048,{"jp":[3473152,12288],"us":[3479904,12288],"eu":[3353504,12288],"sh":[3327872,12288]}], -"textures/mountain/ttm_textures.03800.rgba16.png": [32,32,2048,{"jp":[3473152,14336],"us":[3479904,14336],"eu":[3353504,14336],"sh":[3327872,14336]}], -"textures/mountain/ttm_textures.04000.rgba16.png": [32,32,2048,{"jp":[3473152,16384],"us":[3479904,16384],"eu":[3353504,16384],"sh":[3327872,16384]}], -"textures/mountain/ttm_textures.04800.rgba16.png": [32,32,2048,{"jp":[3473152,18432],"us":[3479904,18432],"eu":[3353504,18432],"sh":[3327872,18432]}], -"textures/mountain/ttm_textures.05000.rgba16.png": [32,32,2048,{"jp":[3473152,20480],"us":[3479904,20480],"eu":[3353504,20480],"sh":[3327872,20480]}], -"textures/mountain/ttm_textures.05800.rgba16.png": [32,64,4096,{"jp":[3473152,22528],"us":[3479904,22528],"eu":[3353504,22528],"sh":[3327872,22528]}], -"textures/mountain/ttm_textures.06800.rgba16.png": [32,32,2048,{"jp":[3473152,26624],"us":[3479904,26624],"eu":[3353504,26624],"sh":[3327872,26624]}], -"textures/mountain/ttm_textures.07000.rgba16.png": [32,32,2048,{"jp":[3473152,28672],"us":[3479904,28672],"eu":[3353504,28672],"sh":[3327872,28672]}], -"textures/mountain/ttm_textures.07800.rgba16.png": [32,32,2048,{"jp":[3473152,30720],"us":[3479904,30720],"eu":[3353504,30720],"sh":[3327872,30720]}], -"textures/mountain/ttm_textures.08000.rgba16.png": [32,32,2048,{"jp":[3473152,32768],"us":[3479904,32768],"eu":[3353504,32768],"sh":[3327872,32768]}], -"textures/mountain/ttm_textures.08800.rgba16.png": [64,32,4096,{"jp":[3473152,34816],"us":[3479904,34816],"eu":[3353504,34816],"sh":[3327872,34816]}], -"textures/mountain/ttm_textures.09800.rgba16.png": [32,32,2048,{"jp":[3473152,38912],"us":[3479904,38912],"eu":[3353504,38912],"sh":[3327872,38912]}], -"textures/mountain/ttm_textures.0A000.rgba16.png": [32,32,2048,{"jp":[3390640,24576],"us":[3397392,24576],"eu":[3270992,24576],"sh":[3245360,24576]}], -"textures/mountain/ttm_textures.0A800.rgba16.png": [32,32,2048,{"jp":[3473152,43008],"us":[3479904,43008],"eu":[3353504,43008],"sh":[3327872,43008]}], -"textures/mountain/ttm_textures.0B000.rgba16.png": [32,32,2048,{"jp":[3473152,45056],"us":[3479904,45056],"eu":[3353504,45056],"sh":[3327872,45056]}], -"textures/mountain/ttm_textures.0B800.rgba16.png": [32,32,2048,{"jp":[3473152,47104],"us":[3479904,47104],"eu":[3353504,47104],"sh":[3327872,47104]}], -"textures/mountain/ttm_textures.0C000.rgba16.png": [32,32,2048,{"jp":[3473152,49152],"us":[3479904,49152],"eu":[3353504,49152],"sh":[3327872,49152]}], -"textures/outside/castle_grounds_textures.00000.rgba16.png": [32,32,2048,{"jp":[3527344,0],"us":[3534096,0],"eu":[3407696,0],"sh":[3382064,0]}], -"textures/outside/castle_grounds_textures.00800.rgba16.png": [32,32,2048,{"jp":[3527344,2048],"us":[3534096,2048],"eu":[3407696,2048],"sh":[3382064,2048]}], -"textures/outside/castle_grounds_textures.01000.rgba16.png": [64,32,4096,{"jp":[3527344,4096],"us":[3534096,4096],"eu":[3407696,4096],"sh":[3382064,4096]}], -"textures/outside/castle_grounds_textures.02000.rgba16.png": [32,64,4096,{"jp":[3527344,8192],"us":[3534096,8192],"eu":[3407696,8192],"sh":[3382064,8192]}], -"textures/outside/castle_grounds_textures.03000.rgba16.png": [32,32,2048,{"jp":[3527344,12288],"us":[3534096,12288],"eu":[3407696,12288],"sh":[3382064,12288]}], -"textures/outside/castle_grounds_textures.03800.rgba16.png": [32,32,2048,{"jp":[3527344,14336],"us":[3534096,14336],"eu":[3407696,14336],"sh":[3382064,14336]}], -"textures/outside/castle_grounds_textures.04000.rgba16.png": [32,32,2048,{"jp":[3527344,16384],"us":[3534096,16384],"eu":[3407696,16384],"sh":[3382064,16384]}], -"textures/outside/castle_grounds_textures.04800.rgba16.png": [32,64,4096,{"jp":[3527344,18432],"us":[3534096,18432],"eu":[3407696,18432],"sh":[3382064,18432]}], -"textures/outside/castle_grounds_textures.05800.rgba16.png": [32,32,2048,{"jp":[3527344,22528],"us":[3534096,22528],"eu":[3407696,22528],"sh":[3382064,22528]}], -"textures/outside/castle_grounds_textures.06000.rgba16.png": [32,32,2048,{"jp":[3527344,24576],"us":[3534096,24576],"eu":[3407696,24576],"sh":[3382064,24576]}], -"textures/outside/castle_grounds_textures.06800.rgba16.png": [64,32,4096,{"jp":[3527344,26624],"us":[3534096,26624],"eu":[3407696,26624],"sh":[3382064,26624]}], -"textures/outside/castle_grounds_textures.07800.rgba16.png": [32,32,2048,{"jp":[3527344,30720],"us":[3534096,30720],"eu":[3407696,30720],"sh":[3382064,30720]}], -"textures/outside/castle_grounds_textures.08000.rgba16.png": [32,32,2048,{"jp":[3527344,32768],"us":[3534096,32768],"eu":[3407696,32768],"sh":[3382064,32768]}], -"textures/outside/castle_grounds_textures.08800.rgba16.png": [32,32,2048,{"jp":[3527344,34816],"us":[3534096,34816],"eu":[3407696,34816],"sh":[3382064,34816]}], -"textures/outside/castle_grounds_textures.09000.rgba16.png": [32,32,2048,{"jp":[3527344,36864],"us":[3534096,36864],"eu":[3407696,36864],"sh":[3382064,36864]}], -"textures/outside/castle_grounds_textures.09800.rgba16.png": [32,32,2048,{"jp":[3527344,38912],"us":[3534096,38912],"eu":[3407696,38912],"sh":[3382064,38912]}], -"textures/outside/castle_grounds_textures.0A000.rgba16.png": [32,32,2048,{"jp":[3527344,40960],"us":[3534096,40960],"eu":[3407696,40960],"sh":[3382064,40960]}], -"textures/outside/castle_grounds_textures.0A800.rgba16.png": [32,32,2048,{"jp":[3527344,43008],"us":[3534096,43008],"eu":[3407696,43008],"sh":[3382064,43008]}], -"textures/outside/castle_grounds_textures.0B000.rgba16.png": [16,32,1024,{"jp":[3527344,45056],"us":[3534096,45056],"eu":[3407696,45056],"sh":[3382064,45056]}], -"textures/outside/castle_grounds_textures.0B400.rgba16.png": [32,32,2048,{"jp":[3527344,46080],"us":[3534096,46080],"eu":[3407696,46080],"sh":[3382064,46080]}], -"textures/outside/castle_grounds_textures.0BC00.ia16.png": [32,32,2048,{"jp":[3323408,45056],"us":[3330160,45056],"eu":[3203760,45056],"sh":[3178128,45056]}], -"textures/segment2/font_graphics.05900.ia4.png": [16,8,64,{"us":[1083968,22784]}], -"textures/segment2/font_graphics.05940.ia4.png": [16,8,64,{"us":[1083968,22848]}], -"textures/segment2/font_graphics.05980.ia4.png": [16,8,64,{"us":[1083968,22912]}], -"textures/segment2/font_graphics.059C0.ia4.png": [16,8,64,{"us":[1083968,22976]}], -"textures/segment2/font_graphics.05A00.ia4.png": [16,8,64,{"us":[1083968,23040]}], -"textures/segment2/font_graphics.05A40.ia4.png": [16,8,64,{"us":[1083968,23104]}], -"textures/segment2/font_graphics.05A80.ia4.png": [16,8,64,{"us":[1083968,23168]}], -"textures/segment2/font_graphics.05AC0.ia4.png": [16,8,64,{"us":[1083968,23232]}], -"textures/segment2/font_graphics.05B00.ia4.png": [16,8,64,{"us":[1083968,23296]}], -"textures/segment2/font_graphics.05B40.ia4.png": [16,8,64,{"us":[1083968,23360]}], -"textures/segment2/font_graphics.05B80.ia4.png": [16,8,64,{"us":[1083968,23424]}], -"textures/segment2/font_graphics.05BC0.ia4.png": [16,8,64,{"us":[1083968,23488]}], -"textures/segment2/font_graphics.05C00.ia4.png": [16,8,64,{"us":[1083968,23552]}], -"textures/segment2/font_graphics.05C40.ia4.png": [16,8,64,{"us":[1083968,23616]}], -"textures/segment2/font_graphics.05C80.ia4.png": [16,8,64,{"us":[1083968,23680]}], -"textures/segment2/font_graphics.05CC0.ia4.png": [16,8,64,{"us":[1083968,23744]}], -"textures/segment2/font_graphics.05D00.ia4.png": [16,8,64,{"us":[1083968,23808]}], -"textures/segment2/font_graphics.05D40.ia4.png": [16,8,64,{"us":[1083968,23872]}], -"textures/segment2/font_graphics.05D80.ia4.png": [16,8,64,{"us":[1083968,23936]}], -"textures/segment2/font_graphics.05DC0.ia4.png": [16,8,64,{"us":[1083968,24000]}], -"textures/segment2/font_graphics.05E00.ia4.png": [16,8,64,{"us":[1083968,24064]}], -"textures/segment2/font_graphics.05E40.ia4.png": [16,8,64,{"us":[1083968,24128]}], -"textures/segment2/font_graphics.05E80.ia4.png": [16,8,64,{"us":[1083968,24192]}], -"textures/segment2/font_graphics.05EC0.ia4.png": [16,8,64,{"us":[1083968,24256]}], +"textures/cave/hmc_textures.00000.rgba16.png": [32,64,4096,{"jp":[3432432,0],"us":[3439184,0],"eu":[3312784,0],"sh":[3287152,0],"cn":[3360912,0]}], +"textures/cave/hmc_textures.01000.rgba16.png": [32,32,2048,{"jp":[3432432,4096],"us":[3439184,4096],"eu":[3312784,4096],"sh":[3287152,4096],"cn":[3360912,4096]}], +"textures/cave/hmc_textures.01800.rgba16.png": [32,64,4096,{"jp":[3432432,6144],"us":[3439184,6144],"eu":[3312784,6144],"sh":[3287152,6144],"cn":[3360912,6144]}], +"textures/cave/hmc_textures.02800.rgba16.png": [32,32,2048,{"jp":[3432432,10240],"us":[3439184,10240],"eu":[3312784,10240],"sh":[3287152,10240],"cn":[3360912,10240]}], +"textures/cave/hmc_textures.03000.rgba16.png": [32,32,2048,{"jp":[3432432,12288],"us":[3439184,12288],"eu":[3312784,12288],"sh":[3287152,12288],"cn":[3360912,12288]}], +"textures/cave/hmc_textures.03800.rgba16.png": [32,64,4096,{"jp":[3432432,14336],"us":[3439184,14336],"eu":[3312784,14336],"sh":[3287152,14336],"cn":[3360912,14336]}], +"textures/cave/hmc_textures.04800.rgba16.png": [64,32,4096,{"jp":[3432432,18432],"us":[3439184,18432],"eu":[3312784,18432],"sh":[3287152,18432],"cn":[3360912,18432]}], +"textures/cave/hmc_textures.05800.rgba16.png": [32,64,4096,{"jp":[3432432,22528],"us":[3439184,22528],"eu":[3312784,22528],"sh":[3287152,22528],"cn":[3360912,22528]}], +"textures/cave/hmc_textures.06800.rgba16.png": [32,32,2048,{"jp":[3432432,26624],"us":[3439184,26624],"eu":[3312784,26624],"sh":[3287152,26624],"cn":[3360912,26624]}], +"textures/cave/hmc_textures.07000.rgba16.png": [32,32,2048,{"jp":[3432432,28672],"us":[3439184,28672],"eu":[3312784,28672],"sh":[3287152,28672],"cn":[3360912,28672]}], +"textures/cave/hmc_textures.07800.rgba16.png": [32,64,4096,{"jp":[3432432,30720],"us":[3439184,30720],"eu":[3312784,30720],"sh":[3287152,30720],"cn":[3360912,30720]}], +"textures/cave/hmc_textures.08800.rgba16.png": [32,64,4096,{"jp":[3432432,34816],"us":[3439184,34816],"eu":[3312784,34816],"sh":[3287152,34816],"cn":[3360912,34816]}], +"textures/cave/hmc_textures.09800.rgba16.png": [32,32,2048,{"jp":[3432432,38912],"us":[3439184,38912],"eu":[3312784,38912],"sh":[3287152,38912],"cn":[3360912,38912]}], +"textures/cave/hmc_textures.0A000.rgba16.png": [32,32,2048,{"jp":[3432432,40960],"us":[3439184,40960],"eu":[3312784,40960],"sh":[3287152,40960],"cn":[3360912,40960]}], +"textures/cave/hmc_textures.0A800.rgba16.png": [32,64,4096,{"jp":[3432432,43008],"us":[3439184,43008],"eu":[3312784,43008],"sh":[3287152,43008],"cn":[3360912,43008]}], +"textures/cave/hmc_textures.0B800.ia16.png": [32,32,2048,{"jp":[3432432,47104],"us":[3439184,47104],"eu":[3312784,47104],"sh":[3287152,47104],"cn":[3360912,47104]}], +"textures/cave/hmc_textures.0C000.ia16.png": [32,32,2048,{"jp":[3298272,43008],"us":[3305024,43008],"eu":[3178624,43008],"sh":[3152992,43008],"cn":[3226752,43008]}], +"textures/skyboxes/bbh.png": [84288,{"jp":[3118928,0],"us":[3125680,0],"eu":[2999280,0],"sh":[2973648,0],"cn":[3047408,0]}], +"textures/skyboxes/bidw.png": [131392,{"jp":[3146352,0],"us":[3153104,0],"eu":[3026704,0],"sh":[3001072,0],"cn":[3074832,0]}], +"textures/skyboxes/bitfs.png": [102720,{"jp":[2942432,0],"us":[2949184,0],"eu":[2822784,0],"sh":[2797152,0],"cn":[2870912,0]}], +"textures/skyboxes/bits.png": [131392,{"jp":[3191904,0],"us":[3198656,0],"eu":[3072256,0],"sh":[3046624,0],"cn":[3120384,0]}], +"textures/skyboxes/ccm.png": [131392,{"jp":[2847920,0],"us":[2854672,0],"eu":[2728272,0],"sh":[2702640,0],"cn":[2776400,0]}], +"textures/skyboxes/cloud_floor.png": [131392,{"jp":[3038752,0],"us":[3045504,0],"eu":[2919104,0],"sh":[2893472,0],"cn":[2967232,0]}], +"textures/skyboxes/clouds.png": [84288,{"jp":[2906480,0],"us":[2913232,0],"eu":[2786832,0],"sh":[2761200,0],"cn":[2834960,0]}], +"textures/skyboxes/ssl.png": [131392,{"jp":[3078784,0],"us":[3085536,0],"eu":[2959136,0],"sh":[2933504,0],"cn":[3007264,0]}], +"textures/skyboxes/water.png": [131392,{"jp":[2796624,0],"us":[2803376,0],"eu":[2676976,0],"sh":[2651344,0],"cn":[2725104,0]}], +"textures/skyboxes/wdw.png": [131392,{"jp":[2968208,0],"us":[2974960,0],"eu":[2848560,0],"sh":[2822928,0],"cn":[2896688,0]}], +"textures/effect/bubble.06048.rgba16.png": [32,32,2048,{"jp":[3594960,24648],"us":[3601712,24648],"eu":[3475312,24648],"sh":[3449680,24648],"cn":[3523440,24648]}], +"textures/effect/flower.00008.rgba16.png": [32,32,2048,{"jp":[3594960,8],"us":[3601712,8],"eu":[3475312,8],"sh":[3449680,8],"cn":[3523440,8]}], +"textures/effect/flower.00808.rgba16.png": [32,32,2048,{"jp":[3594960,2056],"us":[3601712,2056],"eu":[3475312,2056],"sh":[3449680,2056],"cn":[3523440,2056]}], +"textures/effect/flower.01008.rgba16.png": [32,32,2048,{"jp":[3594960,4104],"us":[3601712,4104],"eu":[3475312,4104],"sh":[3449680,4104],"cn":[3523440,4104]}], +"textures/effect/flower.01808.rgba16.png": [32,32,2048,{"jp":[3594960,6152],"us":[3601712,6152],"eu":[3475312,6152],"sh":[3449680,6152],"cn":[3523440,6152]}], +"textures/effect/lava_bubble.02020.rgba16.png": [32,32,2048,{"jp":[3594960,8224],"us":[3601712,8224],"eu":[3475312,8224],"sh":[3449680,8224],"cn":[3523440,8224]}], +"textures/effect/lava_bubble.02820.rgba16.png": [32,32,2048,{"jp":[3594960,10272],"us":[3601712,10272],"eu":[3475312,10272],"sh":[3449680,10272],"cn":[3523440,10272]}], +"textures/effect/lava_bubble.03020.rgba16.png": [32,32,2048,{"jp":[3594960,12320],"us":[3601712,12320],"eu":[3475312,12320],"sh":[3449680,12320],"cn":[3523440,12320]}], +"textures/effect/lava_bubble.03820.rgba16.png": [32,32,2048,{"jp":[3594960,14368],"us":[3601712,14368],"eu":[3475312,14368],"sh":[3449680,14368],"cn":[3523440,14368]}], +"textures/effect/lava_bubble.04020.rgba16.png": [32,32,2048,{"jp":[3594960,16416],"us":[3601712,16416],"eu":[3475312,16416],"sh":[3449680,16416],"cn":[3523440,16416]}], +"textures/effect/lava_bubble.04820.rgba16.png": [32,32,2048,{"jp":[3594960,18464],"us":[3601712,18464],"eu":[3475312,18464],"sh":[3449680,18464],"cn":[3523440,18464]}], +"textures/effect/lava_bubble.05020.rgba16.png": [32,32,2048,{"jp":[3594960,20512],"us":[3601712,20512],"eu":[3475312,20512],"sh":[3449680,20512],"cn":[3523440,20512]}], +"textures/effect/lava_bubble.05820.rgba16.png": [32,32,2048,{"jp":[3594960,22560],"us":[3601712,22560],"eu":[3475312,22560],"sh":[3449680,22560],"cn":[3523440,22560]}], +"textures/effect/tiny_bubble.0684C.rgba16.png": [16,16,512,{"jp":[3594960,26700],"us":[3601712,26700],"eu":[3475312,26700],"sh":[3449680,26700],"cn":[3523440,26700]}], +"textures/effect/tiny_bubble.06AD8.rgba16.png": [16,16,512,{"jp":[3594960,27352],"us":[3601712,27352],"eu":[3475312,27352],"sh":[3449680,27352],"cn":[3523440,27352]}], +"textures/fire/lll_textures.00000.rgba16.png": [32,32,2048,{"jp":[3262320,0],"us":[3269072,0],"eu":[3142672,0],"sh":[3117040,0],"cn":[3190800,0]}], +"textures/fire/lll_textures.00800.rgba16.png": [32,32,2048,{"jp":[3262320,2048],"us":[3269072,2048],"eu":[3142672,2048],"sh":[3117040,2048],"cn":[3190800,2048]}], +"textures/fire/lll_textures.01000.rgba16.png": [32,32,2048,{"jp":[3262320,4096],"us":[3269072,4096],"eu":[3142672,4096],"sh":[3117040,4096],"cn":[3190800,4096]}], +"textures/fire/lll_textures.01800.rgba16.png": [32,32,2048,{"jp":[3262320,6144],"us":[3269072,6144],"eu":[3142672,6144],"sh":[3117040,6144],"cn":[3190800,6144]}], +"textures/fire/lll_textures.02000.rgba16.png": [32,32,2048,{"jp":[3262320,8192],"us":[3269072,8192],"eu":[3142672,8192],"sh":[3117040,8192],"cn":[3190800,8192]}], +"textures/fire/lll_textures.02800.rgba16.png": [32,32,2048,{"jp":[3262320,10240],"us":[3269072,10240],"eu":[3142672,10240],"sh":[3117040,10240],"cn":[3190800,10240]}], +"textures/fire/lll_textures.03000.rgba16.png": [32,32,2048,{"jp":[3262320,12288],"us":[3269072,12288],"eu":[3142672,12288],"sh":[3117040,12288],"cn":[3190800,12288]}], +"textures/fire/lll_textures.03800.rgba16.png": [32,32,2048,{"jp":[3262320,14336],"us":[3269072,14336],"eu":[3142672,14336],"sh":[3117040,14336],"cn":[3190800,14336]}], +"textures/fire/lll_textures.04000.rgba16.png": [32,32,2048,{"jp":[3262320,16384],"us":[3269072,16384],"eu":[3142672,16384],"sh":[3117040,16384],"cn":[3190800,16384]}], +"textures/fire/lll_textures.04800.rgba16.png": [32,32,2048,{"jp":[3262320,18432],"us":[3269072,18432],"eu":[3142672,18432],"sh":[3117040,18432],"cn":[3190800,18432]}], +"textures/fire/lll_textures.05000.rgba16.png": [32,32,2048,{"jp":[3262320,20480],"us":[3269072,20480],"eu":[3142672,20480],"sh":[3117040,20480],"cn":[3190800,20480]}], +"textures/fire/lll_textures.05800.rgba16.png": [32,32,2048,{"jp":[3262320,22528],"us":[3269072,22528],"eu":[3142672,22528],"sh":[3117040,22528],"cn":[3190800,22528]}], +"textures/fire/lll_textures.06000.rgba16.png": [32,32,2048,{"jp":[3262320,24576],"us":[3269072,24576],"eu":[3142672,24576],"sh":[3117040,24576],"cn":[3190800,24576]}], +"textures/fire/lll_textures.06800.rgba16.png": [32,32,2048,{"jp":[3262320,26624],"us":[3269072,26624],"eu":[3142672,26624],"sh":[3117040,26624],"cn":[3190800,26624]}], +"textures/fire/lll_textures.07000.rgba16.png": [32,32,2048,{"jp":[3262320,28672],"us":[3269072,28672],"eu":[3142672,28672],"sh":[3117040,28672],"cn":[3190800,28672]}], +"textures/fire/lll_textures.07800.rgba16.png": [32,32,2048,{"jp":[3262320,30720],"us":[3269072,30720],"eu":[3142672,30720],"sh":[3117040,30720],"cn":[3190800,30720]}], +"textures/fire/lll_textures.08000.rgba16.png": [32,32,2048,{"jp":[3262320,32768],"us":[3269072,32768],"eu":[3142672,32768],"sh":[3117040,32768],"cn":[3190800,32768]}], +"textures/fire/lll_textures.08800.rgba16.png": [32,32,2048,{"jp":[3262320,34816],"us":[3269072,34816],"eu":[3142672,34816],"sh":[3117040,34816],"cn":[3190800,34816]}], +"textures/fire/lll_textures.09000.rgba16.png": [32,32,2048,{"jp":[1078992,80984],"us":[1083968,92856],"eu":[909712,49528],"sh":[934640,80984],"cn":[947456,193320]}], +"textures/fire/lll_textures.09800.rgba16.png": [32,32,2048,{"jp":[3262320,38912],"us":[3269072,38912],"eu":[3142672,38912],"sh":[3117040,38912],"cn":[3190800,38912]}], +"textures/fire/lll_textures.0A000.rgba16.png": [32,32,2048,{"jp":[3262320,40960],"us":[3269072,40960],"eu":[3142672,40960],"sh":[3117040,40960],"cn":[3190800,40960]}], +"textures/fire/lll_textures.0A800.rgba16.png": [32,32,2048,{"jp":[3262320,43008],"us":[3269072,43008],"eu":[3142672,43008],"sh":[3117040,43008],"cn":[3190800,43008]}], +"textures/fire/lll_textures.0B000.rgba16.png": [32,32,2048,{"jp":[3262320,45056],"us":[3269072,45056],"eu":[3142672,45056],"sh":[3117040,45056],"cn":[3190800,45056]}], +"textures/fire/lll_textures.0B800.rgba16.png": [32,32,2048,{"jp":[3262320,47104],"us":[3269072,47104],"eu":[3142672,47104],"sh":[3117040,47104],"cn":[3190800,47104]}], +"textures/generic/bob_textures.00000.rgba16.png": [32,32,2048,{"jp":[3323408,0],"us":[3330160,0],"eu":[3203760,0],"sh":[3178128,0],"cn":[3251888,0]}], +"textures/generic/bob_textures.00800.rgba16.png": [32,32,2048,{"jp":[1327760,36160],"us":[1334928,36160],"eu":[1206896,36160],"sh":[1183408,36160],"cn":[1250240,36160]}], +"textures/generic/bob_textures.01000.rgba16.png": [32,32,2048,{"jp":[3323408,4096],"us":[3330160,4096],"eu":[3203760,4096],"sh":[3178128,4096],"cn":[3251888,4096]}], +"textures/generic/bob_textures.01800.rgba16.png": [32,32,2048,{"jp":[3323408,6144],"us":[3330160,6144],"eu":[3203760,6144],"sh":[3178128,6144],"cn":[3251888,6144]}], +"textures/generic/bob_textures.02000.rgba16.png": [32,32,2048,{"jp":[3323408,8192],"us":[3330160,8192],"eu":[3203760,8192],"sh":[3178128,8192],"cn":[3251888,8192]}], +"textures/generic/bob_textures.02800.rgba16.png": [32,32,2048,{"jp":[3323408,10240],"us":[3330160,10240],"eu":[3203760,10240],"sh":[3178128,10240],"cn":[3251888,10240]}], +"textures/generic/bob_textures.03000.rgba16.png": [32,32,2048,{"jp":[3323408,12288],"us":[3330160,12288],"eu":[3203760,12288],"sh":[3178128,12288],"cn":[3251888,12288]}], +"textures/generic/bob_textures.03800.rgba16.png": [32,32,2048,{"jp":[3323408,14336],"us":[3330160,14336],"eu":[3203760,14336],"sh":[3178128,14336],"cn":[3251888,14336]}], +"textures/generic/bob_textures.04000.rgba16.png": [32,32,2048,{"jp":[3323408,16384],"us":[3330160,16384],"eu":[3203760,16384],"sh":[3178128,16384],"cn":[3251888,16384]}], +"textures/generic/bob_textures.04800.rgba16.png": [32,32,2048,{"jp":[3323408,18432],"us":[3330160,18432],"eu":[3203760,18432],"sh":[3178128,18432],"cn":[3251888,18432]}], +"textures/generic/bob_textures.05000.rgba16.png": [32,32,2048,{"jp":[3323408,20480],"us":[3330160,20480],"eu":[3203760,20480],"sh":[3178128,20480],"cn":[3251888,20480]}], +"textures/generic/bob_textures.05800.rgba16.png": [32,32,2048,{"jp":[3323408,22528],"us":[3330160,22528],"eu":[3203760,22528],"sh":[3178128,22528],"cn":[3251888,22528]}], +"textures/generic/bob_textures.06000.rgba16.png": [32,64,4096,{"jp":[3323408,24576],"us":[3330160,24576],"eu":[3203760,24576],"sh":[3178128,24576],"cn":[3251888,24576]}], +"textures/generic/bob_textures.07000.rgba16.png": [32,32,2048,{"jp":[3323408,28672],"us":[3330160,28672],"eu":[3203760,28672],"sh":[3178128,28672],"cn":[3251888,28672]}], +"textures/generic/bob_textures.07800.rgba16.png": [32,32,2048,{"jp":[3323408,30720],"us":[3330160,30720],"eu":[3203760,30720],"sh":[3178128,30720],"cn":[3251888,30720]}], +"textures/generic/bob_textures.08000.rgba16.png": [32,32,2048,{"jp":[3323408,32768],"us":[3330160,32768],"eu":[3203760,32768],"sh":[3178128,32768],"cn":[3251888,32768]}], +"textures/generic/bob_textures.08800.rgba16.png": [32,32,2048,{"jp":[3323408,34816],"us":[3330160,34816],"eu":[3203760,34816],"sh":[3178128,34816],"cn":[3251888,34816]}], +"textures/generic/bob_textures.09000.rgba16.png": [32,32,2048,{"jp":[3323408,36864],"us":[3330160,36864],"eu":[3203760,36864],"sh":[3178128,36864],"cn":[3251888,36864]}], +"textures/generic/bob_textures.09800.rgba16.png": [32,32,2048,{"jp":[3323408,38912],"us":[3330160,38912],"eu":[3203760,38912],"sh":[3178128,38912],"cn":[3251888,38912]}], +"textures/generic/bob_textures.0A000.rgba16.png": [32,32,2048,{"jp":[3323408,40960],"us":[3330160,40960],"eu":[3203760,40960],"sh":[3178128,40960],"cn":[3251888,40960]}], +"textures/generic/bob_textures.0A800.rgba16.png": [32,32,2048,{"jp":[3323408,43008],"us":[3330160,43008],"eu":[3203760,43008],"sh":[3178128,43008],"cn":[3251888,43008]}], +"textures/generic/bob_textures.0B000.ia16.png": [32,32,2048,{"jp":[3323408,45056],"us":[3330160,45056],"eu":[3203760,45056],"sh":[3178128,45056],"cn":[3251888,45056]}], +"textures/grass/wf_textures.00000.rgba16.png": [32,32,2048,{"jp":[3496176,0],"us":[3502928,0],"eu":[3376528,0],"sh":[3350896,0],"cn":[3424656,0]}], +"textures/grass/wf_textures.00800.rgba16.png": [32,32,2048,{"jp":[3496176,2048],"us":[3502928,2048],"eu":[3376528,2048],"sh":[3350896,2048],"cn":[3424656,2048]}], +"textures/grass/wf_textures.01000.rgba16.png": [32,32,2048,{"jp":[3496176,4096],"us":[3502928,4096],"eu":[3376528,4096],"sh":[3350896,4096],"cn":[3424656,4096]}], +"textures/grass/wf_textures.01800.rgba16.png": [32,32,2048,{"jp":[3496176,6144],"us":[3502928,6144],"eu":[3376528,6144],"sh":[3350896,6144],"cn":[3424656,6144]}], +"textures/grass/wf_textures.02000.rgba16.png": [32,32,2048,{"jp":[3496176,8192],"us":[3502928,8192],"eu":[3376528,8192],"sh":[3350896,8192],"cn":[3424656,8192]}], +"textures/grass/wf_textures.02800.rgba16.png": [32,32,2048,{"jp":[3496176,10240],"us":[3502928,10240],"eu":[3376528,10240],"sh":[3350896,10240],"cn":[3424656,10240]}], +"textures/grass/wf_textures.03000.rgba16.png": [32,32,2048,{"jp":[3496176,12288],"us":[3502928,12288],"eu":[3376528,12288],"sh":[3350896,12288],"cn":[3424656,12288]}], +"textures/grass/wf_textures.03800.rgba16.png": [32,32,2048,{"jp":[3496176,14336],"us":[3502928,14336],"eu":[3376528,14336],"sh":[3350896,14336],"cn":[3424656,14336]}], +"textures/grass/wf_textures.04000.rgba16.png": [32,32,2048,{"jp":[3496176,16384],"us":[3502928,16384],"eu":[3376528,16384],"sh":[3350896,16384],"cn":[3424656,16384]}], +"textures/grass/wf_textures.04800.rgba16.png": [32,32,2048,{"jp":[3496176,18432],"us":[3502928,18432],"eu":[3376528,18432],"sh":[3350896,18432],"cn":[3424656,18432]}], +"textures/grass/wf_textures.05000.rgba16.png": [32,32,2048,{"jp":[3496176,20480],"us":[3502928,20480],"eu":[3376528,20480],"sh":[3350896,20480],"cn":[3424656,20480]}], +"textures/grass/wf_textures.05800.rgba16.png": [32,32,2048,{"jp":[3496176,22528],"us":[3502928,22528],"eu":[3376528,22528],"sh":[3350896,22528],"cn":[3424656,22528]}], +"textures/grass/wf_textures.06000.rgba16.png": [32,32,2048,{"jp":[3390640,20480],"us":[3397392,20480],"eu":[3270992,20480],"sh":[3245360,20480],"cn":[3319120,20480]}], +"textures/grass/wf_textures.06800.rgba16.png": [32,32,2048,{"jp":[3496176,26624],"us":[3502928,26624],"eu":[3376528,26624],"sh":[3350896,26624],"cn":[3424656,26624]}], +"textures/grass/wf_textures.07000.rgba16.png": [32,32,2048,{"jp":[3496176,28672],"us":[3502928,28672],"eu":[3376528,28672],"sh":[3350896,28672],"cn":[3424656,28672]}], +"textures/grass/wf_textures.07800.rgba16.png": [32,32,2048,{"jp":[3496176,30720],"us":[3502928,30720],"eu":[3376528,30720],"sh":[3350896,30720],"cn":[3424656,30720]}], +"textures/grass/wf_textures.08000.rgba16.png": [32,32,2048,{"jp":[3496176,32768],"us":[3502928,32768],"eu":[3376528,32768],"sh":[3350896,32768],"cn":[3424656,32768]}], +"textures/grass/wf_textures.08800.rgba16.png": [32,32,2048,{"jp":[3496176,34816],"us":[3502928,34816],"eu":[3376528,34816],"sh":[3350896,34816],"cn":[3424656,34816]}], +"textures/grass/wf_textures.09000.rgba16.png": [32,32,2048,{"jp":[3496176,36864],"us":[3502928,36864],"eu":[3376528,36864],"sh":[3350896,36864],"cn":[3424656,36864]}], +"textures/grass/wf_textures.09800.rgba16.png": [32,32,2048,{"jp":[3496176,38912],"us":[3502928,38912],"eu":[3376528,38912],"sh":[3350896,38912],"cn":[3424656,38912]}], +"textures/grass/wf_textures.0A000.rgba16.png": [32,32,2048,{"jp":[3496176,40960],"us":[3502928,40960],"eu":[3376528,40960],"sh":[3350896,40960],"cn":[3424656,40960]}], +"textures/grass/wf_textures.0A800.rgba16.png": [32,32,2048,{"jp":[3496176,43008],"us":[3502928,43008],"eu":[3376528,43008],"sh":[3350896,43008],"cn":[3424656,43008]}], +"textures/grass/wf_textures.0B000.ia16.png": [32,32,2048,{"jp":[3323408,45056],"us":[3330160,45056],"eu":[3203760,45056],"sh":[3178128,45056],"cn":[3251888,45056]}], +"textures/grass/wf_textures.0B800.ia16.png": [32,32,2048,{"jp":[3496176,47104],"us":[3502928,47104],"eu":[3376528,47104],"sh":[3350896,47104],"cn":[3424656,47104]}], +"textures/inside/inside_castle_textures.00000.rgba16.png": [64,32,4096,{"jp":[3555104,0],"us":[3561856,0],"eu":[3435456,0],"sh":[3409824,0],"cn":[3483584,0]}], +"textures/inside/inside_castle_textures.01000.rgba16.png": [64,32,4096,{"jp":[3555104,4096],"us":[3561856,4096],"eu":[3435456,4096],"sh":[3409824,4096],"cn":[3483584,4096]}], +"textures/inside/inside_castle_textures.02000.rgba16.png": [32,64,4096,{"jp":[3555104,8192],"us":[3561856,8192],"eu":[3435456,8192],"sh":[3409824,8192],"cn":[3483584,8192]}], +"textures/inside/inside_castle_textures.03000.rgba16.png": [32,32,2048,{"jp":[3555104,12288],"us":[3561856,12288],"eu":[3435456,12288],"sh":[3409824,12288],"cn":[3483584,12288]}], +"textures/inside/inside_castle_textures.03800.rgba16.png": [32,32,2048,{"jp":[3555104,14336],"us":[3561856,14336],"eu":[3435456,14336],"sh":[3409824,14336],"cn":[3483584,14336]}], +"textures/inside/inside_castle_textures.04000.rgba16.png": [32,32,2048,{"jp":[3555104,16384],"us":[3561856,16384],"eu":[3435456,16384],"sh":[3409824,16384],"cn":[3483584,16384]}], +"textures/inside/inside_castle_textures.04800.rgba16.png": [32,32,2048,{"jp":[3460352,2048],"us":[3467104,2048],"eu":[3340704,2048],"sh":[3315072,2048],"cn":[3388832,2048]}], +"textures/inside/inside_castle_textures.05000.rgba16.png": [32,32,2048,{"jp":[3555104,20480],"us":[3561856,20480],"eu":[3435456,20480],"sh":[3409824,20480],"cn":[3483584,20480]}], +"textures/inside/inside_castle_textures.05800.rgba16.png": [32,32,2048,{"jp":[3555104,22528],"us":[3561856,22528],"eu":[3435456,22528],"sh":[3409824,22528],"cn":[3483584,22528]}], +"textures/inside/inside_castle_textures.06000.rgba16.png": [32,64,4096,{"jp":[3555104,24576],"us":[3561856,24576],"eu":[3435456,24576],"sh":[3409824,24576],"cn":[3483584,24576]}], +"textures/inside/inside_castle_textures.07000.rgba16.png": [32,64,4096,{"jp":[3555104,28672],"us":[3561856,28672],"eu":[3435456,28672],"sh":[3409824,28672],"cn":[3483584,28672]}], +"textures/inside/inside_castle_textures.08000.rgba16.png": [32,32,2048,{"jp":[3555104,32768],"us":[3561856,32768],"eu":[3435456,32768],"sh":[3409824,32768],"cn":[3483584,32768]}], +"textures/inside/inside_castle_textures.08800.rgba16.png": [32,32,2048,{"jp":[3555104,34816],"us":[3561856,34816],"eu":[3435456,34816],"sh":[3409824,34816],"cn":[3483584,34816]}], +"textures/inside/inside_castle_textures.09000.rgba16.png": [32,64,4096,{"jp":[3555104,36864],"us":[3561856,36864],"eu":[3435456,36864],"sh":[3409824,36864],"cn":[3483584,36864]}], +"textures/inside/inside_castle_textures.0A000.rgba16.png": [32,64,4096,{"jp":[3555104,40960],"us":[3561856,40960],"eu":[3435456,40960],"sh":[3409824,40960],"cn":[3483584,40960]}], +"textures/inside/inside_castle_textures.0B000.rgba16.png": [32,32,2048,{"jp":[3555104,45056],"us":[3561856,45056],"eu":[3435456,45056],"sh":[3409824,45056],"cn":[3483584,45056]}], +"textures/inside/inside_castle_textures.0B800.rgba16.png": [64,32,4096,{"jp":[3555104,47104],"us":[3561856,47104],"eu":[3435456,47104],"sh":[3409824,47104],"cn":[3483584,47104]}], +"textures/intro_raw/hand_closed.rgba16.png": [32,32,2048,{"jp":[2455304],"us":[2463112],"eu":[2331912],"sh":[2308680],"cn":[2379416]}], +"textures/intro_raw/hand_open.rgba16.png": [32,32,2048,{"jp":[2453248],"us":[2461056],"eu":[2329856],"sh":[2306624],"cn":[2377360]}], +"textures/intro_raw/mario_face_shine.ia8.png": [32,32,1024,{"jp":[2503888],"us":[2511696],"eu":[2380496],"sh":[2357264],"cn":[2428000]}], +"textures/intro_raw/red_star_0.rgba16.png": [32,32,2048,{"jp":[2457352],"us":[2465160],"eu":[2333960],"sh":[2310728],"cn":[2381464]}], +"textures/intro_raw/red_star_1.rgba16.png": [32,32,2048,{"jp":[2459400],"us":[2467208],"eu":[2336008],"sh":[2312776],"cn":[2383512]}], +"textures/intro_raw/red_star_2.rgba16.png": [32,32,2048,{"jp":[2461448],"us":[2469256],"eu":[2338056],"sh":[2314824],"cn":[2385560]}], +"textures/intro_raw/red_star_3.rgba16.png": [32,32,2048,{"jp":[2463496],"us":[2471304],"eu":[2340104],"sh":[2316872],"cn":[2387608]}], +"textures/intro_raw/red_star_4.rgba16.png": [32,32,2048,{"jp":[2465544],"us":[2473352],"eu":[2342152],"sh":[2318920],"cn":[2389656]}], +"textures/intro_raw/red_star_5.rgba16.png": [32,32,2048,{"jp":[2467592],"us":[2475400],"eu":[2344200],"sh":[2320968],"cn":[2391704]}], +"textures/intro_raw/red_star_6.rgba16.png": [32,32,2048,{"jp":[2469640],"us":[2477448],"eu":[2346248],"sh":[2323016],"cn":[2393752]}], +"textures/intro_raw/red_star_7.rgba16.png": [32,32,2048,{"jp":[2471688],"us":[2479496],"eu":[2348296],"sh":[2325064],"cn":[2395800]}], +"textures/intro_raw/sparkle_0.rgba16.png": [32,32,2048,{"jp":[2490888],"us":[2498696],"eu":[2367496],"sh":[2344264],"cn":[2415000]}], +"textures/intro_raw/sparkle_1.rgba16.png": [32,32,2048,{"jp":[2492936],"us":[2500744],"eu":[2369544],"sh":[2346312],"cn":[2417048]}], +"textures/intro_raw/sparkle_2.rgba16.png": [32,32,2048,{"jp":[2494984],"us":[2502792],"eu":[2371592],"sh":[2348360],"cn":[2419096]}], +"textures/intro_raw/sparkle_3.rgba16.png": [32,32,2048,{"jp":[2497032],"us":[2504840],"eu":[2373640],"sh":[2350408],"cn":[2421144]}], +"textures/intro_raw/sparkle_4.rgba16.png": [32,32,2048,{"jp":[2499080],"us":[2506888],"eu":[2375688],"sh":[2352456],"cn":[2423192]}], +"textures/intro_raw/sparkle_5.rgba16.png": [32,32,2048,{"jp":[2501128],"us":[2508936],"eu":[2377736],"sh":[2354504],"cn":[2425240]}], +"textures/intro_raw/white_star_0.rgba16.png": [32,32,2048,{"jp":[2473736],"us":[2481544],"eu":[2350344],"sh":[2327112],"cn":[2397848]}], +"textures/intro_raw/white_star_1.rgba16.png": [32,32,2048,{"jp":[2475784],"us":[2483592],"eu":[2352392],"sh":[2329160],"cn":[2399896]}], +"textures/intro_raw/white_star_2.rgba16.png": [32,32,2048,{"jp":[2477832],"us":[2485640],"eu":[2354440],"sh":[2331208],"cn":[2401944]}], +"textures/intro_raw/white_star_3.rgba16.png": [32,32,2048,{"jp":[2479880],"us":[2487688],"eu":[2356488],"sh":[2333256],"cn":[2403992]}], +"textures/intro_raw/white_star_4.rgba16.png": [32,32,2048,{"jp":[2481928],"us":[2489736],"eu":[2358536],"sh":[2335304],"cn":[2406040]}], +"textures/intro_raw/white_star_5.rgba16.png": [32,32,2048,{"jp":[2483976],"us":[2491784],"eu":[2360584],"sh":[2337352],"cn":[2408088]}], +"textures/intro_raw/white_star_6.rgba16.png": [32,32,2048,{"jp":[2486024],"us":[2493832],"eu":[2362632],"sh":[2339400],"cn":[2410136]}], +"textures/intro_raw/white_star_7.rgba16.png": [32,32,2048,{"jp":[2488072],"us":[2495880],"eu":[2364680],"sh":[2341448],"cn":[2412184]}], +"textures/machine/ttc_textures.00000.rgba16.png": [32,32,2048,{"jp":[3460352,0],"us":[3467104,0],"eu":[3340704,0],"sh":[3315072,0],"cn":[3388832,0]}], +"textures/machine/ttc_textures.00800.rgba16.png": [32,32,2048,{"jp":[3460352,2048],"us":[3467104,2048],"eu":[3340704,2048],"sh":[3315072,2048],"cn":[3388832,2048]}], +"textures/machine/ttc_textures.01000.rgba16.png": [32,32,2048,{"jp":[3460352,4096],"us":[3467104,4096],"eu":[3340704,4096],"sh":[3315072,4096],"cn":[3388832,4096]}], +"textures/machine/ttc_textures.01800.rgba16.png": [32,32,2048,{"jp":[3460352,6144],"us":[3467104,6144],"eu":[3340704,6144],"sh":[3315072,6144],"cn":[3388832,6144]}], +"textures/machine/ttc_textures.02000.rgba16.png": [32,32,2048,{"jp":[3460352,8192],"us":[3467104,8192],"eu":[3340704,8192],"sh":[3315072,8192],"cn":[3388832,8192]}], +"textures/machine/ttc_textures.02800.rgba16.png": [32,32,2048,{"jp":[3460352,10240],"us":[3467104,10240],"eu":[3340704,10240],"sh":[3315072,10240],"cn":[3388832,10240]}], +"textures/machine/ttc_textures.03000.rgba16.png": [32,32,2048,{"jp":[3460352,12288],"us":[3467104,12288],"eu":[3340704,12288],"sh":[3315072,12288],"cn":[3388832,12288]}], +"textures/machine/ttc_textures.03800.rgba16.png": [32,32,2048,{"jp":[3460352,14336],"us":[3467104,14336],"eu":[3340704,14336],"sh":[3315072,14336],"cn":[3388832,14336]}], +"textures/machine/ttc_textures.04000.rgba16.png": [32,64,4096,{"jp":[3460352,16384],"us":[3467104,16384],"eu":[3340704,16384],"sh":[3315072,16384],"cn":[3388832,16384]}], +"textures/machine/ttc_textures.05000.rgba16.png": [32,32,2048,{"jp":[3460352,20480],"us":[3467104,20480],"eu":[3340704,20480],"sh":[3315072,20480],"cn":[3388832,20480]}], +"textures/machine/ttc_textures.05800.rgba16.png": [32,32,2048,{"jp":[3460352,22528],"us":[3467104,22528],"eu":[3340704,22528],"sh":[3315072,22528],"cn":[3388832,22528]}], +"textures/machine/ttc_textures.06000.rgba16.png": [32,32,2048,{"jp":[3460352,24576],"us":[3467104,24576],"eu":[3340704,24576],"sh":[3315072,24576],"cn":[3388832,24576]}], +"textures/machine/ttc_textures.06800.rgba16.png": [32,32,2048,{"jp":[3460352,26624],"us":[3467104,26624],"eu":[3340704,26624],"sh":[3315072,26624],"cn":[3388832,26624]}], +"textures/machine/ttc_textures.07000.rgba16.png": [32,32,2048,{"jp":[3460352,28672],"us":[3467104,28672],"eu":[3340704,28672],"sh":[3315072,28672],"cn":[3388832,28672]}], +"textures/machine/ttc_textures.07800.rgba16.png": [16,64,2048,{"jp":[3460352,30720],"us":[3467104,30720],"eu":[3340704,30720],"sh":[3315072,30720],"cn":[3388832,30720]}], +"textures/machine/ttc_textures.08000.rgba16.png": [64,8,1024,{"jp":[3460352,32768],"us":[3467104,32768],"eu":[3340704,32768],"sh":[3315072,32768],"cn":[3388832,32768]}], +"textures/machine/ttc_textures.08400.rgba16.png": [32,32,2048,{"jp":[3460352,33792],"us":[3467104,33792],"eu":[3340704,33792],"sh":[3315072,33792],"cn":[3388832,33792]}], +"textures/mountain/ttm_textures.00000.rgba16.png": [32,32,2048,{"jp":[3473152,0],"us":[3479904,0],"eu":[3353504,0],"sh":[3327872,0],"cn":[3401632,0]}], +"textures/mountain/ttm_textures.00800.rgba16.png": [64,32,4096,{"jp":[3473152,2048],"us":[3479904,2048],"eu":[3353504,2048],"sh":[3327872,2048],"cn":[3401632,2048]}], +"textures/mountain/ttm_textures.01800.rgba16.png": [32,64,4096,{"jp":[3473152,6144],"us":[3479904,6144],"eu":[3353504,6144],"sh":[3327872,6144],"cn":[3401632,6144]}], +"textures/mountain/ttm_textures.02800.rgba16.png": [32,32,2048,{"jp":[3473152,10240],"us":[3479904,10240],"eu":[3353504,10240],"sh":[3327872,10240],"cn":[3401632,10240]}], +"textures/mountain/ttm_textures.03000.rgba16.png": [32,32,2048,{"jp":[3473152,12288],"us":[3479904,12288],"eu":[3353504,12288],"sh":[3327872,12288],"cn":[3401632,12288]}], +"textures/mountain/ttm_textures.03800.rgba16.png": [32,32,2048,{"jp":[3473152,14336],"us":[3479904,14336],"eu":[3353504,14336],"sh":[3327872,14336],"cn":[3401632,14336]}], +"textures/mountain/ttm_textures.04000.rgba16.png": [32,32,2048,{"jp":[3473152,16384],"us":[3479904,16384],"eu":[3353504,16384],"sh":[3327872,16384],"cn":[3401632,16384]}], +"textures/mountain/ttm_textures.04800.rgba16.png": [32,32,2048,{"jp":[3473152,18432],"us":[3479904,18432],"eu":[3353504,18432],"sh":[3327872,18432],"cn":[3401632,18432]}], +"textures/mountain/ttm_textures.05000.rgba16.png": [32,32,2048,{"jp":[3473152,20480],"us":[3479904,20480],"eu":[3353504,20480],"sh":[3327872,20480],"cn":[3401632,20480]}], +"textures/mountain/ttm_textures.05800.rgba16.png": [32,64,4096,{"jp":[3473152,22528],"us":[3479904,22528],"eu":[3353504,22528],"sh":[3327872,22528],"cn":[3401632,22528]}], +"textures/mountain/ttm_textures.06800.rgba16.png": [32,32,2048,{"jp":[3473152,26624],"us":[3479904,26624],"eu":[3353504,26624],"sh":[3327872,26624],"cn":[3401632,26624]}], +"textures/mountain/ttm_textures.07000.rgba16.png": [32,32,2048,{"jp":[3473152,28672],"us":[3479904,28672],"eu":[3353504,28672],"sh":[3327872,28672],"cn":[3401632,28672]}], +"textures/mountain/ttm_textures.07800.rgba16.png": [32,32,2048,{"jp":[3473152,30720],"us":[3479904,30720],"eu":[3353504,30720],"sh":[3327872,30720],"cn":[3401632,30720]}], +"textures/mountain/ttm_textures.08000.rgba16.png": [32,32,2048,{"jp":[3473152,32768],"us":[3479904,32768],"eu":[3353504,32768],"sh":[3327872,32768],"cn":[3401632,32768]}], +"textures/mountain/ttm_textures.08800.rgba16.png": [64,32,4096,{"jp":[3473152,34816],"us":[3479904,34816],"eu":[3353504,34816],"sh":[3327872,34816],"cn":[3401632,34816]}], +"textures/mountain/ttm_textures.09800.rgba16.png": [32,32,2048,{"jp":[3473152,38912],"us":[3479904,38912],"eu":[3353504,38912],"sh":[3327872,38912],"cn":[3401632,38912]}], +"textures/mountain/ttm_textures.0A000.rgba16.png": [32,32,2048,{"jp":[3390640,24576],"us":[3397392,24576],"eu":[3270992,24576],"sh":[3245360,24576],"cn":[3319120,24576]}], +"textures/mountain/ttm_textures.0A800.rgba16.png": [32,32,2048,{"jp":[3473152,43008],"us":[3479904,43008],"eu":[3353504,43008],"sh":[3327872,43008],"cn":[3401632,43008]}], +"textures/mountain/ttm_textures.0B000.rgba16.png": [32,32,2048,{"jp":[3473152,45056],"us":[3479904,45056],"eu":[3353504,45056],"sh":[3327872,45056],"cn":[3401632,45056]}], +"textures/mountain/ttm_textures.0B800.rgba16.png": [32,32,2048,{"jp":[3473152,47104],"us":[3479904,47104],"eu":[3353504,47104],"sh":[3327872,47104],"cn":[3401632,47104]}], +"textures/mountain/ttm_textures.0C000.rgba16.png": [32,32,2048,{"jp":[3473152,49152],"us":[3479904,49152],"eu":[3353504,49152],"sh":[3327872,49152],"cn":[3401632,49152]}], +"textures/outside/castle_grounds_textures.00000.rgba16.png": [32,32,2048,{"jp":[3527344,0],"us":[3534096,0],"eu":[3407696,0],"sh":[3382064,0],"cn":[3455824,0]}], +"textures/outside/castle_grounds_textures.00800.rgba16.png": [32,32,2048,{"jp":[3527344,2048],"us":[3534096,2048],"eu":[3407696,2048],"sh":[3382064,2048],"cn":[3455824,2048]}], +"textures/outside/castle_grounds_textures.01000.rgba16.png": [64,32,4096,{"jp":[3527344,4096],"us":[3534096,4096],"eu":[3407696,4096],"sh":[3382064,4096],"cn":[3455824,4096]}], +"textures/outside/castle_grounds_textures.02000.rgba16.png": [32,64,4096,{"jp":[3527344,8192],"us":[3534096,8192],"eu":[3407696,8192],"sh":[3382064,8192],"cn":[3455824,8192]}], +"textures/outside/castle_grounds_textures.03000.rgba16.png": [32,32,2048,{"jp":[3527344,12288],"us":[3534096,12288],"eu":[3407696,12288],"sh":[3382064,12288],"cn":[3455824,12288]}], +"textures/outside/castle_grounds_textures.03800.rgba16.png": [32,32,2048,{"jp":[3527344,14336],"us":[3534096,14336],"eu":[3407696,14336],"sh":[3382064,14336],"cn":[3455824,14336]}], +"textures/outside/castle_grounds_textures.04000.rgba16.png": [32,32,2048,{"jp":[3527344,16384],"us":[3534096,16384],"eu":[3407696,16384],"sh":[3382064,16384],"cn":[3455824,16384]}], +"textures/outside/castle_grounds_textures.04800.rgba16.png": [32,64,4096,{"jp":[3527344,18432],"us":[3534096,18432],"eu":[3407696,18432],"sh":[3382064,18432],"cn":[3455824,18432]}], +"textures/outside/castle_grounds_textures.05800.rgba16.png": [32,32,2048,{"jp":[3527344,22528],"us":[3534096,22528],"eu":[3407696,22528],"sh":[3382064,22528],"cn":[3455824,22528]}], +"textures/outside/castle_grounds_textures.06000.rgba16.png": [32,32,2048,{"jp":[3527344,24576],"us":[3534096,24576],"eu":[3407696,24576],"sh":[3382064,24576],"cn":[3455824,24576]}], +"textures/outside/castle_grounds_textures.06800.rgba16.png": [64,32,4096,{"jp":[3527344,26624],"us":[3534096,26624],"eu":[3407696,26624],"sh":[3382064,26624],"cn":[3455824,26624]}], +"textures/outside/castle_grounds_textures.07800.rgba16.png": [32,32,2048,{"jp":[3527344,30720],"us":[3534096,30720],"eu":[3407696,30720],"sh":[3382064,30720],"cn":[3455824,30720]}], +"textures/outside/castle_grounds_textures.08000.rgba16.png": [32,32,2048,{"jp":[3527344,32768],"us":[3534096,32768],"eu":[3407696,32768],"sh":[3382064,32768],"cn":[3455824,32768]}], +"textures/outside/castle_grounds_textures.08800.rgba16.png": [32,32,2048,{"jp":[3527344,34816],"us":[3534096,34816],"eu":[3407696,34816],"sh":[3382064,34816],"cn":[3455824,34816]}], +"textures/outside/castle_grounds_textures.09000.rgba16.png": [32,32,2048,{"jp":[3527344,36864],"us":[3534096,36864],"eu":[3407696,36864],"sh":[3382064,36864],"cn":[3455824,36864]}], +"textures/outside/castle_grounds_textures.09800.rgba16.png": [32,32,2048,{"jp":[3527344,38912],"us":[3534096,38912],"eu":[3407696,38912],"sh":[3382064,38912],"cn":[3455824,38912]}], +"textures/outside/castle_grounds_textures.0A000.rgba16.png": [32,32,2048,{"jp":[3527344,40960],"us":[3534096,40960],"eu":[3407696,40960],"sh":[3382064,40960],"cn":[3455824,40960]}], +"textures/outside/castle_grounds_textures.0A800.rgba16.png": [32,32,2048,{"jp":[3527344,43008],"us":[3534096,43008],"eu":[3407696,43008],"sh":[3382064,43008],"cn":[3455824,43008]}], +"textures/outside/castle_grounds_textures.0B000.rgba16.png": [16,32,1024,{"jp":[3527344,45056],"us":[3534096,45056],"eu":[3407696,45056],"sh":[3382064,45056],"cn":[3455824,45056]}], +"textures/outside/castle_grounds_textures.0B400.rgba16.png": [32,32,2048,{"jp":[3527344,46080],"us":[3534096,46080],"eu":[3407696,46080],"sh":[3382064,46080],"cn":[3455824,46080]}], +"textures/outside/castle_grounds_textures.0BC00.ia16.png": [32,32,2048,{"jp":[3323408,45056],"us":[3330160,45056],"eu":[3203760,45056],"sh":[3178128,45056],"cn":[3251888,45056]}], +"textures/segment2/font_graphics.05900.ia4.png": [16,8,64,{"us":[1083968,22784],"cn":[947456,86272]}], +"textures/segment2/font_graphics.05940.ia4.png": [16,8,64,{"us":[1083968,22848],"cn":[947456,86336]}], +"textures/segment2/font_graphics.05980.ia4.png": [16,8,64,{"us":[1083968,22912],"cn":[947456,86400]}], +"textures/segment2/font_graphics.059C0.ia4.png": [16,8,64,{"us":[1083968,22976],"cn":[947456,86464]}], +"textures/segment2/font_graphics.05A00.ia4.png": [16,8,64,{"us":[1083968,23040],"cn":[947456,86528]}], +"textures/segment2/font_graphics.05A40.ia4.png": [16,8,64,{"us":[1083968,23104],"cn":[947456,86592]}], +"textures/segment2/font_graphics.05A80.ia4.png": [16,8,64,{"us":[1083968,23168],"cn":[947456,86656]}], +"textures/segment2/font_graphics.05AC0.ia4.png": [16,8,64,{"us":[1083968,23232],"cn":[947456,86720]}], +"textures/segment2/font_graphics.05B00.ia4.png": [16,8,64,{"us":[1083968,23296],"cn":[947456,86784]}], +"textures/segment2/font_graphics.05B40.ia4.png": [16,8,64,{"us":[1083968,23360],"cn":[947456,86848]}], +"textures/segment2/font_graphics.05B80.ia4.png": [16,8,64,{"us":[1083968,23424],"cn":[947456,86912]}], +"textures/segment2/font_graphics.05BC0.ia4.png": [16,8,64,{"us":[1083968,23488],"cn":[947456,86976]}], +"textures/segment2/font_graphics.05C00.ia4.png": [16,8,64,{"us":[1083968,23552],"cn":[947456,87040]}], +"textures/segment2/font_graphics.05C40.ia4.png": [16,8,64,{"us":[1083968,23616],"cn":[947456,87104]}], +"textures/segment2/font_graphics.05C80.ia4.png": [16,8,64,{"us":[1083968,23680],"cn":[947456,87168]}], +"textures/segment2/font_graphics.05CC0.ia4.png": [16,8,64,{"us":[1083968,23744],"cn":[947456,87232]}], +"textures/segment2/font_graphics.05D00.ia4.png": [16,8,64,{"us":[1083968,23808],"cn":[947456,87296]}], +"textures/segment2/font_graphics.05D40.ia4.png": [16,8,64,{"us":[1083968,23872],"cn":[947456,87360]}], +"textures/segment2/font_graphics.05D80.ia4.png": [16,8,64,{"us":[1083968,23936],"cn":[947456,87424]}], +"textures/segment2/font_graphics.05DC0.ia4.png": [16,8,64,{"us":[1083968,24000],"cn":[947456,87488]}], +"textures/segment2/font_graphics.05E00.ia4.png": [16,8,64,{"us":[1083968,24064],"cn":[947456,87552]}], +"textures/segment2/font_graphics.05E40.ia4.png": [16,8,64,{"us":[1083968,24128],"cn":[947456,87616]}], +"textures/segment2/font_graphics.05E80.ia4.png": [16,8,64,{"us":[1083968,24192],"cn":[947456,87680]}], +"textures/segment2/font_graphics.05EC0.ia4.png": [16,8,64,{"us":[1083968,24256],"cn":[947456,87744]}], "textures/segment2/font_graphics.05F00.ia1.png": [16,8,16,{"eu":[909712,24320]}], -"textures/segment2/font_graphics.05F00.ia4.png": [16,8,64,{"us":[1083968,24320]}], +"textures/segment2/font_graphics.05F00.ia4.png": [16,8,64,{"us":[1083968,24320],"cn":[947456,87808]}], "textures/segment2/font_graphics.05F10.ia1.png": [16,8,16,{"eu":[909712,24336]}], "textures/segment2/font_graphics.05F20.ia1.png": [16,8,16,{"eu":[909712,24352]}], "textures/segment2/font_graphics.05F30.ia1.png": [16,8,16,{"eu":[909712,24368]}], "textures/segment2/font_graphics.05F40.ia1.png": [16,8,16,{"eu":[909712,24384]}], -"textures/segment2/font_graphics.05F40.ia4.png": [16,8,64,{"us":[1083968,24384]}], +"textures/segment2/font_graphics.05F40.ia4.png": [16,8,64,{"us":[1083968,24384],"cn":[947456,87872]}], "textures/segment2/font_graphics.05F50.ia1.png": [16,8,16,{"eu":[909712,24400]}], "textures/segment2/font_graphics.05F60.ia1.png": [16,8,16,{"eu":[909712,24416]}], "textures/segment2/font_graphics.05F70.ia1.png": [16,8,16,{"eu":[909712,24432]}], "textures/segment2/font_graphics.05F80.ia1.png": [16,8,16,{"eu":[909712,24448]}], -"textures/segment2/font_graphics.05F80.ia4.png": [16,8,64,{"us":[1083968,24448]}], +"textures/segment2/font_graphics.05F80.ia4.png": [16,8,64,{"us":[1083968,24448],"cn":[947456,87936]}], "textures/segment2/font_graphics.05F90.ia1.png": [16,8,16,{"eu":[909712,24464]}], "textures/segment2/font_graphics.05FA0.ia1.png": [16,8,16,{"eu":[909712,24480]}], "textures/segment2/font_graphics.05FB0.ia1.png": [16,8,16,{"eu":[909712,24496]}], "textures/segment2/font_graphics.05FC0.ia1.png": [16,8,16,{"eu":[909712,24512]}], -"textures/segment2/font_graphics.05FC0.ia4.png": [16,8,64,{"us":[1083968,24512]}], +"textures/segment2/font_graphics.05FC0.ia4.png": [16,8,64,{"us":[1083968,24512],"cn":[947456,88000]}], "textures/segment2/font_graphics.05FD0.ia1.png": [16,8,16,{"eu":[909712,24528]}], "textures/segment2/font_graphics.05FE0.ia1.png": [16,8,16,{"eu":[909712,24544]}], "textures/segment2/font_graphics.05FF0.ia1.png": [16,8,16,{"eu":[909712,24560]}], "textures/segment2/font_graphics.06000.ia1.png": [16,8,16,{"eu":[909712,24576]}], -"textures/segment2/font_graphics.06000.ia4.png": [16,8,64,{"us":[1083968,24576]}], +"textures/segment2/font_graphics.06000.ia4.png": [16,8,64,{"us":[1083968,24576],"cn":[947456,88064]}], "textures/segment2/font_graphics.06010.ia1.png": [16,8,16,{"eu":[909712,24592]}], "textures/segment2/font_graphics.06020.ia1.png": [16,8,16,{"eu":[909712,24608]}], "textures/segment2/font_graphics.06030.ia1.png": [16,8,16,{"eu":[909712,24624]}], "textures/segment2/font_graphics.06040.ia1.png": [16,8,16,{"eu":[909712,24640]}], -"textures/segment2/font_graphics.06040.ia4.png": [16,8,64,{"us":[1083968,24640]}], +"textures/segment2/font_graphics.06040.ia4.png": [16,8,64,{"us":[1083968,24640],"cn":[947456,88128]}], "textures/segment2/font_graphics.06050.ia1.png": [16,8,16,{"eu":[909712,24656]}], "textures/segment2/font_graphics.06060.ia1.png": [16,8,16,{"eu":[909712,24672]}], "textures/segment2/font_graphics.06070.ia1.png": [16,8,16,{"eu":[909712,24688]}], "textures/segment2/font_graphics.06080.ia1.png": [16,8,16,{"eu":[909712,24704]}], -"textures/segment2/font_graphics.06080.ia4.png": [16,8,64,{"us":[1083968,24704]}], +"textures/segment2/font_graphics.06080.ia4.png": [16,8,64,{"us":[1083968,24704],"cn":[947456,88192]}], "textures/segment2/font_graphics.06090.ia1.png": [16,8,16,{"eu":[909712,24720]}], "textures/segment2/font_graphics.060A0.ia1.png": [16,8,16,{"eu":[909712,24736]}], "textures/segment2/font_graphics.060B0.ia1.png": [16,8,16,{"eu":[909712,24752]}], "textures/segment2/font_graphics.060C0.ia1.png": [16,8,16,{"eu":[909712,24768]}], -"textures/segment2/font_graphics.060C0.ia4.png": [16,8,64,{"us":[1083968,24768]}], +"textures/segment2/font_graphics.060C0.ia4.png": [16,8,64,{"us":[1083968,24768],"cn":[947456,88256]}], "textures/segment2/font_graphics.060D0.ia1.png": [16,8,16,{"eu":[909712,24784]}], "textures/segment2/font_graphics.060E0.ia1.png": [16,8,16,{"eu":[909712,24800]}], "textures/segment2/font_graphics.060F0.ia1.png": [16,8,16,{"eu":[909712,24816]}], "textures/segment2/font_graphics.06100.ia1.png": [16,8,16,{"eu":[909712,24832]}], -"textures/segment2/font_graphics.06100.ia4.png": [16,8,64,{"us":[1083968,24832]}], +"textures/segment2/font_graphics.06100.ia4.png": [16,8,64,{"us":[1083968,24832],"cn":[947456,88320]}], "textures/segment2/font_graphics.06110.ia1.png": [16,8,16,{"eu":[909712,24848]}], "textures/segment2/font_graphics.06120.ia1.png": [16,8,16,{"eu":[909712,24864]}], "textures/segment2/font_graphics.06130.ia1.png": [16,8,16,{"eu":[909712,24880]}], "textures/segment2/font_graphics.06140.ia1.png": [16,8,16,{"eu":[909712,24896]}], -"textures/segment2/font_graphics.06140.ia4.png": [16,8,64,{"us":[1083968,24896]}], +"textures/segment2/font_graphics.06140.ia4.png": [16,8,64,{"us":[1083968,24896],"cn":[947456,88384]}], "textures/segment2/font_graphics.06150.ia1.png": [16,8,16,{"eu":[909712,24912]}], "textures/segment2/font_graphics.06160.ia1.png": [16,8,16,{"eu":[909712,24928]}], "textures/segment2/font_graphics.06170.ia1.png": [16,8,16,{"eu":[909712,24944]}], "textures/segment2/font_graphics.06180.ia1.png": [16,8,16,{"eu":[909712,24960]}], -"textures/segment2/font_graphics.06180.ia4.png": [16,8,64,{"us":[1083968,24960]}], +"textures/segment2/font_graphics.06180.ia4.png": [16,8,64,{"us":[1083968,24960],"cn":[947456,88448]}], "textures/segment2/font_graphics.06190.ia1.png": [16,8,16,{"eu":[909712,24976]}], "textures/segment2/font_graphics.061A0.ia1.png": [16,8,16,{"eu":[909712,24992]}], "textures/segment2/font_graphics.061B0.ia1.png": [16,8,16,{"eu":[909712,25008]}], "textures/segment2/font_graphics.061C0.ia1.png": [16,8,16,{"eu":[909712,25024]}], -"textures/segment2/font_graphics.061C0.ia4.png": [16,8,64,{"us":[1083968,25024]}], +"textures/segment2/font_graphics.061C0.ia4.png": [16,8,64,{"us":[1083968,25024],"cn":[947456,88512]}], "textures/segment2/font_graphics.061D0.ia1.png": [16,8,16,{"eu":[909712,25040]}], "textures/segment2/font_graphics.061E0.ia1.png": [16,8,16,{"eu":[909712,25056]}], "textures/segment2/font_graphics.061F0.ia1.png": [16,8,16,{"eu":[909712,25072]}], "textures/segment2/font_graphics.06200.ia1.png": [16,8,16,{"eu":[909712,25088]}], -"textures/segment2/font_graphics.06200.ia4.png": [16,8,64,{"us":[1083968,25088]}], +"textures/segment2/font_graphics.06200.ia4.png": [16,8,64,{"us":[1083968,25088],"cn":[947456,88576]}], "textures/segment2/font_graphics.06210.ia1.png": [16,8,16,{"eu":[909712,25104]}], "textures/segment2/font_graphics.06220.ia1.png": [16,8,16,{"eu":[909712,25120]}], "textures/segment2/font_graphics.06230.ia1.png": [16,8,16,{"eu":[909712,25136]}], "textures/segment2/font_graphics.06240.ia1.png": [16,8,16,{"eu":[909712,25152]}], -"textures/segment2/font_graphics.06240.ia4.png": [16,8,64,{"us":[1083968,25152]}], +"textures/segment2/font_graphics.06240.ia4.png": [16,8,64,{"us":[1083968,25152],"cn":[947456,88640]}], "textures/segment2/font_graphics.06250.ia1.png": [16,8,16,{"eu":[909712,25168]}], "textures/segment2/font_graphics.06260.ia1.png": [16,8,16,{"eu":[909712,25184]}], "textures/segment2/font_graphics.06270.ia1.png": [16,8,16,{"eu":[909712,25200]}], "textures/segment2/font_graphics.06280.ia1.png": [16,8,16,{"eu":[909712,25216]}], -"textures/segment2/font_graphics.06280.ia4.png": [16,8,64,{"us":[1083968,25216]}], +"textures/segment2/font_graphics.06280.ia4.png": [16,8,64,{"us":[1083968,25216],"cn":[947456,88704]}], "textures/segment2/font_graphics.06290.ia1.png": [16,8,16,{"eu":[909712,25232]}], "textures/segment2/font_graphics.062A0.ia1.png": [16,8,16,{"eu":[909712,25248]}], "textures/segment2/font_graphics.062B0.ia1.png": [16,8,16,{"eu":[909712,25264]}], "textures/segment2/font_graphics.062C0.ia1.png": [16,8,16,{"eu":[909712,25280]}], -"textures/segment2/font_graphics.062C0.ia4.png": [16,8,64,{"us":[1083968,25280]}], +"textures/segment2/font_graphics.062C0.ia4.png": [16,8,64,{"us":[1083968,25280],"cn":[947456,88768]}], "textures/segment2/font_graphics.062D0.ia1.png": [16,8,16,{"eu":[909712,25296]}], "textures/segment2/font_graphics.062E0.ia1.png": [16,8,16,{"eu":[909712,25312]}], "textures/segment2/font_graphics.062F0.ia1.png": [16,8,16,{"eu":[909712,25328]}], "textures/segment2/font_graphics.06300.ia1.png": [16,8,16,{"eu":[909712,25344]}], -"textures/segment2/font_graphics.06300.ia4.png": [16,8,64,{"us":[1083968,25344]}], +"textures/segment2/font_graphics.06300.ia4.png": [16,8,64,{"us":[1083968,25344],"cn":[947456,88832]}], "textures/segment2/font_graphics.06310.ia1.png": [16,8,16,{"eu":[909712,25360]}], "textures/segment2/font_graphics.06320.ia1.png": [16,8,16,{"eu":[909712,25376]}], "textures/segment2/font_graphics.06330.ia1.png": [16,8,16,{"eu":[909712,25392]}], "textures/segment2/font_graphics.06340.ia1.png": [16,8,16,{"eu":[909712,25408]}], -"textures/segment2/font_graphics.06340.ia4.png": [16,8,64,{"us":[1083968,25408]}], +"textures/segment2/font_graphics.06340.ia4.png": [16,8,64,{"us":[1083968,25408],"cn":[947456,88896]}], "textures/segment2/font_graphics.06350.ia1.png": [16,8,16,{"eu":[909712,25424]}], "textures/segment2/font_graphics.06360.ia1.png": [16,8,16,{"eu":[909712,25440]}], "textures/segment2/font_graphics.06370.ia1.png": [16,8,16,{"eu":[909712,25456]}], "textures/segment2/font_graphics.06380.ia1.png": [16,8,16,{"eu":[909712,25472]}], -"textures/segment2/font_graphics.06380.ia4.png": [16,8,64,{"us":[1083968,25472]}], +"textures/segment2/font_graphics.06380.ia4.png": [16,8,64,{"us":[1083968,25472],"cn":[947456,88960]}], "textures/segment2/font_graphics.06390.ia1.png": [16,8,16,{"eu":[909712,25488]}], "textures/segment2/font_graphics.063A0.ia1.png": [16,8,16,{"eu":[909712,25504]}], "textures/segment2/font_graphics.063B0.ia1.png": [16,8,16,{"eu":[909712,25520]}], "textures/segment2/font_graphics.063C0.ia1.png": [16,8,16,{"eu":[909712,25536]}], -"textures/segment2/font_graphics.063C0.ia4.png": [16,8,64,{"us":[1083968,25536]}], +"textures/segment2/font_graphics.063C0.ia4.png": [16,8,64,{"us":[1083968,25536],"cn":[947456,89024]}], "textures/segment2/font_graphics.063D0.ia1.png": [16,8,16,{"eu":[909712,25552]}], "textures/segment2/font_graphics.063E0.ia1.png": [16,8,16,{"eu":[909712,25568]}], "textures/segment2/font_graphics.063F0.ia1.png": [16,8,16,{"eu":[909712,25584]}], "textures/segment2/font_graphics.06400.ia1.png": [16,8,16,{"eu":[909712,25600]}], -"textures/segment2/font_graphics.06400.ia4.png": [16,8,64,{"us":[1083968,25600]}], -"textures/segment2/font_graphics.06410.ia1.png": [16,8,16,{"jp":[1599504,83574],"us":[1606720,83574],"eu":[909712,25616],"sh":[1455200,83574]}], -"textures/segment2/font_graphics.06420.ia1.png": [16,8,16,{"jp":[1844608,133979],"us":[1851952,133979],"eu":[909712,25632],"sh":[1700432,133979]}], +"textures/segment2/font_graphics.06400.ia4.png": [16,8,64,{"us":[1083968,25600],"cn":[947456,89088]}], +"textures/segment2/font_graphics.06410.ia1.png": [16,8,16,{"jp":[1599504,83574],"us":[1606720,83574],"eu":[909712,25616],"sh":[1455200,83574],"cn":[1522032,83574]}], +"textures/segment2/font_graphics.06420.ia1.png": [16,8,16,{"jp":[1844608,133979],"us":[1851952,133979],"eu":[909712,25632],"sh":[1700432,133979],"cn":[1767264,133979]}], "textures/segment2/font_graphics.06430.ia1.png": [16,8,16,{"eu":[909712,25648]}], "textures/segment2/font_graphics.06440.ia1.png": [16,8,16,{"eu":[909712,25664]}], -"textures/segment2/font_graphics.06440.ia4.png": [16,8,64,{"us":[1083968,25664]}], +"textures/segment2/font_graphics.06440.ia4.png": [16,8,64,{"us":[1083968,25664],"cn":[947456,89152]}], "textures/segment2/font_graphics.06450.ia1.png": [16,8,16,{"eu":[909712,25680]}], "textures/segment2/font_graphics.06460.ia1.png": [16,8,16,{"eu":[909712,25696]}], "textures/segment2/font_graphics.06470.ia1.png": [16,8,16,{"eu":[909712,25712]}], "textures/segment2/font_graphics.06480.ia1.png": [16,8,16,{"eu":[909712,25728]}], -"textures/segment2/font_graphics.06480.ia4.png": [16,8,64,{"us":[1083968,25728]}], +"textures/segment2/font_graphics.06480.ia4.png": [16,8,64,{"us":[1083968,25728],"cn":[947456,89216]}], "textures/segment2/font_graphics.06490.ia1.png": [16,8,16,{"eu":[909712,25744]}], "textures/segment2/font_graphics.064A0.ia1.png": [16,8,16,{"eu":[909712,25760]}], "textures/segment2/font_graphics.064B0.ia1.png": [16,8,16,{"eu":[909712,25776]}], "textures/segment2/font_graphics.064C0.ia1.png": [16,8,16,{"eu":[909712,25792]}], -"textures/segment2/font_graphics.064C0.ia4.png": [16,8,64,{"us":[1083968,25792]}], +"textures/segment2/font_graphics.064C0.ia4.png": [16,8,64,{"us":[1083968,25792],"cn":[947456,89280]}], "textures/segment2/font_graphics.064D0.ia1.png": [16,8,16,{"eu":[909712,25808]}], "textures/segment2/font_graphics.064E0.ia1.png": [16,8,16,{"eu":[909712,25824]}], "textures/segment2/font_graphics.064F0.ia1.png": [16,8,16,{"eu":[909712,25840]}], "textures/segment2/font_graphics.06500.ia1.png": [16,8,16,{"eu":[909712,25856]}], -"textures/segment2/font_graphics.06500.ia4.png": [16,8,64,{"us":[1083968,25856]}], +"textures/segment2/font_graphics.06500.ia4.png": [16,8,64,{"us":[1083968,25856],"cn":[947456,89344]}], "textures/segment2/font_graphics.06510.ia1.png": [16,8,16,{"eu":[909712,25872]}], "textures/segment2/font_graphics.06520.ia1.png": [16,8,16,{"eu":[909712,25888]}], "textures/segment2/font_graphics.06530.ia1.png": [16,8,16,{"eu":[909712,25904]}], -"textures/segment2/font_graphics.06540.ia4.png": [16,8,64,{"us":[1083968,25920]}], -"textures/segment2/font_graphics.06580.ia4.png": [16,8,64,{"us":[1083968,25984]}], -"textures/segment2/font_graphics.065C0.ia4.png": [16,8,64,{"us":[1083968,26048]}], -"textures/segment2/font_graphics.06600.ia4.png": [16,8,64,{"us":[1083968,26112]}], -"textures/segment2/font_graphics.06640.ia4.png": [16,8,64,{"us":[1083968,26176]}], -"textures/segment2/font_graphics.06680.ia4.png": [16,8,64,{"us":[1083968,26240]}], -"textures/segment2/font_graphics.066C0.ia4.png": [16,8,64,{"us":[1083968,26304]}], -"textures/segment2/font_graphics.06700.ia4.png": [16,8,64,{"us":[1083968,26368]}], -"textures/segment2/font_graphics.06740.ia4.png": [16,8,64,{"us":[1083968,26432]}], -"textures/segment2/font_graphics.06780.ia4.png": [16,8,64,{"us":[1083968,26496]}], -"textures/segment2/font_graphics.067C0.ia4.png": [16,8,64,{"us":[1083968,26560]}], -"textures/segment2/font_graphics.06800.ia4.png": [16,8,64,{"us":[1083968,26624]}], -"textures/segment2/font_graphics.06840.ia4.png": [16,8,64,{"us":[1083968,26688]}], -"textures/segment2/font_graphics.06880.ia4.png": [16,8,64,{"us":[1083968,26752]}], -"textures/segment2/font_graphics.068C0.ia4.png": [16,8,64,{"us":[1083968,26816]}], -"textures/segment2/font_graphics.06900.ia4.png": [16,8,64,{"us":[1083968,26880]}], -"textures/segment2/font_graphics.06940.ia4.png": [16,8,64,{"us":[1083968,26944]}], -"textures/segment2/font_graphics.06980.ia4.png": [16,8,64,{"us":[1083968,27008]}], -"textures/segment2/font_graphics.069C0.ia4.png": [16,8,64,{"us":[1083968,27072]}], -"textures/segment2/font_graphics.06A00.ia4.png": [16,8,64,{"us":[1083968,27136]}], -"textures/segment2/font_graphics.06A40.ia4.png": [16,8,64,{"us":[1083968,27200]}], -"textures/segment2/font_graphics.06A80.ia4.png": [16,8,64,{"us":[1083968,27264]}], -"textures/segment2/font_graphics.06AC0.ia4.png": [16,8,64,{"us":[1083968,27328]}], -"textures/segment2/font_graphics.06B00.ia4.png": [16,8,64,{"us":[1083968,27392]}], -"textures/segment2/font_graphics.06B40.ia4.png": [16,8,64,{"us":[1083968,27456]}], -"textures/segment2/font_graphics.06B80.ia4.png": [16,8,64,{"us":[1083968,27520]}], -"textures/segment2/font_graphics.06BC0.ia4.png": [16,8,64,{"us":[1083968,27584]}], -"textures/segment2/font_graphics.06C00.ia4.png": [16,8,64,{"us":[1083968,27648]}], -"textures/segment2/font_graphics.06C40.ia4.png": [16,8,64,{"us":[1083968,27712]}], -"textures/segment2/font_graphics.06C80.ia4.png": [16,8,64,{"us":[1083968,27776]}], -"textures/segment2/font_graphics.06CC0.ia4.png": [16,8,64,{"us":[1083968,27840]}], -"textures/segment2/font_graphics.06D00.ia4.png": [16,8,64,{"us":[1083968,27904]}], -"textures/segment2/font_graphics.06D40.ia4.png": [16,8,64,{"us":[1083968,27968]}], -"textures/segment2/font_graphics.06D80.ia4.png": [16,8,64,{"us":[1083968,28032]}], -"textures/segment2/font_graphics.06DC0.ia4.png": [16,8,64,{"us":[1083968,28096]}], -"textures/segment2/font_graphics.06E00.ia4.png": [16,8,64,{"us":[1083968,28160]}], -"textures/segment2/font_graphics.06E40.ia4.png": [16,8,64,{"us":[1083968,28224]}], -"textures/segment2/font_graphics.06E80.ia4.png": [16,8,64,{"us":[1083968,28288]}], -"textures/segment2/font_graphics.06EC0.ia4.png": [16,8,64,{"us":[1083968,28352]}], -"textures/segment2/font_graphics.06F00.ia4.png": [16,8,64,{"us":[1083968,28416]}], -"textures/segment2/font_graphics.06F40.ia4.png": [16,8,64,{"us":[1083968,28480]}], -"textures/segment2/font_graphics.06F80.ia4.png": [16,8,64,{"us":[1083968,28544]}], -"textures/segment2/font_graphics.06FC0.ia4.png": [16,8,64,{"us":[1083968,28608]}], -"textures/segment2/segment2.00000.rgba16.png": [16,16,512,{"jp":[1078992,0],"us":[1083968,0],"eu":[909712,0],"sh":[934640,0]}], -"textures/segment2/segment2.00200.rgba16.png": [16,16,512,{"jp":[1078992,512],"us":[1083968,512],"eu":[909712,512],"sh":[934640,512]}], -"textures/segment2/segment2.00400.rgba16.png": [16,16,512,{"jp":[1078992,1024],"us":[1083968,1024],"eu":[909712,1024],"sh":[934640,1024]}], -"textures/segment2/segment2.00600.rgba16.png": [16,16,512,{"jp":[1078992,1536],"us":[1083968,1536],"eu":[909712,1536],"sh":[934640,1536]}], -"textures/segment2/segment2.00800.rgba16.png": [16,16,512,{"jp":[1078992,2048],"us":[1083968,2048],"eu":[909712,2048],"sh":[934640,2048]}], -"textures/segment2/segment2.00A00.rgba16.png": [16,16,512,{"jp":[1078992,2560],"us":[1083968,2560],"eu":[909712,2560],"sh":[934640,2560]}], -"textures/segment2/segment2.00C00.rgba16.png": [16,16,512,{"jp":[1078992,3072],"us":[1083968,3072],"eu":[909712,3072],"sh":[934640,3072]}], -"textures/segment2/segment2.00E00.rgba16.png": [16,16,512,{"jp":[1078992,3584],"us":[1083968,3584],"eu":[909712,3584],"sh":[934640,3584]}], -"textures/segment2/segment2.01000.rgba16.png": [16,16,512,{"jp":[1078992,4096],"us":[1083968,4096],"eu":[909712,4096],"sh":[934640,4096]}], -"textures/segment2/segment2.01200.rgba16.png": [16,16,512,{"jp":[1078992,4608],"us":[1083968,4608],"eu":[909712,4608],"sh":[934640,4608]}], -"textures/segment2/segment2.01400.rgba16.png": [16,16,512,{"jp":[1078992,5120],"us":[1083968,5120],"eu":[909712,5120],"sh":[934640,5120]}], -"textures/segment2/segment2.01600.rgba16.png": [16,16,512,{"jp":[1078992,5632],"us":[1083968,5632],"eu":[909712,5632],"sh":[934640,5632]}], -"textures/segment2/segment2.01800.rgba16.png": [16,16,512,{"jp":[1078992,6144],"us":[1083968,6144],"eu":[909712,6144],"sh":[934640,6144]}], -"textures/segment2/segment2.01A00.rgba16.png": [16,16,512,{"jp":[1078992,6656],"us":[1083968,6656],"eu":[909712,6656],"sh":[934640,6656]}], -"textures/segment2/segment2.01C00.rgba16.png": [16,16,512,{"jp":[1078992,7168],"us":[1083968,7168],"eu":[909712,7168],"sh":[934640,7168]}], -"textures/segment2/segment2.01E00.rgba16.png": [16,16,512,{"jp":[1078992,7680],"us":[1083968,7680],"eu":[909712,7680],"sh":[934640,7680]}], -"textures/segment2/segment2.02000.rgba16.png": [16,16,512,{"jp":[1078992,8192],"us":[1083968,8192],"eu":[909712,8192],"sh":[934640,8192]}], -"textures/segment2/segment2.02200.rgba16.png": [16,16,512,{"jp":[1078992,8704],"us":[1083968,8704],"eu":[909712,8704],"sh":[934640,8704]}], -"textures/segment2/segment2.02400.rgba16.png": [16,16,512,{"jp":[1078992,9216],"us":[1083968,9216],"eu":[909712,9216],"sh":[934640,9216]}], +"textures/segment2/font_graphics.06540.ia4.png": [16,8,64,{"us":[1083968,25920],"cn":[947456,89408]}], +"textures/segment2/font_graphics.06580.ia4.png": [16,8,64,{"us":[1083968,25984],"cn":[947456,89472]}], +"textures/segment2/font_graphics.065C0.ia4.png": [16,8,64,{"us":[1083968,26048],"cn":[947456,89536]}], +"textures/segment2/font_graphics.06600.ia4.png": [16,8,64,{"us":[1083968,26112],"cn":[947456,89600]}], +"textures/segment2/font_graphics.06640.ia4.png": [16,8,64,{"us":[1083968,26176],"cn":[947456,89664]}], +"textures/segment2/font_graphics.06680.ia4.png": [16,8,64,{"us":[1083968,26240],"cn":[947456,89728]}], +"textures/segment2/font_graphics.066C0.ia4.png": [16,8,64,{"us":[1083968,26304],"cn":[947456,89792]}], +"textures/segment2/font_graphics.06700.ia4.png": [16,8,64,{"us":[1083968,26368],"cn":[947456,89856]}], +"textures/segment2/font_graphics.06740.ia4.png": [16,8,64,{"us":[1083968,26432],"cn":[947456,89920]}], +"textures/segment2/font_graphics.06780.ia4.png": [16,8,64,{"us":[1083968,26496],"cn":[947456,89984]}], +"textures/segment2/font_graphics.067C0.ia4.png": [16,8,64,{"us":[1083968,26560],"cn":[947456,90048]}], +"textures/segment2/font_graphics.06800.ia4.png": [16,8,64,{"us":[1083968,26624],"cn":[947456,90112]}], +"textures/segment2/font_graphics.06840.ia4.png": [16,8,64,{"us":[1083968,26688],"cn":[947456,90176]}], +"textures/segment2/font_graphics.06880.ia4.png": [16,8,64,{"us":[1083968,26752],"cn":[947456,90240]}], +"textures/segment2/font_graphics.068C0.ia4.png": [16,8,64,{"us":[1083968,26816],"cn":[947456,90304]}], +"textures/segment2/font_graphics.06900.ia4.png": [16,8,64,{"us":[1083968,26880],"cn":[947456,90368]}], +"textures/segment2/font_graphics.06940.ia4.png": [16,8,64,{"us":[1083968,26944],"cn":[947456,90432]}], +"textures/segment2/font_graphics.06980.ia4.png": [16,8,64,{"us":[1083968,27008],"cn":[947456,90496]}], +"textures/segment2/font_graphics.069C0.ia4.png": [16,8,64,{"us":[1083968,27072],"cn":[947456,90560]}], +"textures/segment2/font_graphics.06A00.ia4.png": [16,8,64,{"us":[1083968,27136],"cn":[947456,90624]}], +"textures/segment2/font_graphics.06A40.ia4.png": [16,8,64,{"us":[1083968,27200],"cn":[947456,90688]}], +"textures/segment2/font_graphics.06A80.ia4.png": [16,8,64,{"us":[1083968,27264],"cn":[947456,90752]}], +"textures/segment2/font_graphics.06AC0.ia4.png": [16,8,64,{"us":[1083968,27328],"cn":[947456,90816]}], +"textures/segment2/font_graphics.06B00.ia4.png": [16,8,64,{"us":[1083968,27392],"cn":[947456,90880]}], +"textures/segment2/font_graphics.06B40.ia4.png": [16,8,64,{"us":[1083968,27456],"cn":[947456,90944]}], +"textures/segment2/font_graphics.06B80.ia4.png": [16,8,64,{"us":[1083968,27520],"cn":[947456,91008]}], +"textures/segment2/font_graphics.06BC0.ia4.png": [16,8,64,{"us":[1083968,27584],"cn":[947456,91072]}], +"textures/segment2/font_graphics.06C00.ia4.png": [16,8,64,{"us":[1083968,27648],"cn":[947456,91136]}], +"textures/segment2/font_graphics.06C40.ia4.png": [16,8,64,{"us":[1083968,27712],"cn":[947456,91200]}], +"textures/segment2/font_graphics.06C80.ia4.png": [16,8,64,{"us":[1083968,27776],"cn":[947456,91264]}], +"textures/segment2/font_graphics.06CC0.ia4.png": [16,8,64,{"us":[1083968,27840],"cn":[947456,91328]}], +"textures/segment2/font_graphics.06D00.ia4.png": [16,8,64,{"us":[1083968,27904],"cn":[947456,91392]}], +"textures/segment2/font_graphics.06D40.ia4.png": [16,8,64,{"us":[1083968,27968],"cn":[947456,91456]}], +"textures/segment2/font_graphics.06D80.ia4.png": [16,8,64,{"us":[1083968,28032],"cn":[947456,91520]}], +"textures/segment2/font_graphics.06DC0.ia4.png": [16,8,64,{"us":[1083968,28096],"cn":[947456,91584]}], +"textures/segment2/font_graphics.06E00.ia4.png": [16,8,64,{"us":[1083968,28160],"cn":[947456,91648]}], +"textures/segment2/font_graphics.06E40.ia4.png": [16,8,64,{"us":[1083968,28224],"cn":[947456,91712]}], +"textures/segment2/font_graphics.06E80.ia4.png": [16,8,64,{"us":[1083968,28288],"cn":[947456,91776]}], +"textures/segment2/font_graphics.06EC0.ia4.png": [16,8,64,{"us":[1083968,28352],"cn":[947456,91840]}], +"textures/segment2/font_graphics.06F00.ia4.png": [16,8,64,{"us":[1083968,28416],"cn":[947456,91904]}], +"textures/segment2/font_graphics.06F40.ia4.png": [16,8,64,{"us":[1083968,28480],"cn":[947456,91968]}], +"textures/segment2/font_graphics.06F80.ia4.png": [16,8,64,{"us":[1083968,28544],"cn":[947456,92032]}], +"textures/segment2/font_graphics.06FC0.ia4.png": [16,8,64,{"us":[1083968,28608],"cn":[947456,92096]}], +"textures/segment2/segment2.00000.rgba16.png": [16,16,512,{"jp":[1078992,0],"us":[1083968,0],"eu":[909712,0],"sh":[934640,0],"cn":[947456,0]}], +"textures/segment2/segment2.00200.rgba16.png": [16,16,512,{"jp":[1078992,512],"us":[1083968,512],"eu":[909712,512],"sh":[934640,512],"cn":[947456,512]}], +"textures/segment2/segment2.00400.rgba16.png": [16,16,512,{"jp":[1078992,1024],"us":[1083968,1024],"eu":[909712,1024],"sh":[934640,1024],"cn":[947456,1024]}], +"textures/segment2/segment2.00600.rgba16.png": [16,16,512,{"jp":[1078992,1536],"us":[1083968,1536],"eu":[909712,1536],"sh":[934640,1536],"cn":[947456,1536]}], +"textures/segment2/segment2.00800.rgba16.png": [16,16,512,{"jp":[1078992,2048],"us":[1083968,2048],"eu":[909712,2048],"sh":[934640,2048],"cn":[947456,2048]}], +"textures/segment2/segment2.00A00.rgba16.png": [16,16,512,{"jp":[1078992,2560],"us":[1083968,2560],"eu":[909712,2560],"sh":[934640,2560],"cn":[947456,2560]}], +"textures/segment2/segment2.00C00.rgba16.png": [16,16,512,{"jp":[1078992,3072],"us":[1083968,3072],"eu":[909712,3072],"sh":[934640,3072],"cn":[947456,3072]}], +"textures/segment2/segment2.00E00.rgba16.png": [16,16,512,{"jp":[1078992,3584],"us":[1083968,3584],"eu":[909712,3584],"sh":[934640,3584],"cn":[947456,3584]}], +"textures/segment2/segment2.01000.rgba16.png": [16,16,512,{"jp":[1078992,4096],"us":[1083968,4096],"eu":[909712,4096],"sh":[934640,4096],"cn":[947456,4096]}], +"textures/segment2/segment2.01200.rgba16.png": [16,16,512,{"jp":[1078992,4608],"us":[1083968,4608],"eu":[909712,4608],"sh":[934640,4608],"cn":[947456,4608]}], +"textures/segment2/segment2.01400.rgba16.png": [16,16,512,{"jp":[1078992,5120],"us":[1083968,5120],"eu":[909712,5120],"sh":[934640,5120],"cn":[947456,5120]}], +"textures/segment2/segment2.01600.rgba16.png": [16,16,512,{"jp":[1078992,5632],"us":[1083968,5632],"eu":[909712,5632],"sh":[934640,5632],"cn":[947456,5632]}], +"textures/segment2/segment2.01800.rgba16.png": [16,16,512,{"jp":[1078992,6144],"us":[1083968,6144],"eu":[909712,6144],"sh":[934640,6144],"cn":[947456,6144]}], +"textures/segment2/segment2.01A00.rgba16.png": [16,16,512,{"jp":[1078992,6656],"us":[1083968,6656],"eu":[909712,6656],"sh":[934640,6656],"cn":[947456,6656]}], +"textures/segment2/segment2.01C00.rgba16.png": [16,16,512,{"jp":[1078992,7168],"us":[1083968,7168],"eu":[909712,7168],"sh":[934640,7168],"cn":[947456,7168]}], +"textures/segment2/segment2.01E00.rgba16.png": [16,16,512,{"jp":[1078992,7680],"us":[1083968,7680],"eu":[909712,7680],"sh":[934640,7680],"cn":[947456,7680]}], +"textures/segment2/segment2.02000.rgba16.png": [16,16,512,{"jp":[1078992,8192],"us":[1083968,8192],"eu":[909712,8192],"sh":[934640,8192],"cn":[947456,8192]}], +"textures/segment2/segment2.02200.rgba16.png": [16,16,512,{"jp":[1078992,8704],"us":[1083968,8704],"eu":[909712,8704],"sh":[934640,8704],"cn":[947456,8704]}], +"textures/segment2/segment2.02400.rgba16.png": [16,16,512,{"jp":[1078992,9216],"us":[1083968,9216],"eu":[909712,9216],"sh":[934640,9216],"cn":[947456,9216]}], "textures/segment2/segment2.02600.rgba16.png": [16,16,512,{"jp":[1078992,9728],"sh":[934640,9728]}], -"textures/segment2/segment2.02800.rgba16.png": [16,16,512,{"jp":[1078992,10240],"us":[1083968,9728],"eu":[909712,9728],"sh":[934640,10240]}], -"textures/segment2/segment2.02A00.rgba16.png": [16,16,512,{"jp":[1078992,10752],"us":[1083968,10240],"eu":[909712,10240],"sh":[934640,10752]}], -"textures/segment2/segment2.02C00.rgba16.png": [16,16,512,{"jp":[1078992,11264],"us":[1083968,10752],"eu":[909712,10752],"sh":[934640,11264]}], -"textures/segment2/segment2.02E00.rgba16.png": [16,16,512,{"jp":[1078992,11776],"us":[1083968,11264],"eu":[909712,11264],"sh":[934640,11776]}], -"textures/segment2/segment2.03000.rgba16.png": [16,16,512,{"jp":[1078992,12288],"us":[1083968,11776],"eu":[909712,11776],"sh":[934640,12288]}], -"textures/segment2/segment2.03200.rgba16.png": [16,16,512,{"jp":[1078992,12800],"us":[1083968,12288],"eu":[909712,12288],"sh":[934640,12800]}], +"textures/segment2/segment2.02800.rgba16.png": [16,16,512,{"jp":[1078992,10240],"us":[1083968,9728],"eu":[909712,9728],"sh":[934640,10240],"cn":[947456,9728]}], +"textures/segment2/segment2.02A00.rgba16.png": [16,16,512,{"jp":[1078992,10752],"us":[1083968,10240],"eu":[909712,10240],"sh":[934640,10752],"cn":[947456,10240]}], +"textures/segment2/segment2.02C00.rgba16.png": [16,16,512,{"jp":[1078992,11264],"us":[1083968,10752],"eu":[909712,10752],"sh":[934640,11264],"cn":[947456,10752]}], +"textures/segment2/segment2.02E00.rgba16.png": [16,16,512,{"jp":[1078992,11776],"us":[1083968,11264],"eu":[909712,11264],"sh":[934640,11776],"cn":[947456,11264]}], +"textures/segment2/segment2.03000.rgba16.png": [16,16,512,{"jp":[1078992,12288],"us":[1083968,11776],"eu":[909712,11776],"sh":[934640,12288],"cn":[947456,11776]}], +"textures/segment2/segment2.03200.rgba16.png": [16,16,512,{"jp":[1078992,12800],"us":[1083968,12288],"eu":[909712,12288],"sh":[934640,12800],"cn":[947456,12288]}], "textures/segment2/segment2.03400.rgba16.png": [16,16,512,{"jp":[1078992,13312],"sh":[934640,13312]}], -"textures/segment2/segment2.03600.rgba16.png": [16,16,512,{"jp":[1078992,13824],"us":[1083968,12800],"eu":[909712,12800],"sh":[934640,13824]}], -"textures/segment2/segment2.03800.rgba16.png": [16,16,512,{"jp":[1078992,14336],"us":[1083968,13312],"eu":[909712,13312],"sh":[934640,14336]}], -"textures/segment2/segment2.03A00.rgba16.png": [16,16,512,{"jp":[1078992,14848],"us":[1083968,13824],"eu":[909712,13824],"sh":[934640,14848]}], -"textures/segment2/segment2.03C00.rgba16.png": [16,16,512,{"jp":[1078992,15360],"us":[1083968,14336],"eu":[909712,14336],"sh":[934640,15360]}], +"textures/segment2/segment2.03600.rgba16.png": [16,16,512,{"jp":[1078992,13824],"us":[1083968,12800],"eu":[909712,12800],"sh":[934640,13824],"cn":[947456,12800]}], +"textures/segment2/segment2.03800.rgba16.png": [16,16,512,{"jp":[1078992,14336],"us":[1083968,13312],"eu":[909712,13312],"sh":[934640,14336],"cn":[947456,13312]}], +"textures/segment2/segment2.03A00.rgba16.png": [16,16,512,{"jp":[1078992,14848],"us":[1083968,13824],"eu":[909712,13824],"sh":[934640,14848],"cn":[947456,13824]}], +"textures/segment2/segment2.03C00.rgba16.png": [16,16,512,{"jp":[1078992,15360],"us":[1083968,14336],"eu":[909712,14336],"sh":[934640,15360],"cn":[947456,14336]}], "textures/segment2/segment2.03E00.rgba16.png": [16,16,512,{"jp":[1078992,15872],"eu":[909712,14848],"sh":[934640,15872]}], -"textures/segment2/segment2.04000.rgba16.png": [16,16,512,{"jp":[1078992,16384],"us":[1083968,14848],"eu":[909712,15360],"sh":[934640,16384]}], +"textures/segment2/segment2.04000.rgba16.png": [16,16,512,{"jp":[1078992,16384],"us":[1083968,14848],"eu":[909712,15360],"sh":[934640,16384],"cn":[947456,14848]}], "textures/segment2/segment2.04200.rgba16.png": [16,16,512,{"jp":[1078992,16896],"sh":[934640,16896]}], -"textures/segment2/segment2.04400.rgba16.png": [16,16,512,{"jp":[1078992,17408],"us":[1083968,15360],"eu":[909712,15872],"sh":[934640,17408]}], +"textures/segment2/segment2.04400.rgba16.png": [16,16,512,{"jp":[1078992,17408],"us":[1083968,15360],"eu":[909712,15872],"sh":[934640,17408],"cn":[947456,15360]}], "textures/segment2/segment2.04600.rgba16.png": [16,16,512,{"jp":[1078992,17920],"eu":[909712,16384],"sh":[934640,17920]}], -"textures/segment2/segment2.04800.rgba16.png": [16,16,512,{"jp":[1078992,18432],"us":[1083968,15872],"eu":[909712,16896],"sh":[934640,18432]}], -"textures/segment2/segment2.04A00.rgba16.png": [16,16,512,{"jp":[1078992,18944],"us":[1083968,16384],"eu":[909712,17408],"sh":[934640,18944]}], +"textures/segment2/segment2.04800.rgba16.png": [16,16,512,{"jp":[1078992,18432],"us":[1083968,15872],"eu":[909712,16896],"sh":[934640,18432],"cn":[947456,15872]}], +"textures/segment2/segment2.04A00.rgba16.png": [16,16,512,{"jp":[1078992,18944],"us":[1083968,16384],"eu":[909712,17408],"sh":[934640,18944],"cn":[947456,16384]}], "textures/segment2/segment2.04C00.rgba16.png": [16,16,512,{"jp":[1078992,19456],"sh":[934640,19456]}], "textures/segment2/segment2.04E00.rgba16.png": [16,16,512,{"jp":[1078992,19968],"sh":[934640,19968]}], -"textures/segment2/segment2.05000.rgba16.png": [16,16,512,{"jp":[1078992,20480],"us":[2778544,41424],"eu":[2647072,41424],"sh":[934640,20480]}], +"textures/segment2/segment2.05000.rgba16.png": [16,16,512,{"jp":[1078992,20480],"us":[2778544,41424],"eu":[2647072,41424],"sh":[934640,20480],"cn":[2700128,41424]}], "textures/segment2/segment2.05200.rgba16.png": [16,16,512,{"jp":[1078992,20992],"sh":[934640,20992]}], "textures/segment2/segment2.05400.rgba16.png": [16,16,512,{"jp":[1078992,21504],"sh":[934640,21504]}], -"textures/segment2/segment2.05600.rgba16.png": [16,16,512,{"jp":[1078992,22016],"us":[1083968,16896],"eu":[909712,18432],"sh":[934640,22016]}], -"textures/segment2/segment2.05800.rgba16.png": [16,16,512,{"jp":[1078992,22528],"us":[1083968,17408],"eu":[909712,18944],"sh":[934640,22528]}], -"textures/segment2/segment2.05A00.rgba16.png": [16,16,512,{"jp":[1078992,23040],"us":[1083968,17920],"eu":[909712,19456],"sh":[934640,23040]}], -"textures/segment2/segment2.05C00.rgba16.png": [16,16,512,{"jp":[1078992,23552],"us":[1083968,18432],"eu":[909712,19968],"sh":[934640,23552]}], +"textures/segment2/segment2.05600.rgba16.png": [16,16,512,{"jp":[1078992,22016],"us":[1083968,16896],"eu":[909712,18432],"sh":[934640,22016],"cn":[947456,16896]}], +"textures/segment2/segment2.05800.rgba16.png": [16,16,512,{"jp":[1078992,22528],"us":[1083968,17408],"eu":[909712,18944],"sh":[934640,22528],"cn":[947456,17408]}], +"textures/segment2/segment2.05A00.rgba16.png": [16,16,512,{"jp":[1078992,23040],"us":[1083968,17920],"eu":[909712,19456],"sh":[934640,23040],"cn":[947456,17920]}], +"textures/segment2/segment2.05C00.rgba16.png": [16,16,512,{"jp":[1078992,23552],"us":[1083968,18432],"eu":[909712,19968],"sh":[934640,23552],"cn":[947456,18432]}], "textures/segment2/segment2.05E00.rgba16.png": [16,16,512,{"jp":[1078992,24064],"sh":[934640,24064]}], "textures/segment2/segment2.06000.rgba16.png": [16,16,512,{"jp":[1078992,24576],"sh":[934640,24576]}], -"textures/segment2/segment2.06200.rgba16.png": [8,8,128,{"jp":[1078992,25088],"us":[1083968,18944],"eu":[909712,20480],"sh":[934640,25088]}], -"textures/segment2/segment2.06280.rgba16.png": [8,8,128,{"jp":[1078992,25216],"us":[1083968,19072],"eu":[909712,20608],"sh":[934640,25216]}], -"textures/segment2/segment2.06300.rgba16.png": [8,8,128,{"jp":[1078992,25344],"us":[1083968,19200],"eu":[909712,20736],"sh":[934640,25344]}], -"textures/segment2/segment2.06380.rgba16.png": [8,8,128,{"jp":[1078992,25472],"us":[1083968,19328],"eu":[909712,20864],"sh":[934640,25472]}], -"textures/segment2/segment2.06400.rgba16.png": [8,8,128,{"jp":[1078992,25600],"us":[1083968,19456],"eu":[909712,20992],"sh":[934640,25600]}], -"textures/segment2/segment2.06480.rgba16.png": [8,8,128,{"jp":[1078992,25728],"us":[1083968,19584],"eu":[909712,21120],"sh":[934640,25728]}], -"textures/segment2/segment2.06500.rgba16.png": [8,8,128,{"jp":[1078992,25856],"us":[1083968,19712],"eu":[909712,21248],"sh":[934640,25856]}], -"textures/segment2/segment2.06580.rgba16.png": [8,8,128,{"jp":[1078992,25984],"us":[1083968,19840],"eu":[909712,21376],"sh":[934640,25984]}], -"textures/segment2/segment2.06600.rgba16.png": [8,8,128,{"jp":[1078992,26112],"us":[1083968,19968],"eu":[909712,21504],"sh":[934640,26112]}], -"textures/segment2/segment2.06680.rgba16.png": [8,8,128,{"jp":[1078992,26240],"us":[1083968,20096],"eu":[909712,21632],"sh":[934640,26240]}], -"textures/segment2/segment2.06700.rgba16.png": [8,8,128,{"jp":[1078992,26368],"us":[1083968,20224],"eu":[909712,21760],"sh":[934640,26368]}], -"textures/segment2/segment2.06780.rgba16.png": [8,8,128,{"jp":[1078992,26496],"us":[1083968,20352],"eu":[909712,21888],"sh":[934640,26496]}], -"textures/segment2/segment2.06800.rgba16.png": [8,8,128,{"jp":[1078992,26624],"us":[1083968,20480],"eu":[909712,22016],"sh":[934640,26624]}], -"textures/segment2/segment2.06880.rgba16.png": [8,8,128,{"jp":[1078992,26752],"us":[1083968,20608],"eu":[909712,22144],"sh":[934640,26752]}], -"textures/segment2/segment2.06900.rgba16.png": [8,8,128,{"jp":[1078992,26880],"us":[1083968,20736],"eu":[909712,22272],"sh":[934640,26880]}], -"textures/segment2/segment2.06980.rgba16.png": [8,8,128,{"jp":[1078992,27008],"us":[1083968,20864],"eu":[909712,22400],"sh":[934640,27008]}], -"textures/segment2/segment2.06A00.rgba16.png": [8,8,128,{"jp":[1078992,27136],"us":[1083968,20992],"eu":[909712,22528],"sh":[934640,27136]}], -"textures/segment2/segment2.06A80.rgba16.png": [8,8,128,{"jp":[1078992,27264],"us":[1083968,21120],"eu":[909712,22656],"sh":[934640,27264]}], -"textures/segment2/segment2.06B00.rgba16.png": [8,8,128,{"jp":[1078992,27392],"us":[1083968,21248],"eu":[909712,22784],"sh":[934640,27392]}], -"textures/segment2/segment2.06B80.rgba16.png": [8,8,128,{"jp":[1078992,27520],"us":[1083968,21376],"eu":[909712,22912],"sh":[934640,27520]}], -"textures/segment2/segment2.06C00.rgba16.png": [8,8,128,{"jp":[1078992,27648],"us":[1083968,21504],"eu":[909712,23040],"sh":[934640,27648]}], -"textures/segment2/segment2.06C80.rgba16.png": [8,8,128,{"jp":[1078992,27776],"us":[1083968,21632],"eu":[909712,23168],"sh":[934640,27776]}], -"textures/segment2/segment2.06D00.rgba16.png": [8,8,128,{"jp":[1078992,27904],"us":[1083968,21760],"eu":[909712,23296],"sh":[934640,27904]}], -"textures/segment2/segment2.06D80.rgba16.png": [8,8,128,{"jp":[1078992,28032],"us":[1083968,21888],"eu":[909712,23424],"sh":[934640,28032]}], -"textures/segment2/segment2.06E00.rgba16.png": [8,8,128,{"jp":[1078992,28160],"us":[1083968,22016],"eu":[909712,23552],"sh":[934640,28160]}], -"textures/segment2/segment2.06E80.rgba16.png": [8,8,128,{"jp":[1078992,28288],"us":[1083968,22144],"eu":[909712,23680],"sh":[934640,28288]}], -"textures/segment2/segment2.06F00.rgba16.png": [8,8,128,{"jp":[1078992,28416],"us":[1083968,22272],"eu":[909712,23808],"sh":[934640,28416]}], -"textures/segment2/segment2.06F80.rgba16.png": [8,8,128,{"jp":[1078992,28544],"us":[1083968,22400],"eu":[909712,23936],"sh":[934640,28544]}], -"textures/segment2/segment2.07000.rgba16.png": [8,8,128,{"jp":[1078992,28672],"us":[1083968,22528],"eu":[909712,24064],"sh":[934640,28672]}], -"textures/segment2/segment2.07080.rgba16.png": [8,8,128,{"jp":[1078992,28800],"us":[1083968,22656],"eu":[909712,24192],"sh":[934640,28800]}], +"textures/segment2/segment2.06200.rgba16.png": [8,8,128,{"jp":[1078992,25088],"us":[1083968,18944],"eu":[909712,20480],"sh":[934640,25088],"cn":[947456,82432]}], +"textures/segment2/segment2.06280.rgba16.png": [8,8,128,{"jp":[1078992,25216],"us":[1083968,19072],"eu":[909712,20608],"sh":[934640,25216],"cn":[947456,82560]}], +"textures/segment2/segment2.06300.rgba16.png": [8,8,128,{"jp":[1078992,25344],"us":[1083968,19200],"eu":[909712,20736],"sh":[934640,25344],"cn":[947456,82688]}], +"textures/segment2/segment2.06380.rgba16.png": [8,8,128,{"jp":[1078992,25472],"us":[1083968,19328],"eu":[909712,20864],"sh":[934640,25472],"cn":[947456,82816]}], +"textures/segment2/segment2.06400.rgba16.png": [8,8,128,{"jp":[1078992,25600],"us":[1083968,19456],"eu":[909712,20992],"sh":[934640,25600],"cn":[947456,82944]}], +"textures/segment2/segment2.06480.rgba16.png": [8,8,128,{"jp":[1078992,25728],"us":[1083968,19584],"eu":[909712,21120],"sh":[934640,25728],"cn":[947456,83072]}], +"textures/segment2/segment2.06500.rgba16.png": [8,8,128,{"jp":[1078992,25856],"us":[1083968,19712],"eu":[909712,21248],"sh":[934640,25856],"cn":[947456,83200]}], +"textures/segment2/segment2.06580.rgba16.png": [8,8,128,{"jp":[1078992,25984],"us":[1083968,19840],"eu":[909712,21376],"sh":[934640,25984],"cn":[947456,83328]}], +"textures/segment2/segment2.06600.rgba16.png": [8,8,128,{"jp":[1078992,26112],"us":[1083968,19968],"eu":[909712,21504],"sh":[934640,26112],"cn":[947456,83456]}], +"textures/segment2/segment2.06680.rgba16.png": [8,8,128,{"jp":[1078992,26240],"us":[1083968,20096],"eu":[909712,21632],"sh":[934640,26240],"cn":[947456,83584]}], +"textures/segment2/segment2.06700.rgba16.png": [8,8,128,{"jp":[1078992,26368],"us":[1083968,20224],"eu":[909712,21760],"sh":[934640,26368],"cn":[947456,83712]}], +"textures/segment2/segment2.06780.rgba16.png": [8,8,128,{"jp":[1078992,26496],"us":[1083968,20352],"eu":[909712,21888],"sh":[934640,26496],"cn":[947456,83840]}], +"textures/segment2/segment2.06800.rgba16.png": [8,8,128,{"jp":[1078992,26624],"us":[1083968,20480],"eu":[909712,22016],"sh":[934640,26624],"cn":[947456,83968]}], +"textures/segment2/segment2.06880.rgba16.png": [8,8,128,{"jp":[1078992,26752],"us":[1083968,20608],"eu":[909712,22144],"sh":[934640,26752],"cn":[947456,84096]}], +"textures/segment2/segment2.06900.rgba16.png": [8,8,128,{"jp":[1078992,26880],"us":[1083968,20736],"eu":[909712,22272],"sh":[934640,26880],"cn":[947456,84224]}], +"textures/segment2/segment2.06980.rgba16.png": [8,8,128,{"jp":[1078992,27008],"us":[1083968,20864],"eu":[909712,22400],"sh":[934640,27008],"cn":[947456,84352]}], +"textures/segment2/segment2.06A00.rgba16.png": [8,8,128,{"jp":[1078992,27136],"us":[1083968,20992],"eu":[909712,22528],"sh":[934640,27136],"cn":[947456,84480]}], +"textures/segment2/segment2.06A80.rgba16.png": [8,8,128,{"jp":[1078992,27264],"us":[1083968,21120],"eu":[909712,22656],"sh":[934640,27264],"cn":[947456,84608]}], +"textures/segment2/segment2.06B00.rgba16.png": [8,8,128,{"jp":[1078992,27392],"us":[1083968,21248],"eu":[909712,22784],"sh":[934640,27392],"cn":[947456,84736]}], +"textures/segment2/segment2.06B80.rgba16.png": [8,8,128,{"jp":[1078992,27520],"us":[1083968,21376],"eu":[909712,22912],"sh":[934640,27520],"cn":[947456,84864]}], +"textures/segment2/segment2.06C00.rgba16.png": [8,8,128,{"jp":[1078992,27648],"us":[1083968,21504],"eu":[909712,23040],"sh":[934640,27648],"cn":[947456,84992]}], +"textures/segment2/segment2.06C80.rgba16.png": [8,8,128,{"jp":[1078992,27776],"us":[1083968,21632],"eu":[909712,23168],"sh":[934640,27776],"cn":[947456,85120]}], +"textures/segment2/segment2.06D00.rgba16.png": [8,8,128,{"jp":[1078992,27904],"us":[1083968,21760],"eu":[909712,23296],"sh":[934640,27904],"cn":[947456,85248]}], +"textures/segment2/segment2.06D80.rgba16.png": [8,8,128,{"jp":[1078992,28032],"us":[1083968,21888],"eu":[909712,23424],"sh":[934640,28032],"cn":[947456,85376]}], +"textures/segment2/segment2.06E00.rgba16.png": [8,8,128,{"jp":[1078992,28160],"us":[1083968,22016],"eu":[909712,23552],"sh":[934640,28160],"cn":[947456,85504]}], +"textures/segment2/segment2.06E80.rgba16.png": [8,8,128,{"jp":[1078992,28288],"us":[1083968,22144],"eu":[909712,23680],"sh":[934640,28288],"cn":[947456,85632]}], +"textures/segment2/segment2.06F00.rgba16.png": [8,8,128,{"jp":[1078992,28416],"us":[1083968,22272],"eu":[909712,23808],"sh":[934640,28416],"cn":[947456,85760]}], +"textures/segment2/segment2.06F80.rgba16.png": [8,8,128,{"jp":[1078992,28544],"us":[1083968,22400],"eu":[909712,23936],"sh":[934640,28544],"cn":[947456,85888]}], +"textures/segment2/segment2.07000.rgba16.png": [8,8,128,{"jp":[1078992,28672],"us":[1083968,22528],"eu":[909712,24064],"sh":[934640,28672],"cn":[947456,86016]}], +"textures/segment2/segment2.07080.rgba16.png": [8,8,128,{"jp":[1078992,28800],"us":[1083968,22656],"eu":[909712,24192],"sh":[934640,28800],"cn":[947456,86144]}], "textures/segment2/segment2.07100.ia1.png": [8,16,16,{"jp":[1078992,28928],"sh":[934640,28928]}], "textures/segment2/segment2.07110.ia1.png": [8,16,16,{"jp":[1078992,28944],"sh":[934640,28944]}], "textures/segment2/segment2.07120.ia1.png": [8,16,16,{"jp":[1078992,28960],"sh":[934640,28960]}], @@ -1640,7 +1647,7 @@ "textures/segment2/segment2.07310.ia1.png": [8,16,16,{"jp":[1078992,29456],"sh":[934640,29456]}], "textures/segment2/segment2.07320.ia1.png": [8,16,16,{"jp":[1078992,29472],"sh":[934640,29472]}], "textures/segment2/segment2.07330.ia1.png": [8,16,16,{"jp":[1078992,29488],"sh":[934640,29488]}], -"textures/segment2/segment2.07340.ia1.png": [8,16,16,{"jp":[1078992,29504],"us":[1083968,24050],"eu":[2647072,44317],"sh":[934640,29504]}], +"textures/segment2/segment2.07340.ia1.png": [8,16,16,{"jp":[1078992,29504],"us":[1083968,24050],"eu":[2647072,44317],"sh":[934640,29504],"cn":[947456,87538]}], "textures/segment2/segment2.07350.ia1.png": [8,16,16,{"jp":[1078992,29520],"sh":[934640,29520]}], "textures/segment2/segment2.07360.ia1.png": [8,16,16,{"jp":[1078992,29536],"sh":[934640,29536]}], "textures/segment2/segment2.07370.ia1.png": [8,16,16,{"jp":[1078992,29552],"sh":[934640,29552]}], @@ -1769,74 +1776,2350 @@ "textures/segment2/segment2.07B20.ia1.png": [8,16,16,{"jp":[1078992,31520],"sh":[934640,31520]}], "textures/segment2/segment2.07B30.ia1.png": [8,16,16,{"jp":[1078992,31536],"sh":[934640,31536]}], "textures/segment2/segment2.07B40.ia1.png": [8,16,16,{"jp":[1078992,31552],"sh":[934640,31552]}], -"textures/segment2/segment2.07B50.rgba16.png": [16,16,512,{"jp":[1078992,31568],"us":[1083968,28672],"eu":[909712,25920],"sh":[934640,31568]}], -"textures/segment2/segment2.07D50.rgba16.png": [16,16,512,{"jp":[1078992,32080],"us":[1083968,29184],"eu":[909712,26432],"sh":[934640,32080]}], -"textures/segment2/segment2.07F50.rgba16.png": [16,16,512,{"jp":[1078992,32592],"us":[1083968,29696],"eu":[909712,26944],"sh":[934640,32592]}], -"textures/segment2/segment2.08150.rgba16.png": [8,8,128,{"jp":[1078992,33104],"us":[1083968,30208],"eu":[909712,27456],"sh":[934640,33104]}], -"textures/segment2/segment2.081D0.rgba16.png": [8,8,128,{"jp":[1078992,33232],"us":[1083968,30336],"eu":[909712,27584],"sh":[934640,33232]}], -"textures/segment2/segment2.0F458.ia8.png": [32,64,2048,{"jp":[1078992,62552],"us":[1083968,74424],"eu":[909712,31096],"sh":[934640,62552]}], -"textures/segment2/segment2.0FC58.ia8.png": [32,64,2048,{"jp":[1078992,64600],"us":[1083968,76472],"eu":[909712,33144],"sh":[934640,64600]}], -"textures/segment2/segment2.10458.ia8.png": [64,64,4096,{"jp":[1078992,66648],"us":[1083968,78520],"eu":[909712,35192],"sh":[934640,66648]}], -"textures/segment2/segment2.11458.ia8.png": [32,64,2048,{"jp":[1078992,70744],"us":[1083968,82616],"eu":[909712,39288],"sh":[934640,70744]}], -"textures/segment2/segment2.11C58.rgba16.png": [32,32,2048,{"jp":[1078992,72792],"us":[1083968,84664],"eu":[909712,41336],"sh":[934640,72792]}], -"textures/segment2/segment2.12458.rgba16.png": [32,32,2048,{"jp":[1078992,74840],"us":[1083968,86712],"eu":[909712,43384],"sh":[934640,74840]}], -"textures/segment2/segment2.12C58.rgba16.png": [32,32,2048,{"jp":[1078992,76888],"us":[1083968,88760],"eu":[909712,45432],"sh":[934640,76888]}], -"textures/segment2/segment2.13458.ia16.png": [32,32,2048,{"jp":[1078992,78936],"us":[1083968,90808],"eu":[909712,47480],"sh":[934640,78936]}], -"textures/segment2/segment2.13C58.rgba16.png": [32,32,2048,{"jp":[1078992,80984],"us":[1083968,92856],"eu":[909712,49528],"sh":[934640,80984]}], -"textures/segment2/segment2.14838.ia8.png": [8,8,64,{"jp":[1078992,84024],"us":[1083968,95896],"eu":[909712,52568],"sh":[934640,84024]}], +"textures/segment2/segment2.07B50.rgba16.png": [16,16,512,{"jp":[1078992,31568],"us":[1083968,28672],"eu":[909712,25920],"sh":[934640,31568],"cn":[947456,126592]}], +"textures/segment2/segment2.07D50.rgba16.png": [16,16,512,{"jp":[1078992,32080],"us":[1083968,29184],"eu":[909712,26432],"sh":[934640,32080],"cn":[947456,127104]}], +"textures/segment2/segment2.07F50.rgba16.png": [16,16,512,{"jp":[1078992,32592],"us":[1083968,29696],"eu":[909712,26944],"sh":[934640,32592],"cn":[947456,127616]}], +"textures/segment2/segment2.08150.rgba16.png": [8,8,128,{"jp":[1078992,33104],"us":[1083968,30208],"eu":[909712,27456],"sh":[934640,33104],"cn":[947456,128128]}], +"textures/segment2/segment2.081D0.rgba16.png": [8,8,128,{"jp":[1078992,33232],"us":[1083968,30336],"eu":[909712,27584],"sh":[934640,33232],"cn":[947456,128256]}], +"textures/segment2/segment2.0F458.ia8.png": [32,64,2048,{"jp":[1078992,62552],"us":[1083968,74424],"eu":[909712,31096],"sh":[934640,62552],"cn":[947456,174888]}], +"textures/segment2/segment2.0FC58.ia8.png": [32,64,2048,{"jp":[1078992,64600],"us":[1083968,76472],"eu":[909712,33144],"sh":[934640,64600],"cn":[947456,176936]}], +"textures/segment2/segment2.10458.ia8.png": [64,64,4096,{"jp":[1078992,66648],"us":[1083968,78520],"eu":[909712,35192],"sh":[934640,66648],"cn":[947456,178984]}], +"textures/segment2/segment2.11458.ia8.png": [32,64,2048,{"jp":[1078992,70744],"us":[1083968,82616],"eu":[909712,39288],"sh":[934640,70744],"cn":[947456,183080]}], +"textures/segment2/segment2.11C58.rgba16.png": [32,32,2048,{"jp":[1078992,72792],"us":[1083968,84664],"eu":[909712,41336],"sh":[934640,72792],"cn":[947456,185128]}], +"textures/segment2/segment2.12458.rgba16.png": [32,32,2048,{"jp":[1078992,74840],"us":[1083968,86712],"eu":[909712,43384],"sh":[934640,74840],"cn":[947456,187176]}], +"textures/segment2/segment2.12C58.rgba16.png": [32,32,2048,{"jp":[1078992,76888],"us":[1083968,88760],"eu":[909712,45432],"sh":[934640,76888],"cn":[947456,189224]}], +"textures/segment2/segment2.13458.ia16.png": [32,32,2048,{"jp":[1078992,78936],"us":[1083968,90808],"eu":[909712,47480],"sh":[934640,78936],"cn":[947456,191272]}], +"textures/segment2/segment2.13C58.rgba16.png": [32,32,2048,{"jp":[1078992,80984],"us":[1083968,92856],"eu":[909712,49528],"sh":[934640,80984],"cn":[947456,193320]}], +"textures/segment2/segment2.14838.ia8.png": [8,8,64,{"jp":[1078992,84024],"us":[1083968,95896],"eu":[909712,52568],"sh":[934640,84024],"cn":[947456,196360]}], "textures/segment2/segment2.umlaut.rgba16.png": [16,16,512,{"eu":[909712,17920]}], -"textures/segment2/shadow_quarter_circle.ia8.png": [16,16,256,{"jp":[1078992,62040],"us":[1083968,73912],"eu":[909712,30584],"sh":[934640,62040]}], -"textures/segment2/shadow_quarter_square.ia8.png": [16,16,256,{"jp":[1078992,62296],"us":[1083968,74168],"eu":[909712,30840],"sh":[934640,62296]}], -"textures/sky/metal_hole.rgba16.png": [32,32,2048,{"jp":[3390640,26624],"us":[3397392,26624],"eu":[3270992,26624],"sh":[3245360,26624]}], -"textures/sky/rr_textures.00000.rgba16.png": [32,32,2048,{"jp":[3390640,0],"us":[3397392,0],"eu":[3270992,0],"sh":[3245360,0]}], -"textures/sky/rr_textures.00800.rgba16.png": [32,32,2048,{"jp":[3390640,2048],"us":[3397392,2048],"eu":[3270992,2048],"sh":[3245360,2048]}], -"textures/sky/rr_textures.01000.rgba16.png": [32,32,2048,{"jp":[3390640,4096],"us":[3397392,4096],"eu":[3270992,4096],"sh":[3245360,4096]}], -"textures/sky/rr_textures.01800.rgba16.png": [32,32,2048,{"jp":[3390640,6144],"us":[3397392,6144],"eu":[3270992,6144],"sh":[3245360,6144]}], -"textures/sky/rr_textures.02000.rgba16.png": [32,64,4096,{"jp":[3390640,8192],"us":[3397392,8192],"eu":[3270992,8192],"sh":[3245360,8192]}], -"textures/sky/rr_textures.03000.rgba16.png": [32,32,2048,{"jp":[3390640,12288],"us":[3397392,12288],"eu":[3270992,12288],"sh":[3245360,12288]}], -"textures/sky/rr_textures.03800.rgba16.png": [64,32,4096,{"jp":[3390640,14336],"us":[3397392,14336],"eu":[3270992,14336],"sh":[3245360,14336]}], -"textures/sky/rr_textures.04800.rgba16.png": [32,32,2048,{"jp":[3390640,18432],"us":[3397392,18432],"eu":[3270992,18432],"sh":[3245360,18432]}], -"textures/sky/rr_textures.05000.rgba16.png": [32,32,2048,{"jp":[3390640,20480],"us":[3397392,20480],"eu":[3270992,20480],"sh":[3245360,20480]}], -"textures/sky/rr_textures.05800.rgba16.png": [32,32,2048,{"jp":[3390640,22528],"us":[3397392,22528],"eu":[3270992,22528],"sh":[3245360,22528]}], -"textures/sky/rr_textures.06000.rgba16.png": [32,32,2048,{"jp":[3390640,24576],"us":[3397392,24576],"eu":[3270992,24576],"sh":[3245360,24576]}], -"textures/sky/rr_textures.07000.rgba16.png": [32,32,2048,{"jp":[3390640,28672],"us":[3397392,28672],"eu":[3270992,28672],"sh":[3245360,28672]}], -"textures/sky/rr_textures.07800.rgba16.png": [32,32,2048,{"jp":[3390640,30720],"us":[3397392,30720],"eu":[3270992,30720],"sh":[3245360,30720]}], -"textures/sky/rr_textures.08000.rgba16.png": [32,32,2048,{"jp":[3390640,32768],"us":[3397392,32768],"eu":[3270992,32768],"sh":[3245360,32768]}], -"textures/snow/ccm_textures.00000.rgba16.png": [32,32,2048,{"jp":[3405536,0],"us":[3412288,0],"eu":[3285888,0],"sh":[3260256,0]}], -"textures/snow/ccm_textures.00800.rgba16.png": [32,32,2048,{"jp":[3405536,2048],"us":[3412288,2048],"eu":[3285888,2048],"sh":[3260256,2048]}], -"textures/snow/ccm_textures.01000.rgba16.png": [32,64,4096,{"jp":[3405536,4096],"us":[3412288,4096],"eu":[3285888,4096],"sh":[3260256,4096]}], -"textures/snow/ccm_textures.02000.rgba16.png": [32,32,2048,{"jp":[3405536,8192],"us":[3412288,8192],"eu":[3285888,8192],"sh":[3260256,8192]}], -"textures/snow/ccm_textures.02800.rgba16.png": [32,32,2048,{"jp":[3405536,10240],"us":[3412288,10240],"eu":[3285888,10240],"sh":[3260256,10240]}], -"textures/snow/ccm_textures.03000.rgba16.png": [32,32,2048,{"jp":[3405536,12288],"us":[3412288,12288],"eu":[3285888,12288],"sh":[3260256,12288]}], -"textures/snow/ccm_textures.03800.rgba16.png": [32,32,2048,{"jp":[3405536,14336],"us":[3412288,14336],"eu":[3285888,14336],"sh":[3260256,14336]}], -"textures/snow/ccm_textures.04000.rgba16.png": [32,32,2048,{"jp":[3405536,16384],"us":[3412288,16384],"eu":[3285888,16384],"sh":[3260256,16384]}], -"textures/snow/ccm_textures.04800.rgba16.png": [32,32,2048,{"jp":[3405536,18432],"us":[3412288,18432],"eu":[3285888,18432],"sh":[3260256,18432]}], -"textures/snow/ccm_textures.05000.rgba16.png": [32,32,2048,{"jp":[3405536,20480],"us":[3412288,20480],"eu":[3285888,20480],"sh":[3260256,20480]}], -"textures/snow/ccm_textures.05800.rgba16.png": [32,32,2048,{"jp":[3405536,22528],"us":[3412288,22528],"eu":[3285888,22528],"sh":[3260256,22528]}], -"textures/snow/ccm_textures.06000.rgba16.png": [32,32,2048,{"jp":[3405536,24576],"us":[3412288,24576],"eu":[3285888,24576],"sh":[3260256,24576]}], -"textures/snow/ccm_textures.06800.rgba16.png": [32,32,2048,{"jp":[3405536,26624],"us":[3412288,26624],"eu":[3285888,26624],"sh":[3260256,26624]}], -"textures/snow/ccm_textures.07000.rgba16.png": [64,32,4096,{"jp":[3405536,28672],"us":[3412288,28672],"eu":[3285888,28672],"sh":[3260256,28672]}], -"textures/snow/ccm_textures.08000.rgba16.png": [32,32,2048,{"jp":[3405536,32768],"us":[3412288,32768],"eu":[3285888,32768],"sh":[3260256,32768]}], -"textures/snow/ccm_textures.08800.rgba16.png": [32,32,2048,{"jp":[3405536,34816],"us":[3412288,34816],"eu":[3285888,34816],"sh":[3260256,34816]}], -"textures/snow/ccm_textures.09000.ia16.png": [32,32,2048,{"jp":[3405536,36864],"us":[3412288,36864],"eu":[3285888,36864],"sh":[3260256,36864]}], -"textures/snow/ccm_textures.09800.ia16.png": [32,32,2048,{"jp":[3405536,38912],"us":[3412288,38912],"eu":[3285888,38912],"sh":[3260256,38912]}], -"textures/spooky/bbh_textures.00000.rgba16.png": [32,32,2048,{"jp":[3298272,0],"us":[3305024,0],"eu":[3178624,0],"sh":[3152992,0]}], -"textures/spooky/bbh_textures.00800.rgba16.png": [32,64,4096,{"jp":[3298272,2048],"us":[3305024,2048],"eu":[3178624,2048],"sh":[3152992,2048]}], -"textures/spooky/bbh_textures.01800.rgba16.png": [32,64,4096,{"jp":[3298272,6144],"us":[3305024,6144],"eu":[3178624,6144],"sh":[3152992,6144]}], -"textures/spooky/bbh_textures.02800.rgba16.png": [32,64,4096,{"jp":[3298272,10240],"us":[3305024,10240],"eu":[3178624,10240],"sh":[3152992,10240]}], -"textures/spooky/bbh_textures.03800.rgba16.png": [32,64,4096,{"jp":[3298272,14336],"us":[3305024,14336],"eu":[3178624,14336],"sh":[3152992,14336]}], -"textures/spooky/bbh_textures.04800.rgba16.png": [32,32,2048,{"jp":[3298272,18432],"us":[3305024,18432],"eu":[3178624,18432],"sh":[3152992,18432]}], -"textures/spooky/bbh_textures.05000.rgba16.png": [32,64,4096,{"jp":[3298272,20480],"us":[3305024,20480],"eu":[3178624,20480],"sh":[3152992,20480]}], -"textures/spooky/bbh_textures.06000.rgba16.png": [32,32,2048,{"jp":[3298272,24576],"us":[3305024,24576],"eu":[3178624,24576],"sh":[3152992,24576]}], -"textures/spooky/bbh_textures.06800.rgba16.png": [32,32,2048,{"jp":[3298272,26624],"us":[3305024,26624],"eu":[3178624,26624],"sh":[3152992,26624]}], -"textures/spooky/bbh_textures.07000.rgba16.png": [64,32,4096,{"jp":[3298272,28672],"us":[3305024,28672],"eu":[3178624,28672],"sh":[3152992,28672]}], -"textures/spooky/bbh_textures.08000.rgba16.png": [32,32,2048,{"jp":[3298272,32768],"us":[3305024,32768],"eu":[3178624,32768],"sh":[3152992,32768]}], -"textures/spooky/bbh_textures.08800.rgba16.png": [32,32,2048,{"jp":[3298272,34816],"us":[3305024,34816],"eu":[3178624,34816],"sh":[3152992,34816]}], -"textures/spooky/bbh_textures.09000.rgba16.png": [64,32,4096,{"jp":[3298272,36864],"us":[3305024,36864],"eu":[3178624,36864],"sh":[3152992,36864]}], -"textures/spooky/bbh_textures.0A000.rgba16.png": [32,32,2048,{"jp":[1462368,49800],"us":[1469536,49800],"eu":[1341504,49800],"sh":[1318016,49800]}], -"textures/spooky/bbh_textures.0A800.ia16.png": [32,32,2048,{"jp":[3298272,43008],"us":[3305024,43008],"eu":[3178624,43008],"sh":[3152992,43008]}], -"textures/spooky/bbh_textures.0B000.ia16.png": [32,32,2048,{"jp":[3298272,45056],"us":[3305024,45056],"eu":[3178624,45056],"sh":[3152992,45056]}], -"textures/spooky/bbh_textures.0B800.ia16.png": [32,64,4096,{"jp":[3298272,47104],"us":[3305024,47104],"eu":[3178624,47104],"sh":[3152992,47104]}], +"textures/segment2/segment2_cn.04A00.rgba16.png": [16,16,512,{"cn":[947456,18944]}], +"textures/segment2/segment2_cn.04C00.rgba16.png": [16,16,512,{"cn":[947456,19456]}], +"textures/segment2/segment2_cn.04E00.rgba16.png": [16,16,512,{"cn":[947456,19968]}], +"textures/segment2/segment2_cn.05000.rgba16.png": [16,16,512,{"cn":[947456,20480]}], +"textures/segment2/segment2_cn.05200.rgba16.png": [16,16,512,{"cn":[947456,20992]}], +"textures/segment2/segment2_cn.05400.rgba16.png": [16,16,512,{"cn":[947456,21504]}], +"textures/segment2/segment2_cn.05600.rgba16.png": [16,16,512,{"cn":[947456,22016]}], +"textures/segment2/segment2_cn.05800.rgba16.png": [16,16,512,{"cn":[947456,22528]}], +"textures/segment2/segment2_cn.05A00.rgba16.png": [16,16,512,{"cn":[947456,23040]}], +"textures/segment2/segment2_cn.05C00.rgba16.png": [16,16,512,{"cn":[947456,23552]}], +"textures/segment2/segment2_cn.05E00.rgba16.png": [16,16,512,{"cn":[947456,24064]}], +"textures/segment2/segment2_cn.06000.rgba16.png": [16,16,512,{"cn":[947456,24576]}], +"textures/segment2/segment2_cn.06200.rgba16.png": [16,16,512,{"cn":[947456,25088]}], +"textures/segment2/segment2_cn.06400.rgba16.png": [16,16,512,{"cn":[947456,25600]}], +"textures/segment2/segment2_cn.06600.rgba16.png": [16,16,512,{"cn":[947456,26112]}], +"textures/segment2/segment2_cn.06800.rgba16.png": [16,16,512,{"cn":[947456,26624]}], +"textures/segment2/segment2_cn.06A00.rgba16.png": [16,16,512,{"cn":[947456,27136]}], +"textures/segment2/segment2_cn.06C00.rgba16.png": [16,16,512,{"cn":[947456,27648]}], +"textures/segment2/segment2_cn.06E00.rgba16.png": [16,16,512,{"cn":[947456,28160]}], +"textures/segment2/segment2_cn.07000.rgba16.png": [16,16,512,{"cn":[947456,28672]}], +"textures/segment2/segment2_cn.07200.rgba16.png": [16,16,512,{"cn":[947456,29184]}], +"textures/segment2/segment2_cn.07400.rgba16.png": [16,16,512,{"cn":[947456,29696]}], +"textures/segment2/segment2_cn.07600.rgba16.png": [16,16,512,{"cn":[947456,30208]}], +"textures/segment2/segment2_cn.07800.rgba16.png": [16,16,512,{"cn":[947456,30720]}], +"textures/segment2/segment2_cn.07A00.rgba16.png": [16,16,512,{"cn":[947456,31232]}], +"textures/segment2/segment2_cn.07C00.rgba16.png": [16,16,512,{"cn":[947456,31744]}], +"textures/segment2/segment2_cn.07E00.rgba16.png": [16,16,512,{"cn":[947456,32256]}], +"textures/segment2/segment2_cn.08000.rgba16.png": [16,16,512,{"cn":[947456,32768]}], +"textures/segment2/segment2_cn.08200.rgba16.png": [16,16,512,{"cn":[947456,33280]}], +"textures/segment2/segment2_cn.08400.rgba16.png": [16,16,512,{"cn":[947456,33792]}], +"textures/segment2/segment2_cn.08600.rgba16.png": [16,16,512,{"cn":[947456,34304]}], +"textures/segment2/segment2_cn.08800.rgba16.png": [16,16,512,{"cn":[947456,34816]}], +"textures/segment2/segment2_cn.08A00.rgba16.png": [16,16,512,{"cn":[947456,35328]}], +"textures/segment2/segment2_cn.08C00.rgba16.png": [16,16,512,{"cn":[947456,35840]}], +"textures/segment2/segment2_cn.08E00.rgba16.png": [16,16,512,{"cn":[947456,36352]}], +"textures/segment2/segment2_cn.09000.rgba16.png": [16,16,512,{"cn":[947456,36864]}], +"textures/segment2/segment2_cn.09200.rgba16.png": [16,16,512,{"cn":[947456,37376]}], +"textures/segment2/segment2_cn.09400.rgba16.png": [16,16,512,{"cn":[947456,37888]}], +"textures/segment2/segment2_cn.09600.rgba16.png": [16,16,512,{"cn":[947456,38400]}], +"textures/segment2/segment2_cn.09800.rgba16.png": [16,16,512,{"cn":[947456,38912]}], +"textures/segment2/segment2_cn.09A00.rgba16.png": [16,16,512,{"cn":[947456,39424]}], +"textures/segment2/segment2_cn.09C00.rgba16.png": [16,16,512,{"cn":[947456,39936]}], +"textures/segment2/segment2_cn.09E00.rgba16.png": [16,16,512,{"cn":[947456,40448]}], +"textures/segment2/segment2_cn.0A000.rgba16.png": [16,16,512,{"cn":[947456,40960]}], +"textures/segment2/segment2_cn.0A200.rgba16.png": [16,16,512,{"cn":[947456,41472]}], +"textures/segment2/segment2_cn.0A400.rgba16.png": [16,16,512,{"cn":[947456,41984]}], +"textures/segment2/segment2_cn.0A600.rgba16.png": [16,16,512,{"cn":[947456,42496]}], +"textures/segment2/segment2_cn.0A800.rgba16.png": [16,16,512,{"cn":[947456,43008]}], +"textures/segment2/segment2_cn.0AA00.rgba16.png": [16,16,512,{"cn":[947456,43520]}], +"textures/segment2/segment2_cn.0AC00.rgba16.png": [16,16,512,{"cn":[947456,44032]}], +"textures/segment2/segment2_cn.0AE00.rgba16.png": [16,16,512,{"cn":[947456,44544]}], +"textures/segment2/segment2_cn.0B000.rgba16.png": [16,16,512,{"cn":[947456,45056]}], +"textures/segment2/segment2_cn.0B200.rgba16.png": [16,16,512,{"cn":[947456,45568]}], +"textures/segment2/segment2_cn.0B400.rgba16.png": [16,16,512,{"cn":[947456,46080]}], +"textures/segment2/segment2_cn.0B600.rgba16.png": [16,16,512,{"cn":[947456,46592]}], +"textures/segment2/segment2_cn.0B800.rgba16.png": [16,16,512,{"cn":[947456,47104]}], +"textures/segment2/segment2_cn.0BA00.rgba16.png": [16,16,512,{"cn":[947456,47616]}], +"textures/segment2/segment2_cn.0BC00.rgba16.png": [16,16,512,{"cn":[947456,48128]}], +"textures/segment2/segment2_cn.0BE00.rgba16.png": [16,16,512,{"cn":[947456,48640]}], +"textures/segment2/segment2_cn.0C000.rgba16.png": [16,16,512,{"cn":[947456,49152]}], +"textures/segment2/segment2_cn.0C200.rgba16.png": [16,16,512,{"cn":[947456,49664]}], +"textures/segment2/segment2_cn.0C400.rgba16.png": [16,16,512,{"cn":[947456,50176]}], +"textures/segment2/segment2_cn.0C600.rgba16.png": [16,16,512,{"cn":[947456,50688]}], +"textures/segment2/segment2_cn.0C800.rgba16.png": [16,16,512,{"cn":[947456,51200]}], +"textures/segment2/segment2_cn.0CA00.rgba16.png": [16,16,512,{"cn":[947456,51712]}], +"textures/segment2/segment2_cn.0CC00.rgba16.png": [16,16,512,{"cn":[947456,52224]}], +"textures/segment2/segment2_cn.0CE00.rgba16.png": [16,16,512,{"cn":[947456,52736]}], +"textures/segment2/segment2_cn.0D000.rgba16.png": [16,16,512,{"cn":[947456,53248]}], +"textures/segment2/segment2_cn.0D200.rgba16.png": [16,16,512,{"cn":[947456,53760]}], +"textures/segment2/segment2_cn.0D400.rgba16.png": [16,16,512,{"cn":[947456,54272]}], +"textures/segment2/segment2_cn.0D600.rgba16.png": [16,16,512,{"cn":[947456,54784]}], +"textures/segment2/segment2_cn.0D800.rgba16.png": [16,16,512,{"cn":[947456,55296]}], +"textures/segment2/segment2_cn.0DA00.rgba16.png": [16,16,512,{"cn":[947456,55808]}], +"textures/segment2/segment2_cn.0DC00.rgba16.png": [16,16,512,{"cn":[947456,56320]}], +"textures/segment2/segment2_cn.0DE00.rgba16.png": [16,16,512,{"cn":[947456,56832]}], +"textures/segment2/segment2_cn.0E000.rgba16.png": [16,16,512,{"cn":[947456,57344]}], +"textures/segment2/segment2_cn.0E200.rgba16.png": [16,16,512,{"cn":[947456,57856]}], +"textures/segment2/segment2_cn.0E400.rgba16.png": [16,16,512,{"cn":[947456,58368]}], +"textures/segment2/segment2_cn.0E600.rgba16.png": [16,16,512,{"cn":[947456,58880]}], +"textures/segment2/segment2_cn.0E800.rgba16.png": [16,16,512,{"cn":[947456,59392]}], +"textures/segment2/segment2_cn.0EA00.rgba16.png": [16,16,512,{"cn":[947456,59904]}], +"textures/segment2/segment2_cn.0EC00.rgba16.png": [16,16,512,{"cn":[947456,60416]}], +"textures/segment2/segment2_cn.0EE00.rgba16.png": [16,16,512,{"cn":[947456,60928]}], +"textures/segment2/segment2_cn.0F000.rgba16.png": [16,16,512,{"cn":[947456,61440]}], +"textures/segment2/segment2_cn.0F200.rgba16.png": [16,16,512,{"cn":[947456,61952]}], +"textures/segment2/segment2_cn.0F400.rgba16.png": [16,16,512,{"cn":[947456,62464]}], +"textures/segment2/segment2_cn.0F600.rgba16.png": [16,16,512,{"cn":[947456,62976]}], +"textures/segment2/segment2_cn.0F800.rgba16.png": [16,16,512,{"cn":[947456,63488]}], +"textures/segment2/segment2_cn.0FA00.rgba16.png": [16,16,512,{"cn":[947456,64000]}], +"textures/segment2/segment2_cn.0FC00.rgba16.png": [16,16,512,{"cn":[947456,64512]}], +"textures/segment2/segment2_cn.0FE00.rgba16.png": [16,16,512,{"cn":[947456,65024]}], +"textures/segment2/segment2_cn.10000.rgba16.png": [16,16,512,{"cn":[947456,65536]}], +"textures/segment2/segment2_cn.10200.rgba16.png": [16,16,512,{"cn":[947456,66048]}], +"textures/segment2/segment2_cn.10400.rgba16.png": [16,16,512,{"cn":[947456,66560]}], +"textures/segment2/segment2_cn.10600.rgba16.png": [16,16,512,{"cn":[947456,67072]}], +"textures/segment2/segment2_cn.10800.rgba16.png": [16,16,512,{"cn":[947456,67584]}], +"textures/segment2/segment2_cn.10A00.rgba16.png": [16,16,512,{"cn":[947456,68096]}], +"textures/segment2/segment2_cn.10C00.rgba16.png": [16,16,512,{"cn":[947456,68608]}], +"textures/segment2/segment2_cn.10E00.rgba16.png": [16,16,512,{"cn":[947456,69120]}], +"textures/segment2/segment2_cn.11000.rgba16.png": [16,16,512,{"cn":[947456,69632]}], +"textures/segment2/segment2_cn.11200.rgba16.png": [16,16,512,{"cn":[947456,70144]}], +"textures/segment2/segment2_cn.11400.rgba16.png": [16,16,512,{"cn":[947456,70656]}], +"textures/segment2/segment2_cn.11600.rgba16.png": [16,16,512,{"cn":[947456,71168]}], +"textures/segment2/segment2_cn.11800.rgba16.png": [16,16,512,{"cn":[947456,71680]}], +"textures/segment2/segment2_cn.11A00.rgba16.png": [16,16,512,{"cn":[947456,72192]}], +"textures/segment2/segment2_cn.11C00.rgba16.png": [16,16,512,{"cn":[947456,72704]}], +"textures/segment2/segment2_cn.11E00.rgba16.png": [16,16,512,{"cn":[947456,73216]}], +"textures/segment2/segment2_cn.12000.rgba16.png": [16,16,512,{"cn":[947456,73728]}], +"textures/segment2/segment2_cn.12200.rgba16.png": [16,16,512,{"cn":[947456,74240]}], +"textures/segment2/segment2_cn.12400.rgba16.png": [16,16,512,{"cn":[947456,74752]}], +"textures/segment2/segment2_cn.12600.rgba16.png": [16,16,512,{"cn":[947456,75264]}], +"textures/segment2/segment2_cn.12800.rgba16.png": [16,16,512,{"cn":[947456,75776]}], +"textures/segment2/segment2_cn.12A00.rgba16.png": [16,16,512,{"cn":[947456,76288]}], +"textures/segment2/segment2_cn.12C00.rgba16.png": [16,16,512,{"cn":[947456,76800]}], +"textures/segment2/segment2_cn.12E00.rgba16.png": [16,16,512,{"cn":[947456,77312]}], +"textures/segment2/segment2_cn.13000.rgba16.png": [16,16,512,{"cn":[947456,77824]}], +"textures/segment2/segment2_cn.13200.rgba16.png": [16,16,512,{"cn":[947456,78336]}], +"textures/segment2/segment2_cn.13400.rgba16.png": [16,16,512,{"cn":[947456,78848]}], +"textures/segment2/segment2_cn.13600.rgba16.png": [16,16,512,{"cn":[947456,79360]}], +"textures/segment2/segment2_cn.13800.rgba16.png": [16,16,512,{"cn":[947456,79872]}], +"textures/segment2/segment2_cn.13A00.rgba16.png": [16,16,512,{"cn":[947456,80384]}], +"textures/segment2/segment2_cn.13C00.rgba16.png": [16,16,512,{"cn":[947456,80896]}], +"textures/segment2/segment2_cn.13E00.rgba16.png": [16,16,512,{"cn":[947456,81408]}], +"textures/segment2/segment2_cn.14000.rgba16.png": [16,16,512,{"cn":[947456,81920]}], +"textures/segment2/segment2_cn.16800.ia1.png": [16,8,16,{"cn":[947456,92160]}], +"textures/segment2/segment2_cn.16810.ia1.png": [16,8,16,{"cn":[947456,92176]}], +"textures/segment2/segment2_cn.16820.ia1.png": [16,8,16,{"cn":[947456,92192]}], +"textures/segment2/segment2_cn.16830.ia1.png": [16,8,16,{"cn":[947456,92208]}], +"textures/segment2/segment2_cn.16840.ia1.png": [16,8,16,{"cn":[947456,92224]}], +"textures/segment2/segment2_cn.16850.ia1.png": [16,8,16,{"cn":[947456,92240]}], +"textures/segment2/segment2_cn.16860.ia1.png": [16,8,16,{"cn":[947456,92256]}], +"textures/segment2/segment2_cn.16870.ia1.png": [16,8,16,{"cn":[947456,92272]}], +"textures/segment2/segment2_cn.16880.ia1.png": [16,8,16,{"cn":[947456,92288]}], +"textures/segment2/segment2_cn.16890.ia1.png": [16,8,16,{"cn":[947456,92304]}], +"textures/segment2/segment2_cn.168A0.ia1.png": [16,8,16,{"cn":[947456,92320]}], +"textures/segment2/segment2_cn.168B0.ia1.png": [16,8,16,{"cn":[947456,92336]}], +"textures/segment2/segment2_cn.168C0.ia1.png": [16,8,16,{"cn":[947456,92352]}], +"textures/segment2/segment2_cn.168D0.ia1.png": [16,8,16,{"cn":[947456,92368]}], +"textures/segment2/segment2_cn.168E0.ia1.png": [16,8,16,{"cn":[947456,92384]}], +"textures/segment2/segment2_cn.168F0.ia1.png": [16,8,16,{"cn":[947456,92400]}], +"textures/segment2/segment2_cn.16900.ia1.png": [16,8,16,{"cn":[947456,92416]}], +"textures/segment2/segment2_cn.16910.ia1.png": [16,8,16,{"cn":[947456,92432]}], +"textures/segment2/segment2_cn.16920.ia1.png": [16,8,16,{"cn":[947456,92448]}], +"textures/segment2/segment2_cn.16930.ia1.png": [16,8,16,{"cn":[947456,92464]}], +"textures/segment2/segment2_cn.16940.ia1.png": [16,8,16,{"cn":[947456,92480]}], +"textures/segment2/segment2_cn.16950.ia1.png": [16,8,16,{"cn":[947456,92496]}], +"textures/segment2/segment2_cn.16960.ia1.png": [16,8,16,{"cn":[947456,92512]}], +"textures/segment2/segment2_cn.16970.ia1.png": [16,8,16,{"cn":[947456,92528]}], +"textures/segment2/segment2_cn.16980.ia1.png": [16,8,16,{"cn":[947456,92544]}], +"textures/segment2/segment2_cn.16990.ia1.png": [16,8,16,{"cn":[947456,92560]}], +"textures/segment2/segment2_cn.169A0.ia1.png": [16,8,16,{"cn":[947456,92576]}], +"textures/segment2/segment2_cn.169B0.ia1.png": [16,8,16,{"cn":[947456,92592]}], +"textures/segment2/segment2_cn.169C0.ia1.png": [16,8,16,{"cn":[947456,92608]}], +"textures/segment2/segment2_cn.169D0.ia1.png": [16,8,16,{"cn":[947456,92624]}], +"textures/segment2/segment2_cn.169E0.ia1.png": [16,8,16,{"cn":[947456,92640]}], +"textures/segment2/segment2_cn.169F0.ia1.png": [16,8,16,{"cn":[947456,92656]}], +"textures/segment2/segment2_cn.16A00.ia1.png": [16,8,16,{"cn":[947456,92672]}], +"textures/segment2/segment2_cn.16A10.ia1.png": [16,8,16,{"cn":[947456,92688]}], +"textures/segment2/segment2_cn.16A20.ia1.png": [16,8,16,{"cn":[947456,92704]}], +"textures/segment2/segment2_cn.16A30.ia1.png": [16,8,16,{"cn":[947456,92720]}], +"textures/segment2/segment2_cn.16A40.ia1.png": [16,8,16,{"cn":[947456,92736]}], +"textures/segment2/segment2_cn.16A50.ia1.png": [16,8,16,{"cn":[947456,92752]}], +"textures/segment2/segment2_cn.16A60.ia1.png": [16,8,16,{"cn":[947456,92768]}], +"textures/segment2/segment2_cn.16A70.ia1.png": [16,8,16,{"cn":[947456,92784]}], +"textures/segment2/segment2_cn.16A80.ia1.png": [16,8,16,{"cn":[947456,92800]}], +"textures/segment2/segment2_cn.16A90.ia1.png": [16,8,16,{"cn":[947456,92816]}], +"textures/segment2/segment2_cn.16AA0.ia1.png": [16,8,16,{"cn":[947456,92832]}], +"textures/segment2/segment2_cn.16AB0.ia1.png": [16,8,16,{"cn":[947456,92848]}], +"textures/segment2/segment2_cn.16AC0.ia1.png": [16,8,16,{"cn":[947456,92864]}], +"textures/segment2/segment2_cn.16AD0.ia1.png": [16,8,16,{"cn":[947456,92880]}], +"textures/segment2/segment2_cn.16AE0.ia1.png": [16,8,16,{"cn":[947456,92896]}], +"textures/segment2/segment2_cn.16AF0.ia1.png": [16,8,16,{"cn":[947456,92912]}], +"textures/segment2/segment2_cn.16B00.ia1.png": [16,8,16,{"cn":[947456,92928]}], +"textures/segment2/segment2_cn.16B10.ia1.png": [16,8,16,{"cn":[947456,92944]}], +"textures/segment2/segment2_cn.16B20.ia1.png": [16,8,16,{"cn":[947456,92960]}], +"textures/segment2/segment2_cn.16B30.ia1.png": [16,8,16,{"cn":[947456,92976]}], +"textures/segment2/segment2_cn.16B40.ia1.png": [16,8,16,{"cn":[947456,92992]}], +"textures/segment2/segment2_cn.16B50.ia1.png": [16,8,16,{"cn":[947456,93008]}], +"textures/segment2/segment2_cn.16B60.ia1.png": [16,8,16,{"cn":[947456,93024]}], +"textures/segment2/segment2_cn.16B70.ia1.png": [16,8,16,{"cn":[947456,93040]}], +"textures/segment2/segment2_cn.16B80.ia1.png": [16,8,16,{"cn":[947456,93056]}], +"textures/segment2/segment2_cn.16B90.ia1.png": [16,8,16,{"cn":[947456,93072]}], +"textures/segment2/segment2_cn.16BA0.ia1.png": [16,8,16,{"cn":[947456,93088]}], +"textures/segment2/segment2_cn.16BB0.ia1.png": [16,8,16,{"cn":[947456,93104]}], +"textures/segment2/segment2_cn.16BC0.ia1.png": [16,8,16,{"cn":[947456,93120]}], +"textures/segment2/segment2_cn.16BD0.ia1.png": [16,8,16,{"cn":[947456,93136]}], +"textures/segment2/segment2_cn.16BE0.ia1.png": [16,8,16,{"cn":[947456,93152]}], +"textures/segment2/segment2_cn.16BF0.ia1.png": [16,8,16,{"cn":[947456,93168]}], +"textures/segment2/segment2_cn.16C00.ia1.png": [16,8,16,{"cn":[947456,93184]}], +"textures/segment2/segment2_cn.16C10.ia1.png": [16,8,16,{"cn":[947456,93200]}], +"textures/segment2/segment2_cn.16C20.ia1.png": [16,8,16,{"cn":[947456,93216]}], +"textures/segment2/segment2_cn.16C30.ia1.png": [16,8,16,{"cn":[947456,93232]}], +"textures/segment2/segment2_cn.16C40.ia1.png": [16,8,16,{"cn":[947456,93248]}], +"textures/segment2/segment2_cn.16C50.ia1.png": [16,8,16,{"cn":[947456,93264]}], +"textures/segment2/segment2_cn.16C60.ia1.png": [16,8,16,{"cn":[947456,93280]}], +"textures/segment2/segment2_cn.16C70.ia1.png": [16,8,16,{"cn":[947456,93296]}], +"textures/segment2/segment2_cn.16C80.ia1.png": [16,8,16,{"cn":[947456,93312]}], +"textures/segment2/segment2_cn.16C90.ia1.png": [16,8,16,{"cn":[947456,93328]}], +"textures/segment2/segment2_cn.16CA0.ia1.png": [16,8,16,{"cn":[947456,93344]}], +"textures/segment2/segment2_cn.16CB0.ia1.png": [16,8,16,{"cn":[947456,93360]}], +"textures/segment2/segment2_cn.16CC0.ia1.png": [16,8,16,{"cn":[947456,93376]}], +"textures/segment2/segment2_cn.16CD0.ia1.png": [16,8,16,{"cn":[947456,93392]}], +"textures/segment2/segment2_cn.16CE0.ia1.png": [16,8,16,{"cn":[947456,93408]}], +"textures/segment2/segment2_cn.16CF0.ia1.png": [16,8,16,{"cn":[947456,93424]}], +"textures/segment2/segment2_cn.16D00.ia1.png": [16,8,16,{"cn":[947456,93440]}], +"textures/segment2/segment2_cn.16D10.ia1.png": [16,8,16,{"cn":[947456,93456]}], +"textures/segment2/segment2_cn.16D20.ia1.png": [16,8,16,{"cn":[947456,93472]}], +"textures/segment2/segment2_cn.16D30.ia1.png": [16,8,16,{"cn":[947456,93488]}], +"textures/segment2/segment2_cn.16D40.ia1.png": [16,8,16,{"cn":[947456,93504]}], +"textures/segment2/segment2_cn.16D50.ia1.png": [16,8,16,{"cn":[947456,93520]}], +"textures/segment2/segment2_cn.16D60.ia1.png": [16,8,16,{"cn":[947456,93536]}], +"textures/segment2/segment2_cn.16D70.ia1.png": [16,8,16,{"cn":[947456,93552]}], +"textures/segment2/segment2_cn.16D80.ia1.png": [16,8,16,{"cn":[947456,93568]}], +"textures/segment2/segment2_cn.16D90.ia1.png": [16,8,16,{"cn":[947456,93584]}], +"textures/segment2/segment2_cn.16DA0.ia1.png": [16,8,16,{"cn":[947456,93600]}], +"textures/segment2/segment2_cn.16DB0.ia1.png": [16,8,16,{"cn":[947456,93616]}], +"textures/segment2/segment2_cn.16DC0.ia1.png": [16,8,16,{"cn":[947456,93632]}], +"textures/segment2/segment2_cn.16DD0.ia1.png": [16,8,16,{"cn":[947456,93648]}], +"textures/segment2/segment2_cn.16DE0.ia1.png": [16,8,16,{"cn":[947456,93664]}], +"textures/segment2/segment2_cn.16DF0.ia1.png": [16,8,16,{"cn":[947456,93680]}], +"textures/segment2/segment2_cn.16E00.ia1.png": [16,8,16,{"cn":[947456,93696]}], +"textures/segment2/segment2_cn.16E10.ia1.png": [16,8,16,{"cn":[947456,93712]}], +"textures/segment2/segment2_cn.16E20.ia1.png": [16,8,16,{"cn":[947456,93728]}], +"textures/segment2/segment2_cn.16E30.ia1.png": [16,8,16,{"cn":[947456,93744]}], +"textures/segment2/segment2_cn.16E40.ia1.png": [16,8,16,{"cn":[947456,93760]}], +"textures/segment2/segment2_cn.16E50.ia1.png": [16,8,16,{"cn":[947456,93776]}], +"textures/segment2/segment2_cn.16E60.ia1.png": [16,8,16,{"cn":[947456,93792]}], +"textures/segment2/segment2_cn.16E70.ia1.png": [16,8,16,{"cn":[947456,93808]}], +"textures/segment2/segment2_cn.16E80.ia1.png": [16,8,16,{"cn":[947456,93824]}], +"textures/segment2/segment2_cn.16E90.ia1.png": [16,8,16,{"cn":[947456,93840]}], +"textures/segment2/segment2_cn.16EA0.ia1.png": [16,8,16,{"cn":[947456,93856]}], +"textures/segment2/segment2_cn.16EB0.ia1.png": [16,8,16,{"cn":[947456,93872]}], +"textures/segment2/segment2_cn.16EC0.ia1.png": [16,8,16,{"cn":[947456,93888]}], +"textures/segment2/segment2_cn.16ED0.ia1.png": [16,8,16,{"cn":[947456,93904]}], +"textures/segment2/segment2_cn.16EE0.ia1.png": [16,8,16,{"cn":[947456,93920]}], +"textures/segment2/segment2_cn.16EF0.ia1.png": [16,8,16,{"cn":[947456,93936]}], +"textures/segment2/segment2_cn.16F00.ia1.png": [16,8,16,{"cn":[947456,93952]}], +"textures/segment2/segment2_cn.16F10.ia1.png": [16,8,16,{"cn":[947456,93968]}], +"textures/segment2/segment2_cn.16F20.ia1.png": [16,8,16,{"cn":[947456,93984]}], +"textures/segment2/segment2_cn.16F30.ia1.png": [16,8,16,{"cn":[947456,94000]}], +"textures/segment2/segment2_cn.16F40.ia1.png": [16,8,16,{"cn":[947456,94016]}], +"textures/segment2/segment2_cn.16F50.ia1.png": [16,8,16,{"cn":[947456,94032]}], +"textures/segment2/segment2_cn.16F60.ia1.png": [16,8,16,{"cn":[947456,94048]}], +"textures/segment2/segment2_cn.16F70.ia1.png": [16,8,16,{"cn":[947456,94064]}], +"textures/segment2/segment2_cn.16F80.ia1.png": [16,8,16,{"cn":[947456,94080]}], +"textures/segment2/segment2_cn.16F90.ia1.png": [16,8,16,{"cn":[947456,94096]}], +"textures/segment2/segment2_cn.16FA0.ia1.png": [16,8,16,{"cn":[947456,94112]}], +"textures/segment2/segment2_cn.16FB0.ia1.png": [16,8,16,{"cn":[947456,94128]}], +"textures/segment2/segment2_cn.16FC0.ia1.png": [16,8,16,{"cn":[947456,94144]}], +"textures/segment2/segment2_cn.16FD0.ia1.png": [16,8,16,{"cn":[947456,94160]}], +"textures/segment2/segment2_cn.16FE0.ia1.png": [16,8,16,{"cn":[947456,94176]}], +"textures/segment2/segment2_cn.16FF0.ia1.png": [16,8,16,{"cn":[947456,94192]}], +"textures/segment2/segment2_cn.17000.ia1.png": [16,8,16,{"cn":[947456,94208]}], +"textures/segment2/segment2_cn.17010.ia1.png": [16,8,16,{"cn":[947456,94224]}], +"textures/segment2/segment2_cn.17020.ia1.png": [16,8,16,{"cn":[947456,94240]}], +"textures/segment2/segment2_cn.17030.ia1.png": [16,8,16,{"cn":[947456,94256]}], +"textures/segment2/segment2_cn.17040.ia1.png": [16,8,16,{"cn":[947456,94272]}], +"textures/segment2/segment2_cn.17050.ia1.png": [16,8,16,{"cn":[947456,94288]}], +"textures/segment2/segment2_cn.17060.ia1.png": [16,8,16,{"cn":[947456,94304]}], +"textures/segment2/segment2_cn.17070.ia1.png": [16,8,16,{"cn":[947456,94320]}], +"textures/segment2/segment2_cn.17080.ia1.png": [16,8,16,{"cn":[947456,94336]}], +"textures/segment2/segment2_cn.17090.ia1.png": [16,8,16,{"cn":[947456,94352]}], +"textures/segment2/segment2_cn.170A0.ia1.png": [16,8,16,{"cn":[947456,94368]}], +"textures/segment2/segment2_cn.170B0.ia1.png": [16,8,16,{"cn":[947456,94384]}], +"textures/segment2/segment2_cn.170C0.ia1.png": [16,8,16,{"cn":[947456,94400]}], +"textures/segment2/segment2_cn.170D0.ia1.png": [16,8,16,{"cn":[947456,94416]}], +"textures/segment2/segment2_cn.170E0.ia1.png": [16,8,16,{"cn":[947456,94432]}], +"textures/segment2/segment2_cn.170F0.ia1.png": [16,8,16,{"cn":[947456,94448]}], +"textures/segment2/segment2_cn.17100.ia1.png": [16,8,16,{"cn":[947456,94464]}], +"textures/segment2/segment2_cn.17110.ia1.png": [16,8,16,{"cn":[947456,94480]}], +"textures/segment2/segment2_cn.17120.ia1.png": [16,8,16,{"cn":[947456,94496]}], +"textures/segment2/segment2_cn.17130.ia1.png": [16,8,16,{"cn":[947456,94512]}], +"textures/segment2/segment2_cn.17140.ia1.png": [16,8,16,{"cn":[947456,94528]}], +"textures/segment2/segment2_cn.17150.ia1.png": [16,8,16,{"cn":[947456,94544]}], +"textures/segment2/segment2_cn.17160.ia1.png": [16,8,16,{"cn":[947456,94560]}], +"textures/segment2/segment2_cn.17170.ia1.png": [16,8,16,{"cn":[947456,94576]}], +"textures/segment2/segment2_cn.17180.ia1.png": [16,8,16,{"cn":[947456,94592]}], +"textures/segment2/segment2_cn.17190.ia1.png": [16,8,16,{"cn":[947456,94608]}], +"textures/segment2/segment2_cn.171A0.ia1.png": [16,8,16,{"cn":[947456,94624]}], +"textures/segment2/segment2_cn.171B0.ia1.png": [16,8,16,{"cn":[947456,94640]}], +"textures/segment2/segment2_cn.171C0.ia1.png": [16,8,16,{"cn":[947456,94656]}], +"textures/segment2/segment2_cn.171D0.ia1.png": [16,8,16,{"cn":[947456,94672]}], +"textures/segment2/segment2_cn.171E0.ia1.png": [16,8,16,{"cn":[947456,94688]}], +"textures/segment2/segment2_cn.171F0.ia1.png": [16,8,16,{"cn":[947456,94704]}], +"textures/segment2/segment2_cn.17200.ia1.png": [16,8,16,{"cn":[947456,94720]}], +"textures/segment2/segment2_cn.17210.ia1.png": [16,8,16,{"cn":[947456,94736]}], +"textures/segment2/segment2_cn.17220.ia1.png": [16,8,16,{"cn":[947456,94752]}], +"textures/segment2/segment2_cn.17230.ia1.png": [16,8,16,{"cn":[947456,94768]}], +"textures/segment2/segment2_cn.17240.ia1.png": [16,8,16,{"cn":[947456,94784]}], +"textures/segment2/segment2_cn.17250.ia1.png": [16,8,16,{"cn":[947456,94800]}], +"textures/segment2/segment2_cn.17260.ia1.png": [16,8,16,{"cn":[947456,94816]}], +"textures/segment2/segment2_cn.17270.ia1.png": [16,8,16,{"cn":[947456,94832]}], +"textures/segment2/segment2_cn.17280.ia1.png": [16,8,16,{"cn":[947456,94848]}], +"textures/segment2/segment2_cn.17290.ia1.png": [16,8,16,{"cn":[947456,94864]}], +"textures/segment2/segment2_cn.172A0.ia1.png": [16,8,16,{"cn":[947456,94880]}], +"textures/segment2/segment2_cn.172B0.ia1.png": [16,8,16,{"cn":[947456,94896]}], +"textures/segment2/segment2_cn.172C0.ia1.png": [16,8,16,{"cn":[947456,94912]}], +"textures/segment2/segment2_cn.172D0.ia1.png": [16,8,16,{"cn":[947456,94928]}], +"textures/segment2/segment2_cn.172E0.ia1.png": [16,8,16,{"cn":[947456,94944]}], +"textures/segment2/segment2_cn.172F0.ia1.png": [16,8,16,{"cn":[947456,94960]}], +"textures/segment2/segment2_cn.17300.ia1.png": [16,8,16,{"cn":[947456,94976]}], +"textures/segment2/segment2_cn.17310.ia1.png": [16,8,16,{"cn":[947456,94992]}], +"textures/segment2/segment2_cn.17320.ia1.png": [16,8,16,{"cn":[947456,95008]}], +"textures/segment2/segment2_cn.17330.ia1.png": [16,8,16,{"cn":[947456,95024]}], +"textures/segment2/segment2_cn.17340.ia1.png": [16,8,16,{"cn":[947456,95040]}], +"textures/segment2/segment2_cn.17350.ia1.png": [16,8,16,{"cn":[947456,95056]}], +"textures/segment2/segment2_cn.17360.ia1.png": [16,8,16,{"cn":[947456,95072]}], +"textures/segment2/segment2_cn.17370.ia1.png": [16,8,16,{"cn":[947456,95088]}], +"textures/segment2/segment2_cn.17380.ia1.png": [16,8,16,{"cn":[947456,95104]}], +"textures/segment2/segment2_cn.17390.ia1.png": [16,8,16,{"cn":[947456,95120]}], +"textures/segment2/segment2_cn.173A0.ia1.png": [16,8,16,{"cn":[947456,95136]}], +"textures/segment2/segment2_cn.173B0.ia1.png": [16,8,16,{"cn":[947456,95152]}], +"textures/segment2/segment2_cn.173C0.ia1.png": [16,8,16,{"cn":[947456,95168]}], +"textures/segment2/segment2_cn.173D0.ia1.png": [16,8,16,{"cn":[947456,95184]}], +"textures/segment2/segment2_cn.173E0.ia1.png": [16,8,16,{"cn":[947456,95200]}], +"textures/segment2/segment2_cn.173F0.ia1.png": [16,8,16,{"cn":[947456,95216]}], +"textures/segment2/segment2_cn.17400.ia1.png": [16,8,16,{"cn":[947456,95232]}], +"textures/segment2/segment2_cn.17410.ia1.png": [16,8,16,{"cn":[947456,95248]}], +"textures/segment2/segment2_cn.17420.ia1.png": [16,8,16,{"cn":[947456,95264]}], +"textures/segment2/segment2_cn.17430.ia1.png": [16,8,16,{"cn":[947456,95280]}], +"textures/segment2/segment2_cn.17440.ia1.png": [16,8,16,{"cn":[947456,95296]}], +"textures/segment2/segment2_cn.17450.ia1.png": [16,8,16,{"cn":[947456,95312]}], +"textures/segment2/segment2_cn.17460.ia1.png": [16,8,16,{"cn":[947456,95328]}], +"textures/segment2/segment2_cn.17470.ia1.png": [16,8,16,{"cn":[947456,95344]}], +"textures/segment2/segment2_cn.17480.ia1.png": [16,8,16,{"cn":[947456,95360]}], +"textures/segment2/segment2_cn.17490.ia1.png": [16,8,16,{"cn":[947456,95376]}], +"textures/segment2/segment2_cn.174A0.ia1.png": [16,8,16,{"cn":[947456,95392]}], +"textures/segment2/segment2_cn.174B0.ia1.png": [16,8,16,{"cn":[947456,95408]}], +"textures/segment2/segment2_cn.174C0.ia1.png": [16,8,16,{"cn":[947456,95424]}], +"textures/segment2/segment2_cn.174D0.ia1.png": [16,8,16,{"cn":[947456,95440]}], +"textures/segment2/segment2_cn.174E0.ia1.png": [16,8,16,{"cn":[947456,95456]}], +"textures/segment2/segment2_cn.174F0.ia1.png": [16,8,16,{"cn":[947456,95472]}], +"textures/segment2/segment2_cn.17500.ia1.png": [16,8,16,{"cn":[947456,95488]}], +"textures/segment2/segment2_cn.17510.ia1.png": [16,8,16,{"cn":[947456,95504]}], +"textures/segment2/segment2_cn.17520.ia1.png": [16,8,16,{"cn":[947456,95520]}], +"textures/segment2/segment2_cn.17530.ia1.png": [16,8,16,{"cn":[947456,95536]}], +"textures/segment2/segment2_cn.17540.ia1.png": [16,8,16,{"cn":[947456,95552]}], +"textures/segment2/segment2_cn.17550.ia1.png": [16,8,16,{"cn":[947456,95568]}], +"textures/segment2/segment2_cn.17560.ia1.png": [16,8,16,{"cn":[947456,95584]}], +"textures/segment2/segment2_cn.17570.ia1.png": [16,8,16,{"cn":[947456,95600]}], +"textures/segment2/segment2_cn.17580.ia1.png": [16,8,16,{"cn":[947456,95616]}], +"textures/segment2/segment2_cn.17590.ia1.png": [16,8,16,{"cn":[947456,95632]}], +"textures/segment2/segment2_cn.175A0.ia1.png": [16,8,16,{"cn":[947456,95648]}], +"textures/segment2/segment2_cn.175B0.ia1.png": [16,8,16,{"cn":[947456,95664]}], +"textures/segment2/segment2_cn.175C0.ia1.png": [16,8,16,{"cn":[947456,95680]}], +"textures/segment2/segment2_cn.175D0.ia1.png": [16,8,16,{"cn":[947456,95696]}], +"textures/segment2/segment2_cn.175E0.ia1.png": [16,8,16,{"cn":[947456,95712]}], +"textures/segment2/segment2_cn.175F0.ia1.png": [16,8,16,{"cn":[947456,95728]}], +"textures/segment2/segment2_cn.17600.ia1.png": [16,8,16,{"cn":[947456,95744]}], +"textures/segment2/segment2_cn.17610.ia1.png": [16,8,16,{"cn":[947456,95760]}], +"textures/segment2/segment2_cn.17620.ia1.png": [16,8,16,{"cn":[947456,95776]}], +"textures/segment2/segment2_cn.17630.ia1.png": [16,8,16,{"cn":[947456,95792]}], +"textures/segment2/segment2_cn.17640.ia1.png": [16,8,16,{"cn":[947456,95808]}], +"textures/segment2/segment2_cn.17650.ia1.png": [16,8,16,{"cn":[947456,95824]}], +"textures/segment2/segment2_cn.17660.ia1.png": [16,8,16,{"cn":[947456,95840]}], +"textures/segment2/segment2_cn.17670.ia1.png": [16,8,16,{"cn":[947456,95856]}], +"textures/segment2/segment2_cn.17680.ia1.png": [16,8,16,{"cn":[947456,95872]}], +"textures/segment2/segment2_cn.17690.ia1.png": [16,8,16,{"cn":[947456,95888]}], +"textures/segment2/segment2_cn.176A0.ia1.png": [16,8,16,{"cn":[947456,95904]}], +"textures/segment2/segment2_cn.176B0.ia1.png": [16,8,16,{"cn":[947456,95920]}], +"textures/segment2/segment2_cn.176C0.ia1.png": [16,8,16,{"cn":[947456,95936]}], +"textures/segment2/segment2_cn.176D0.ia1.png": [16,8,16,{"cn":[947456,95952]}], +"textures/segment2/segment2_cn.176E0.ia1.png": [16,8,16,{"cn":[947456,95968]}], +"textures/segment2/segment2_cn.176F0.ia1.png": [16,8,16,{"cn":[947456,95984]}], +"textures/segment2/segment2_cn.17700.ia1.png": [16,8,16,{"cn":[947456,96000]}], +"textures/segment2/segment2_cn.17710.ia1.png": [16,8,16,{"cn":[947456,96016]}], +"textures/segment2/segment2_cn.17720.ia1.png": [16,8,16,{"cn":[947456,96032]}], +"textures/segment2/segment2_cn.17730.ia1.png": [16,8,16,{"cn":[947456,96048]}], +"textures/segment2/segment2_cn.17740.ia1.png": [16,8,16,{"cn":[947456,96064]}], +"textures/segment2/segment2_cn.17750.ia1.png": [16,8,16,{"cn":[947456,96080]}], +"textures/segment2/segment2_cn.17760.ia1.png": [16,8,16,{"cn":[947456,96096]}], +"textures/segment2/segment2_cn.17770.ia1.png": [16,8,16,{"cn":[947456,96112]}], +"textures/segment2/segment2_cn.17780.ia1.png": [16,8,16,{"cn":[947456,96128]}], +"textures/segment2/segment2_cn.17790.ia1.png": [16,8,16,{"cn":[947456,96144]}], +"textures/segment2/segment2_cn.177A0.ia1.png": [16,8,16,{"cn":[947456,96160]}], +"textures/segment2/segment2_cn.177B0.ia1.png": [16,8,16,{"cn":[947456,96176]}], +"textures/segment2/segment2_cn.177C0.ia1.png": [16,8,16,{"cn":[947456,96192]}], +"textures/segment2/segment2_cn.177D0.ia1.png": [16,8,16,{"cn":[947456,96208]}], +"textures/segment2/segment2_cn.177E0.ia1.png": [16,8,16,{"cn":[947456,96224]}], +"textures/segment2/segment2_cn.177F0.ia1.png": [16,8,16,{"cn":[947456,96240]}], +"textures/segment2/segment2_cn.17800.ia1.png": [16,8,16,{"cn":[947456,96256]}], +"textures/segment2/segment2_cn.17810.ia1.png": [16,8,16,{"cn":[947456,96272]}], +"textures/segment2/segment2_cn.17820.ia1.png": [16,8,16,{"cn":[947456,96288]}], +"textures/segment2/segment2_cn.17830.ia1.png": [16,8,16,{"cn":[947456,96304]}], +"textures/segment2/segment2_cn.17840.ia1.png": [16,8,16,{"cn":[947456,96320]}], +"textures/segment2/segment2_cn.17850.ia1.png": [16,8,16,{"cn":[947456,96336]}], +"textures/segment2/segment2_cn.17860.ia1.png": [16,8,16,{"cn":[947456,96352]}], +"textures/segment2/segment2_cn.17870.ia1.png": [16,8,16,{"cn":[947456,96368]}], +"textures/segment2/segment2_cn.17880.ia1.png": [16,8,16,{"cn":[947456,96384]}], +"textures/segment2/segment2_cn.17890.ia1.png": [16,8,16,{"cn":[947456,96400]}], +"textures/segment2/segment2_cn.178A0.ia1.png": [16,8,16,{"cn":[947456,96416]}], +"textures/segment2/segment2_cn.178B0.ia1.png": [16,8,16,{"cn":[947456,96432]}], +"textures/segment2/segment2_cn.178C0.ia1.png": [16,8,16,{"cn":[947456,96448]}], +"textures/segment2/segment2_cn.178D0.ia1.png": [16,8,16,{"cn":[947456,96464]}], +"textures/segment2/segment2_cn.178E0.ia1.png": [16,8,16,{"cn":[947456,96480]}], +"textures/segment2/segment2_cn.178F0.ia1.png": [16,8,16,{"cn":[947456,96496]}], +"textures/segment2/segment2_cn.17900.ia1.png": [16,8,16,{"cn":[947456,96512]}], +"textures/segment2/segment2_cn.17910.ia1.png": [16,8,16,{"cn":[947456,96528]}], +"textures/segment2/segment2_cn.17920.ia1.png": [16,8,16,{"cn":[947456,96544]}], +"textures/segment2/segment2_cn.17930.ia1.png": [16,8,16,{"cn":[947456,96560]}], +"textures/segment2/segment2_cn.17940.ia1.png": [16,8,16,{"cn":[947456,96576]}], +"textures/segment2/segment2_cn.17950.ia1.png": [16,8,16,{"cn":[947456,96592]}], +"textures/segment2/segment2_cn.17960.ia1.png": [16,8,16,{"cn":[947456,96608]}], +"textures/segment2/segment2_cn.17970.ia1.png": [16,8,16,{"cn":[947456,96624]}], +"textures/segment2/segment2_cn.17980.ia1.png": [16,8,16,{"cn":[947456,96640]}], +"textures/segment2/segment2_cn.17990.ia1.png": [16,8,16,{"cn":[947456,96656]}], +"textures/segment2/segment2_cn.179A0.ia1.png": [16,8,16,{"cn":[947456,96672]}], +"textures/segment2/segment2_cn.179B0.ia1.png": [16,8,16,{"cn":[947456,96688]}], +"textures/segment2/segment2_cn.179C0.ia1.png": [16,8,16,{"cn":[947456,96704]}], +"textures/segment2/segment2_cn.179D0.ia1.png": [16,8,16,{"cn":[947456,96720]}], +"textures/segment2/segment2_cn.179E0.ia1.png": [16,8,16,{"cn":[947456,96736]}], +"textures/segment2/segment2_cn.179F0.ia1.png": [16,8,16,{"cn":[947456,96752]}], +"textures/segment2/segment2_cn.17A00.ia1.png": [16,8,16,{"cn":[947456,96768]}], +"textures/segment2/segment2_cn.17A10.ia1.png": [16,8,16,{"cn":[947456,96784]}], +"textures/segment2/segment2_cn.17A20.ia1.png": [16,8,16,{"cn":[947456,96800]}], +"textures/segment2/segment2_cn.17A30.ia1.png": [16,8,16,{"cn":[947456,96816]}], +"textures/segment2/segment2_cn.17A40.ia1.png": [16,8,16,{"cn":[947456,96832]}], +"textures/segment2/segment2_cn.17A50.ia1.png": [16,8,16,{"cn":[947456,96848]}], +"textures/segment2/segment2_cn.17A60.ia1.png": [16,8,16,{"cn":[947456,96864]}], +"textures/segment2/segment2_cn.17A70.ia1.png": [16,8,16,{"cn":[947456,96880]}], +"textures/segment2/segment2_cn.17A80.ia1.png": [16,8,16,{"cn":[947456,96896]}], +"textures/segment2/segment2_cn.17A90.ia1.png": [16,8,16,{"cn":[947456,96912]}], +"textures/segment2/segment2_cn.17AA0.ia1.png": [16,8,16,{"cn":[947456,96928]}], +"textures/segment2/segment2_cn.17AB0.ia1.png": [16,8,16,{"cn":[947456,96944]}], +"textures/segment2/segment2_cn.17AC0.ia1.png": [16,8,16,{"cn":[947456,96960]}], +"textures/segment2/segment2_cn.17AD0.ia1.png": [16,8,16,{"cn":[947456,96976]}], +"textures/segment2/segment2_cn.17AE0.ia1.png": [16,8,16,{"cn":[947456,96992]}], +"textures/segment2/segment2_cn.17AF0.ia1.png": [16,8,16,{"cn":[947456,97008]}], +"textures/segment2/segment2_cn.17B00.ia1.png": [16,8,16,{"cn":[947456,97024]}], +"textures/segment2/segment2_cn.17B10.ia1.png": [16,8,16,{"cn":[947456,97040]}], +"textures/segment2/segment2_cn.17B20.ia1.png": [16,8,16,{"cn":[947456,97056]}], +"textures/segment2/segment2_cn.17B30.ia1.png": [16,8,16,{"cn":[947456,97072]}], +"textures/segment2/segment2_cn.17B40.ia1.png": [16,8,16,{"cn":[947456,97088]}], +"textures/segment2/segment2_cn.17B50.ia1.png": [16,8,16,{"cn":[947456,97104]}], +"textures/segment2/segment2_cn.17B60.ia1.png": [16,8,16,{"cn":[947456,97120]}], +"textures/segment2/segment2_cn.17B70.ia1.png": [16,8,16,{"cn":[947456,97136]}], +"textures/segment2/segment2_cn.17B80.ia1.png": [16,8,16,{"cn":[947456,97152]}], +"textures/segment2/segment2_cn.17B90.ia1.png": [16,8,16,{"cn":[947456,97168]}], +"textures/segment2/segment2_cn.17BA0.ia1.png": [16,8,16,{"cn":[947456,97184]}], +"textures/segment2/segment2_cn.17BB0.ia1.png": [16,8,16,{"cn":[947456,97200]}], +"textures/segment2/segment2_cn.17BC0.ia1.png": [16,8,16,{"cn":[947456,97216]}], +"textures/segment2/segment2_cn.17BD0.ia1.png": [16,8,16,{"cn":[947456,97232]}], +"textures/segment2/segment2_cn.17BE0.ia1.png": [16,8,16,{"cn":[947456,97248]}], +"textures/segment2/segment2_cn.17BF0.ia1.png": [16,8,16,{"cn":[947456,97264]}], +"textures/segment2/segment2_cn.17C00.ia1.png": [16,8,16,{"cn":[947456,97280]}], +"textures/segment2/segment2_cn.17C10.ia1.png": [16,8,16,{"cn":[947456,97296]}], +"textures/segment2/segment2_cn.17C20.ia1.png": [16,8,16,{"cn":[947456,97312]}], +"textures/segment2/segment2_cn.17C30.ia1.png": [16,8,16,{"cn":[947456,97328]}], +"textures/segment2/segment2_cn.17C40.ia1.png": [16,8,16,{"cn":[947456,97344]}], +"textures/segment2/segment2_cn.17C50.ia1.png": [16,8,16,{"cn":[947456,97360]}], +"textures/segment2/segment2_cn.17C60.ia1.png": [16,8,16,{"cn":[947456,97376]}], +"textures/segment2/segment2_cn.17C70.ia1.png": [16,8,16,{"cn":[947456,97392]}], +"textures/segment2/segment2_cn.17C80.ia1.png": [16,8,16,{"cn":[947456,97408]}], +"textures/segment2/segment2_cn.17C90.ia1.png": [16,8,16,{"cn":[947456,97424]}], +"textures/segment2/segment2_cn.17CA0.ia1.png": [16,8,16,{"cn":[947456,97440]}], +"textures/segment2/segment2_cn.17CB0.ia1.png": [16,8,16,{"cn":[947456,97456]}], +"textures/segment2/segment2_cn.17CC0.ia1.png": [16,8,16,{"cn":[947456,97472]}], +"textures/segment2/segment2_cn.17CD0.ia1.png": [16,8,16,{"cn":[947456,97488]}], +"textures/segment2/segment2_cn.17CE0.ia1.png": [16,8,16,{"cn":[947456,97504]}], +"textures/segment2/segment2_cn.17CF0.ia1.png": [16,8,16,{"cn":[947456,97520]}], +"textures/segment2/segment2_cn.17D00.ia1.png": [16,8,16,{"cn":[947456,97536]}], +"textures/segment2/segment2_cn.17D10.ia1.png": [16,8,16,{"cn":[947456,97552]}], +"textures/segment2/segment2_cn.17D20.ia1.png": [16,8,16,{"cn":[947456,97568]}], +"textures/segment2/segment2_cn.17D30.ia1.png": [16,8,16,{"cn":[947456,97584]}], +"textures/segment2/segment2_cn.17D40.ia1.png": [16,8,16,{"cn":[947456,97600]}], +"textures/segment2/segment2_cn.17D50.ia1.png": [16,8,16,{"cn":[947456,97616]}], +"textures/segment2/segment2_cn.17D60.ia1.png": [16,8,16,{"cn":[947456,97632]}], +"textures/segment2/segment2_cn.17D70.ia1.png": [16,8,16,{"cn":[947456,97648]}], +"textures/segment2/segment2_cn.17D80.ia1.png": [16,8,16,{"cn":[947456,97664]}], +"textures/segment2/segment2_cn.17D90.ia1.png": [16,8,16,{"cn":[947456,97680]}], +"textures/segment2/segment2_cn.17DA0.ia1.png": [16,8,16,{"cn":[947456,97696]}], +"textures/segment2/segment2_cn.17DB0.ia1.png": [16,8,16,{"cn":[947456,97712]}], +"textures/segment2/segment2_cn.17DC0.ia1.png": [16,8,16,{"cn":[947456,97728]}], +"textures/segment2/segment2_cn.17DD0.ia1.png": [16,8,16,{"cn":[947456,97744]}], +"textures/segment2/segment2_cn.17DE0.ia1.png": [16,8,16,{"cn":[947456,97760]}], +"textures/segment2/segment2_cn.17DF0.ia1.png": [16,8,16,{"cn":[947456,97776]}], +"textures/segment2/segment2_cn.17E00.ia1.png": [16,8,16,{"cn":[947456,97792]}], +"textures/segment2/segment2_cn.17E10.ia1.png": [16,8,16,{"cn":[947456,97808]}], +"textures/segment2/segment2_cn.17E20.ia1.png": [16,8,16,{"cn":[947456,97824]}], +"textures/segment2/segment2_cn.17E30.ia1.png": [16,8,16,{"cn":[947456,97840]}], +"textures/segment2/segment2_cn.17E40.ia1.png": [16,8,16,{"cn":[947456,97856]}], +"textures/segment2/segment2_cn.17E50.ia1.png": [16,8,16,{"cn":[947456,97872]}], +"textures/segment2/segment2_cn.17E60.ia1.png": [16,8,16,{"cn":[947456,97888]}], +"textures/segment2/segment2_cn.17E70.ia1.png": [16,8,16,{"cn":[947456,97904]}], +"textures/segment2/segment2_cn.17E80.ia1.png": [16,8,16,{"cn":[947456,97920]}], +"textures/segment2/segment2_cn.17E90.ia1.png": [16,8,16,{"cn":[947456,97936]}], +"textures/segment2/segment2_cn.17EA0.ia1.png": [16,8,16,{"cn":[947456,97952]}], +"textures/segment2/segment2_cn.17EB0.ia1.png": [16,8,16,{"cn":[947456,97968]}], +"textures/segment2/segment2_cn.17EC0.ia1.png": [16,8,16,{"cn":[947456,97984]}], +"textures/segment2/segment2_cn.17ED0.ia1.png": [16,8,16,{"cn":[947456,98000]}], +"textures/segment2/segment2_cn.17EE0.ia1.png": [16,8,16,{"cn":[947456,98016]}], +"textures/segment2/segment2_cn.17EF0.ia1.png": [16,8,16,{"cn":[947456,98032]}], +"textures/segment2/segment2_cn.17F00.ia1.png": [16,8,16,{"cn":[947456,98048]}], +"textures/segment2/segment2_cn.17F10.ia1.png": [16,8,16,{"cn":[947456,98064]}], +"textures/segment2/segment2_cn.17F20.ia1.png": [16,8,16,{"cn":[947456,98080]}], +"textures/segment2/segment2_cn.17F30.ia1.png": [16,8,16,{"cn":[947456,98096]}], +"textures/segment2/segment2_cn.17F40.ia1.png": [16,8,16,{"cn":[947456,98112]}], +"textures/segment2/segment2_cn.17F50.ia1.png": [16,8,16,{"cn":[947456,98128]}], +"textures/segment2/segment2_cn.17F60.ia1.png": [16,8,16,{"cn":[947456,98144]}], +"textures/segment2/segment2_cn.17F70.ia1.png": [16,8,16,{"cn":[947456,98160]}], +"textures/segment2/segment2_cn.17F80.ia1.png": [16,8,16,{"cn":[947456,98176]}], +"textures/segment2/segment2_cn.17F90.ia1.png": [16,8,16,{"cn":[947456,98192]}], +"textures/segment2/segment2_cn.17FA0.ia1.png": [16,8,16,{"cn":[947456,98208]}], +"textures/segment2/segment2_cn.17FB0.ia1.png": [16,8,16,{"cn":[947456,98224]}], +"textures/segment2/segment2_cn.17FC0.ia1.png": [16,8,16,{"cn":[947456,98240]}], +"textures/segment2/segment2_cn.17FD0.ia1.png": [16,8,16,{"cn":[947456,98256]}], +"textures/segment2/segment2_cn.17FE0.ia1.png": [16,8,16,{"cn":[947456,98272]}], +"textures/segment2/segment2_cn.17FF0.ia1.png": [16,8,16,{"cn":[947456,98288]}], +"textures/segment2/segment2_cn.18000.ia1.png": [16,8,16,{"cn":[947456,98304]}], +"textures/segment2/segment2_cn.18010.ia1.png": [16,8,16,{"cn":[947456,98320]}], +"textures/segment2/segment2_cn.18020.ia1.png": [16,8,16,{"cn":[947456,98336]}], +"textures/segment2/segment2_cn.18030.ia1.png": [16,8,16,{"cn":[947456,98352]}], +"textures/segment2/segment2_cn.18040.ia1.png": [16,8,16,{"cn":[947456,98368]}], +"textures/segment2/segment2_cn.18050.ia1.png": [16,8,16,{"cn":[947456,98384]}], +"textures/segment2/segment2_cn.18060.ia1.png": [16,8,16,{"cn":[947456,98400]}], +"textures/segment2/segment2_cn.18070.ia1.png": [16,8,16,{"cn":[947456,98416]}], +"textures/segment2/segment2_cn.18080.ia1.png": [16,8,16,{"cn":[947456,98432]}], +"textures/segment2/segment2_cn.18090.ia1.png": [16,8,16,{"cn":[947456,98448]}], +"textures/segment2/segment2_cn.180A0.ia1.png": [16,8,16,{"cn":[947456,98464]}], +"textures/segment2/segment2_cn.180B0.ia1.png": [16,8,16,{"cn":[947456,98480]}], +"textures/segment2/segment2_cn.180C0.ia1.png": [16,8,16,{"cn":[947456,98496]}], +"textures/segment2/segment2_cn.180D0.ia1.png": [16,8,16,{"cn":[947456,98512]}], +"textures/segment2/segment2_cn.180E0.ia1.png": [16,8,16,{"cn":[947456,98528]}], +"textures/segment2/segment2_cn.180F0.ia1.png": [16,8,16,{"cn":[947456,98544]}], +"textures/segment2/segment2_cn.18100.ia1.png": [16,8,16,{"cn":[947456,98560]}], +"textures/segment2/segment2_cn.18110.ia1.png": [16,8,16,{"cn":[947456,98576]}], +"textures/segment2/segment2_cn.18120.ia1.png": [16,8,16,{"cn":[947456,98592]}], +"textures/segment2/segment2_cn.18130.ia1.png": [16,8,16,{"cn":[947456,98608]}], +"textures/segment2/segment2_cn.18140.ia1.png": [16,8,16,{"cn":[947456,98624]}], +"textures/segment2/segment2_cn.18150.ia1.png": [16,8,16,{"cn":[947456,98640]}], +"textures/segment2/segment2_cn.18160.ia1.png": [16,8,16,{"cn":[947456,98656]}], +"textures/segment2/segment2_cn.18170.ia1.png": [16,8,16,{"cn":[947456,98672]}], +"textures/segment2/segment2_cn.18180.ia1.png": [16,8,16,{"cn":[947456,98688]}], +"textures/segment2/segment2_cn.18190.ia1.png": [16,8,16,{"cn":[947456,98704]}], +"textures/segment2/segment2_cn.181A0.ia1.png": [16,8,16,{"cn":[947456,98720]}], +"textures/segment2/segment2_cn.181B0.ia1.png": [16,8,16,{"cn":[947456,98736]}], +"textures/segment2/segment2_cn.181C0.ia1.png": [16,8,16,{"cn":[947456,98752]}], +"textures/segment2/segment2_cn.181D0.ia1.png": [16,8,16,{"cn":[947456,98768]}], +"textures/segment2/segment2_cn.181E0.ia1.png": [16,8,16,{"cn":[947456,98784]}], +"textures/segment2/segment2_cn.181F0.ia1.png": [16,8,16,{"cn":[947456,98800]}], +"textures/segment2/segment2_cn.18200.ia1.png": [16,8,16,{"cn":[947456,98816]}], +"textures/segment2/segment2_cn.18210.ia1.png": [16,8,16,{"cn":[947456,98832]}], +"textures/segment2/segment2_cn.18220.ia1.png": [16,8,16,{"cn":[947456,98848]}], +"textures/segment2/segment2_cn.18230.ia1.png": [16,8,16,{"cn":[947456,98864]}], +"textures/segment2/segment2_cn.18240.ia1.png": [16,8,16,{"cn":[947456,98880]}], +"textures/segment2/segment2_cn.18250.ia1.png": [16,8,16,{"cn":[947456,98896]}], +"textures/segment2/segment2_cn.18260.ia1.png": [16,8,16,{"cn":[947456,98912]}], +"textures/segment2/segment2_cn.18270.ia1.png": [16,8,16,{"cn":[947456,98928]}], +"textures/segment2/segment2_cn.18280.ia1.png": [16,8,16,{"cn":[947456,98944]}], +"textures/segment2/segment2_cn.18290.ia1.png": [16,8,16,{"cn":[947456,98960]}], +"textures/segment2/segment2_cn.182A0.ia1.png": [16,8,16,{"cn":[947456,98976]}], +"textures/segment2/segment2_cn.182B0.ia1.png": [16,8,16,{"cn":[947456,98992]}], +"textures/segment2/segment2_cn.182C0.ia1.png": [16,8,16,{"cn":[947456,99008]}], +"textures/segment2/segment2_cn.182D0.ia1.png": [16,8,16,{"cn":[947456,99024]}], +"textures/segment2/segment2_cn.182E0.ia1.png": [16,8,16,{"cn":[947456,99040]}], +"textures/segment2/segment2_cn.182F0.ia1.png": [16,8,16,{"cn":[947456,99056]}], +"textures/segment2/segment2_cn.18300.ia1.png": [16,8,16,{"cn":[947456,99072]}], +"textures/segment2/segment2_cn.18310.ia1.png": [16,8,16,{"cn":[947456,99088]}], +"textures/segment2/segment2_cn.18320.ia1.png": [16,8,16,{"cn":[947456,99104]}], +"textures/segment2/segment2_cn.18330.ia1.png": [16,8,16,{"cn":[947456,99120]}], +"textures/segment2/segment2_cn.18340.ia1.png": [16,8,16,{"cn":[947456,99136]}], +"textures/segment2/segment2_cn.18350.ia1.png": [16,8,16,{"cn":[947456,99152]}], +"textures/segment2/segment2_cn.18360.ia1.png": [16,8,16,{"cn":[947456,99168]}], +"textures/segment2/segment2_cn.18370.ia1.png": [16,8,16,{"cn":[947456,99184]}], +"textures/segment2/segment2_cn.18380.ia1.png": [16,8,16,{"cn":[947456,99200]}], +"textures/segment2/segment2_cn.18390.ia1.png": [16,8,16,{"cn":[947456,99216]}], +"textures/segment2/segment2_cn.183A0.ia1.png": [16,8,16,{"cn":[947456,99232]}], +"textures/segment2/segment2_cn.183B0.ia1.png": [16,8,16,{"cn":[947456,99248]}], +"textures/segment2/segment2_cn.183C0.ia1.png": [16,8,16,{"cn":[947456,99264]}], +"textures/segment2/segment2_cn.183D0.ia1.png": [16,8,16,{"cn":[947456,99280]}], +"textures/segment2/segment2_cn.183E0.ia1.png": [16,8,16,{"cn":[947456,99296]}], +"textures/segment2/segment2_cn.183F0.ia1.png": [16,8,16,{"cn":[947456,99312]}], +"textures/segment2/segment2_cn.18400.ia1.png": [16,8,16,{"cn":[947456,99328]}], +"textures/segment2/segment2_cn.18410.ia1.png": [16,8,16,{"cn":[947456,99344]}], +"textures/segment2/segment2_cn.18420.ia1.png": [16,8,16,{"cn":[947456,99360]}], +"textures/segment2/segment2_cn.18430.ia1.png": [16,8,16,{"cn":[947456,99376]}], +"textures/segment2/segment2_cn.18440.ia1.png": [16,8,16,{"cn":[947456,99392]}], +"textures/segment2/segment2_cn.18450.ia1.png": [16,8,16,{"cn":[947456,99408]}], +"textures/segment2/segment2_cn.18460.ia1.png": [16,8,16,{"cn":[947456,99424]}], +"textures/segment2/segment2_cn.18470.ia1.png": [16,8,16,{"cn":[947456,99440]}], +"textures/segment2/segment2_cn.18480.ia1.png": [16,8,16,{"cn":[947456,99456]}], +"textures/segment2/segment2_cn.18490.ia1.png": [16,8,16,{"cn":[947456,99472]}], +"textures/segment2/segment2_cn.184A0.ia1.png": [16,8,16,{"cn":[947456,99488]}], +"textures/segment2/segment2_cn.184B0.ia1.png": [16,8,16,{"cn":[947456,99504]}], +"textures/segment2/segment2_cn.184C0.ia1.png": [16,8,16,{"cn":[947456,99520]}], +"textures/segment2/segment2_cn.184D0.ia1.png": [16,8,16,{"cn":[947456,99536]}], +"textures/segment2/segment2_cn.184E0.ia1.png": [16,8,16,{"cn":[947456,99552]}], +"textures/segment2/segment2_cn.184F0.ia1.png": [16,8,16,{"cn":[947456,99568]}], +"textures/segment2/segment2_cn.18500.ia1.png": [16,8,16,{"cn":[947456,99584]}], +"textures/segment2/segment2_cn.18510.ia1.png": [16,8,16,{"cn":[947456,99600]}], +"textures/segment2/segment2_cn.18520.ia1.png": [16,8,16,{"cn":[947456,99616]}], +"textures/segment2/segment2_cn.18530.ia1.png": [16,8,16,{"cn":[947456,99632]}], +"textures/segment2/segment2_cn.18540.ia1.png": [16,8,16,{"cn":[947456,99648]}], +"textures/segment2/segment2_cn.18550.ia1.png": [16,8,16,{"cn":[947456,99664]}], +"textures/segment2/segment2_cn.18560.ia1.png": [16,8,16,{"cn":[947456,99680]}], +"textures/segment2/segment2_cn.18570.ia1.png": [16,8,16,{"cn":[947456,99696]}], +"textures/segment2/segment2_cn.18580.ia1.png": [16,8,16,{"cn":[947456,99712]}], +"textures/segment2/segment2_cn.18590.ia1.png": [16,8,16,{"cn":[947456,99728]}], +"textures/segment2/segment2_cn.185A0.ia1.png": [16,8,16,{"cn":[947456,99744]}], +"textures/segment2/segment2_cn.185B0.ia1.png": [16,8,16,{"cn":[947456,99760]}], +"textures/segment2/segment2_cn.185C0.ia1.png": [16,8,16,{"cn":[947456,99776]}], +"textures/segment2/segment2_cn.185D0.ia1.png": [16,8,16,{"cn":[947456,99792]}], +"textures/segment2/segment2_cn.185E0.ia1.png": [16,8,16,{"cn":[947456,99808]}], +"textures/segment2/segment2_cn.185F0.ia1.png": [16,8,16,{"cn":[947456,99824]}], +"textures/segment2/segment2_cn.18600.ia1.png": [16,8,16,{"cn":[947456,99840]}], +"textures/segment2/segment2_cn.18610.ia1.png": [16,8,16,{"cn":[947456,99856]}], +"textures/segment2/segment2_cn.18620.ia1.png": [16,8,16,{"cn":[947456,99872]}], +"textures/segment2/segment2_cn.18630.ia1.png": [16,8,16,{"cn":[947456,99888]}], +"textures/segment2/segment2_cn.18640.ia1.png": [16,8,16,{"cn":[947456,99904]}], +"textures/segment2/segment2_cn.18650.ia1.png": [16,8,16,{"cn":[947456,99920]}], +"textures/segment2/segment2_cn.18660.ia1.png": [16,8,16,{"cn":[947456,99936]}], +"textures/segment2/segment2_cn.18670.ia1.png": [16,8,16,{"cn":[947456,99952]}], +"textures/segment2/segment2_cn.18680.ia1.png": [16,8,16,{"cn":[947456,99968]}], +"textures/segment2/segment2_cn.18690.ia1.png": [16,8,16,{"cn":[947456,99984]}], +"textures/segment2/segment2_cn.186A0.ia1.png": [16,8,16,{"cn":[947456,100000]}], +"textures/segment2/segment2_cn.186B0.ia1.png": [16,8,16,{"cn":[947456,100016]}], +"textures/segment2/segment2_cn.186C0.ia1.png": [16,8,16,{"cn":[947456,100032]}], +"textures/segment2/segment2_cn.186D0.ia1.png": [16,8,16,{"cn":[947456,100048]}], +"textures/segment2/segment2_cn.186E0.ia1.png": [16,8,16,{"cn":[947456,100064]}], +"textures/segment2/segment2_cn.186F0.ia1.png": [16,8,16,{"cn":[947456,100080]}], +"textures/segment2/segment2_cn.18700.ia1.png": [16,8,16,{"cn":[947456,100096]}], +"textures/segment2/segment2_cn.18710.ia1.png": [16,8,16,{"cn":[947456,100112]}], +"textures/segment2/segment2_cn.18720.ia1.png": [16,8,16,{"cn":[947456,100128]}], +"textures/segment2/segment2_cn.18730.ia1.png": [16,8,16,{"cn":[947456,100144]}], +"textures/segment2/segment2_cn.18740.ia1.png": [16,8,16,{"cn":[947456,100160]}], +"textures/segment2/segment2_cn.18750.ia1.png": [16,8,16,{"cn":[947456,100176]}], +"textures/segment2/segment2_cn.18760.ia1.png": [16,8,16,{"cn":[947456,100192]}], +"textures/segment2/segment2_cn.18770.ia1.png": [16,8,16,{"cn":[947456,100208]}], +"textures/segment2/segment2_cn.18780.ia1.png": [16,8,16,{"cn":[947456,100224]}], +"textures/segment2/segment2_cn.18790.ia1.png": [16,8,16,{"cn":[947456,100240]}], +"textures/segment2/segment2_cn.187A0.ia1.png": [16,8,16,{"cn":[947456,100256]}], +"textures/segment2/segment2_cn.187B0.ia1.png": [16,8,16,{"cn":[947456,100272]}], +"textures/segment2/segment2_cn.187C0.ia1.png": [16,8,16,{"cn":[947456,100288]}], +"textures/segment2/segment2_cn.187D0.ia1.png": [16,8,16,{"cn":[947456,100304]}], +"textures/segment2/segment2_cn.187E0.ia1.png": [16,8,16,{"cn":[947456,100320]}], +"textures/segment2/segment2_cn.187F0.ia1.png": [16,8,16,{"cn":[947456,100336]}], +"textures/segment2/segment2_cn.18800.ia1.png": [16,8,16,{"cn":[947456,100352]}], +"textures/segment2/segment2_cn.18810.ia1.png": [16,8,16,{"cn":[947456,100368]}], +"textures/segment2/segment2_cn.18820.ia1.png": [16,8,16,{"cn":[947456,100384]}], +"textures/segment2/segment2_cn.18830.ia1.png": [16,8,16,{"cn":[947456,100400]}], +"textures/segment2/segment2_cn.18840.ia1.png": [16,8,16,{"cn":[947456,100416]}], +"textures/segment2/segment2_cn.18850.ia1.png": [16,8,16,{"cn":[947456,100432]}], +"textures/segment2/segment2_cn.18860.ia1.png": [16,8,16,{"cn":[947456,100448]}], +"textures/segment2/segment2_cn.18870.ia1.png": [16,8,16,{"cn":[947456,100464]}], +"textures/segment2/segment2_cn.18880.ia1.png": [16,8,16,{"cn":[947456,100480]}], +"textures/segment2/segment2_cn.18890.ia1.png": [16,8,16,{"cn":[947456,100496]}], +"textures/segment2/segment2_cn.188A0.ia1.png": [16,8,16,{"cn":[947456,100512]}], +"textures/segment2/segment2_cn.188B0.ia1.png": [16,8,16,{"cn":[947456,100528]}], +"textures/segment2/segment2_cn.188C0.ia1.png": [16,8,16,{"cn":[947456,100544]}], +"textures/segment2/segment2_cn.188D0.ia1.png": [16,8,16,{"cn":[947456,100560]}], +"textures/segment2/segment2_cn.188E0.ia1.png": [16,8,16,{"cn":[947456,100576]}], +"textures/segment2/segment2_cn.188F0.ia1.png": [16,8,16,{"cn":[947456,100592]}], +"textures/segment2/segment2_cn.18900.ia1.png": [16,8,16,{"cn":[947456,100608]}], +"textures/segment2/segment2_cn.18910.ia1.png": [16,8,16,{"cn":[947456,100624]}], +"textures/segment2/segment2_cn.18920.ia1.png": [16,8,16,{"cn":[947456,100640]}], +"textures/segment2/segment2_cn.18930.ia1.png": [16,8,16,{"cn":[947456,100656]}], +"textures/segment2/segment2_cn.18940.ia1.png": [16,8,16,{"cn":[947456,100672]}], +"textures/segment2/segment2_cn.18950.ia1.png": [16,8,16,{"cn":[947456,100688]}], +"textures/segment2/segment2_cn.18960.ia1.png": [16,8,16,{"cn":[947456,100704]}], +"textures/segment2/segment2_cn.18970.ia1.png": [16,8,16,{"cn":[947456,100720]}], +"textures/segment2/segment2_cn.18980.ia1.png": [16,8,16,{"cn":[947456,100736]}], +"textures/segment2/segment2_cn.18990.ia1.png": [16,8,16,{"cn":[947456,100752]}], +"textures/segment2/segment2_cn.189A0.ia1.png": [16,8,16,{"cn":[947456,100768]}], +"textures/segment2/segment2_cn.189B0.ia1.png": [16,8,16,{"cn":[947456,100784]}], +"textures/segment2/segment2_cn.189C0.ia1.png": [16,8,16,{"cn":[947456,100800]}], +"textures/segment2/segment2_cn.189D0.ia1.png": [16,8,16,{"cn":[947456,100816]}], +"textures/segment2/segment2_cn.189E0.ia1.png": [16,8,16,{"cn":[947456,100832]}], +"textures/segment2/segment2_cn.189F0.ia1.png": [16,8,16,{"cn":[947456,100848]}], +"textures/segment2/segment2_cn.18A00.ia1.png": [16,8,16,{"cn":[947456,100864]}], +"textures/segment2/segment2_cn.18A10.ia1.png": [16,8,16,{"cn":[947456,100880]}], +"textures/segment2/segment2_cn.18A20.ia1.png": [16,8,16,{"cn":[947456,100896]}], +"textures/segment2/segment2_cn.18A30.ia1.png": [16,8,16,{"cn":[947456,100912]}], +"textures/segment2/segment2_cn.18A40.ia1.png": [16,8,16,{"cn":[947456,100928]}], +"textures/segment2/segment2_cn.18A50.ia1.png": [16,8,16,{"cn":[947456,100944]}], +"textures/segment2/segment2_cn.18A60.ia1.png": [16,8,16,{"cn":[947456,100960]}], +"textures/segment2/segment2_cn.18A70.ia1.png": [16,8,16,{"cn":[947456,100976]}], +"textures/segment2/segment2_cn.18A80.ia1.png": [16,8,16,{"cn":[947456,100992]}], +"textures/segment2/segment2_cn.18A90.ia1.png": [16,8,16,{"cn":[947456,101008]}], +"textures/segment2/segment2_cn.18AA0.ia1.png": [16,8,16,{"cn":[947456,101024]}], +"textures/segment2/segment2_cn.18AB0.ia1.png": [16,8,16,{"cn":[947456,101040]}], +"textures/segment2/segment2_cn.18AC0.ia1.png": [16,8,16,{"cn":[947456,101056]}], +"textures/segment2/segment2_cn.18AD0.ia1.png": [16,8,16,{"cn":[947456,101072]}], +"textures/segment2/segment2_cn.18AE0.ia1.png": [16,8,16,{"cn":[947456,101088]}], +"textures/segment2/segment2_cn.18AF0.ia1.png": [16,8,16,{"cn":[947456,101104]}], +"textures/segment2/segment2_cn.18B00.ia1.png": [16,8,16,{"cn":[947456,101120]}], +"textures/segment2/segment2_cn.18B10.ia1.png": [16,8,16,{"cn":[947456,101136]}], +"textures/segment2/segment2_cn.18B20.ia1.png": [16,8,16,{"cn":[947456,101152]}], +"textures/segment2/segment2_cn.18B30.ia1.png": [16,8,16,{"cn":[947456,101168]}], +"textures/segment2/segment2_cn.18B40.ia1.png": [16,8,16,{"cn":[947456,101184]}], +"textures/segment2/segment2_cn.18B50.ia1.png": [16,8,16,{"cn":[947456,101200]}], +"textures/segment2/segment2_cn.18B60.ia1.png": [16,8,16,{"cn":[947456,101216]}], +"textures/segment2/segment2_cn.18B70.ia1.png": [16,8,16,{"cn":[947456,101232]}], +"textures/segment2/segment2_cn.18B80.ia1.png": [16,8,16,{"cn":[947456,101248]}], +"textures/segment2/segment2_cn.18B90.ia1.png": [16,8,16,{"cn":[947456,101264]}], +"textures/segment2/segment2_cn.18BA0.ia1.png": [16,8,16,{"cn":[947456,101280]}], +"textures/segment2/segment2_cn.18BB0.ia1.png": [16,8,16,{"cn":[947456,101296]}], +"textures/segment2/segment2_cn.18BC0.ia1.png": [16,8,16,{"cn":[947456,101312]}], +"textures/segment2/segment2_cn.18BD0.ia1.png": [16,8,16,{"cn":[947456,101328]}], +"textures/segment2/segment2_cn.18BE0.ia1.png": [16,8,16,{"cn":[947456,101344]}], +"textures/segment2/segment2_cn.18BF0.ia1.png": [16,8,16,{"cn":[947456,101360]}], +"textures/segment2/segment2_cn.18C00.ia1.png": [16,8,16,{"cn":[947456,101376]}], +"textures/segment2/segment2_cn.18C10.ia1.png": [16,8,16,{"cn":[947456,101392]}], +"textures/segment2/segment2_cn.18C20.ia1.png": [16,8,16,{"cn":[947456,101408]}], +"textures/segment2/segment2_cn.18C30.ia1.png": [16,8,16,{"cn":[947456,101424]}], +"textures/segment2/segment2_cn.18C40.ia1.png": [16,8,16,{"cn":[947456,101440]}], +"textures/segment2/segment2_cn.18C50.ia1.png": [16,8,16,{"cn":[947456,101456]}], +"textures/segment2/segment2_cn.18C60.ia1.png": [16,8,16,{"cn":[947456,101472]}], +"textures/segment2/segment2_cn.18C70.ia1.png": [16,8,16,{"cn":[947456,101488]}], +"textures/segment2/segment2_cn.18C80.ia1.png": [16,8,16,{"cn":[947456,101504]}], +"textures/segment2/segment2_cn.18C90.ia1.png": [16,8,16,{"cn":[947456,101520]}], +"textures/segment2/segment2_cn.18CA0.ia1.png": [16,8,16,{"cn":[947456,101536]}], +"textures/segment2/segment2_cn.18CB0.ia1.png": [16,8,16,{"cn":[947456,101552]}], +"textures/segment2/segment2_cn.18CC0.ia1.png": [16,8,16,{"cn":[947456,101568]}], +"textures/segment2/segment2_cn.18CD0.ia1.png": [16,8,16,{"cn":[947456,101584]}], +"textures/segment2/segment2_cn.18CE0.ia1.png": [16,8,16,{"cn":[947456,101600]}], +"textures/segment2/segment2_cn.18CF0.ia1.png": [16,8,16,{"cn":[947456,101616]}], +"textures/segment2/segment2_cn.18D00.ia1.png": [16,8,16,{"cn":[947456,101632]}], +"textures/segment2/segment2_cn.18D10.ia1.png": [16,8,16,{"cn":[947456,101648]}], +"textures/segment2/segment2_cn.18D20.ia1.png": [16,8,16,{"cn":[947456,101664]}], +"textures/segment2/segment2_cn.18D30.ia1.png": [16,8,16,{"cn":[947456,101680]}], +"textures/segment2/segment2_cn.18D40.ia1.png": [16,8,16,{"cn":[947456,101696]}], +"textures/segment2/segment2_cn.18D50.ia1.png": [16,8,16,{"cn":[947456,101712]}], +"textures/segment2/segment2_cn.18D60.ia1.png": [16,8,16,{"cn":[947456,101728]}], +"textures/segment2/segment2_cn.18D70.ia1.png": [16,8,16,{"cn":[947456,101744]}], +"textures/segment2/segment2_cn.18D80.ia1.png": [16,8,16,{"cn":[947456,101760]}], +"textures/segment2/segment2_cn.18D90.ia1.png": [16,8,16,{"cn":[947456,101776]}], +"textures/segment2/segment2_cn.18DA0.ia1.png": [16,8,16,{"cn":[947456,101792]}], +"textures/segment2/segment2_cn.18DB0.ia1.png": [16,8,16,{"cn":[947456,101808]}], +"textures/segment2/segment2_cn.18DC0.ia1.png": [16,8,16,{"cn":[947456,101824]}], +"textures/segment2/segment2_cn.18DD0.ia1.png": [16,8,16,{"cn":[947456,101840]}], +"textures/segment2/segment2_cn.18DE0.ia1.png": [16,8,16,{"cn":[947456,101856]}], +"textures/segment2/segment2_cn.18DF0.ia1.png": [16,8,16,{"cn":[947456,101872]}], +"textures/segment2/segment2_cn.18E00.ia1.png": [16,8,16,{"cn":[947456,101888]}], +"textures/segment2/segment2_cn.18E10.ia1.png": [16,8,16,{"cn":[947456,101904]}], +"textures/segment2/segment2_cn.18E20.ia1.png": [16,8,16,{"cn":[947456,101920]}], +"textures/segment2/segment2_cn.18E30.ia1.png": [16,8,16,{"cn":[947456,101936]}], +"textures/segment2/segment2_cn.18E40.ia1.png": [16,8,16,{"cn":[947456,101952]}], +"textures/segment2/segment2_cn.18E50.ia1.png": [16,8,16,{"cn":[947456,101968]}], +"textures/segment2/segment2_cn.18E60.ia1.png": [16,8,16,{"cn":[947456,101984]}], +"textures/segment2/segment2_cn.18E70.ia1.png": [16,8,16,{"cn":[947456,102000]}], +"textures/segment2/segment2_cn.18E80.ia1.png": [16,8,16,{"cn":[947456,102016]}], +"textures/segment2/segment2_cn.18E90.ia1.png": [16,8,16,{"cn":[947456,102032]}], +"textures/segment2/segment2_cn.18EA0.ia1.png": [16,8,16,{"cn":[947456,102048]}], +"textures/segment2/segment2_cn.18EB0.ia1.png": [16,8,16,{"cn":[947456,102064]}], +"textures/segment2/segment2_cn.18EC0.ia1.png": [16,8,16,{"cn":[947456,102080]}], +"textures/segment2/segment2_cn.18ED0.ia1.png": [16,8,16,{"cn":[947456,102096]}], +"textures/segment2/segment2_cn.18EE0.ia1.png": [16,8,16,{"cn":[947456,102112]}], +"textures/segment2/segment2_cn.18EF0.ia1.png": [16,8,16,{"cn":[947456,102128]}], +"textures/segment2/segment2_cn.18F00.ia1.png": [16,8,16,{"cn":[947456,102144]}], +"textures/segment2/segment2_cn.18F10.ia1.png": [16,8,16,{"cn":[947456,102160]}], +"textures/segment2/segment2_cn.18F20.ia1.png": [16,8,16,{"cn":[947456,102176]}], +"textures/segment2/segment2_cn.18F30.ia1.png": [16,8,16,{"cn":[947456,102192]}], +"textures/segment2/segment2_cn.18F40.ia1.png": [16,8,16,{"cn":[947456,102208]}], +"textures/segment2/segment2_cn.18F50.ia1.png": [16,8,16,{"cn":[947456,102224]}], +"textures/segment2/segment2_cn.18F60.ia1.png": [16,8,16,{"cn":[947456,102240]}], +"textures/segment2/segment2_cn.18F70.ia1.png": [16,8,16,{"cn":[947456,102256]}], +"textures/segment2/segment2_cn.18F80.ia1.png": [16,8,16,{"cn":[947456,102272]}], +"textures/segment2/segment2_cn.18F90.ia1.png": [16,8,16,{"cn":[947456,102288]}], +"textures/segment2/segment2_cn.18FA0.ia1.png": [16,8,16,{"cn":[947456,102304]}], +"textures/segment2/segment2_cn.18FB0.ia1.png": [16,8,16,{"cn":[947456,102320]}], +"textures/segment2/segment2_cn.18FC0.ia1.png": [16,8,16,{"cn":[947456,102336]}], +"textures/segment2/segment2_cn.18FD0.ia1.png": [16,8,16,{"cn":[947456,102352]}], +"textures/segment2/segment2_cn.18FE0.ia1.png": [16,8,16,{"cn":[947456,102368]}], +"textures/segment2/segment2_cn.18FF0.ia1.png": [16,8,16,{"cn":[947456,102384]}], +"textures/segment2/segment2_cn.19000.ia1.png": [16,8,16,{"cn":[947456,102400]}], +"textures/segment2/segment2_cn.19010.ia1.png": [16,8,16,{"cn":[947456,102416]}], +"textures/segment2/segment2_cn.19020.ia1.png": [16,8,16,{"cn":[947456,102432]}], +"textures/segment2/segment2_cn.19030.ia1.png": [16,8,16,{"cn":[947456,102448]}], +"textures/segment2/segment2_cn.19040.ia1.png": [16,8,16,{"cn":[947456,102464]}], +"textures/segment2/segment2_cn.19050.ia1.png": [16,8,16,{"cn":[947456,102480]}], +"textures/segment2/segment2_cn.19060.ia1.png": [16,8,16,{"cn":[947456,102496]}], +"textures/segment2/segment2_cn.19070.ia1.png": [16,8,16,{"cn":[947456,102512]}], +"textures/segment2/segment2_cn.19080.ia1.png": [16,8,16,{"cn":[947456,102528]}], +"textures/segment2/segment2_cn.19090.ia1.png": [16,8,16,{"cn":[947456,102544]}], +"textures/segment2/segment2_cn.190A0.ia1.png": [16,8,16,{"cn":[947456,102560]}], +"textures/segment2/segment2_cn.190B0.ia1.png": [16,8,16,{"cn":[947456,102576]}], +"textures/segment2/segment2_cn.190C0.ia1.png": [16,8,16,{"cn":[947456,102592]}], +"textures/segment2/segment2_cn.190D0.ia1.png": [16,8,16,{"cn":[947456,102608]}], +"textures/segment2/segment2_cn.190E0.ia1.png": [16,8,16,{"cn":[947456,102624]}], +"textures/segment2/segment2_cn.190F0.ia1.png": [16,8,16,{"cn":[947456,102640]}], +"textures/segment2/segment2_cn.19100.ia1.png": [16,8,16,{"cn":[947456,102656]}], +"textures/segment2/segment2_cn.19110.ia1.png": [16,8,16,{"cn":[947456,102672]}], +"textures/segment2/segment2_cn.19120.ia1.png": [16,8,16,{"cn":[947456,102688]}], +"textures/segment2/segment2_cn.19130.ia1.png": [16,8,16,{"cn":[947456,102704]}], +"textures/segment2/segment2_cn.19140.ia1.png": [16,8,16,{"cn":[947456,102720]}], +"textures/segment2/segment2_cn.19150.ia1.png": [16,8,16,{"cn":[947456,102736]}], +"textures/segment2/segment2_cn.19160.ia1.png": [16,8,16,{"cn":[947456,102752]}], +"textures/segment2/segment2_cn.19170.ia1.png": [16,8,16,{"cn":[947456,102768]}], +"textures/segment2/segment2_cn.19180.ia1.png": [16,8,16,{"cn":[947456,102784]}], +"textures/segment2/segment2_cn.19190.ia1.png": [16,8,16,{"cn":[947456,102800]}], +"textures/segment2/segment2_cn.191A0.ia1.png": [16,8,16,{"cn":[947456,102816]}], +"textures/segment2/segment2_cn.191B0.ia1.png": [16,8,16,{"cn":[947456,102832]}], +"textures/segment2/segment2_cn.191C0.ia1.png": [16,8,16,{"cn":[947456,102848]}], +"textures/segment2/segment2_cn.191D0.ia1.png": [16,8,16,{"cn":[947456,102864]}], +"textures/segment2/segment2_cn.191E0.ia1.png": [16,8,16,{"cn":[947456,102880]}], +"textures/segment2/segment2_cn.191F0.ia1.png": [16,8,16,{"cn":[947456,102896]}], +"textures/segment2/segment2_cn.19200.ia1.png": [16,8,16,{"cn":[947456,102912]}], +"textures/segment2/segment2_cn.19210.ia1.png": [16,8,16,{"cn":[947456,102928]}], +"textures/segment2/segment2_cn.19220.ia1.png": [16,8,16,{"cn":[947456,102944]}], +"textures/segment2/segment2_cn.19230.ia1.png": [16,8,16,{"cn":[947456,102960]}], +"textures/segment2/segment2_cn.19240.ia1.png": [16,8,16,{"cn":[947456,102976]}], +"textures/segment2/segment2_cn.19250.ia1.png": [16,8,16,{"cn":[947456,102992]}], +"textures/segment2/segment2_cn.19260.ia1.png": [16,8,16,{"cn":[947456,103008]}], +"textures/segment2/segment2_cn.19270.ia1.png": [16,8,16,{"cn":[947456,103024]}], +"textures/segment2/segment2_cn.19280.ia1.png": [16,8,16,{"cn":[947456,103040]}], +"textures/segment2/segment2_cn.19290.ia1.png": [16,8,16,{"cn":[947456,103056]}], +"textures/segment2/segment2_cn.192A0.ia1.png": [16,8,16,{"cn":[947456,103072]}], +"textures/segment2/segment2_cn.192B0.ia1.png": [16,8,16,{"cn":[947456,103088]}], +"textures/segment2/segment2_cn.192C0.ia1.png": [16,8,16,{"cn":[947456,103104]}], +"textures/segment2/segment2_cn.192D0.ia1.png": [16,8,16,{"cn":[947456,103120]}], +"textures/segment2/segment2_cn.192E0.ia1.png": [16,8,16,{"cn":[947456,103136]}], +"textures/segment2/segment2_cn.192F0.ia1.png": [16,8,16,{"cn":[947456,103152]}], +"textures/segment2/segment2_cn.19300.ia1.png": [16,8,16,{"cn":[947456,103168]}], +"textures/segment2/segment2_cn.19310.ia1.png": [16,8,16,{"cn":[947456,103184]}], +"textures/segment2/segment2_cn.19320.ia1.png": [16,8,16,{"cn":[947456,103200]}], +"textures/segment2/segment2_cn.19330.ia1.png": [16,8,16,{"cn":[947456,103216]}], +"textures/segment2/segment2_cn.19340.ia1.png": [16,8,16,{"cn":[947456,103232]}], +"textures/segment2/segment2_cn.19350.ia1.png": [16,8,16,{"cn":[947456,103248]}], +"textures/segment2/segment2_cn.19360.ia1.png": [16,8,16,{"cn":[947456,103264]}], +"textures/segment2/segment2_cn.19370.ia1.png": [16,8,16,{"cn":[947456,103280]}], +"textures/segment2/segment2_cn.19380.ia1.png": [16,8,16,{"cn":[947456,103296]}], +"textures/segment2/segment2_cn.19390.ia1.png": [16,8,16,{"cn":[947456,103312]}], +"textures/segment2/segment2_cn.193A0.ia1.png": [16,8,16,{"cn":[947456,103328]}], +"textures/segment2/segment2_cn.193B0.ia1.png": [16,8,16,{"cn":[947456,103344]}], +"textures/segment2/segment2_cn.193C0.ia1.png": [16,8,16,{"cn":[947456,103360]}], +"textures/segment2/segment2_cn.193D0.ia1.png": [16,8,16,{"cn":[947456,103376]}], +"textures/segment2/segment2_cn.193E0.ia1.png": [16,8,16,{"cn":[947456,103392]}], +"textures/segment2/segment2_cn.193F0.ia1.png": [16,8,16,{"cn":[947456,103408]}], +"textures/segment2/segment2_cn.19400.ia1.png": [16,8,16,{"cn":[947456,103424]}], +"textures/segment2/segment2_cn.19410.ia1.png": [16,8,16,{"cn":[947456,103440]}], +"textures/segment2/segment2_cn.19420.ia1.png": [16,8,16,{"cn":[947456,103456]}], +"textures/segment2/segment2_cn.19430.ia1.png": [16,8,16,{"cn":[947456,103472]}], +"textures/segment2/segment2_cn.19440.ia1.png": [16,8,16,{"cn":[947456,103488]}], +"textures/segment2/segment2_cn.19450.ia1.png": [16,8,16,{"cn":[947456,103504]}], +"textures/segment2/segment2_cn.19460.ia1.png": [16,8,16,{"cn":[947456,103520]}], +"textures/segment2/segment2_cn.19470.ia1.png": [16,8,16,{"cn":[947456,103536]}], +"textures/segment2/segment2_cn.19480.ia1.png": [16,8,16,{"cn":[947456,103552]}], +"textures/segment2/segment2_cn.19490.ia1.png": [16,8,16,{"cn":[947456,103568]}], +"textures/segment2/segment2_cn.194A0.ia1.png": [16,8,16,{"cn":[947456,103584]}], +"textures/segment2/segment2_cn.194B0.ia1.png": [16,8,16,{"cn":[947456,103600]}], +"textures/segment2/segment2_cn.194C0.ia1.png": [16,8,16,{"cn":[947456,103616]}], +"textures/segment2/segment2_cn.194D0.ia1.png": [16,8,16,{"cn":[947456,103632]}], +"textures/segment2/segment2_cn.194E0.ia1.png": [16,8,16,{"cn":[947456,103648]}], +"textures/segment2/segment2_cn.194F0.ia1.png": [16,8,16,{"cn":[947456,103664]}], +"textures/segment2/segment2_cn.19500.ia1.png": [16,8,16,{"cn":[947456,103680]}], +"textures/segment2/segment2_cn.19510.ia1.png": [16,8,16,{"cn":[947456,103696]}], +"textures/segment2/segment2_cn.19520.ia1.png": [16,8,16,{"cn":[947456,103712]}], +"textures/segment2/segment2_cn.19530.ia1.png": [16,8,16,{"cn":[947456,103728]}], +"textures/segment2/segment2_cn.19540.ia1.png": [16,8,16,{"cn":[947456,103744]}], +"textures/segment2/segment2_cn.19550.ia1.png": [16,8,16,{"cn":[947456,103760]}], +"textures/segment2/segment2_cn.19560.ia1.png": [16,8,16,{"cn":[947456,103776]}], +"textures/segment2/segment2_cn.19570.ia1.png": [16,8,16,{"cn":[947456,103792]}], +"textures/segment2/segment2_cn.19580.ia1.png": [16,8,16,{"cn":[947456,103808]}], +"textures/segment2/segment2_cn.19590.ia1.png": [16,8,16,{"cn":[947456,103824]}], +"textures/segment2/segment2_cn.195A0.ia1.png": [16,8,16,{"cn":[947456,103840]}], +"textures/segment2/segment2_cn.195B0.ia1.png": [16,8,16,{"cn":[947456,103856]}], +"textures/segment2/segment2_cn.195C0.ia1.png": [16,8,16,{"cn":[947456,103872]}], +"textures/segment2/segment2_cn.195D0.ia1.png": [16,8,16,{"cn":[947456,103888]}], +"textures/segment2/segment2_cn.195E0.ia1.png": [16,8,16,{"cn":[947456,103904]}], +"textures/segment2/segment2_cn.195F0.ia1.png": [16,8,16,{"cn":[947456,103920]}], +"textures/segment2/segment2_cn.19600.ia1.png": [16,8,16,{"cn":[947456,103936]}], +"textures/segment2/segment2_cn.19610.ia1.png": [16,8,16,{"cn":[947456,103952]}], +"textures/segment2/segment2_cn.19620.ia1.png": [16,8,16,{"cn":[947456,103968]}], +"textures/segment2/segment2_cn.19630.ia1.png": [16,8,16,{"cn":[947456,103984]}], +"textures/segment2/segment2_cn.19640.ia1.png": [16,8,16,{"cn":[947456,104000]}], +"textures/segment2/segment2_cn.19650.ia1.png": [16,8,16,{"cn":[947456,104016]}], +"textures/segment2/segment2_cn.19660.ia1.png": [16,8,16,{"cn":[947456,104032]}], +"textures/segment2/segment2_cn.19670.ia1.png": [16,8,16,{"cn":[947456,104048]}], +"textures/segment2/segment2_cn.19680.ia1.png": [16,8,16,{"cn":[947456,104064]}], +"textures/segment2/segment2_cn.19690.ia1.png": [16,8,16,{"cn":[947456,104080]}], +"textures/segment2/segment2_cn.196A0.ia1.png": [16,8,16,{"cn":[947456,104096]}], +"textures/segment2/segment2_cn.196B0.ia1.png": [16,8,16,{"cn":[947456,104112]}], +"textures/segment2/segment2_cn.196C0.ia1.png": [16,8,16,{"cn":[947456,104128]}], +"textures/segment2/segment2_cn.196D0.ia1.png": [16,8,16,{"cn":[947456,104144]}], +"textures/segment2/segment2_cn.196E0.ia1.png": [16,8,16,{"cn":[947456,104160]}], +"textures/segment2/segment2_cn.196F0.ia1.png": [16,8,16,{"cn":[947456,104176]}], +"textures/segment2/segment2_cn.19700.ia1.png": [16,8,16,{"cn":[947456,104192]}], +"textures/segment2/segment2_cn.19710.ia1.png": [16,8,16,{"cn":[947456,104208]}], +"textures/segment2/segment2_cn.19720.ia1.png": [16,8,16,{"cn":[947456,104224]}], +"textures/segment2/segment2_cn.19730.ia1.png": [16,8,16,{"cn":[947456,104240]}], +"textures/segment2/segment2_cn.19740.ia1.png": [16,8,16,{"cn":[947456,104256]}], +"textures/segment2/segment2_cn.19750.ia1.png": [16,8,16,{"cn":[947456,104272]}], +"textures/segment2/segment2_cn.19760.ia1.png": [16,8,16,{"cn":[947456,104288]}], +"textures/segment2/segment2_cn.19770.ia1.png": [16,8,16,{"cn":[947456,104304]}], +"textures/segment2/segment2_cn.19780.ia1.png": [16,8,16,{"cn":[947456,104320]}], +"textures/segment2/segment2_cn.19790.ia1.png": [16,8,16,{"cn":[947456,104336]}], +"textures/segment2/segment2_cn.197A0.ia1.png": [16,8,16,{"cn":[947456,104352]}], +"textures/segment2/segment2_cn.197B0.ia1.png": [16,8,16,{"cn":[947456,104368]}], +"textures/segment2/segment2_cn.197C0.ia1.png": [16,8,16,{"cn":[947456,104384]}], +"textures/segment2/segment2_cn.197D0.ia1.png": [16,8,16,{"cn":[947456,104400]}], +"textures/segment2/segment2_cn.197E0.ia1.png": [16,8,16,{"cn":[947456,104416]}], +"textures/segment2/segment2_cn.197F0.ia1.png": [16,8,16,{"cn":[947456,104432]}], +"textures/segment2/segment2_cn.19800.ia1.png": [16,8,16,{"cn":[947456,104448]}], +"textures/segment2/segment2_cn.19810.ia1.png": [16,8,16,{"cn":[947456,104464]}], +"textures/segment2/segment2_cn.19820.ia1.png": [16,8,16,{"cn":[947456,104480]}], +"textures/segment2/segment2_cn.19830.ia1.png": [16,8,16,{"cn":[947456,104496]}], +"textures/segment2/segment2_cn.19840.ia1.png": [16,8,16,{"cn":[947456,104512]}], +"textures/segment2/segment2_cn.19850.ia1.png": [16,8,16,{"cn":[947456,104528]}], +"textures/segment2/segment2_cn.19860.ia1.png": [16,8,16,{"cn":[947456,104544]}], +"textures/segment2/segment2_cn.19870.ia1.png": [16,8,16,{"cn":[947456,104560]}], +"textures/segment2/segment2_cn.19880.ia1.png": [16,8,16,{"cn":[947456,104576]}], +"textures/segment2/segment2_cn.19890.ia1.png": [16,8,16,{"cn":[947456,104592]}], +"textures/segment2/segment2_cn.198A0.ia1.png": [16,8,16,{"cn":[947456,104608]}], +"textures/segment2/segment2_cn.198B0.ia1.png": [16,8,16,{"cn":[947456,104624]}], +"textures/segment2/segment2_cn.198C0.ia1.png": [16,8,16,{"cn":[947456,104640]}], +"textures/segment2/segment2_cn.198D0.ia1.png": [16,8,16,{"cn":[947456,104656]}], +"textures/segment2/segment2_cn.198E0.ia1.png": [16,8,16,{"cn":[947456,104672]}], +"textures/segment2/segment2_cn.198F0.ia1.png": [16,8,16,{"cn":[947456,104688]}], +"textures/segment2/segment2_cn.19900.ia1.png": [16,8,16,{"cn":[947456,104704]}], +"textures/segment2/segment2_cn.19910.ia1.png": [16,8,16,{"cn":[947456,104720]}], +"textures/segment2/segment2_cn.19920.ia1.png": [16,8,16,{"cn":[947456,104736]}], +"textures/segment2/segment2_cn.19930.ia1.png": [16,8,16,{"cn":[947456,104752]}], +"textures/segment2/segment2_cn.19940.ia1.png": [16,8,16,{"cn":[947456,104768]}], +"textures/segment2/segment2_cn.19950.ia1.png": [16,8,16,{"cn":[947456,104784]}], +"textures/segment2/segment2_cn.19960.ia1.png": [16,8,16,{"cn":[947456,104800]}], +"textures/segment2/segment2_cn.19970.ia1.png": [16,8,16,{"cn":[947456,104816]}], +"textures/segment2/segment2_cn.19980.ia1.png": [16,8,16,{"cn":[947456,104832]}], +"textures/segment2/segment2_cn.19990.ia1.png": [16,8,16,{"cn":[947456,104848]}], +"textures/segment2/segment2_cn.199A0.ia1.png": [16,8,16,{"cn":[947456,104864]}], +"textures/segment2/segment2_cn.199B0.ia1.png": [16,8,16,{"cn":[947456,104880]}], +"textures/segment2/segment2_cn.199C0.ia1.png": [16,8,16,{"cn":[947456,104896]}], +"textures/segment2/segment2_cn.199D0.ia1.png": [16,8,16,{"cn":[947456,104912]}], +"textures/segment2/segment2_cn.199E0.ia1.png": [16,8,16,{"cn":[947456,104928]}], +"textures/segment2/segment2_cn.199F0.ia1.png": [16,8,16,{"cn":[947456,104944]}], +"textures/segment2/segment2_cn.19A00.ia1.png": [16,8,16,{"cn":[947456,104960]}], +"textures/segment2/segment2_cn.19A10.ia1.png": [16,8,16,{"cn":[947456,104976]}], +"textures/segment2/segment2_cn.19A20.ia1.png": [16,8,16,{"cn":[947456,104992]}], +"textures/segment2/segment2_cn.19A30.ia1.png": [16,8,16,{"cn":[947456,105008]}], +"textures/segment2/segment2_cn.19A40.ia1.png": [16,8,16,{"cn":[947456,105024]}], +"textures/segment2/segment2_cn.19A50.ia1.png": [16,8,16,{"cn":[947456,105040]}], +"textures/segment2/segment2_cn.19A60.ia1.png": [16,8,16,{"cn":[947456,105056]}], +"textures/segment2/segment2_cn.19A70.ia1.png": [16,8,16,{"cn":[947456,105072]}], +"textures/segment2/segment2_cn.19A80.ia1.png": [16,8,16,{"cn":[947456,105088]}], +"textures/segment2/segment2_cn.19A90.ia1.png": [16,8,16,{"cn":[947456,105104]}], +"textures/segment2/segment2_cn.19AA0.ia1.png": [16,8,16,{"cn":[947456,105120]}], +"textures/segment2/segment2_cn.19AB0.ia1.png": [16,8,16,{"cn":[947456,105136]}], +"textures/segment2/segment2_cn.19AC0.ia1.png": [16,8,16,{"cn":[947456,105152]}], +"textures/segment2/segment2_cn.19AD0.ia1.png": [16,8,16,{"cn":[947456,105168]}], +"textures/segment2/segment2_cn.19AE0.ia1.png": [16,8,16,{"cn":[947456,105184]}], +"textures/segment2/segment2_cn.19AF0.ia1.png": [16,8,16,{"cn":[947456,105200]}], +"textures/segment2/segment2_cn.19B00.ia1.png": [16,8,16,{"cn":[947456,105216]}], +"textures/segment2/segment2_cn.19B10.ia1.png": [16,8,16,{"cn":[947456,105232]}], +"textures/segment2/segment2_cn.19B20.ia1.png": [16,8,16,{"cn":[947456,105248]}], +"textures/segment2/segment2_cn.19B30.ia1.png": [16,8,16,{"cn":[947456,105264]}], +"textures/segment2/segment2_cn.19B40.ia1.png": [16,8,16,{"cn":[947456,105280]}], +"textures/segment2/segment2_cn.19B50.ia1.png": [16,8,16,{"cn":[947456,105296]}], +"textures/segment2/segment2_cn.19B60.ia1.png": [16,8,16,{"cn":[947456,105312]}], +"textures/segment2/segment2_cn.19B70.ia1.png": [16,8,16,{"cn":[947456,105328]}], +"textures/segment2/segment2_cn.19B80.ia1.png": [16,8,16,{"cn":[947456,105344]}], +"textures/segment2/segment2_cn.19B90.ia1.png": [16,8,16,{"cn":[947456,105360]}], +"textures/segment2/segment2_cn.19BA0.ia1.png": [16,8,16,{"cn":[947456,105376]}], +"textures/segment2/segment2_cn.19BB0.ia1.png": [16,8,16,{"cn":[947456,105392]}], +"textures/segment2/segment2_cn.19BC0.ia1.png": [16,8,16,{"cn":[947456,105408]}], +"textures/segment2/segment2_cn.19BD0.ia1.png": [16,8,16,{"cn":[947456,105424]}], +"textures/segment2/segment2_cn.19BE0.ia1.png": [16,8,16,{"cn":[947456,105440]}], +"textures/segment2/segment2_cn.19BF0.ia1.png": [16,8,16,{"cn":[947456,105456]}], +"textures/segment2/segment2_cn.19C00.ia1.png": [16,8,16,{"cn":[947456,105472]}], +"textures/segment2/segment2_cn.19C10.ia1.png": [16,8,16,{"cn":[947456,105488]}], +"textures/segment2/segment2_cn.19C20.ia1.png": [16,8,16,{"cn":[947456,105504]}], +"textures/segment2/segment2_cn.19C30.ia1.png": [16,8,16,{"cn":[947456,105520]}], +"textures/segment2/segment2_cn.19C40.ia1.png": [16,8,16,{"cn":[947456,105536]}], +"textures/segment2/segment2_cn.19C50.ia1.png": [16,8,16,{"cn":[947456,105552]}], +"textures/segment2/segment2_cn.19C60.ia1.png": [16,8,16,{"cn":[947456,105568]}], +"textures/segment2/segment2_cn.19C70.ia1.png": [16,8,16,{"cn":[947456,105584]}], +"textures/segment2/segment2_cn.19C80.ia1.png": [16,8,16,{"cn":[947456,105600]}], +"textures/segment2/segment2_cn.19C90.ia1.png": [16,8,16,{"cn":[947456,105616]}], +"textures/segment2/segment2_cn.19CA0.ia1.png": [16,8,16,{"cn":[947456,105632]}], +"textures/segment2/segment2_cn.19CB0.ia1.png": [16,8,16,{"cn":[947456,105648]}], +"textures/segment2/segment2_cn.19CC0.ia1.png": [16,8,16,{"cn":[947456,105664]}], +"textures/segment2/segment2_cn.19CD0.ia1.png": [16,8,16,{"cn":[947456,105680]}], +"textures/segment2/segment2_cn.19CE0.ia1.png": [16,8,16,{"cn":[947456,105696]}], +"textures/segment2/segment2_cn.19CF0.ia1.png": [16,8,16,{"cn":[947456,105712]}], +"textures/segment2/segment2_cn.19D00.ia1.png": [16,8,16,{"cn":[947456,105728]}], +"textures/segment2/segment2_cn.19D10.ia1.png": [16,8,16,{"cn":[947456,105744]}], +"textures/segment2/segment2_cn.19D20.ia1.png": [16,8,16,{"cn":[947456,105760]}], +"textures/segment2/segment2_cn.19D30.ia1.png": [16,8,16,{"cn":[947456,105776]}], +"textures/segment2/segment2_cn.19D40.ia1.png": [16,8,16,{"cn":[947456,105792]}], +"textures/segment2/segment2_cn.19D50.ia1.png": [16,8,16,{"cn":[947456,105808]}], +"textures/segment2/segment2_cn.19D60.ia1.png": [16,8,16,{"cn":[947456,105824]}], +"textures/segment2/segment2_cn.19D70.ia1.png": [16,8,16,{"cn":[947456,105840]}], +"textures/segment2/segment2_cn.19D80.ia1.png": [16,8,16,{"cn":[947456,105856]}], +"textures/segment2/segment2_cn.19D90.ia1.png": [16,8,16,{"cn":[947456,105872]}], +"textures/segment2/segment2_cn.19DA0.ia1.png": [16,8,16,{"cn":[947456,105888]}], +"textures/segment2/segment2_cn.19DB0.ia1.png": [16,8,16,{"cn":[947456,105904]}], +"textures/segment2/segment2_cn.19DC0.ia1.png": [16,8,16,{"cn":[947456,105920]}], +"textures/segment2/segment2_cn.19DD0.ia1.png": [16,8,16,{"cn":[947456,105936]}], +"textures/segment2/segment2_cn.19DE0.ia1.png": [16,8,16,{"cn":[947456,105952]}], +"textures/segment2/segment2_cn.19DF0.ia1.png": [16,8,16,{"cn":[947456,105968]}], +"textures/segment2/segment2_cn.19E00.ia1.png": [16,8,16,{"cn":[947456,105984]}], +"textures/segment2/segment2_cn.19E10.ia1.png": [16,8,16,{"cn":[947456,106000]}], +"textures/segment2/segment2_cn.19E20.ia1.png": [16,8,16,{"cn":[947456,106016]}], +"textures/segment2/segment2_cn.19E30.ia1.png": [16,8,16,{"cn":[947456,106032]}], +"textures/segment2/segment2_cn.19E40.ia1.png": [16,8,16,{"cn":[947456,106048]}], +"textures/segment2/segment2_cn.19E50.ia1.png": [16,8,16,{"cn":[947456,106064]}], +"textures/segment2/segment2_cn.19E60.ia1.png": [16,8,16,{"cn":[947456,106080]}], +"textures/segment2/segment2_cn.19E70.ia1.png": [16,8,16,{"cn":[947456,106096]}], +"textures/segment2/segment2_cn.19E80.ia1.png": [16,8,16,{"cn":[947456,106112]}], +"textures/segment2/segment2_cn.19E90.ia1.png": [16,8,16,{"cn":[947456,106128]}], +"textures/segment2/segment2_cn.19EA0.ia1.png": [16,8,16,{"cn":[947456,106144]}], +"textures/segment2/segment2_cn.19EB0.ia1.png": [16,8,16,{"cn":[947456,106160]}], +"textures/segment2/segment2_cn.19EC0.ia1.png": [16,8,16,{"cn":[947456,106176]}], +"textures/segment2/segment2_cn.19ED0.ia1.png": [16,8,16,{"cn":[947456,106192]}], +"textures/segment2/segment2_cn.19EE0.ia1.png": [16,8,16,{"cn":[947456,106208]}], +"textures/segment2/segment2_cn.19EF0.ia1.png": [16,8,16,{"cn":[947456,106224]}], +"textures/segment2/segment2_cn.19F00.ia1.png": [16,8,16,{"cn":[947456,106240]}], +"textures/segment2/segment2_cn.19F10.ia1.png": [16,8,16,{"cn":[947456,106256]}], +"textures/segment2/segment2_cn.19F20.ia1.png": [16,8,16,{"cn":[947456,106272]}], +"textures/segment2/segment2_cn.19F30.ia1.png": [16,8,16,{"cn":[947456,106288]}], +"textures/segment2/segment2_cn.19F40.ia1.png": [16,8,16,{"cn":[947456,106304]}], +"textures/segment2/segment2_cn.19F50.ia1.png": [16,8,16,{"cn":[947456,106320]}], +"textures/segment2/segment2_cn.19F60.ia1.png": [16,8,16,{"cn":[947456,106336]}], +"textures/segment2/segment2_cn.19F70.ia1.png": [16,8,16,{"cn":[947456,106352]}], +"textures/segment2/segment2_cn.19F80.ia1.png": [16,8,16,{"cn":[947456,106368]}], +"textures/segment2/segment2_cn.19F90.ia1.png": [16,8,16,{"cn":[947456,106384]}], +"textures/segment2/segment2_cn.19FA0.ia1.png": [16,8,16,{"cn":[947456,106400]}], +"textures/segment2/segment2_cn.19FB0.ia1.png": [16,8,16,{"cn":[947456,106416]}], +"textures/segment2/segment2_cn.19FC0.ia1.png": [16,8,16,{"cn":[947456,106432]}], +"textures/segment2/segment2_cn.19FD0.ia1.png": [16,8,16,{"cn":[947456,106448]}], +"textures/segment2/segment2_cn.19FE0.ia1.png": [16,8,16,{"cn":[947456,106464]}], +"textures/segment2/segment2_cn.19FF0.ia1.png": [16,8,16,{"cn":[947456,106480]}], +"textures/segment2/segment2_cn.1A000.ia1.png": [16,8,16,{"cn":[947456,106496]}], +"textures/segment2/segment2_cn.1A010.ia1.png": [16,8,16,{"cn":[947456,106512]}], +"textures/segment2/segment2_cn.1A020.ia1.png": [16,8,16,{"cn":[947456,106528]}], +"textures/segment2/segment2_cn.1A030.ia1.png": [16,8,16,{"cn":[947456,106544]}], +"textures/segment2/segment2_cn.1A040.ia1.png": [16,8,16,{"cn":[947456,106560]}], +"textures/segment2/segment2_cn.1A050.ia1.png": [16,8,16,{"cn":[947456,106576]}], +"textures/segment2/segment2_cn.1A060.ia1.png": [16,8,16,{"cn":[947456,106592]}], +"textures/segment2/segment2_cn.1A070.ia1.png": [16,8,16,{"cn":[947456,106608]}], +"textures/segment2/segment2_cn.1A080.ia1.png": [16,8,16,{"cn":[947456,106624]}], +"textures/segment2/segment2_cn.1A090.ia1.png": [16,8,16,{"cn":[947456,106640]}], +"textures/segment2/segment2_cn.1A0A0.ia1.png": [16,8,16,{"cn":[947456,106656]}], +"textures/segment2/segment2_cn.1A0B0.ia1.png": [16,8,16,{"cn":[947456,106672]}], +"textures/segment2/segment2_cn.1A0C0.ia1.png": [16,8,16,{"cn":[947456,106688]}], +"textures/segment2/segment2_cn.1A0D0.ia1.png": [16,8,16,{"cn":[947456,106704]}], +"textures/segment2/segment2_cn.1A0E0.ia1.png": [16,8,16,{"cn":[947456,106720]}], +"textures/segment2/segment2_cn.1A0F0.ia1.png": [16,8,16,{"cn":[947456,106736]}], +"textures/segment2/segment2_cn.1A100.ia1.png": [16,8,16,{"cn":[947456,106752]}], +"textures/segment2/segment2_cn.1A110.ia1.png": [16,8,16,{"cn":[947456,106768]}], +"textures/segment2/segment2_cn.1A120.ia1.png": [16,8,16,{"cn":[947456,106784]}], +"textures/segment2/segment2_cn.1A130.ia1.png": [16,8,16,{"cn":[947456,106800]}], +"textures/segment2/segment2_cn.1A140.ia1.png": [16,8,16,{"cn":[947456,106816]}], +"textures/segment2/segment2_cn.1A150.ia1.png": [16,8,16,{"cn":[947456,106832]}], +"textures/segment2/segment2_cn.1A160.ia1.png": [16,8,16,{"cn":[947456,106848]}], +"textures/segment2/segment2_cn.1A170.ia1.png": [16,8,16,{"cn":[947456,106864]}], +"textures/segment2/segment2_cn.1A180.ia1.png": [16,8,16,{"cn":[947456,106880]}], +"textures/segment2/segment2_cn.1A190.ia1.png": [16,8,16,{"cn":[947456,106896]}], +"textures/segment2/segment2_cn.1A1A0.ia1.png": [16,8,16,{"cn":[947456,106912]}], +"textures/segment2/segment2_cn.1A1B0.ia1.png": [16,8,16,{"cn":[947456,106928]}], +"textures/segment2/segment2_cn.1A1C0.ia1.png": [16,8,16,{"cn":[947456,106944]}], +"textures/segment2/segment2_cn.1A1D0.ia1.png": [16,8,16,{"cn":[947456,106960]}], +"textures/segment2/segment2_cn.1A1E0.ia1.png": [16,8,16,{"cn":[947456,106976]}], +"textures/segment2/segment2_cn.1A1F0.ia1.png": [16,8,16,{"cn":[947456,106992]}], +"textures/segment2/segment2_cn.1A200.ia1.png": [16,8,16,{"cn":[947456,107008]}], +"textures/segment2/segment2_cn.1A210.ia1.png": [16,8,16,{"cn":[947456,107024]}], +"textures/segment2/segment2_cn.1A220.ia1.png": [16,8,16,{"cn":[947456,107040]}], +"textures/segment2/segment2_cn.1A230.ia1.png": [16,8,16,{"cn":[947456,107056]}], +"textures/segment2/segment2_cn.1A240.ia1.png": [16,8,16,{"cn":[947456,107072]}], +"textures/segment2/segment2_cn.1A250.ia1.png": [16,8,16,{"cn":[947456,107088]}], +"textures/segment2/segment2_cn.1A260.ia1.png": [16,8,16,{"cn":[947456,107104]}], +"textures/segment2/segment2_cn.1A270.ia1.png": [16,8,16,{"cn":[947456,107120]}], +"textures/segment2/segment2_cn.1A280.ia1.png": [16,8,16,{"cn":[947456,107136]}], +"textures/segment2/segment2_cn.1A290.ia1.png": [16,8,16,{"cn":[947456,107152]}], +"textures/segment2/segment2_cn.1A2A0.ia1.png": [16,8,16,{"cn":[947456,107168]}], +"textures/segment2/segment2_cn.1A2B0.ia1.png": [16,8,16,{"cn":[947456,107184]}], +"textures/segment2/segment2_cn.1A2C0.ia1.png": [16,8,16,{"cn":[947456,107200]}], +"textures/segment2/segment2_cn.1A2D0.ia1.png": [16,8,16,{"cn":[947456,107216]}], +"textures/segment2/segment2_cn.1A2E0.ia1.png": [16,8,16,{"cn":[947456,107232]}], +"textures/segment2/segment2_cn.1A2F0.ia1.png": [16,8,16,{"cn":[947456,107248]}], +"textures/segment2/segment2_cn.1A300.ia1.png": [16,8,16,{"cn":[947456,107264]}], +"textures/segment2/segment2_cn.1A310.ia1.png": [16,8,16,{"cn":[947456,107280]}], +"textures/segment2/segment2_cn.1A320.ia1.png": [16,8,16,{"cn":[947456,107296]}], +"textures/segment2/segment2_cn.1A330.ia1.png": [16,8,16,{"cn":[947456,107312]}], +"textures/segment2/segment2_cn.1A340.ia1.png": [16,8,16,{"cn":[947456,107328]}], +"textures/segment2/segment2_cn.1A350.ia1.png": [16,8,16,{"cn":[947456,107344]}], +"textures/segment2/segment2_cn.1A360.ia1.png": [16,8,16,{"cn":[947456,107360]}], +"textures/segment2/segment2_cn.1A370.ia1.png": [16,8,16,{"cn":[947456,107376]}], +"textures/segment2/segment2_cn.1A380.ia1.png": [16,8,16,{"cn":[947456,107392]}], +"textures/segment2/segment2_cn.1A390.ia1.png": [16,8,16,{"cn":[947456,107408]}], +"textures/segment2/segment2_cn.1A3A0.ia1.png": [16,8,16,{"cn":[947456,107424]}], +"textures/segment2/segment2_cn.1A3B0.ia1.png": [16,8,16,{"cn":[947456,107440]}], +"textures/segment2/segment2_cn.1A3C0.ia1.png": [16,8,16,{"cn":[947456,107456]}], +"textures/segment2/segment2_cn.1A3D0.ia1.png": [16,8,16,{"cn":[947456,107472]}], +"textures/segment2/segment2_cn.1A3E0.ia1.png": [16,8,16,{"cn":[947456,107488]}], +"textures/segment2/segment2_cn.1A3F0.ia1.png": [16,8,16,{"cn":[947456,107504]}], +"textures/segment2/segment2_cn.1A400.ia1.png": [16,8,16,{"cn":[947456,107520]}], +"textures/segment2/segment2_cn.1A410.ia1.png": [16,8,16,{"cn":[947456,107536]}], +"textures/segment2/segment2_cn.1A420.ia1.png": [16,8,16,{"cn":[947456,107552]}], +"textures/segment2/segment2_cn.1A430.ia1.png": [16,8,16,{"cn":[947456,107568]}], +"textures/segment2/segment2_cn.1A440.ia1.png": [16,8,16,{"cn":[947456,107584]}], +"textures/segment2/segment2_cn.1A450.ia1.png": [16,8,16,{"cn":[947456,107600]}], +"textures/segment2/segment2_cn.1A460.ia1.png": [16,8,16,{"cn":[947456,107616]}], +"textures/segment2/segment2_cn.1A470.ia1.png": [16,8,16,{"cn":[947456,107632]}], +"textures/segment2/segment2_cn.1A480.ia1.png": [16,8,16,{"cn":[947456,107648]}], +"textures/segment2/segment2_cn.1A490.ia1.png": [16,8,16,{"cn":[947456,107664]}], +"textures/segment2/segment2_cn.1A4A0.ia1.png": [16,8,16,{"cn":[947456,107680]}], +"textures/segment2/segment2_cn.1A4B0.ia1.png": [16,8,16,{"cn":[947456,107696]}], +"textures/segment2/segment2_cn.1A4C0.ia1.png": [16,8,16,{"cn":[947456,107712]}], +"textures/segment2/segment2_cn.1A4D0.ia1.png": [16,8,16,{"cn":[947456,107728]}], +"textures/segment2/segment2_cn.1A4E0.ia1.png": [16,8,16,{"cn":[947456,107744]}], +"textures/segment2/segment2_cn.1A4F0.ia1.png": [16,8,16,{"cn":[947456,107760]}], +"textures/segment2/segment2_cn.1A500.ia1.png": [16,8,16,{"cn":[947456,107776]}], +"textures/segment2/segment2_cn.1A510.ia1.png": [16,8,16,{"cn":[947456,107792]}], +"textures/segment2/segment2_cn.1A520.ia1.png": [16,8,16,{"cn":[947456,107808]}], +"textures/segment2/segment2_cn.1A530.ia1.png": [16,8,16,{"cn":[947456,107824]}], +"textures/segment2/segment2_cn.1A540.ia1.png": [16,8,16,{"cn":[947456,107840]}], +"textures/segment2/segment2_cn.1A550.ia1.png": [16,8,16,{"cn":[947456,107856]}], +"textures/segment2/segment2_cn.1A560.ia1.png": [16,8,16,{"cn":[947456,107872]}], +"textures/segment2/segment2_cn.1A570.ia1.png": [16,8,16,{"cn":[947456,107888]}], +"textures/segment2/segment2_cn.1A580.ia1.png": [16,8,16,{"cn":[947456,107904]}], +"textures/segment2/segment2_cn.1A590.ia1.png": [16,8,16,{"cn":[947456,107920]}], +"textures/segment2/segment2_cn.1A5A0.ia1.png": [16,8,16,{"cn":[947456,107936]}], +"textures/segment2/segment2_cn.1A5B0.ia1.png": [16,8,16,{"cn":[947456,107952]}], +"textures/segment2/segment2_cn.1A5C0.ia1.png": [16,8,16,{"cn":[947456,107968]}], +"textures/segment2/segment2_cn.1A5D0.ia1.png": [16,8,16,{"cn":[947456,107984]}], +"textures/segment2/segment2_cn.1A5E0.ia1.png": [16,8,16,{"cn":[947456,108000]}], +"textures/segment2/segment2_cn.1A5F0.ia1.png": [16,8,16,{"cn":[947456,108016]}], +"textures/segment2/segment2_cn.1A600.ia1.png": [16,8,16,{"cn":[947456,108032]}], +"textures/segment2/segment2_cn.1A610.ia1.png": [16,8,16,{"cn":[947456,108048]}], +"textures/segment2/segment2_cn.1A620.ia1.png": [16,8,16,{"cn":[947456,108064]}], +"textures/segment2/segment2_cn.1A630.ia1.png": [16,8,16,{"cn":[947456,108080]}], +"textures/segment2/segment2_cn.1A640.ia1.png": [16,8,16,{"cn":[947456,108096]}], +"textures/segment2/segment2_cn.1A650.ia1.png": [16,8,16,{"cn":[947456,108112]}], +"textures/segment2/segment2_cn.1A660.ia1.png": [16,8,16,{"cn":[947456,108128]}], +"textures/segment2/segment2_cn.1A670.ia1.png": [16,8,16,{"cn":[947456,108144]}], +"textures/segment2/segment2_cn.1A680.ia1.png": [16,8,16,{"cn":[947456,108160]}], +"textures/segment2/segment2_cn.1A690.ia1.png": [16,8,16,{"cn":[947456,108176]}], +"textures/segment2/segment2_cn.1A6A0.ia1.png": [16,8,16,{"cn":[947456,108192]}], +"textures/segment2/segment2_cn.1A6B0.ia1.png": [16,8,16,{"cn":[947456,108208]}], +"textures/segment2/segment2_cn.1A6C0.ia1.png": [16,8,16,{"cn":[947456,108224]}], +"textures/segment2/segment2_cn.1A6D0.ia1.png": [16,8,16,{"cn":[947456,108240]}], +"textures/segment2/segment2_cn.1A6E0.ia1.png": [16,8,16,{"cn":[947456,108256]}], +"textures/segment2/segment2_cn.1A6F0.ia1.png": [16,8,16,{"cn":[947456,108272]}], +"textures/segment2/segment2_cn.1A700.ia1.png": [16,8,16,{"cn":[947456,108288]}], +"textures/segment2/segment2_cn.1A710.ia1.png": [16,8,16,{"cn":[947456,108304]}], +"textures/segment2/segment2_cn.1A720.ia1.png": [16,8,16,{"cn":[947456,108320]}], +"textures/segment2/segment2_cn.1A730.ia1.png": [16,8,16,{"cn":[947456,108336]}], +"textures/segment2/segment2_cn.1A740.ia1.png": [16,8,16,{"cn":[947456,108352]}], +"textures/segment2/segment2_cn.1A750.ia1.png": [16,8,16,{"cn":[947456,108368]}], +"textures/segment2/segment2_cn.1A760.ia1.png": [16,8,16,{"cn":[947456,108384]}], +"textures/segment2/segment2_cn.1A770.ia1.png": [16,8,16,{"cn":[947456,108400]}], +"textures/segment2/segment2_cn.1A780.ia1.png": [16,8,16,{"cn":[947456,108416]}], +"textures/segment2/segment2_cn.1A790.ia1.png": [16,8,16,{"cn":[947456,108432]}], +"textures/segment2/segment2_cn.1A7A0.ia1.png": [16,8,16,{"cn":[947456,108448]}], +"textures/segment2/segment2_cn.1A7B0.ia1.png": [16,8,16,{"cn":[947456,108464]}], +"textures/segment2/segment2_cn.1A7C0.ia1.png": [16,8,16,{"cn":[947456,108480]}], +"textures/segment2/segment2_cn.1A7D0.ia1.png": [16,8,16,{"cn":[947456,108496]}], +"textures/segment2/segment2_cn.1A7E0.ia1.png": [16,8,16,{"cn":[947456,108512]}], +"textures/segment2/segment2_cn.1A7F0.ia1.png": [16,8,16,{"cn":[947456,108528]}], +"textures/segment2/segment2_cn.1A800.ia1.png": [16,8,16,{"cn":[947456,108544]}], +"textures/segment2/segment2_cn.1A810.ia1.png": [16,8,16,{"cn":[947456,108560]}], +"textures/segment2/segment2_cn.1A820.ia1.png": [16,8,16,{"cn":[947456,108576]}], +"textures/segment2/segment2_cn.1A830.ia1.png": [16,8,16,{"cn":[947456,108592]}], +"textures/segment2/segment2_cn.1A840.ia1.png": [16,8,16,{"cn":[947456,108608]}], +"textures/segment2/segment2_cn.1A850.ia1.png": [16,8,16,{"cn":[947456,108624]}], +"textures/segment2/segment2_cn.1A860.ia1.png": [16,8,16,{"cn":[947456,108640]}], +"textures/segment2/segment2_cn.1A870.ia1.png": [16,8,16,{"cn":[947456,108656]}], +"textures/segment2/segment2_cn.1A880.ia1.png": [16,8,16,{"cn":[947456,108672]}], +"textures/segment2/segment2_cn.1A890.ia1.png": [16,8,16,{"cn":[947456,108688]}], +"textures/segment2/segment2_cn.1A8A0.ia1.png": [16,8,16,{"cn":[947456,108704]}], +"textures/segment2/segment2_cn.1A8B0.ia1.png": [16,8,16,{"cn":[947456,108720]}], +"textures/segment2/segment2_cn.1A8C0.ia1.png": [16,8,16,{"cn":[947456,108736]}], +"textures/segment2/segment2_cn.1A8D0.ia1.png": [16,8,16,{"cn":[947456,108752]}], +"textures/segment2/segment2_cn.1A8E0.ia1.png": [16,8,16,{"cn":[947456,108768]}], +"textures/segment2/segment2_cn.1A8F0.ia1.png": [16,8,16,{"cn":[947456,108784]}], +"textures/segment2/segment2_cn.1A900.ia1.png": [16,8,16,{"cn":[947456,108800]}], +"textures/segment2/segment2_cn.1A910.ia1.png": [16,8,16,{"cn":[947456,108816]}], +"textures/segment2/segment2_cn.1A920.ia1.png": [16,8,16,{"cn":[947456,108832]}], +"textures/segment2/segment2_cn.1A930.ia1.png": [16,8,16,{"cn":[947456,108848]}], +"textures/segment2/segment2_cn.1A940.ia1.png": [16,8,16,{"cn":[947456,108864]}], +"textures/segment2/segment2_cn.1A950.ia1.png": [16,8,16,{"cn":[947456,108880]}], +"textures/segment2/segment2_cn.1A960.ia1.png": [16,8,16,{"cn":[947456,108896]}], +"textures/segment2/segment2_cn.1A970.ia1.png": [16,8,16,{"cn":[947456,108912]}], +"textures/segment2/segment2_cn.1A980.ia1.png": [16,8,16,{"cn":[947456,108928]}], +"textures/segment2/segment2_cn.1A990.ia1.png": [16,8,16,{"cn":[947456,108944]}], +"textures/segment2/segment2_cn.1A9A0.ia1.png": [16,8,16,{"cn":[947456,108960]}], +"textures/segment2/segment2_cn.1A9B0.ia1.png": [16,8,16,{"cn":[947456,108976]}], +"textures/segment2/segment2_cn.1A9C0.ia1.png": [16,8,16,{"cn":[947456,108992]}], +"textures/segment2/segment2_cn.1A9D0.ia1.png": [16,8,16,{"cn":[947456,109008]}], +"textures/segment2/segment2_cn.1A9E0.ia1.png": [16,8,16,{"cn":[947456,109024]}], +"textures/segment2/segment2_cn.1A9F0.ia1.png": [16,8,16,{"cn":[947456,109040]}], +"textures/segment2/segment2_cn.1AA00.ia1.png": [16,8,16,{"cn":[947456,109056]}], +"textures/segment2/segment2_cn.1AA10.ia1.png": [16,8,16,{"cn":[947456,109072]}], +"textures/segment2/segment2_cn.1AA20.ia1.png": [16,8,16,{"cn":[947456,109088]}], +"textures/segment2/segment2_cn.1AA30.ia1.png": [16,8,16,{"cn":[947456,109104]}], +"textures/segment2/segment2_cn.1AA40.ia1.png": [16,8,16,{"cn":[947456,109120]}], +"textures/segment2/segment2_cn.1AA50.ia1.png": [16,8,16,{"cn":[947456,109136]}], +"textures/segment2/segment2_cn.1AA60.ia1.png": [16,8,16,{"cn":[947456,109152]}], +"textures/segment2/segment2_cn.1AA70.ia1.png": [16,8,16,{"cn":[947456,109168]}], +"textures/segment2/segment2_cn.1AA80.ia1.png": [16,8,16,{"cn":[947456,109184]}], +"textures/segment2/segment2_cn.1AA90.ia1.png": [16,8,16,{"cn":[947456,109200]}], +"textures/segment2/segment2_cn.1AAA0.ia1.png": [16,8,16,{"cn":[947456,109216]}], +"textures/segment2/segment2_cn.1AAB0.ia1.png": [16,8,16,{"cn":[947456,109232]}], +"textures/segment2/segment2_cn.1AAC0.ia1.png": [16,8,16,{"cn":[947456,109248]}], +"textures/segment2/segment2_cn.1AAD0.ia1.png": [16,8,16,{"cn":[947456,109264]}], +"textures/segment2/segment2_cn.1AAE0.ia1.png": [16,8,16,{"cn":[947456,109280]}], +"textures/segment2/segment2_cn.1AAF0.ia1.png": [16,8,16,{"cn":[947456,109296]}], +"textures/segment2/segment2_cn.1AB00.ia1.png": [16,8,16,{"cn":[947456,109312]}], +"textures/segment2/segment2_cn.1AB10.ia1.png": [16,8,16,{"cn":[947456,109328]}], +"textures/segment2/segment2_cn.1AB20.ia1.png": [16,8,16,{"cn":[947456,109344]}], +"textures/segment2/segment2_cn.1AB30.ia1.png": [16,8,16,{"cn":[947456,109360]}], +"textures/segment2/segment2_cn.1AB40.ia1.png": [16,8,16,{"cn":[947456,109376]}], +"textures/segment2/segment2_cn.1AB50.ia1.png": [16,8,16,{"cn":[947456,109392]}], +"textures/segment2/segment2_cn.1AB60.ia1.png": [16,8,16,{"cn":[947456,109408]}], +"textures/segment2/segment2_cn.1AB70.ia1.png": [16,8,16,{"cn":[947456,109424]}], +"textures/segment2/segment2_cn.1AB80.ia1.png": [16,8,16,{"cn":[947456,109440]}], +"textures/segment2/segment2_cn.1AB90.ia1.png": [16,8,16,{"cn":[947456,109456]}], +"textures/segment2/segment2_cn.1ABA0.ia1.png": [16,8,16,{"cn":[947456,109472]}], +"textures/segment2/segment2_cn.1ABB0.ia1.png": [16,8,16,{"cn":[947456,109488]}], +"textures/segment2/segment2_cn.1ABC0.ia1.png": [16,8,16,{"cn":[947456,109504]}], +"textures/segment2/segment2_cn.1ABD0.ia1.png": [16,8,16,{"cn":[947456,109520]}], +"textures/segment2/segment2_cn.1ABE0.ia1.png": [16,8,16,{"cn":[947456,109536]}], +"textures/segment2/segment2_cn.1ABF0.ia1.png": [16,8,16,{"cn":[947456,109552]}], +"textures/segment2/segment2_cn.1AC00.ia1.png": [16,8,16,{"cn":[947456,109568]}], +"textures/segment2/segment2_cn.1AC10.ia1.png": [16,8,16,{"cn":[947456,109584]}], +"textures/segment2/segment2_cn.1AC20.ia1.png": [16,8,16,{"cn":[947456,109600]}], +"textures/segment2/segment2_cn.1AC30.ia1.png": [16,8,16,{"cn":[947456,109616]}], +"textures/segment2/segment2_cn.1AC40.ia1.png": [16,8,16,{"cn":[947456,109632]}], +"textures/segment2/segment2_cn.1AC50.ia1.png": [16,8,16,{"cn":[947456,109648]}], +"textures/segment2/segment2_cn.1AC60.ia1.png": [16,8,16,{"cn":[947456,109664]}], +"textures/segment2/segment2_cn.1AC70.ia1.png": [16,8,16,{"cn":[947456,109680]}], +"textures/segment2/segment2_cn.1AC80.ia1.png": [16,8,16,{"cn":[947456,109696]}], +"textures/segment2/segment2_cn.1AC90.ia1.png": [16,8,16,{"cn":[947456,109712]}], +"textures/segment2/segment2_cn.1ACA0.ia1.png": [16,8,16,{"cn":[947456,109728]}], +"textures/segment2/segment2_cn.1ACB0.ia1.png": [16,8,16,{"cn":[947456,109744]}], +"textures/segment2/segment2_cn.1ACC0.ia1.png": [16,8,16,{"cn":[947456,109760]}], +"textures/segment2/segment2_cn.1ACD0.ia1.png": [16,8,16,{"cn":[947456,109776]}], +"textures/segment2/segment2_cn.1ACE0.ia1.png": [16,8,16,{"cn":[947456,109792]}], +"textures/segment2/segment2_cn.1ACF0.ia1.png": [16,8,16,{"cn":[947456,109808]}], +"textures/segment2/segment2_cn.1AD00.ia1.png": [16,8,16,{"cn":[947456,109824]}], +"textures/segment2/segment2_cn.1AD10.ia1.png": [16,8,16,{"cn":[947456,109840]}], +"textures/segment2/segment2_cn.1AD20.ia1.png": [16,8,16,{"cn":[947456,109856]}], +"textures/segment2/segment2_cn.1AD30.ia1.png": [16,8,16,{"cn":[947456,109872]}], +"textures/segment2/segment2_cn.1AD40.ia1.png": [16,8,16,{"cn":[947456,109888]}], +"textures/segment2/segment2_cn.1AD50.ia1.png": [16,8,16,{"cn":[947456,109904]}], +"textures/segment2/segment2_cn.1AD60.ia1.png": [16,8,16,{"cn":[947456,109920]}], +"textures/segment2/segment2_cn.1AD70.ia1.png": [16,8,16,{"cn":[947456,109936]}], +"textures/segment2/segment2_cn.1AD80.ia1.png": [16,8,16,{"cn":[947456,109952]}], +"textures/segment2/segment2_cn.1AD90.ia1.png": [16,8,16,{"cn":[947456,109968]}], +"textures/segment2/segment2_cn.1ADA0.ia1.png": [16,8,16,{"cn":[947456,109984]}], +"textures/segment2/segment2_cn.1ADB0.ia1.png": [16,8,16,{"cn":[947456,110000]}], +"textures/segment2/segment2_cn.1ADC0.ia1.png": [16,8,16,{"cn":[947456,110016]}], +"textures/segment2/segment2_cn.1ADD0.ia1.png": [16,8,16,{"cn":[947456,110032]}], +"textures/segment2/segment2_cn.1ADE0.ia1.png": [16,8,16,{"cn":[947456,110048]}], +"textures/segment2/segment2_cn.1ADF0.ia1.png": [16,8,16,{"cn":[947456,110064]}], +"textures/segment2/segment2_cn.1AE00.ia1.png": [16,8,16,{"cn":[947456,110080]}], +"textures/segment2/segment2_cn.1AE10.ia1.png": [16,8,16,{"cn":[947456,110096]}], +"textures/segment2/segment2_cn.1AE20.ia1.png": [16,8,16,{"cn":[947456,110112]}], +"textures/segment2/segment2_cn.1AE30.ia1.png": [16,8,16,{"cn":[947456,110128]}], +"textures/segment2/segment2_cn.1AE40.ia1.png": [16,8,16,{"cn":[947456,110144]}], +"textures/segment2/segment2_cn.1AE50.ia1.png": [16,8,16,{"cn":[947456,110160]}], +"textures/segment2/segment2_cn.1AE60.ia1.png": [16,8,16,{"cn":[947456,110176]}], +"textures/segment2/segment2_cn.1AE70.ia1.png": [16,8,16,{"cn":[947456,110192]}], +"textures/segment2/segment2_cn.1AE80.ia1.png": [16,8,16,{"cn":[947456,110208]}], +"textures/segment2/segment2_cn.1AE90.ia1.png": [16,8,16,{"cn":[947456,110224]}], +"textures/segment2/segment2_cn.1AEA0.ia1.png": [16,8,16,{"cn":[947456,110240]}], +"textures/segment2/segment2_cn.1AEB0.ia1.png": [16,8,16,{"cn":[947456,110256]}], +"textures/segment2/segment2_cn.1AEC0.ia1.png": [16,8,16,{"cn":[947456,110272]}], +"textures/segment2/segment2_cn.1AED0.ia1.png": [16,8,16,{"cn":[947456,110288]}], +"textures/segment2/segment2_cn.1AEE0.ia1.png": [16,8,16,{"cn":[947456,110304]}], +"textures/segment2/segment2_cn.1AEF0.ia1.png": [16,8,16,{"cn":[947456,110320]}], +"textures/segment2/segment2_cn.1AF00.ia1.png": [16,8,16,{"cn":[947456,110336]}], +"textures/segment2/segment2_cn.1AF10.ia1.png": [16,8,16,{"cn":[947456,110352]}], +"textures/segment2/segment2_cn.1AF20.ia1.png": [16,8,16,{"cn":[947456,110368]}], +"textures/segment2/segment2_cn.1AF30.ia1.png": [16,8,16,{"cn":[947456,110384]}], +"textures/segment2/segment2_cn.1AF40.ia1.png": [16,8,16,{"cn":[947456,110400]}], +"textures/segment2/segment2_cn.1AF50.ia1.png": [16,8,16,{"cn":[947456,110416]}], +"textures/segment2/segment2_cn.1AF60.ia1.png": [16,8,16,{"cn":[947456,110432]}], +"textures/segment2/segment2_cn.1AF70.ia1.png": [16,8,16,{"cn":[947456,110448]}], +"textures/segment2/segment2_cn.1AF80.ia1.png": [16,8,16,{"cn":[947456,110464]}], +"textures/segment2/segment2_cn.1AF90.ia1.png": [16,8,16,{"cn":[947456,110480]}], +"textures/segment2/segment2_cn.1AFA0.ia1.png": [16,8,16,{"cn":[947456,110496]}], +"textures/segment2/segment2_cn.1AFB0.ia1.png": [16,8,16,{"cn":[947456,110512]}], +"textures/segment2/segment2_cn.1AFC0.ia1.png": [16,8,16,{"cn":[947456,110528]}], +"textures/segment2/segment2_cn.1AFD0.ia1.png": [16,8,16,{"cn":[947456,110544]}], +"textures/segment2/segment2_cn.1AFE0.ia1.png": [16,8,16,{"cn":[947456,110560]}], +"textures/segment2/segment2_cn.1AFF0.ia1.png": [16,8,16,{"cn":[947456,110576]}], +"textures/segment2/segment2_cn.1B000.ia1.png": [16,8,16,{"cn":[947456,110592]}], +"textures/segment2/segment2_cn.1B010.ia1.png": [16,8,16,{"cn":[947456,110608]}], +"textures/segment2/segment2_cn.1B020.ia1.png": [16,8,16,{"cn":[947456,110624]}], +"textures/segment2/segment2_cn.1B030.ia1.png": [16,8,16,{"cn":[947456,110640]}], +"textures/segment2/segment2_cn.1B040.ia1.png": [16,8,16,{"cn":[947456,110656]}], +"textures/segment2/segment2_cn.1B050.ia1.png": [16,8,16,{"cn":[947456,110672]}], +"textures/segment2/segment2_cn.1B060.ia1.png": [16,8,16,{"cn":[947456,110688]}], +"textures/segment2/segment2_cn.1B070.ia1.png": [16,8,16,{"cn":[947456,110704]}], +"textures/segment2/segment2_cn.1B080.ia1.png": [16,8,16,{"cn":[947456,110720]}], +"textures/segment2/segment2_cn.1B090.ia1.png": [16,8,16,{"cn":[947456,110736]}], +"textures/segment2/segment2_cn.1B0A0.ia1.png": [16,8,16,{"cn":[947456,110752]}], +"textures/segment2/segment2_cn.1B0B0.ia1.png": [16,8,16,{"cn":[947456,110768]}], +"textures/segment2/segment2_cn.1B0C0.ia1.png": [16,8,16,{"cn":[947456,110784]}], +"textures/segment2/segment2_cn.1B0D0.ia1.png": [16,8,16,{"cn":[947456,110800]}], +"textures/segment2/segment2_cn.1B0E0.ia1.png": [16,8,16,{"cn":[947456,110816]}], +"textures/segment2/segment2_cn.1B0F0.ia1.png": [16,8,16,{"cn":[947456,110832]}], +"textures/segment2/segment2_cn.1B100.ia1.png": [16,8,16,{"cn":[947456,110848]}], +"textures/segment2/segment2_cn.1B110.ia1.png": [16,8,16,{"cn":[947456,110864]}], +"textures/segment2/segment2_cn.1B120.ia1.png": [16,8,16,{"cn":[947456,110880]}], +"textures/segment2/segment2_cn.1B130.ia1.png": [16,8,16,{"cn":[947456,110896]}], +"textures/segment2/segment2_cn.1B140.ia1.png": [16,8,16,{"cn":[947456,110912]}], +"textures/segment2/segment2_cn.1B150.ia1.png": [16,8,16,{"cn":[947456,110928]}], +"textures/segment2/segment2_cn.1B160.ia1.png": [16,8,16,{"cn":[947456,110944]}], +"textures/segment2/segment2_cn.1B170.ia1.png": [16,8,16,{"cn":[947456,110960]}], +"textures/segment2/segment2_cn.1B180.ia1.png": [16,8,16,{"cn":[947456,110976]}], +"textures/segment2/segment2_cn.1B190.ia1.png": [16,8,16,{"cn":[947456,110992]}], +"textures/segment2/segment2_cn.1B1A0.ia1.png": [16,8,16,{"cn":[947456,111008]}], +"textures/segment2/segment2_cn.1B1B0.ia1.png": [16,8,16,{"cn":[947456,111024]}], +"textures/segment2/segment2_cn.1B1C0.ia1.png": [16,8,16,{"cn":[947456,111040]}], +"textures/segment2/segment2_cn.1B1D0.ia1.png": [16,8,16,{"cn":[947456,111056]}], +"textures/segment2/segment2_cn.1B1E0.ia1.png": [16,8,16,{"cn":[947456,111072]}], +"textures/segment2/segment2_cn.1B1F0.ia1.png": [16,8,16,{"cn":[947456,111088]}], +"textures/segment2/segment2_cn.1B200.ia1.png": [16,8,16,{"cn":[947456,111104]}], +"textures/segment2/segment2_cn.1B210.ia1.png": [16,8,16,{"cn":[947456,111120]}], +"textures/segment2/segment2_cn.1B220.ia1.png": [16,8,16,{"cn":[947456,111136]}], +"textures/segment2/segment2_cn.1B230.ia1.png": [16,8,16,{"cn":[947456,111152]}], +"textures/segment2/segment2_cn.1B240.ia1.png": [16,8,16,{"cn":[947456,111168]}], +"textures/segment2/segment2_cn.1B250.ia1.png": [16,8,16,{"cn":[947456,111184]}], +"textures/segment2/segment2_cn.1B260.ia1.png": [16,8,16,{"cn":[947456,111200]}], +"textures/segment2/segment2_cn.1B270.ia1.png": [16,8,16,{"cn":[947456,111216]}], +"textures/segment2/segment2_cn.1B280.ia1.png": [16,8,16,{"cn":[947456,111232]}], +"textures/segment2/segment2_cn.1B290.ia1.png": [16,8,16,{"cn":[947456,111248]}], +"textures/segment2/segment2_cn.1B2A0.ia1.png": [16,8,16,{"cn":[947456,111264]}], +"textures/segment2/segment2_cn.1B2B0.ia1.png": [16,8,16,{"cn":[947456,111280]}], +"textures/segment2/segment2_cn.1B2C0.ia1.png": [16,8,16,{"cn":[947456,111296]}], +"textures/segment2/segment2_cn.1B2D0.ia1.png": [16,8,16,{"cn":[947456,111312]}], +"textures/segment2/segment2_cn.1B2E0.ia1.png": [16,8,16,{"cn":[947456,111328]}], +"textures/segment2/segment2_cn.1B2F0.ia1.png": [16,8,16,{"cn":[947456,111344]}], +"textures/segment2/segment2_cn.1B300.ia1.png": [16,8,16,{"cn":[947456,111360]}], +"textures/segment2/segment2_cn.1B310.ia1.png": [16,8,16,{"cn":[947456,111376]}], +"textures/segment2/segment2_cn.1B320.ia1.png": [16,8,16,{"cn":[947456,111392]}], +"textures/segment2/segment2_cn.1B330.ia1.png": [16,8,16,{"cn":[947456,111408]}], +"textures/segment2/segment2_cn.1B340.ia1.png": [16,8,16,{"cn":[947456,111424]}], +"textures/segment2/segment2_cn.1B350.ia1.png": [16,8,16,{"cn":[947456,111440]}], +"textures/segment2/segment2_cn.1B360.ia1.png": [16,8,16,{"cn":[947456,111456]}], +"textures/segment2/segment2_cn.1B370.ia1.png": [16,8,16,{"cn":[947456,111472]}], +"textures/segment2/segment2_cn.1B380.ia1.png": [16,8,16,{"cn":[947456,111488]}], +"textures/segment2/segment2_cn.1B390.ia1.png": [16,8,16,{"cn":[947456,111504]}], +"textures/segment2/segment2_cn.1B3A0.ia1.png": [16,8,16,{"cn":[947456,111520]}], +"textures/segment2/segment2_cn.1B3B0.ia1.png": [16,8,16,{"cn":[947456,111536]}], +"textures/segment2/segment2_cn.1B3C0.ia1.png": [16,8,16,{"cn":[947456,111552]}], +"textures/segment2/segment2_cn.1B3D0.ia1.png": [16,8,16,{"cn":[947456,111568]}], +"textures/segment2/segment2_cn.1B3E0.ia1.png": [16,8,16,{"cn":[947456,111584]}], +"textures/segment2/segment2_cn.1B3F0.ia1.png": [16,8,16,{"cn":[947456,111600]}], +"textures/segment2/segment2_cn.1B400.ia1.png": [16,8,16,{"cn":[947456,111616]}], +"textures/segment2/segment2_cn.1B410.ia1.png": [16,8,16,{"cn":[947456,111632]}], +"textures/segment2/segment2_cn.1B420.ia1.png": [16,8,16,{"cn":[947456,111648]}], +"textures/segment2/segment2_cn.1B430.ia1.png": [16,8,16,{"cn":[947456,111664]}], +"textures/segment2/segment2_cn.1B440.ia1.png": [16,8,16,{"cn":[947456,111680]}], +"textures/segment2/segment2_cn.1B450.ia1.png": [16,8,16,{"cn":[947456,111696]}], +"textures/segment2/segment2_cn.1B460.ia1.png": [16,8,16,{"cn":[947456,111712]}], +"textures/segment2/segment2_cn.1B470.ia1.png": [16,8,16,{"cn":[947456,111728]}], +"textures/segment2/segment2_cn.1B480.ia1.png": [16,8,16,{"cn":[947456,111744]}], +"textures/segment2/segment2_cn.1B490.ia1.png": [16,8,16,{"cn":[947456,111760]}], +"textures/segment2/segment2_cn.1B4A0.ia1.png": [16,8,16,{"cn":[947456,111776]}], +"textures/segment2/segment2_cn.1B4B0.ia1.png": [16,8,16,{"cn":[947456,111792]}], +"textures/segment2/segment2_cn.1B4C0.ia1.png": [16,8,16,{"cn":[947456,111808]}], +"textures/segment2/segment2_cn.1B4D0.ia1.png": [16,8,16,{"cn":[947456,111824]}], +"textures/segment2/segment2_cn.1B4E0.ia1.png": [16,8,16,{"cn":[947456,111840]}], +"textures/segment2/segment2_cn.1B4F0.ia1.png": [16,8,16,{"cn":[947456,111856]}], +"textures/segment2/segment2_cn.1B500.ia1.png": [16,8,16,{"cn":[947456,111872]}], +"textures/segment2/segment2_cn.1B510.ia1.png": [16,8,16,{"cn":[947456,111888]}], +"textures/segment2/segment2_cn.1B520.ia1.png": [16,8,16,{"cn":[947456,111904]}], +"textures/segment2/segment2_cn.1B530.ia1.png": [16,8,16,{"cn":[947456,111920]}], +"textures/segment2/segment2_cn.1B540.ia1.png": [16,8,16,{"cn":[947456,111936]}], +"textures/segment2/segment2_cn.1B550.ia1.png": [16,8,16,{"cn":[947456,111952]}], +"textures/segment2/segment2_cn.1B560.ia1.png": [16,8,16,{"cn":[947456,111968]}], +"textures/segment2/segment2_cn.1B570.ia1.png": [16,8,16,{"cn":[947456,111984]}], +"textures/segment2/segment2_cn.1B580.ia1.png": [16,8,16,{"cn":[947456,112000]}], +"textures/segment2/segment2_cn.1B590.ia1.png": [16,8,16,{"cn":[947456,112016]}], +"textures/segment2/segment2_cn.1B5A0.ia1.png": [16,8,16,{"cn":[947456,112032]}], +"textures/segment2/segment2_cn.1B5B0.ia1.png": [16,8,16,{"cn":[947456,112048]}], +"textures/segment2/segment2_cn.1B5C0.ia1.png": [16,8,16,{"cn":[947456,112064]}], +"textures/segment2/segment2_cn.1B5D0.ia1.png": [16,8,16,{"cn":[947456,112080]}], +"textures/segment2/segment2_cn.1B5E0.ia1.png": [16,8,16,{"cn":[947456,112096]}], +"textures/segment2/segment2_cn.1B5F0.ia1.png": [16,8,16,{"cn":[947456,112112]}], +"textures/segment2/segment2_cn.1B600.ia1.png": [16,8,16,{"cn":[947456,112128]}], +"textures/segment2/segment2_cn.1B610.ia1.png": [16,8,16,{"cn":[947456,112144]}], +"textures/segment2/segment2_cn.1B620.ia1.png": [16,8,16,{"cn":[947456,112160]}], +"textures/segment2/segment2_cn.1B630.ia1.png": [16,8,16,{"cn":[947456,112176]}], +"textures/segment2/segment2_cn.1B640.ia1.png": [16,8,16,{"cn":[947456,112192]}], +"textures/segment2/segment2_cn.1B650.ia1.png": [16,8,16,{"cn":[947456,112208]}], +"textures/segment2/segment2_cn.1B660.ia1.png": [16,8,16,{"cn":[947456,112224]}], +"textures/segment2/segment2_cn.1B670.ia1.png": [16,8,16,{"cn":[947456,112240]}], +"textures/segment2/segment2_cn.1B680.ia1.png": [16,8,16,{"cn":[947456,112256]}], +"textures/segment2/segment2_cn.1B690.ia1.png": [16,8,16,{"cn":[947456,112272]}], +"textures/segment2/segment2_cn.1B6A0.ia1.png": [16,8,16,{"cn":[947456,112288]}], +"textures/segment2/segment2_cn.1B6B0.ia1.png": [16,8,16,{"cn":[947456,112304]}], +"textures/segment2/segment2_cn.1B6C0.ia1.png": [16,8,16,{"cn":[947456,112320]}], +"textures/segment2/segment2_cn.1B6D0.ia1.png": [16,8,16,{"cn":[947456,112336]}], +"textures/segment2/segment2_cn.1B6E0.ia1.png": [16,8,16,{"cn":[947456,112352]}], +"textures/segment2/segment2_cn.1B6F0.ia1.png": [16,8,16,{"cn":[947456,112368]}], +"textures/segment2/segment2_cn.1B700.ia1.png": [16,8,16,{"cn":[947456,112384]}], +"textures/segment2/segment2_cn.1B710.ia1.png": [16,8,16,{"cn":[947456,112400]}], +"textures/segment2/segment2_cn.1B720.ia1.png": [16,8,16,{"cn":[947456,112416]}], +"textures/segment2/segment2_cn.1B730.ia1.png": [16,8,16,{"cn":[947456,112432]}], +"textures/segment2/segment2_cn.1B740.ia1.png": [16,8,16,{"cn":[947456,112448]}], +"textures/segment2/segment2_cn.1B750.ia1.png": [16,8,16,{"cn":[947456,112464]}], +"textures/segment2/segment2_cn.1B760.ia1.png": [16,8,16,{"cn":[947456,112480]}], +"textures/segment2/segment2_cn.1B770.ia1.png": [16,8,16,{"cn":[947456,112496]}], +"textures/segment2/segment2_cn.1B780.ia1.png": [16,8,16,{"cn":[947456,112512]}], +"textures/segment2/segment2_cn.1B790.ia1.png": [16,8,16,{"cn":[947456,112528]}], +"textures/segment2/segment2_cn.1B7A0.ia1.png": [16,8,16,{"cn":[947456,112544]}], +"textures/segment2/segment2_cn.1B7B0.ia1.png": [16,8,16,{"cn":[947456,112560]}], +"textures/segment2/segment2_cn.1B7C0.ia1.png": [16,8,16,{"cn":[947456,112576]}], +"textures/segment2/segment2_cn.1B7D0.ia1.png": [16,8,16,{"cn":[947456,112592]}], +"textures/segment2/segment2_cn.1B7E0.ia1.png": [16,8,16,{"cn":[947456,112608]}], +"textures/segment2/segment2_cn.1B7F0.ia1.png": [16,8,16,{"cn":[947456,112624]}], +"textures/segment2/segment2_cn.1B800.ia1.png": [16,8,16,{"cn":[947456,112640]}], +"textures/segment2/segment2_cn.1B810.ia1.png": [16,8,16,{"cn":[947456,112656]}], +"textures/segment2/segment2_cn.1B820.ia1.png": [16,8,16,{"cn":[947456,112672]}], +"textures/segment2/segment2_cn.1B830.ia1.png": [16,8,16,{"cn":[947456,112688]}], +"textures/segment2/segment2_cn.1B840.ia1.png": [16,8,16,{"cn":[947456,112704]}], +"textures/segment2/segment2_cn.1B850.ia1.png": [16,8,16,{"cn":[947456,112720]}], +"textures/segment2/segment2_cn.1B860.ia1.png": [16,8,16,{"cn":[947456,112736]}], +"textures/segment2/segment2_cn.1B870.ia1.png": [16,8,16,{"cn":[947456,112752]}], +"textures/segment2/segment2_cn.1B880.ia1.png": [16,8,16,{"cn":[947456,112768]}], +"textures/segment2/segment2_cn.1B890.ia1.png": [16,8,16,{"cn":[947456,112784]}], +"textures/segment2/segment2_cn.1B8A0.ia1.png": [16,8,16,{"cn":[947456,112800]}], +"textures/segment2/segment2_cn.1B8B0.ia1.png": [16,8,16,{"cn":[947456,112816]}], +"textures/segment2/segment2_cn.1B8C0.ia1.png": [16,8,16,{"cn":[947456,112832]}], +"textures/segment2/segment2_cn.1B8D0.ia1.png": [16,8,16,{"cn":[947456,112848]}], +"textures/segment2/segment2_cn.1B8E0.ia1.png": [16,8,16,{"cn":[947456,112864]}], +"textures/segment2/segment2_cn.1B8F0.ia1.png": [16,8,16,{"cn":[947456,112880]}], +"textures/segment2/segment2_cn.1B900.ia1.png": [16,8,16,{"cn":[947456,112896]}], +"textures/segment2/segment2_cn.1B910.ia1.png": [16,8,16,{"cn":[947456,112912]}], +"textures/segment2/segment2_cn.1B920.ia1.png": [16,8,16,{"cn":[947456,112928]}], +"textures/segment2/segment2_cn.1B930.ia1.png": [16,8,16,{"cn":[947456,112944]}], +"textures/segment2/segment2_cn.1B940.ia1.png": [16,8,16,{"cn":[947456,112960]}], +"textures/segment2/segment2_cn.1B950.ia1.png": [16,8,16,{"cn":[947456,112976]}], +"textures/segment2/segment2_cn.1B960.ia1.png": [16,8,16,{"cn":[947456,112992]}], +"textures/segment2/segment2_cn.1B970.ia1.png": [16,8,16,{"cn":[947456,113008]}], +"textures/segment2/segment2_cn.1B980.ia1.png": [16,8,16,{"cn":[947456,113024]}], +"textures/segment2/segment2_cn.1B990.ia1.png": [16,8,16,{"cn":[947456,113040]}], +"textures/segment2/segment2_cn.1B9A0.ia1.png": [16,8,16,{"cn":[947456,113056]}], +"textures/segment2/segment2_cn.1B9B0.ia1.png": [16,8,16,{"cn":[947456,113072]}], +"textures/segment2/segment2_cn.1B9C0.ia1.png": [16,8,16,{"cn":[947456,113088]}], +"textures/segment2/segment2_cn.1B9D0.ia1.png": [16,8,16,{"cn":[947456,113104]}], +"textures/segment2/segment2_cn.1B9E0.ia1.png": [16,8,16,{"cn":[947456,113120]}], +"textures/segment2/segment2_cn.1B9F0.ia1.png": [16,8,16,{"cn":[947456,113136]}], +"textures/segment2/segment2_cn.1BA00.ia1.png": [16,8,16,{"cn":[947456,113152]}], +"textures/segment2/segment2_cn.1BA10.ia1.png": [16,8,16,{"cn":[947456,113168]}], +"textures/segment2/segment2_cn.1BA20.ia1.png": [16,8,16,{"cn":[947456,113184]}], +"textures/segment2/segment2_cn.1BA30.ia1.png": [16,8,16,{"cn":[947456,113200]}], +"textures/segment2/segment2_cn.1BA40.ia1.png": [16,8,16,{"cn":[947456,113216]}], +"textures/segment2/segment2_cn.1BA50.ia1.png": [16,8,16,{"cn":[947456,113232]}], +"textures/segment2/segment2_cn.1BA60.ia1.png": [16,8,16,{"cn":[947456,113248]}], +"textures/segment2/segment2_cn.1BA70.ia1.png": [16,8,16,{"cn":[947456,113264]}], +"textures/segment2/segment2_cn.1BA80.ia1.png": [16,8,16,{"cn":[947456,113280]}], +"textures/segment2/segment2_cn.1BA90.ia1.png": [16,8,16,{"cn":[947456,113296]}], +"textures/segment2/segment2_cn.1BAA0.ia1.png": [16,8,16,{"cn":[947456,113312]}], +"textures/segment2/segment2_cn.1BAB0.ia1.png": [16,8,16,{"cn":[947456,113328]}], +"textures/segment2/segment2_cn.1BAC0.ia1.png": [16,8,16,{"cn":[947456,113344]}], +"textures/segment2/segment2_cn.1BAD0.ia1.png": [16,8,16,{"cn":[947456,113360]}], +"textures/segment2/segment2_cn.1BAE0.ia1.png": [16,8,16,{"cn":[947456,113376]}], +"textures/segment2/segment2_cn.1BAF0.ia1.png": [16,8,16,{"cn":[947456,113392]}], +"textures/segment2/segment2_cn.1BB00.ia1.png": [16,8,16,{"cn":[947456,113408]}], +"textures/segment2/segment2_cn.1BB10.ia1.png": [16,8,16,{"cn":[947456,113424]}], +"textures/segment2/segment2_cn.1BB20.ia1.png": [16,8,16,{"cn":[947456,113440]}], +"textures/segment2/segment2_cn.1BB30.ia1.png": [16,8,16,{"cn":[947456,113456]}], +"textures/segment2/segment2_cn.1BB40.ia1.png": [16,8,16,{"cn":[947456,113472]}], +"textures/segment2/segment2_cn.1BB50.ia1.png": [16,8,16,{"cn":[947456,113488]}], +"textures/segment2/segment2_cn.1BB60.ia1.png": [16,8,16,{"cn":[947456,113504]}], +"textures/segment2/segment2_cn.1BB70.ia1.png": [16,8,16,{"cn":[947456,113520]}], +"textures/segment2/segment2_cn.1BB80.ia1.png": [16,8,16,{"cn":[947456,113536]}], +"textures/segment2/segment2_cn.1BB90.ia1.png": [16,8,16,{"cn":[947456,113552]}], +"textures/segment2/segment2_cn.1BBA0.ia1.png": [16,8,16,{"cn":[947456,113568]}], +"textures/segment2/segment2_cn.1BBB0.ia1.png": [16,8,16,{"cn":[947456,113584]}], +"textures/segment2/segment2_cn.1BBC0.ia1.png": [16,8,16,{"cn":[947456,113600]}], +"textures/segment2/segment2_cn.1BBD0.ia1.png": [16,8,16,{"cn":[947456,113616]}], +"textures/segment2/segment2_cn.1BBE0.ia1.png": [16,8,16,{"cn":[947456,113632]}], +"textures/segment2/segment2_cn.1BBF0.ia1.png": [16,8,16,{"cn":[947456,113648]}], +"textures/segment2/segment2_cn.1BC00.ia1.png": [16,8,16,{"cn":[947456,113664]}], +"textures/segment2/segment2_cn.1BC10.ia1.png": [16,8,16,{"cn":[947456,113680]}], +"textures/segment2/segment2_cn.1BC20.ia1.png": [16,8,16,{"cn":[947456,113696]}], +"textures/segment2/segment2_cn.1BC30.ia1.png": [16,8,16,{"cn":[947456,113712]}], +"textures/segment2/segment2_cn.1BC40.ia1.png": [16,8,16,{"cn":[947456,113728]}], +"textures/segment2/segment2_cn.1BC50.ia1.png": [16,8,16,{"cn":[947456,113744]}], +"textures/segment2/segment2_cn.1BC60.ia1.png": [16,8,16,{"cn":[947456,113760]}], +"textures/segment2/segment2_cn.1BC70.ia1.png": [16,8,16,{"cn":[947456,113776]}], +"textures/segment2/segment2_cn.1BC80.ia1.png": [16,8,16,{"cn":[947456,113792]}], +"textures/segment2/segment2_cn.1BC90.ia1.png": [16,8,16,{"cn":[947456,113808]}], +"textures/segment2/segment2_cn.1BCA0.ia1.png": [16,8,16,{"cn":[947456,113824]}], +"textures/segment2/segment2_cn.1BCB0.ia1.png": [16,8,16,{"cn":[947456,113840]}], +"textures/segment2/segment2_cn.1BCC0.ia1.png": [16,8,16,{"cn":[947456,113856]}], +"textures/segment2/segment2_cn.1BCD0.ia1.png": [16,8,16,{"cn":[947456,113872]}], +"textures/segment2/segment2_cn.1BCE0.ia1.png": [16,8,16,{"cn":[947456,113888]}], +"textures/segment2/segment2_cn.1BCF0.ia1.png": [16,8,16,{"cn":[947456,113904]}], +"textures/segment2/segment2_cn.1BD00.ia1.png": [16,8,16,{"cn":[947456,113920]}], +"textures/segment2/segment2_cn.1BD10.ia1.png": [16,8,16,{"cn":[947456,113936]}], +"textures/segment2/segment2_cn.1BD20.ia1.png": [16,8,16,{"cn":[947456,113952]}], +"textures/segment2/segment2_cn.1BD30.ia1.png": [16,8,16,{"cn":[947456,113968]}], +"textures/segment2/segment2_cn.1BD40.ia1.png": [16,8,16,{"cn":[947456,113984]}], +"textures/segment2/segment2_cn.1BD50.ia1.png": [16,8,16,{"cn":[947456,114000]}], +"textures/segment2/segment2_cn.1BD60.ia1.png": [16,8,16,{"cn":[947456,114016]}], +"textures/segment2/segment2_cn.1BD70.ia1.png": [16,8,16,{"cn":[947456,114032]}], +"textures/segment2/segment2_cn.1BD80.ia1.png": [16,8,16,{"cn":[947456,114048]}], +"textures/segment2/segment2_cn.1BD90.ia1.png": [16,8,16,{"cn":[947456,114064]}], +"textures/segment2/segment2_cn.1BDA0.ia1.png": [16,8,16,{"cn":[947456,114080]}], +"textures/segment2/segment2_cn.1BDB0.ia1.png": [16,8,16,{"cn":[947456,114096]}], +"textures/segment2/segment2_cn.1BDC0.ia1.png": [16,8,16,{"cn":[947456,114112]}], +"textures/segment2/segment2_cn.1BDD0.ia1.png": [16,8,16,{"cn":[947456,114128]}], +"textures/segment2/segment2_cn.1BDE0.ia1.png": [16,8,16,{"cn":[947456,114144]}], +"textures/segment2/segment2_cn.1BDF0.ia1.png": [16,8,16,{"cn":[947456,114160]}], +"textures/segment2/segment2_cn.1BE00.ia1.png": [16,8,16,{"cn":[947456,114176]}], +"textures/segment2/segment2_cn.1BE10.ia1.png": [16,8,16,{"cn":[947456,114192]}], +"textures/segment2/segment2_cn.1BE20.ia1.png": [16,8,16,{"cn":[947456,114208]}], +"textures/segment2/segment2_cn.1BE30.ia1.png": [16,8,16,{"cn":[947456,114224]}], +"textures/segment2/segment2_cn.1BE40.ia1.png": [16,8,16,{"cn":[947456,114240]}], +"textures/segment2/segment2_cn.1BE50.ia1.png": [16,8,16,{"cn":[947456,114256]}], +"textures/segment2/segment2_cn.1BE60.ia1.png": [16,8,16,{"cn":[947456,114272]}], +"textures/segment2/segment2_cn.1BE70.ia1.png": [16,8,16,{"cn":[947456,114288]}], +"textures/segment2/segment2_cn.1BE80.ia1.png": [16,8,16,{"cn":[947456,114304]}], +"textures/segment2/segment2_cn.1BE90.ia1.png": [16,8,16,{"cn":[947456,114320]}], +"textures/segment2/segment2_cn.1BEA0.ia1.png": [16,8,16,{"cn":[947456,114336]}], +"textures/segment2/segment2_cn.1BEB0.ia1.png": [16,8,16,{"cn":[947456,114352]}], +"textures/segment2/segment2_cn.1BEC0.ia1.png": [16,8,16,{"cn":[947456,114368]}], +"textures/segment2/segment2_cn.1BED0.ia1.png": [16,8,16,{"cn":[947456,114384]}], +"textures/segment2/segment2_cn.1BEE0.ia1.png": [16,8,16,{"cn":[947456,114400]}], +"textures/segment2/segment2_cn.1BEF0.ia1.png": [16,8,16,{"cn":[947456,114416]}], +"textures/segment2/segment2_cn.1BF00.ia1.png": [16,8,16,{"cn":[947456,114432]}], +"textures/segment2/segment2_cn.1BF10.ia1.png": [16,8,16,{"cn":[947456,114448]}], +"textures/segment2/segment2_cn.1BF20.ia1.png": [16,8,16,{"cn":[947456,114464]}], +"textures/segment2/segment2_cn.1BF30.ia1.png": [16,8,16,{"cn":[947456,114480]}], +"textures/segment2/segment2_cn.1BF40.ia1.png": [16,8,16,{"cn":[947456,114496]}], +"textures/segment2/segment2_cn.1BF50.ia1.png": [16,8,16,{"cn":[947456,114512]}], +"textures/segment2/segment2_cn.1BF60.ia1.png": [16,8,16,{"cn":[947456,114528]}], +"textures/segment2/segment2_cn.1BF70.ia1.png": [16,8,16,{"cn":[947456,114544]}], +"textures/segment2/segment2_cn.1BF80.ia1.png": [16,8,16,{"cn":[947456,114560]}], +"textures/segment2/segment2_cn.1BF90.ia1.png": [16,8,16,{"cn":[947456,114576]}], +"textures/segment2/segment2_cn.1BFA0.ia1.png": [16,8,16,{"cn":[947456,114592]}], +"textures/segment2/segment2_cn.1BFB0.ia1.png": [16,8,16,{"cn":[947456,114608]}], +"textures/segment2/segment2_cn.1BFC0.ia1.png": [16,8,16,{"cn":[947456,114624]}], +"textures/segment2/segment2_cn.1BFD0.ia1.png": [16,8,16,{"cn":[947456,114640]}], +"textures/segment2/segment2_cn.1BFE0.ia1.png": [16,8,16,{"cn":[947456,114656]}], +"textures/segment2/segment2_cn.1BFF0.ia1.png": [16,8,16,{"cn":[947456,114672]}], +"textures/segment2/segment2_cn.1C000.ia1.png": [16,8,16,{"cn":[947456,114688]}], +"textures/segment2/segment2_cn.1C010.ia1.png": [16,8,16,{"cn":[947456,114704]}], +"textures/segment2/segment2_cn.1C020.ia1.png": [16,8,16,{"cn":[947456,114720]}], +"textures/segment2/segment2_cn.1C030.ia1.png": [16,8,16,{"cn":[947456,114736]}], +"textures/segment2/segment2_cn.1C040.ia1.png": [16,8,16,{"cn":[947456,114752]}], +"textures/segment2/segment2_cn.1C050.ia1.png": [16,8,16,{"cn":[947456,114768]}], +"textures/segment2/segment2_cn.1C060.ia1.png": [16,8,16,{"cn":[947456,114784]}], +"textures/segment2/segment2_cn.1C070.ia1.png": [16,8,16,{"cn":[947456,114800]}], +"textures/segment2/segment2_cn.1C080.ia1.png": [16,8,16,{"cn":[947456,114816]}], +"textures/segment2/segment2_cn.1C090.ia1.png": [16,8,16,{"cn":[947456,114832]}], +"textures/segment2/segment2_cn.1C0A0.ia1.png": [16,8,16,{"cn":[947456,114848]}], +"textures/segment2/segment2_cn.1C0B0.ia1.png": [16,8,16,{"cn":[947456,114864]}], +"textures/segment2/segment2_cn.1C0C0.ia1.png": [16,8,16,{"cn":[947456,114880]}], +"textures/segment2/segment2_cn.1C0D0.ia1.png": [16,8,16,{"cn":[947456,114896]}], +"textures/segment2/segment2_cn.1C0E0.ia1.png": [16,8,16,{"cn":[947456,114912]}], +"textures/segment2/segment2_cn.1C0F0.ia1.png": [16,8,16,{"cn":[947456,114928]}], +"textures/segment2/segment2_cn.1C100.ia1.png": [16,8,16,{"cn":[947456,114944]}], +"textures/segment2/segment2_cn.1C110.ia1.png": [16,8,16,{"cn":[947456,114960]}], +"textures/segment2/segment2_cn.1C120.ia1.png": [16,8,16,{"cn":[947456,114976]}], +"textures/segment2/segment2_cn.1C130.ia1.png": [16,8,16,{"cn":[947456,114992]}], +"textures/segment2/segment2_cn.1C140.ia1.png": [16,8,16,{"cn":[947456,115008]}], +"textures/segment2/segment2_cn.1C150.ia1.png": [16,8,16,{"cn":[947456,115024]}], +"textures/segment2/segment2_cn.1C160.ia1.png": [16,8,16,{"cn":[947456,115040]}], +"textures/segment2/segment2_cn.1C170.ia1.png": [16,8,16,{"cn":[947456,115056]}], +"textures/segment2/segment2_cn.1C180.ia1.png": [16,8,16,{"cn":[947456,115072]}], +"textures/segment2/segment2_cn.1C190.ia1.png": [16,8,16,{"cn":[947456,115088]}], +"textures/segment2/segment2_cn.1C1A0.ia1.png": [16,8,16,{"cn":[947456,115104]}], +"textures/segment2/segment2_cn.1C1B0.ia1.png": [16,8,16,{"cn":[947456,115120]}], +"textures/segment2/segment2_cn.1C1C0.ia1.png": [16,8,16,{"cn":[947456,115136]}], +"textures/segment2/segment2_cn.1C1D0.ia1.png": [16,8,16,{"cn":[947456,115152]}], +"textures/segment2/segment2_cn.1C1E0.ia1.png": [16,8,16,{"cn":[947456,115168]}], +"textures/segment2/segment2_cn.1C1F0.ia1.png": [16,8,16,{"cn":[947456,115184]}], +"textures/segment2/segment2_cn.1C200.ia1.png": [16,8,16,{"cn":[947456,115200]}], +"textures/segment2/segment2_cn.1C210.ia1.png": [16,8,16,{"cn":[947456,115216]}], +"textures/segment2/segment2_cn.1C220.ia1.png": [16,8,16,{"cn":[947456,115232]}], +"textures/segment2/segment2_cn.1C230.ia1.png": [16,8,16,{"cn":[947456,115248]}], +"textures/segment2/segment2_cn.1C240.ia1.png": [16,8,16,{"cn":[947456,115264]}], +"textures/segment2/segment2_cn.1C250.ia1.png": [16,8,16,{"cn":[947456,115280]}], +"textures/segment2/segment2_cn.1C260.ia1.png": [16,8,16,{"cn":[947456,115296]}], +"textures/segment2/segment2_cn.1C270.ia1.png": [16,8,16,{"cn":[947456,115312]}], +"textures/segment2/segment2_cn.1C280.ia1.png": [16,8,16,{"cn":[947456,115328]}], +"textures/segment2/segment2_cn.1C290.ia1.png": [16,8,16,{"cn":[947456,115344]}], +"textures/segment2/segment2_cn.1C2A0.ia1.png": [16,8,16,{"cn":[947456,115360]}], +"textures/segment2/segment2_cn.1C2B0.ia1.png": [16,8,16,{"cn":[947456,115376]}], +"textures/segment2/segment2_cn.1C2C0.ia1.png": [16,8,16,{"cn":[947456,115392]}], +"textures/segment2/segment2_cn.1C2D0.ia1.png": [16,8,16,{"cn":[947456,115408]}], +"textures/segment2/segment2_cn.1C2E0.ia1.png": [16,8,16,{"cn":[947456,115424]}], +"textures/segment2/segment2_cn.1C2F0.ia1.png": [16,8,16,{"cn":[947456,115440]}], +"textures/segment2/segment2_cn.1C300.ia1.png": [16,8,16,{"cn":[947456,115456]}], +"textures/segment2/segment2_cn.1C310.ia1.png": [16,8,16,{"cn":[947456,115472]}], +"textures/segment2/segment2_cn.1C320.ia1.png": [16,8,16,{"cn":[947456,115488]}], +"textures/segment2/segment2_cn.1C330.ia1.png": [16,8,16,{"cn":[947456,115504]}], +"textures/segment2/segment2_cn.1C340.ia1.png": [16,8,16,{"cn":[947456,115520]}], +"textures/segment2/segment2_cn.1C350.ia1.png": [16,8,16,{"cn":[947456,115536]}], +"textures/segment2/segment2_cn.1C360.ia1.png": [16,8,16,{"cn":[947456,115552]}], +"textures/segment2/segment2_cn.1C370.ia1.png": [16,8,16,{"cn":[947456,115568]}], +"textures/segment2/segment2_cn.1C380.ia1.png": [16,8,16,{"cn":[947456,115584]}], +"textures/segment2/segment2_cn.1C390.ia1.png": [16,8,16,{"cn":[947456,115600]}], +"textures/segment2/segment2_cn.1C3A0.ia1.png": [16,8,16,{"cn":[947456,115616]}], +"textures/segment2/segment2_cn.1C3B0.ia1.png": [16,8,16,{"cn":[947456,115632]}], +"textures/segment2/segment2_cn.1C3C0.ia1.png": [16,8,16,{"cn":[947456,115648]}], +"textures/segment2/segment2_cn.1C3D0.ia1.png": [16,8,16,{"cn":[947456,115664]}], +"textures/segment2/segment2_cn.1C3E0.ia1.png": [16,8,16,{"cn":[947456,115680]}], +"textures/segment2/segment2_cn.1C3F0.ia1.png": [16,8,16,{"cn":[947456,115696]}], +"textures/segment2/segment2_cn.1C400.ia1.png": [16,8,16,{"cn":[947456,115712]}], +"textures/segment2/segment2_cn.1C410.ia1.png": [16,8,16,{"cn":[947456,115728]}], +"textures/segment2/segment2_cn.1C420.ia1.png": [16,8,16,{"cn":[947456,115744]}], +"textures/segment2/segment2_cn.1C430.ia1.png": [16,8,16,{"cn":[947456,115760]}], +"textures/segment2/segment2_cn.1C440.ia1.png": [16,8,16,{"cn":[947456,115776]}], +"textures/segment2/segment2_cn.1C450.ia1.png": [16,8,16,{"cn":[947456,115792]}], +"textures/segment2/segment2_cn.1C460.ia1.png": [16,8,16,{"cn":[947456,115808]}], +"textures/segment2/segment2_cn.1C470.ia1.png": [16,8,16,{"cn":[947456,115824]}], +"textures/segment2/segment2_cn.1C480.ia1.png": [16,8,16,{"cn":[947456,115840]}], +"textures/segment2/segment2_cn.1C490.ia1.png": [16,8,16,{"cn":[947456,115856]}], +"textures/segment2/segment2_cn.1C4A0.ia1.png": [16,8,16,{"cn":[947456,115872]}], +"textures/segment2/segment2_cn.1C4B0.ia1.png": [16,8,16,{"cn":[947456,115888]}], +"textures/segment2/segment2_cn.1C4C0.ia1.png": [16,8,16,{"cn":[947456,115904]}], +"textures/segment2/segment2_cn.1C4D0.ia1.png": [16,8,16,{"cn":[947456,115920]}], +"textures/segment2/segment2_cn.1C4E0.ia1.png": [16,8,16,{"cn":[947456,115936]}], +"textures/segment2/segment2_cn.1C4F0.ia1.png": [16,8,16,{"cn":[947456,115952]}], +"textures/segment2/segment2_cn.1C500.ia1.png": [16,8,16,{"cn":[947456,115968]}], +"textures/segment2/segment2_cn.1C510.ia1.png": [16,8,16,{"cn":[947456,115984]}], +"textures/segment2/segment2_cn.1C520.ia1.png": [16,8,16,{"cn":[947456,116000]}], +"textures/segment2/segment2_cn.1C530.ia1.png": [16,8,16,{"cn":[947456,116016]}], +"textures/segment2/segment2_cn.1C540.ia1.png": [16,8,16,{"cn":[947456,116032]}], +"textures/segment2/segment2_cn.1C550.ia1.png": [16,8,16,{"cn":[947456,116048]}], +"textures/segment2/segment2_cn.1C560.ia1.png": [16,8,16,{"cn":[947456,116064]}], +"textures/segment2/segment2_cn.1C570.ia1.png": [16,8,16,{"cn":[947456,116080]}], +"textures/segment2/segment2_cn.1C580.ia1.png": [16,8,16,{"cn":[947456,116096]}], +"textures/segment2/segment2_cn.1C590.ia1.png": [16,8,16,{"cn":[947456,116112]}], +"textures/segment2/segment2_cn.1C5A0.ia1.png": [16,8,16,{"cn":[947456,116128]}], +"textures/segment2/segment2_cn.1C5B0.ia1.png": [16,8,16,{"cn":[947456,116144]}], +"textures/segment2/segment2_cn.1C5C0.ia1.png": [16,8,16,{"cn":[947456,116160]}], +"textures/segment2/segment2_cn.1C5D0.ia1.png": [16,8,16,{"cn":[947456,116176]}], +"textures/segment2/segment2_cn.1C5E0.ia1.png": [16,8,16,{"cn":[947456,116192]}], +"textures/segment2/segment2_cn.1C5F0.ia1.png": [16,8,16,{"cn":[947456,116208]}], +"textures/segment2/segment2_cn.1C600.ia1.png": [16,8,16,{"cn":[947456,116224]}], +"textures/segment2/segment2_cn.1C610.ia1.png": [16,8,16,{"cn":[947456,116240]}], +"textures/segment2/segment2_cn.1C620.ia1.png": [16,8,16,{"cn":[947456,116256]}], +"textures/segment2/segment2_cn.1C630.ia1.png": [16,8,16,{"cn":[947456,116272]}], +"textures/segment2/segment2_cn.1C640.ia1.png": [16,8,16,{"cn":[947456,116288]}], +"textures/segment2/segment2_cn.1C650.ia1.png": [16,8,16,{"cn":[947456,116304]}], +"textures/segment2/segment2_cn.1C660.ia1.png": [16,8,16,{"cn":[947456,116320]}], +"textures/segment2/segment2_cn.1C670.ia1.png": [16,8,16,{"cn":[947456,116336]}], +"textures/segment2/segment2_cn.1C680.ia1.png": [16,8,16,{"cn":[947456,116352]}], +"textures/segment2/segment2_cn.1C690.ia1.png": [16,8,16,{"cn":[947456,116368]}], +"textures/segment2/segment2_cn.1C6A0.ia1.png": [16,8,16,{"cn":[947456,116384]}], +"textures/segment2/segment2_cn.1C6B0.ia1.png": [16,8,16,{"cn":[947456,116400]}], +"textures/segment2/segment2_cn.1C6C0.ia1.png": [16,8,16,{"cn":[947456,116416]}], +"textures/segment2/segment2_cn.1C6D0.ia1.png": [16,8,16,{"cn":[947456,116432]}], +"textures/segment2/segment2_cn.1C6E0.ia1.png": [16,8,16,{"cn":[947456,116448]}], +"textures/segment2/segment2_cn.1C6F0.ia1.png": [16,8,16,{"cn":[947456,116464]}], +"textures/segment2/segment2_cn.1C700.ia1.png": [16,8,16,{"cn":[947456,116480]}], +"textures/segment2/segment2_cn.1C710.ia1.png": [16,8,16,{"cn":[947456,116496]}], +"textures/segment2/segment2_cn.1C720.ia1.png": [16,8,16,{"cn":[947456,116512]}], +"textures/segment2/segment2_cn.1C730.ia1.png": [16,8,16,{"cn":[947456,116528]}], +"textures/segment2/segment2_cn.1C740.ia1.png": [16,8,16,{"cn":[947456,116544]}], +"textures/segment2/segment2_cn.1C750.ia1.png": [16,8,16,{"cn":[947456,116560]}], +"textures/segment2/segment2_cn.1C760.ia1.png": [16,8,16,{"cn":[947456,116576]}], +"textures/segment2/segment2_cn.1C770.ia1.png": [16,8,16,{"cn":[947456,116592]}], +"textures/segment2/segment2_cn.1C780.ia1.png": [16,8,16,{"cn":[947456,116608]}], +"textures/segment2/segment2_cn.1C790.ia1.png": [16,8,16,{"cn":[947456,116624]}], +"textures/segment2/segment2_cn.1C7A0.ia1.png": [16,8,16,{"cn":[947456,116640]}], +"textures/segment2/segment2_cn.1C7B0.ia1.png": [16,8,16,{"cn":[947456,116656]}], +"textures/segment2/segment2_cn.1C7C0.ia1.png": [16,8,16,{"cn":[947456,116672]}], +"textures/segment2/segment2_cn.1C7D0.ia1.png": [16,8,16,{"cn":[947456,116688]}], +"textures/segment2/segment2_cn.1C7E0.ia1.png": [16,8,16,{"cn":[947456,116704]}], +"textures/segment2/segment2_cn.1C7F0.ia1.png": [16,8,16,{"cn":[947456,116720]}], +"textures/segment2/segment2_cn.1C800.ia1.png": [16,8,16,{"cn":[947456,116736]}], +"textures/segment2/segment2_cn.1C810.ia1.png": [16,8,16,{"cn":[947456,116752]}], +"textures/segment2/segment2_cn.1C820.ia1.png": [16,8,16,{"cn":[947456,116768]}], +"textures/segment2/segment2_cn.1C830.ia1.png": [16,8,16,{"cn":[947456,116784]}], +"textures/segment2/segment2_cn.1C840.ia1.png": [16,8,16,{"cn":[947456,116800]}], +"textures/segment2/segment2_cn.1C850.ia1.png": [16,8,16,{"cn":[947456,116816]}], +"textures/segment2/segment2_cn.1C860.ia1.png": [16,8,16,{"cn":[947456,116832]}], +"textures/segment2/segment2_cn.1C870.ia1.png": [16,8,16,{"cn":[947456,116848]}], +"textures/segment2/segment2_cn.1C880.ia1.png": [16,8,16,{"cn":[947456,116864]}], +"textures/segment2/segment2_cn.1C890.ia1.png": [16,8,16,{"cn":[947456,116880]}], +"textures/segment2/segment2_cn.1C8A0.ia1.png": [16,8,16,{"cn":[947456,116896]}], +"textures/segment2/segment2_cn.1C8B0.ia1.png": [16,8,16,{"cn":[947456,116912]}], +"textures/segment2/segment2_cn.1C8C0.ia1.png": [16,8,16,{"cn":[947456,116928]}], +"textures/segment2/segment2_cn.1C8D0.ia1.png": [16,8,16,{"cn":[947456,116944]}], +"textures/segment2/segment2_cn.1C8E0.ia1.png": [16,8,16,{"cn":[947456,116960]}], +"textures/segment2/segment2_cn.1C8F0.ia1.png": [16,8,16,{"cn":[947456,116976]}], +"textures/segment2/segment2_cn.1C900.ia1.png": [16,8,16,{"cn":[947456,116992]}], +"textures/segment2/segment2_cn.1C910.ia1.png": [16,8,16,{"cn":[947456,117008]}], +"textures/segment2/segment2_cn.1C920.ia1.png": [16,8,16,{"cn":[947456,117024]}], +"textures/segment2/segment2_cn.1C930.ia1.png": [16,8,16,{"cn":[947456,117040]}], +"textures/segment2/segment2_cn.1C940.ia1.png": [16,8,16,{"cn":[947456,117056]}], +"textures/segment2/segment2_cn.1C950.ia1.png": [16,8,16,{"cn":[947456,117072]}], +"textures/segment2/segment2_cn.1C960.ia1.png": [16,8,16,{"cn":[947456,117088]}], +"textures/segment2/segment2_cn.1C970.ia1.png": [16,8,16,{"cn":[947456,117104]}], +"textures/segment2/segment2_cn.1C980.ia1.png": [16,8,16,{"cn":[947456,117120]}], +"textures/segment2/segment2_cn.1C990.ia1.png": [16,8,16,{"cn":[947456,117136]}], +"textures/segment2/segment2_cn.1C9A0.ia1.png": [16,8,16,{"cn":[947456,117152]}], +"textures/segment2/segment2_cn.1C9B0.ia1.png": [16,8,16,{"cn":[947456,117168]}], +"textures/segment2/segment2_cn.1C9C0.ia1.png": [16,8,16,{"cn":[947456,117184]}], +"textures/segment2/segment2_cn.1C9D0.ia1.png": [16,8,16,{"cn":[947456,117200]}], +"textures/segment2/segment2_cn.1C9E0.ia1.png": [16,8,16,{"cn":[947456,117216]}], +"textures/segment2/segment2_cn.1C9F0.ia1.png": [16,8,16,{"cn":[947456,117232]}], +"textures/segment2/segment2_cn.1CA00.ia1.png": [16,8,16,{"cn":[947456,117248]}], +"textures/segment2/segment2_cn.1CA10.ia1.png": [16,8,16,{"cn":[947456,117264]}], +"textures/segment2/segment2_cn.1CA20.ia1.png": [16,8,16,{"cn":[947456,117280]}], +"textures/segment2/segment2_cn.1CA30.ia1.png": [16,8,16,{"cn":[947456,117296]}], +"textures/segment2/segment2_cn.1CA40.ia1.png": [16,8,16,{"cn":[947456,117312]}], +"textures/segment2/segment2_cn.1CA50.ia1.png": [16,8,16,{"cn":[947456,117328]}], +"textures/segment2/segment2_cn.1CA60.ia1.png": [16,8,16,{"cn":[947456,117344]}], +"textures/segment2/segment2_cn.1CA70.ia1.png": [16,8,16,{"cn":[947456,117360]}], +"textures/segment2/segment2_cn.1CA80.ia1.png": [16,8,16,{"cn":[947456,117376]}], +"textures/segment2/segment2_cn.1CA90.ia1.png": [16,8,16,{"cn":[947456,117392]}], +"textures/segment2/segment2_cn.1CAA0.ia1.png": [16,8,16,{"cn":[947456,117408]}], +"textures/segment2/segment2_cn.1CAB0.ia1.png": [16,8,16,{"cn":[947456,117424]}], +"textures/segment2/segment2_cn.1CAC0.ia1.png": [16,8,16,{"cn":[947456,117440]}], +"textures/segment2/segment2_cn.1CAD0.ia1.png": [16,8,16,{"cn":[947456,117456]}], +"textures/segment2/segment2_cn.1CAE0.ia1.png": [16,8,16,{"cn":[947456,117472]}], +"textures/segment2/segment2_cn.1CAF0.ia1.png": [16,8,16,{"cn":[947456,117488]}], +"textures/segment2/segment2_cn.1CB00.ia1.png": [16,8,16,{"cn":[947456,117504]}], +"textures/segment2/segment2_cn.1CB10.ia1.png": [16,8,16,{"cn":[947456,117520]}], +"textures/segment2/segment2_cn.1CB20.ia1.png": [16,8,16,{"cn":[947456,117536]}], +"textures/segment2/segment2_cn.1CB30.ia1.png": [16,8,16,{"cn":[947456,117552]}], +"textures/segment2/segment2_cn.1CB40.ia1.png": [16,8,16,{"cn":[947456,117568]}], +"textures/segment2/segment2_cn.1CB50.ia1.png": [16,8,16,{"cn":[947456,117584]}], +"textures/segment2/segment2_cn.1CB60.ia1.png": [16,8,16,{"cn":[947456,117600]}], +"textures/segment2/segment2_cn.1CB70.ia1.png": [16,8,16,{"cn":[947456,117616]}], +"textures/segment2/segment2_cn.1CB80.ia1.png": [16,8,16,{"cn":[947456,117632]}], +"textures/segment2/segment2_cn.1CB90.ia1.png": [16,8,16,{"cn":[947456,117648]}], +"textures/segment2/segment2_cn.1CBA0.ia1.png": [16,8,16,{"cn":[947456,117664]}], +"textures/segment2/segment2_cn.1CBB0.ia1.png": [16,8,16,{"cn":[947456,117680]}], +"textures/segment2/segment2_cn.1CBC0.ia1.png": [16,8,16,{"cn":[947456,117696]}], +"textures/segment2/segment2_cn.1CBD0.ia1.png": [16,8,16,{"cn":[947456,117712]}], +"textures/segment2/segment2_cn.1CBE0.ia1.png": [16,8,16,{"cn":[947456,117728]}], +"textures/segment2/segment2_cn.1CBF0.ia1.png": [16,8,16,{"cn":[947456,117744]}], +"textures/segment2/segment2_cn.1CC00.ia1.png": [16,8,16,{"cn":[947456,117760]}], +"textures/segment2/segment2_cn.1CC10.ia1.png": [16,8,16,{"cn":[947456,117776]}], +"textures/segment2/segment2_cn.1CC20.ia1.png": [16,8,16,{"cn":[947456,117792]}], +"textures/segment2/segment2_cn.1CC30.ia1.png": [16,8,16,{"cn":[947456,117808]}], +"textures/segment2/segment2_cn.1CC40.ia1.png": [16,8,16,{"cn":[947456,117824]}], +"textures/segment2/segment2_cn.1CC50.ia1.png": [16,8,16,{"cn":[947456,117840]}], +"textures/segment2/segment2_cn.1CC60.ia1.png": [16,8,16,{"cn":[947456,117856]}], +"textures/segment2/segment2_cn.1CC70.ia1.png": [16,8,16,{"cn":[947456,117872]}], +"textures/segment2/segment2_cn.1CC80.ia1.png": [16,8,16,{"cn":[947456,117888]}], +"textures/segment2/segment2_cn.1CC90.ia1.png": [16,8,16,{"cn":[947456,117904]}], +"textures/segment2/segment2_cn.1CCA0.ia1.png": [16,8,16,{"cn":[947456,117920]}], +"textures/segment2/segment2_cn.1CCB0.ia1.png": [16,8,16,{"cn":[947456,117936]}], +"textures/segment2/segment2_cn.1CCC0.ia1.png": [16,8,16,{"cn":[947456,117952]}], +"textures/segment2/segment2_cn.1CCD0.ia1.png": [16,8,16,{"cn":[947456,117968]}], +"textures/segment2/segment2_cn.1CCE0.ia1.png": [16,8,16,{"cn":[947456,117984]}], +"textures/segment2/segment2_cn.1CCF0.ia1.png": [16,8,16,{"cn":[947456,118000]}], +"textures/segment2/segment2_cn.1CD00.ia1.png": [16,8,16,{"cn":[947456,118016]}], +"textures/segment2/segment2_cn.1CD10.ia1.png": [16,8,16,{"cn":[947456,118032]}], +"textures/segment2/segment2_cn.1CD20.ia1.png": [16,8,16,{"cn":[947456,118048]}], +"textures/segment2/segment2_cn.1CD30.ia1.png": [16,8,16,{"cn":[947456,118064]}], +"textures/segment2/segment2_cn.1CD40.ia1.png": [16,8,16,{"cn":[947456,118080]}], +"textures/segment2/segment2_cn.1CD50.ia1.png": [16,8,16,{"cn":[947456,118096]}], +"textures/segment2/segment2_cn.1CD60.ia1.png": [16,8,16,{"cn":[947456,118112]}], +"textures/segment2/segment2_cn.1CD70.ia1.png": [16,8,16,{"cn":[947456,118128]}], +"textures/segment2/segment2_cn.1CD80.ia1.png": [16,8,16,{"cn":[947456,118144]}], +"textures/segment2/segment2_cn.1CD90.ia1.png": [16,8,16,{"cn":[947456,118160]}], +"textures/segment2/segment2_cn.1CDA0.ia1.png": [16,8,16,{"cn":[947456,118176]}], +"textures/segment2/segment2_cn.1CDB0.ia1.png": [16,8,16,{"cn":[947456,118192]}], +"textures/segment2/segment2_cn.1CDC0.ia1.png": [16,8,16,{"cn":[947456,118208]}], +"textures/segment2/segment2_cn.1CDD0.ia1.png": [16,8,16,{"cn":[947456,118224]}], +"textures/segment2/segment2_cn.1CDE0.ia1.png": [16,8,16,{"cn":[947456,118240]}], +"textures/segment2/segment2_cn.1CDF0.ia1.png": [16,8,16,{"cn":[947456,118256]}], +"textures/segment2/segment2_cn.1CE00.ia1.png": [16,8,16,{"cn":[947456,118272]}], +"textures/segment2/segment2_cn.1CE10.ia1.png": [16,8,16,{"cn":[947456,118288]}], +"textures/segment2/segment2_cn.1CE20.ia1.png": [16,8,16,{"cn":[947456,118304]}], +"textures/segment2/segment2_cn.1CE30.ia1.png": [16,8,16,{"cn":[947456,118320]}], +"textures/segment2/segment2_cn.1CE40.ia1.png": [16,8,16,{"cn":[947456,118336]}], +"textures/segment2/segment2_cn.1CE50.ia1.png": [16,8,16,{"cn":[947456,118352]}], +"textures/segment2/segment2_cn.1CE60.ia1.png": [16,8,16,{"cn":[947456,118368]}], +"textures/segment2/segment2_cn.1CE70.ia1.png": [16,8,16,{"cn":[947456,118384]}], +"textures/segment2/segment2_cn.1CE80.ia1.png": [16,8,16,{"cn":[947456,118400]}], +"textures/segment2/segment2_cn.1CE90.ia1.png": [16,8,16,{"cn":[947456,118416]}], +"textures/segment2/segment2_cn.1CEA0.ia1.png": [16,8,16,{"cn":[947456,118432]}], +"textures/segment2/segment2_cn.1CEB0.ia1.png": [16,8,16,{"cn":[947456,118448]}], +"textures/segment2/segment2_cn.1CEC0.ia1.png": [16,8,16,{"cn":[947456,118464]}], +"textures/segment2/segment2_cn.1CED0.ia1.png": [16,8,16,{"cn":[947456,118480]}], +"textures/segment2/segment2_cn.1CEE0.ia1.png": [16,8,16,{"cn":[947456,118496]}], +"textures/segment2/segment2_cn.1CEF0.ia1.png": [16,8,16,{"cn":[947456,118512]}], +"textures/segment2/segment2_cn.1CF00.ia1.png": [16,8,16,{"cn":[947456,118528]}], +"textures/segment2/segment2_cn.1CF10.ia1.png": [16,8,16,{"cn":[947456,118544]}], +"textures/segment2/segment2_cn.1CF20.ia1.png": [16,8,16,{"cn":[947456,118560]}], +"textures/segment2/segment2_cn.1CF30.ia1.png": [16,8,16,{"cn":[947456,118576]}], +"textures/segment2/segment2_cn.1CF40.ia1.png": [16,8,16,{"cn":[947456,118592]}], +"textures/segment2/segment2_cn.1CF50.ia1.png": [16,8,16,{"cn":[947456,118608]}], +"textures/segment2/segment2_cn.1CF60.ia1.png": [16,8,16,{"cn":[947456,118624]}], +"textures/segment2/segment2_cn.1CF70.ia1.png": [16,8,16,{"cn":[947456,118640]}], +"textures/segment2/segment2_cn.1CF80.ia1.png": [16,8,16,{"cn":[947456,118656]}], +"textures/segment2/segment2_cn.1CF90.ia1.png": [16,8,16,{"cn":[947456,118672]}], +"textures/segment2/segment2_cn.1CFA0.ia1.png": [16,8,16,{"cn":[947456,118688]}], +"textures/segment2/segment2_cn.1CFB0.ia1.png": [16,8,16,{"cn":[947456,118704]}], +"textures/segment2/segment2_cn.1CFC0.ia1.png": [16,8,16,{"cn":[947456,118720]}], +"textures/segment2/segment2_cn.1CFD0.ia1.png": [16,8,16,{"cn":[947456,118736]}], +"textures/segment2/segment2_cn.1CFE0.ia1.png": [16,8,16,{"cn":[947456,118752]}], +"textures/segment2/segment2_cn.1CFF0.ia1.png": [16,8,16,{"cn":[947456,118768]}], +"textures/segment2/segment2_cn.1D000.ia1.png": [16,8,16,{"cn":[947456,118784]}], +"textures/segment2/segment2_cn.1D010.ia1.png": [16,8,16,{"cn":[947456,118800]}], +"textures/segment2/segment2_cn.1D020.ia1.png": [16,8,16,{"cn":[947456,118816]}], +"textures/segment2/segment2_cn.1D030.ia1.png": [16,8,16,{"cn":[947456,118832]}], +"textures/segment2/segment2_cn.1D040.ia1.png": [16,8,16,{"cn":[947456,118848]}], +"textures/segment2/segment2_cn.1D050.ia1.png": [16,8,16,{"cn":[947456,118864]}], +"textures/segment2/segment2_cn.1D060.ia1.png": [16,8,16,{"cn":[947456,118880]}], +"textures/segment2/segment2_cn.1D070.ia1.png": [16,8,16,{"cn":[947456,118896]}], +"textures/segment2/segment2_cn.1D080.ia1.png": [16,8,16,{"cn":[947456,118912]}], +"textures/segment2/segment2_cn.1D090.ia1.png": [16,8,16,{"cn":[947456,118928]}], +"textures/segment2/segment2_cn.1D0A0.ia1.png": [16,8,16,{"cn":[947456,118944]}], +"textures/segment2/segment2_cn.1D0B0.ia1.png": [16,8,16,{"cn":[947456,118960]}], +"textures/segment2/segment2_cn.1D0C0.ia1.png": [16,8,16,{"cn":[947456,118976]}], +"textures/segment2/segment2_cn.1D0D0.ia1.png": [16,8,16,{"cn":[947456,118992]}], +"textures/segment2/segment2_cn.1D0E0.ia1.png": [16,8,16,{"cn":[947456,119008]}], +"textures/segment2/segment2_cn.1D0F0.ia1.png": [16,8,16,{"cn":[947456,119024]}], +"textures/segment2/segment2_cn.1D100.ia1.png": [16,8,16,{"cn":[947456,119040]}], +"textures/segment2/segment2_cn.1D110.ia1.png": [16,8,16,{"cn":[947456,119056]}], +"textures/segment2/segment2_cn.1D120.ia1.png": [16,8,16,{"cn":[947456,119072]}], +"textures/segment2/segment2_cn.1D130.ia1.png": [16,8,16,{"cn":[947456,119088]}], +"textures/segment2/segment2_cn.1D140.ia1.png": [16,8,16,{"cn":[947456,119104]}], +"textures/segment2/segment2_cn.1D150.ia1.png": [16,8,16,{"cn":[947456,119120]}], +"textures/segment2/segment2_cn.1D160.ia1.png": [16,8,16,{"cn":[947456,119136]}], +"textures/segment2/segment2_cn.1D170.ia1.png": [16,8,16,{"cn":[947456,119152]}], +"textures/segment2/segment2_cn.1D180.ia1.png": [16,8,16,{"cn":[947456,119168]}], +"textures/segment2/segment2_cn.1D190.ia1.png": [16,8,16,{"cn":[947456,119184]}], +"textures/segment2/segment2_cn.1D1A0.ia1.png": [16,8,16,{"cn":[947456,119200]}], +"textures/segment2/segment2_cn.1D1B0.ia1.png": [16,8,16,{"cn":[947456,119216]}], +"textures/segment2/segment2_cn.1D1C0.ia1.png": [16,8,16,{"cn":[947456,119232]}], +"textures/segment2/segment2_cn.1D1D0.ia1.png": [16,8,16,{"cn":[947456,119248]}], +"textures/segment2/segment2_cn.1D1E0.ia1.png": [16,8,16,{"cn":[947456,119264]}], +"textures/segment2/segment2_cn.1D1F0.ia1.png": [16,8,16,{"cn":[947456,119280]}], +"textures/segment2/segment2_cn.1D200.ia1.png": [16,8,16,{"cn":[947456,119296]}], +"textures/segment2/segment2_cn.1D210.ia1.png": [16,8,16,{"cn":[947456,119312]}], +"textures/segment2/segment2_cn.1D220.ia1.png": [16,8,16,{"cn":[947456,119328]}], +"textures/segment2/segment2_cn.1D230.ia1.png": [16,8,16,{"cn":[947456,119344]}], +"textures/segment2/segment2_cn.1D240.ia1.png": [16,8,16,{"cn":[947456,119360]}], +"textures/segment2/segment2_cn.1D250.ia1.png": [16,8,16,{"cn":[947456,119376]}], +"textures/segment2/segment2_cn.1D260.ia1.png": [16,8,16,{"cn":[947456,119392]}], +"textures/segment2/segment2_cn.1D270.ia1.png": [16,8,16,{"cn":[947456,119408]}], +"textures/segment2/segment2_cn.1D280.ia1.png": [16,8,16,{"cn":[947456,119424]}], +"textures/segment2/segment2_cn.1D290.ia1.png": [16,8,16,{"cn":[947456,119440]}], +"textures/segment2/segment2_cn.1D2A0.ia1.png": [16,8,16,{"cn":[947456,119456]}], +"textures/segment2/segment2_cn.1D2B0.ia1.png": [16,8,16,{"cn":[947456,119472]}], +"textures/segment2/segment2_cn.1D2C0.ia1.png": [16,8,16,{"cn":[947456,119488]}], +"textures/segment2/segment2_cn.1D2D0.ia1.png": [16,8,16,{"cn":[947456,119504]}], +"textures/segment2/segment2_cn.1D2E0.ia1.png": [16,8,16,{"cn":[947456,119520]}], +"textures/segment2/segment2_cn.1D2F0.ia1.png": [16,8,16,{"cn":[947456,119536]}], +"textures/segment2/segment2_cn.1D300.ia1.png": [16,8,16,{"cn":[947456,119552]}], +"textures/segment2/segment2_cn.1D310.ia1.png": [16,8,16,{"cn":[947456,119568]}], +"textures/segment2/segment2_cn.1D320.ia1.png": [16,8,16,{"cn":[947456,119584]}], +"textures/segment2/segment2_cn.1D330.ia1.png": [16,8,16,{"cn":[947456,119600]}], +"textures/segment2/segment2_cn.1D340.ia1.png": [16,8,16,{"cn":[947456,119616]}], +"textures/segment2/segment2_cn.1D350.ia1.png": [16,8,16,{"cn":[947456,119632]}], +"textures/segment2/segment2_cn.1D360.ia1.png": [16,8,16,{"cn":[947456,119648]}], +"textures/segment2/segment2_cn.1D370.ia1.png": [16,8,16,{"cn":[947456,119664]}], +"textures/segment2/segment2_cn.1D380.ia1.png": [16,8,16,{"cn":[947456,119680]}], +"textures/segment2/segment2_cn.1D390.ia1.png": [16,8,16,{"cn":[947456,119696]}], +"textures/segment2/segment2_cn.1D3A0.ia1.png": [16,8,16,{"cn":[947456,119712]}], +"textures/segment2/segment2_cn.1D3B0.ia1.png": [16,8,16,{"cn":[947456,119728]}], +"textures/segment2/segment2_cn.1D3C0.ia1.png": [16,8,16,{"cn":[947456,119744]}], +"textures/segment2/segment2_cn.1D3D0.ia1.png": [16,8,16,{"cn":[947456,119760]}], +"textures/segment2/segment2_cn.1D3E0.ia1.png": [16,8,16,{"cn":[947456,119776]}], +"textures/segment2/segment2_cn.1D3F0.ia1.png": [16,8,16,{"cn":[947456,119792]}], +"textures/segment2/segment2_cn.1D400.ia1.png": [16,8,16,{"cn":[947456,119808]}], +"textures/segment2/segment2_cn.1D410.ia1.png": [16,8,16,{"cn":[947456,119824]}], +"textures/segment2/segment2_cn.1D420.ia1.png": [16,8,16,{"cn":[947456,119840]}], +"textures/segment2/segment2_cn.1D430.ia1.png": [16,8,16,{"cn":[947456,119856]}], +"textures/segment2/segment2_cn.1D440.ia1.png": [16,8,16,{"cn":[947456,119872]}], +"textures/segment2/segment2_cn.1D450.ia1.png": [16,8,16,{"cn":[947456,119888]}], +"textures/segment2/segment2_cn.1D460.ia1.png": [16,8,16,{"cn":[947456,119904]}], +"textures/segment2/segment2_cn.1D470.ia1.png": [16,8,16,{"cn":[947456,119920]}], +"textures/segment2/segment2_cn.1D480.ia1.png": [16,8,16,{"cn":[947456,119936]}], +"textures/segment2/segment2_cn.1D490.ia1.png": [16,8,16,{"cn":[947456,119952]}], +"textures/segment2/segment2_cn.1D4A0.ia1.png": [16,8,16,{"cn":[947456,119968]}], +"textures/segment2/segment2_cn.1D4B0.ia1.png": [16,8,16,{"cn":[947456,119984]}], +"textures/segment2/segment2_cn.1D4C0.ia1.png": [16,8,16,{"cn":[947456,120000]}], +"textures/segment2/segment2_cn.1D4D0.ia1.png": [16,8,16,{"cn":[947456,120016]}], +"textures/segment2/segment2_cn.1D4E0.ia1.png": [16,8,16,{"cn":[947456,120032]}], +"textures/segment2/segment2_cn.1D4F0.ia1.png": [16,8,16,{"cn":[947456,120048]}], +"textures/segment2/segment2_cn.1D500.ia1.png": [16,8,16,{"cn":[947456,120064]}], +"textures/segment2/segment2_cn.1D510.ia1.png": [16,8,16,{"cn":[947456,120080]}], +"textures/segment2/segment2_cn.1D520.ia1.png": [16,8,16,{"cn":[947456,120096]}], +"textures/segment2/segment2_cn.1D530.ia1.png": [16,8,16,{"cn":[947456,120112]}], +"textures/segment2/segment2_cn.1D540.ia1.png": [16,8,16,{"cn":[947456,120128]}], +"textures/segment2/segment2_cn.1D550.ia1.png": [16,8,16,{"cn":[947456,120144]}], +"textures/segment2/segment2_cn.1D560.ia1.png": [16,8,16,{"cn":[947456,120160]}], +"textures/segment2/segment2_cn.1D570.ia1.png": [16,8,16,{"cn":[947456,120176]}], +"textures/segment2/segment2_cn.1D580.ia1.png": [16,8,16,{"cn":[947456,120192]}], +"textures/segment2/segment2_cn.1D590.ia1.png": [16,8,16,{"cn":[947456,120208]}], +"textures/segment2/segment2_cn.1D5A0.ia1.png": [16,8,16,{"cn":[947456,120224]}], +"textures/segment2/segment2_cn.1D5B0.ia1.png": [16,8,16,{"cn":[947456,120240]}], +"textures/segment2/segment2_cn.1D5C0.ia1.png": [16,8,16,{"cn":[947456,120256]}], +"textures/segment2/segment2_cn.1D5D0.ia1.png": [16,8,16,{"cn":[947456,120272]}], +"textures/segment2/segment2_cn.1D5E0.ia1.png": [16,8,16,{"cn":[947456,120288]}], +"textures/segment2/segment2_cn.1D5F0.ia1.png": [16,8,16,{"cn":[947456,120304]}], +"textures/segment2/segment2_cn.1D600.ia1.png": [16,8,16,{"cn":[947456,120320]}], +"textures/segment2/segment2_cn.1D610.ia1.png": [16,8,16,{"cn":[947456,120336]}], +"textures/segment2/segment2_cn.1D620.ia1.png": [16,8,16,{"cn":[947456,120352]}], +"textures/segment2/segment2_cn.1D630.ia1.png": [16,8,16,{"cn":[947456,120368]}], +"textures/segment2/segment2_cn.1D640.ia1.png": [16,8,16,{"cn":[947456,120384]}], +"textures/segment2/segment2_cn.1D650.ia1.png": [16,8,16,{"cn":[947456,120400]}], +"textures/segment2/segment2_cn.1D660.ia1.png": [16,8,16,{"cn":[947456,120416]}], +"textures/segment2/segment2_cn.1D670.ia1.png": [16,8,16,{"cn":[947456,120432]}], +"textures/segment2/segment2_cn.1D680.ia1.png": [16,8,16,{"cn":[947456,120448]}], +"textures/segment2/segment2_cn.1D690.ia1.png": [16,8,16,{"cn":[947456,120464]}], +"textures/segment2/segment2_cn.1D6A0.ia1.png": [16,8,16,{"cn":[947456,120480]}], +"textures/segment2/segment2_cn.1D6B0.ia1.png": [16,8,16,{"cn":[947456,120496]}], +"textures/segment2/segment2_cn.1D6C0.ia1.png": [16,8,16,{"cn":[947456,120512]}], +"textures/segment2/segment2_cn.1D6D0.ia1.png": [16,8,16,{"cn":[947456,120528]}], +"textures/segment2/segment2_cn.1D6E0.ia1.png": [16,8,16,{"cn":[947456,120544]}], +"textures/segment2/segment2_cn.1D6F0.ia1.png": [16,8,16,{"cn":[947456,120560]}], +"textures/segment2/segment2_cn.1D700.ia1.png": [16,8,16,{"cn":[947456,120576]}], +"textures/segment2/segment2_cn.1D710.ia1.png": [16,8,16,{"cn":[947456,120592]}], +"textures/segment2/segment2_cn.1D720.ia1.png": [16,8,16,{"cn":[947456,120608]}], +"textures/segment2/segment2_cn.1D730.ia1.png": [16,8,16,{"cn":[947456,120624]}], +"textures/segment2/segment2_cn.1D740.ia1.png": [16,8,16,{"cn":[947456,120640]}], +"textures/segment2/segment2_cn.1D750.ia1.png": [16,8,16,{"cn":[947456,120656]}], +"textures/segment2/segment2_cn.1D760.ia1.png": [16,8,16,{"cn":[947456,120672]}], +"textures/segment2/segment2_cn.1D770.ia1.png": [16,8,16,{"cn":[947456,120688]}], +"textures/segment2/segment2_cn.1D780.ia1.png": [16,8,16,{"cn":[947456,120704]}], +"textures/segment2/segment2_cn.1D790.ia1.png": [16,8,16,{"cn":[947456,120720]}], +"textures/segment2/segment2_cn.1D7A0.ia1.png": [16,8,16,{"cn":[947456,120736]}], +"textures/segment2/segment2_cn.1D7B0.ia1.png": [16,8,16,{"cn":[947456,120752]}], +"textures/segment2/segment2_cn.1D7C0.ia1.png": [16,8,16,{"cn":[947456,120768]}], +"textures/segment2/segment2_cn.1D7D0.ia1.png": [16,8,16,{"cn":[947456,120784]}], +"textures/segment2/segment2_cn.1D7E0.ia1.png": [16,8,16,{"cn":[947456,120800]}], +"textures/segment2/segment2_cn.1D7F0.ia1.png": [16,8,16,{"cn":[947456,120816]}], +"textures/segment2/segment2_cn.1D800.ia1.png": [16,8,16,{"cn":[947456,120832]}], +"textures/segment2/segment2_cn.1D810.ia1.png": [16,8,16,{"cn":[947456,120848]}], +"textures/segment2/segment2_cn.1D820.ia1.png": [16,8,16,{"cn":[947456,120864]}], +"textures/segment2/segment2_cn.1D830.ia1.png": [16,8,16,{"cn":[947456,120880]}], +"textures/segment2/segment2_cn.1D840.ia1.png": [16,8,16,{"cn":[947456,120896]}], +"textures/segment2/segment2_cn.1D850.ia1.png": [16,8,16,{"cn":[947456,120912]}], +"textures/segment2/segment2_cn.1D860.ia1.png": [16,8,16,{"cn":[947456,120928]}], +"textures/segment2/segment2_cn.1D870.ia1.png": [16,8,16,{"cn":[947456,120944]}], +"textures/segment2/segment2_cn.1D880.ia1.png": [16,8,16,{"cn":[947456,120960]}], +"textures/segment2/segment2_cn.1D890.ia1.png": [16,8,16,{"cn":[947456,120976]}], +"textures/segment2/segment2_cn.1D8A0.ia1.png": [16,8,16,{"cn":[947456,120992]}], +"textures/segment2/segment2_cn.1D8B0.ia1.png": [16,8,16,{"cn":[947456,121008]}], +"textures/segment2/segment2_cn.1D8C0.ia1.png": [16,8,16,{"cn":[947456,121024]}], +"textures/segment2/segment2_cn.1D8D0.ia1.png": [16,8,16,{"cn":[947456,121040]}], +"textures/segment2/segment2_cn.1D8E0.ia1.png": [16,8,16,{"cn":[947456,121056]}], +"textures/segment2/segment2_cn.1D8F0.ia1.png": [16,8,16,{"cn":[947456,121072]}], +"textures/segment2/segment2_cn.1D900.ia1.png": [16,8,16,{"cn":[947456,121088]}], +"textures/segment2/segment2_cn.1D910.ia1.png": [16,8,16,{"cn":[947456,121104]}], +"textures/segment2/segment2_cn.1D920.ia1.png": [16,8,16,{"cn":[947456,121120]}], +"textures/segment2/segment2_cn.1D930.ia1.png": [16,8,16,{"cn":[947456,121136]}], +"textures/segment2/segment2_cn.1D940.ia1.png": [16,8,16,{"cn":[947456,121152]}], +"textures/segment2/segment2_cn.1D950.ia1.png": [16,8,16,{"cn":[947456,121168]}], +"textures/segment2/segment2_cn.1D960.ia1.png": [16,8,16,{"cn":[947456,121184]}], +"textures/segment2/segment2_cn.1D970.ia1.png": [16,8,16,{"cn":[947456,121200]}], +"textures/segment2/segment2_cn.1D980.ia1.png": [16,8,16,{"cn":[947456,121216]}], +"textures/segment2/segment2_cn.1D990.ia1.png": [16,8,16,{"cn":[947456,121232]}], +"textures/segment2/segment2_cn.1D9A0.ia1.png": [16,8,16,{"cn":[947456,121248]}], +"textures/segment2/segment2_cn.1D9B0.ia1.png": [16,8,16,{"cn":[947456,121264]}], +"textures/segment2/segment2_cn.1D9C0.ia1.png": [16,8,16,{"cn":[947456,121280]}], +"textures/segment2/segment2_cn.1D9D0.ia1.png": [16,8,16,{"cn":[947456,121296]}], +"textures/segment2/segment2_cn.1D9E0.ia1.png": [16,8,16,{"cn":[947456,121312]}], +"textures/segment2/segment2_cn.1D9F0.ia1.png": [16,8,16,{"cn":[947456,121328]}], +"textures/segment2/segment2_cn.1DA00.ia1.png": [16,8,16,{"cn":[947456,121344]}], +"textures/segment2/segment2_cn.1DA10.ia1.png": [16,8,16,{"cn":[947456,121360]}], +"textures/segment2/segment2_cn.1DA20.ia1.png": [16,8,16,{"cn":[947456,121376]}], +"textures/segment2/segment2_cn.1DA30.ia1.png": [16,8,16,{"cn":[947456,121392]}], +"textures/segment2/segment2_cn.1DA40.ia1.png": [16,8,16,{"cn":[947456,121408]}], +"textures/segment2/segment2_cn.1DA50.ia1.png": [16,8,16,{"cn":[947456,121424]}], +"textures/segment2/segment2_cn.1DA60.ia1.png": [16,8,16,{"cn":[947456,121440]}], +"textures/segment2/segment2_cn.1DA70.ia1.png": [16,8,16,{"cn":[947456,121456]}], +"textures/segment2/segment2_cn.1DA80.ia1.png": [16,8,16,{"cn":[947456,121472]}], +"textures/segment2/segment2_cn.1DA90.ia1.png": [16,8,16,{"cn":[947456,121488]}], +"textures/segment2/segment2_cn.1DAA0.ia1.png": [16,8,16,{"cn":[947456,121504]}], +"textures/segment2/segment2_cn.1DAB0.ia1.png": [16,8,16,{"cn":[947456,121520]}], +"textures/segment2/segment2_cn.1DAC0.ia1.png": [16,8,16,{"cn":[947456,121536]}], +"textures/segment2/segment2_cn.1DAD0.ia1.png": [16,8,16,{"cn":[947456,121552]}], +"textures/segment2/segment2_cn.1DAE0.ia1.png": [16,8,16,{"cn":[947456,121568]}], +"textures/segment2/segment2_cn.1DAF0.ia1.png": [16,8,16,{"cn":[947456,121584]}], +"textures/segment2/segment2_cn.1DB00.ia1.png": [16,8,16,{"cn":[947456,121600]}], +"textures/segment2/segment2_cn.1DB10.ia1.png": [16,8,16,{"cn":[947456,121616]}], +"textures/segment2/segment2_cn.1DB20.ia1.png": [16,8,16,{"cn":[947456,121632]}], +"textures/segment2/segment2_cn.1DB30.ia1.png": [16,8,16,{"cn":[947456,121648]}], +"textures/segment2/segment2_cn.1DB40.ia1.png": [16,8,16,{"cn":[947456,121664]}], +"textures/segment2/segment2_cn.1DB50.ia1.png": [16,8,16,{"cn":[947456,121680]}], +"textures/segment2/segment2_cn.1DB60.ia1.png": [16,8,16,{"cn":[947456,121696]}], +"textures/segment2/segment2_cn.1DB70.ia1.png": [16,8,16,{"cn":[947456,121712]}], +"textures/segment2/segment2_cn.1DB80.ia1.png": [16,8,16,{"cn":[947456,121728]}], +"textures/segment2/segment2_cn.1DB90.ia1.png": [16,8,16,{"cn":[947456,121744]}], +"textures/segment2/segment2_cn.1DBA0.ia1.png": [16,8,16,{"cn":[947456,121760]}], +"textures/segment2/segment2_cn.1DBB0.ia1.png": [16,8,16,{"cn":[947456,121776]}], +"textures/segment2/segment2_cn.1DBC0.ia1.png": [16,8,16,{"cn":[947456,121792]}], +"textures/segment2/segment2_cn.1DBD0.ia1.png": [16,8,16,{"cn":[947456,121808]}], +"textures/segment2/segment2_cn.1DBE0.ia1.png": [16,8,16,{"cn":[947456,121824]}], +"textures/segment2/segment2_cn.1DBF0.ia1.png": [16,8,16,{"cn":[947456,121840]}], +"textures/segment2/segment2_cn.1DC00.ia1.png": [16,8,16,{"cn":[947456,121856]}], +"textures/segment2/segment2_cn.1DC10.ia1.png": [16,8,16,{"cn":[947456,121872]}], +"textures/segment2/segment2_cn.1DC20.ia1.png": [16,8,16,{"cn":[947456,121888]}], +"textures/segment2/segment2_cn.1DC30.ia1.png": [16,8,16,{"cn":[947456,121904]}], +"textures/segment2/segment2_cn.1DC40.ia1.png": [16,8,16,{"cn":[947456,121920]}], +"textures/segment2/segment2_cn.1DC50.ia1.png": [16,8,16,{"cn":[947456,121936]}], +"textures/segment2/segment2_cn.1DC60.ia1.png": [16,8,16,{"cn":[947456,121952]}], +"textures/segment2/segment2_cn.1DC70.ia1.png": [16,8,16,{"cn":[947456,121968]}], +"textures/segment2/segment2_cn.1DC80.ia1.png": [16,8,16,{"cn":[947456,121984]}], +"textures/segment2/segment2_cn.1DC90.ia1.png": [16,8,16,{"cn":[947456,122000]}], +"textures/segment2/segment2_cn.1DCA0.ia1.png": [16,8,16,{"cn":[947456,122016]}], +"textures/segment2/segment2_cn.1DCB0.ia1.png": [16,8,16,{"cn":[947456,122032]}], +"textures/segment2/segment2_cn.1DCC0.ia1.png": [16,8,16,{"cn":[947456,122048]}], +"textures/segment2/segment2_cn.1DCD0.ia1.png": [16,8,16,{"cn":[947456,122064]}], +"textures/segment2/segment2_cn.1DCE0.ia1.png": [16,8,16,{"cn":[947456,122080]}], +"textures/segment2/segment2_cn.1DCF0.ia1.png": [16,8,16,{"cn":[947456,122096]}], +"textures/segment2/segment2_cn.1DD00.ia1.png": [16,8,16,{"cn":[947456,122112]}], +"textures/segment2/segment2_cn.1DD10.ia1.png": [16,8,16,{"cn":[947456,122128]}], +"textures/segment2/segment2_cn.1DD20.ia1.png": [16,8,16,{"cn":[947456,122144]}], +"textures/segment2/segment2_cn.1DD30.ia1.png": [16,8,16,{"cn":[947456,122160]}], +"textures/segment2/segment2_cn.1DD40.ia1.png": [16,8,16,{"cn":[947456,122176]}], +"textures/segment2/segment2_cn.1DD50.ia1.png": [16,8,16,{"cn":[947456,122192]}], +"textures/segment2/segment2_cn.1DD60.ia1.png": [16,8,16,{"cn":[947456,122208]}], +"textures/segment2/segment2_cn.1DD70.ia1.png": [16,8,16,{"cn":[947456,122224]}], +"textures/segment2/segment2_cn.1DD80.ia1.png": [16,8,16,{"cn":[947456,122240]}], +"textures/segment2/segment2_cn.1DD90.ia1.png": [16,8,16,{"cn":[947456,122256]}], +"textures/segment2/segment2_cn.1DDA0.ia1.png": [16,8,16,{"cn":[947456,122272]}], +"textures/segment2/segment2_cn.1DDB0.ia1.png": [16,8,16,{"cn":[947456,122288]}], +"textures/segment2/segment2_cn.1DDC0.ia1.png": [16,8,16,{"cn":[947456,122304]}], +"textures/segment2/segment2_cn.1DDD0.ia1.png": [16,8,16,{"cn":[947456,122320]}], +"textures/segment2/segment2_cn.1DDE0.ia1.png": [16,8,16,{"cn":[947456,122336]}], +"textures/segment2/segment2_cn.1DDF0.ia1.png": [16,8,16,{"cn":[947456,122352]}], +"textures/segment2/segment2_cn.1DE00.ia1.png": [16,8,16,{"cn":[947456,122368]}], +"textures/segment2/segment2_cn.1DE10.ia1.png": [16,8,16,{"cn":[947456,122384]}], +"textures/segment2/segment2_cn.1DE20.ia1.png": [16,8,16,{"cn":[947456,122400]}], +"textures/segment2/segment2_cn.1DE30.ia1.png": [16,8,16,{"cn":[947456,122416]}], +"textures/segment2/segment2_cn.1DE40.ia1.png": [16,8,16,{"cn":[947456,122432]}], +"textures/segment2/segment2_cn.1DE50.ia1.png": [16,8,16,{"cn":[947456,122448]}], +"textures/segment2/segment2_cn.1DE60.ia1.png": [16,8,16,{"cn":[947456,122464]}], +"textures/segment2/segment2_cn.1DE70.ia1.png": [16,8,16,{"cn":[947456,122480]}], +"textures/segment2/segment2_cn.1DE80.ia1.png": [16,8,16,{"cn":[947456,122496]}], +"textures/segment2/segment2_cn.1DE90.ia1.png": [16,8,16,{"cn":[947456,122512]}], +"textures/segment2/segment2_cn.1DEA0.ia1.png": [16,8,16,{"cn":[947456,122528]}], +"textures/segment2/segment2_cn.1DEB0.ia1.png": [16,8,16,{"cn":[947456,122544]}], +"textures/segment2/segment2_cn.1DEC0.ia1.png": [16,8,16,{"cn":[947456,122560]}], +"textures/segment2/segment2_cn.1DED0.ia1.png": [16,8,16,{"cn":[947456,122576]}], +"textures/segment2/segment2_cn.1DEE0.ia1.png": [16,8,16,{"cn":[947456,122592]}], +"textures/segment2/segment2_cn.1DEF0.ia1.png": [16,8,16,{"cn":[947456,122608]}], +"textures/segment2/segment2_cn.1DF00.ia1.png": [16,8,16,{"cn":[947456,122624]}], +"textures/segment2/segment2_cn.1DF10.ia1.png": [16,8,16,{"cn":[947456,122640]}], +"textures/segment2/segment2_cn.1DF20.ia1.png": [16,8,16,{"cn":[947456,122656]}], +"textures/segment2/segment2_cn.1DF30.ia1.png": [16,8,16,{"cn":[947456,122672]}], +"textures/segment2/segment2_cn.1DF40.ia1.png": [16,8,16,{"cn":[947456,122688]}], +"textures/segment2/segment2_cn.1DF50.ia1.png": [16,8,16,{"cn":[947456,122704]}], +"textures/segment2/segment2_cn.1DF60.ia1.png": [16,8,16,{"cn":[947456,122720]}], +"textures/segment2/segment2_cn.1DF70.ia1.png": [16,8,16,{"cn":[947456,122736]}], +"textures/segment2/segment2_cn.1DF80.ia1.png": [16,8,16,{"cn":[947456,122752]}], +"textures/segment2/segment2_cn.1DF90.ia1.png": [16,8,16,{"cn":[947456,122768]}], +"textures/segment2/segment2_cn.1DFA0.ia1.png": [16,8,16,{"cn":[947456,122784]}], +"textures/segment2/segment2_cn.1DFB0.ia1.png": [16,8,16,{"cn":[947456,122800]}], +"textures/segment2/segment2_cn.1DFC0.ia1.png": [16,8,16,{"cn":[947456,122816]}], +"textures/segment2/segment2_cn.1DFD0.ia1.png": [16,8,16,{"cn":[947456,122832]}], +"textures/segment2/segment2_cn.1DFE0.ia1.png": [16,8,16,{"cn":[947456,122848]}], +"textures/segment2/segment2_cn.1DFF0.ia1.png": [16,8,16,{"cn":[947456,122864]}], +"textures/segment2/segment2_cn.1E000.ia1.png": [16,8,16,{"cn":[947456,122880]}], +"textures/segment2/segment2_cn.1E010.ia1.png": [16,8,16,{"cn":[947456,122896]}], +"textures/segment2/segment2_cn.1E020.ia1.png": [16,8,16,{"cn":[947456,122912]}], +"textures/segment2/segment2_cn.1E030.ia1.png": [16,8,16,{"cn":[947456,122928]}], +"textures/segment2/segment2_cn.1E040.ia1.png": [16,8,16,{"cn":[947456,122944]}], +"textures/segment2/segment2_cn.1E050.ia1.png": [16,8,16,{"cn":[947456,122960]}], +"textures/segment2/segment2_cn.1E060.ia1.png": [16,8,16,{"cn":[947456,122976]}], +"textures/segment2/segment2_cn.1E070.ia1.png": [16,8,16,{"cn":[947456,122992]}], +"textures/segment2/segment2_cn.1E080.ia1.png": [16,8,16,{"cn":[947456,123008]}], +"textures/segment2/segment2_cn.1E090.ia1.png": [16,8,16,{"cn":[947456,123024]}], +"textures/segment2/segment2_cn.1E0A0.ia1.png": [16,8,16,{"cn":[947456,123040]}], +"textures/segment2/segment2_cn.1E0B0.ia1.png": [16,8,16,{"cn":[947456,123056]}], +"textures/segment2/segment2_cn.1E0C0.ia1.png": [16,8,16,{"cn":[947456,123072]}], +"textures/segment2/segment2_cn.1E0D0.ia1.png": [16,8,16,{"cn":[947456,123088]}], +"textures/segment2/segment2_cn.1E0E0.ia1.png": [16,8,16,{"cn":[947456,123104]}], +"textures/segment2/segment2_cn.1E0F0.ia1.png": [16,8,16,{"cn":[947456,123120]}], +"textures/segment2/segment2_cn.1E100.ia1.png": [16,8,16,{"cn":[947456,123136]}], +"textures/segment2/segment2_cn.1E110.ia1.png": [16,8,16,{"cn":[947456,123152]}], +"textures/segment2/segment2_cn.1E120.ia1.png": [16,8,16,{"cn":[947456,123168]}], +"textures/segment2/segment2_cn.1E130.ia1.png": [16,8,16,{"cn":[947456,123184]}], +"textures/segment2/segment2_cn.1E140.ia1.png": [16,8,16,{"cn":[947456,123200]}], +"textures/segment2/segment2_cn.1E150.ia1.png": [16,8,16,{"cn":[947456,123216]}], +"textures/segment2/segment2_cn.1E160.ia1.png": [16,8,16,{"cn":[947456,123232]}], +"textures/segment2/segment2_cn.1E170.ia1.png": [16,8,16,{"cn":[947456,123248]}], +"textures/segment2/segment2_cn.1E180.ia1.png": [16,8,16,{"cn":[947456,123264]}], +"textures/segment2/segment2_cn.1E190.ia1.png": [16,8,16,{"cn":[947456,123280]}], +"textures/segment2/segment2_cn.1E1A0.ia1.png": [16,8,16,{"cn":[947456,123296]}], +"textures/segment2/segment2_cn.1E1B0.ia1.png": [16,8,16,{"cn":[947456,123312]}], +"textures/segment2/segment2_cn.1E1C0.ia1.png": [16,8,16,{"cn":[947456,123328]}], +"textures/segment2/segment2_cn.1E1D0.ia1.png": [16,8,16,{"cn":[947456,123344]}], +"textures/segment2/segment2_cn.1E1E0.ia1.png": [16,8,16,{"cn":[947456,123360]}], +"textures/segment2/segment2_cn.1E1F0.ia1.png": [16,8,16,{"cn":[947456,123376]}], +"textures/segment2/segment2_cn.1E200.ia1.png": [16,8,16,{"cn":[947456,123392]}], +"textures/segment2/segment2_cn.1E210.ia1.png": [16,8,16,{"cn":[947456,123408]}], +"textures/segment2/segment2_cn.1E220.ia1.png": [16,8,16,{"cn":[947456,123424]}], +"textures/segment2/segment2_cn.1E230.ia1.png": [16,8,16,{"cn":[947456,123440]}], +"textures/segment2/segment2_cn.1E240.ia1.png": [16,8,16,{"cn":[947456,123456]}], +"textures/segment2/segment2_cn.1E250.ia1.png": [16,8,16,{"cn":[947456,123472]}], +"textures/segment2/segment2_cn.1E260.ia1.png": [16,8,16,{"cn":[947456,123488]}], +"textures/segment2/segment2_cn.1E270.ia1.png": [16,8,16,{"cn":[947456,123504]}], +"textures/segment2/segment2_cn.1E280.ia1.png": [16,8,16,{"cn":[947456,123520]}], +"textures/segment2/segment2_cn.1E290.ia1.png": [16,8,16,{"cn":[947456,123536]}], +"textures/segment2/segment2_cn.1E2A0.ia1.png": [16,8,16,{"cn":[947456,123552]}], +"textures/segment2/segment2_cn.1E2B0.ia1.png": [16,8,16,{"cn":[947456,123568]}], +"textures/segment2/segment2_cn.1E2C0.ia1.png": [16,8,16,{"cn":[947456,123584]}], +"textures/segment2/segment2_cn.1E2D0.ia1.png": [16,8,16,{"cn":[947456,123600]}], +"textures/segment2/segment2_cn.1E2E0.ia1.png": [16,8,16,{"cn":[947456,123616]}], +"textures/segment2/segment2_cn.1E2F0.ia1.png": [16,8,16,{"cn":[947456,123632]}], +"textures/segment2/segment2_cn.1E300.ia1.png": [16,8,16,{"cn":[947456,123648]}], +"textures/segment2/segment2_cn.1E310.ia1.png": [16,8,16,{"cn":[947456,123664]}], +"textures/segment2/segment2_cn.1E320.ia1.png": [16,8,16,{"cn":[947456,123680]}], +"textures/segment2/segment2_cn.1E330.ia1.png": [16,8,16,{"cn":[947456,123696]}], +"textures/segment2/segment2_cn.1E340.ia1.png": [16,8,16,{"cn":[947456,123712]}], +"textures/segment2/segment2_cn.1E350.ia1.png": [16,8,16,{"cn":[947456,123728]}], +"textures/segment2/segment2_cn.1E360.ia1.png": [16,8,16,{"cn":[947456,123744]}], +"textures/segment2/segment2_cn.1E370.ia1.png": [16,8,16,{"cn":[947456,123760]}], +"textures/segment2/segment2_cn.1E380.ia1.png": [16,8,16,{"cn":[947456,123776]}], +"textures/segment2/segment2_cn.1E390.ia1.png": [16,8,16,{"cn":[947456,123792]}], +"textures/segment2/segment2_cn.1E3A0.ia1.png": [16,8,16,{"cn":[947456,123808]}], +"textures/segment2/segment2_cn.1E3B0.ia1.png": [16,8,16,{"cn":[947456,123824]}], +"textures/segment2/segment2_cn.1E3C0.ia1.png": [16,8,16,{"cn":[947456,123840]}], +"textures/segment2/segment2_cn.1E3D0.ia1.png": [16,8,16,{"cn":[947456,123856]}], +"textures/segment2/segment2_cn.1E3E0.ia1.png": [16,8,16,{"cn":[947456,123872]}], +"textures/segment2/segment2_cn.1E3F0.ia1.png": [16,8,16,{"cn":[947456,123888]}], +"textures/segment2/segment2_cn.1E400.ia1.png": [16,8,16,{"cn":[947456,123904]}], +"textures/segment2/segment2_cn.1E410.ia1.png": [16,8,16,{"cn":[947456,123920]}], +"textures/segment2/segment2_cn.1E420.ia1.png": [16,8,16,{"cn":[947456,123936]}], +"textures/segment2/segment2_cn.1E430.ia1.png": [16,8,16,{"cn":[947456,123952]}], +"textures/segment2/segment2_cn.1E440.ia1.png": [16,8,16,{"cn":[947456,123968]}], +"textures/segment2/segment2_cn.1E450.ia1.png": [16,8,16,{"cn":[947456,123984]}], +"textures/segment2/segment2_cn.1E460.ia1.png": [16,8,16,{"cn":[947456,124000]}], +"textures/segment2/segment2_cn.1E470.ia1.png": [16,8,16,{"cn":[947456,124016]}], +"textures/segment2/segment2_cn.1E480.ia1.png": [16,8,16,{"cn":[947456,124032]}], +"textures/segment2/segment2_cn.1E490.ia1.png": [16,8,16,{"cn":[947456,124048]}], +"textures/segment2/segment2_cn.1E4A0.ia1.png": [16,8,16,{"cn":[947456,124064]}], +"textures/segment2/segment2_cn.1E4B0.ia1.png": [16,8,16,{"cn":[947456,124080]}], +"textures/segment2/segment2_cn.1E4C0.ia1.png": [16,8,16,{"cn":[947456,124096]}], +"textures/segment2/segment2_cn.1E4D0.ia1.png": [16,8,16,{"cn":[947456,124112]}], +"textures/segment2/segment2_cn.1E4E0.ia1.png": [16,8,16,{"cn":[947456,124128]}], +"textures/segment2/segment2_cn.1E4F0.ia1.png": [16,8,16,{"cn":[947456,124144]}], +"textures/segment2/segment2_cn.1E500.ia1.png": [16,8,16,{"cn":[947456,124160]}], +"textures/segment2/segment2_cn.1E510.ia1.png": [16,8,16,{"cn":[947456,124176]}], +"textures/segment2/segment2_cn.1E520.ia1.png": [16,8,16,{"cn":[947456,124192]}], +"textures/segment2/segment2_cn.1E530.ia1.png": [16,8,16,{"cn":[947456,124208]}], +"textures/segment2/segment2_cn.1E540.ia1.png": [16,8,16,{"cn":[947456,124224]}], +"textures/segment2/segment2_cn.1E550.ia1.png": [16,8,16,{"cn":[947456,124240]}], +"textures/segment2/segment2_cn.1E560.ia1.png": [16,8,16,{"cn":[947456,124256]}], +"textures/segment2/segment2_cn.1E570.ia1.png": [16,8,16,{"cn":[947456,124272]}], +"textures/segment2/segment2_cn.1E580.ia1.png": [16,8,16,{"cn":[947456,124288]}], +"textures/segment2/segment2_cn.1E590.ia1.png": [16,8,16,{"cn":[947456,124304]}], +"textures/segment2/segment2_cn.1E5A0.ia1.png": [16,8,16,{"cn":[947456,124320]}], +"textures/segment2/segment2_cn.1E5B0.ia1.png": [16,8,16,{"cn":[947456,124336]}], +"textures/segment2/segment2_cn.1E5C0.ia1.png": [16,8,16,{"cn":[947456,124352]}], +"textures/segment2/segment2_cn.1E5D0.ia1.png": [16,8,16,{"cn":[947456,124368]}], +"textures/segment2/segment2_cn.1E5E0.ia1.png": [16,8,16,{"cn":[947456,124384]}], +"textures/segment2/segment2_cn.1E5F0.ia1.png": [16,8,16,{"cn":[947456,124400]}], +"textures/segment2/segment2_cn.1E600.ia1.png": [16,8,16,{"cn":[947456,124416]}], +"textures/segment2/segment2_cn.1E610.ia1.png": [16,8,16,{"cn":[947456,124432]}], +"textures/segment2/segment2_cn.1E620.ia1.png": [16,8,16,{"cn":[947456,124448]}], +"textures/segment2/segment2_cn.1E630.ia1.png": [16,8,16,{"cn":[947456,124464]}], +"textures/segment2/segment2_cn.1E640.ia1.png": [16,8,16,{"cn":[947456,124480]}], +"textures/segment2/segment2_cn.1E650.ia1.png": [16,8,16,{"cn":[947456,124496]}], +"textures/segment2/segment2_cn.1E660.ia1.png": [16,8,16,{"cn":[947456,124512]}], +"textures/segment2/segment2_cn.1E670.ia1.png": [16,8,16,{"cn":[947456,124528]}], +"textures/segment2/segment2_cn.1E680.ia1.png": [16,8,16,{"cn":[947456,124544]}], +"textures/segment2/segment2_cn.1E690.ia1.png": [16,8,16,{"cn":[947456,124560]}], +"textures/segment2/segment2_cn.1E6A0.ia1.png": [16,8,16,{"cn":[947456,124576]}], +"textures/segment2/segment2_cn.1E6B0.ia1.png": [16,8,16,{"cn":[947456,124592]}], +"textures/segment2/segment2_cn.1E6C0.ia1.png": [16,8,16,{"cn":[947456,124608]}], +"textures/segment2/segment2_cn.1E6D0.ia1.png": [16,8,16,{"cn":[947456,124624]}], +"textures/segment2/segment2_cn.1E6E0.ia1.png": [16,8,16,{"cn":[947456,124640]}], +"textures/segment2/segment2_cn.1E6F0.ia1.png": [16,8,16,{"cn":[947456,124656]}], +"textures/segment2/segment2_cn.1E700.ia1.png": [16,8,16,{"cn":[947456,124672]}], +"textures/segment2/segment2_cn.1E710.ia1.png": [16,8,16,{"cn":[947456,124688]}], +"textures/segment2/segment2_cn.1E720.ia1.png": [16,8,16,{"cn":[947456,124704]}], +"textures/segment2/segment2_cn.1E730.ia1.png": [16,8,16,{"cn":[947456,124720]}], +"textures/segment2/segment2_cn.1E740.ia1.png": [16,8,16,{"cn":[947456,124736]}], +"textures/segment2/segment2_cn.1E750.ia1.png": [16,8,16,{"cn":[947456,124752]}], +"textures/segment2/segment2_cn.1E760.ia1.png": [16,8,16,{"cn":[947456,124768]}], +"textures/segment2/segment2_cn.1E770.ia1.png": [16,8,16,{"cn":[947456,124784]}], +"textures/segment2/segment2_cn.1E780.ia1.png": [16,8,16,{"cn":[947456,124800]}], +"textures/segment2/segment2_cn.1E790.ia1.png": [16,8,16,{"cn":[947456,124816]}], +"textures/segment2/segment2_cn.1E7A0.ia1.png": [16,8,16,{"cn":[947456,124832]}], +"textures/segment2/segment2_cn.1E7B0.ia1.png": [16,8,16,{"cn":[947456,124848]}], +"textures/segment2/segment2_cn.1E7C0.ia1.png": [16,8,16,{"cn":[947456,124864]}], +"textures/segment2/segment2_cn.1E7D0.ia1.png": [16,8,16,{"cn":[947456,124880]}], +"textures/segment2/segment2_cn.1E7E0.ia1.png": [16,8,16,{"cn":[947456,124896]}], +"textures/segment2/segment2_cn.1E7F0.ia1.png": [16,8,16,{"cn":[947456,124912]}], +"textures/segment2/segment2_cn.1E800.ia1.png": [16,8,16,{"cn":[947456,124928]}], +"textures/segment2/segment2_cn.1E810.ia1.png": [16,8,16,{"cn":[947456,124944]}], +"textures/segment2/segment2_cn.1E820.ia1.png": [16,8,16,{"cn":[947456,124960]}], +"textures/segment2/segment2_cn.1E830.ia1.png": [16,8,16,{"cn":[947456,124976]}], +"textures/segment2/segment2_cn.1E840.ia1.png": [16,8,16,{"cn":[947456,124992]}], +"textures/segment2/segment2_cn.1E850.ia1.png": [16,8,16,{"cn":[947456,125008]}], +"textures/segment2/segment2_cn.1E860.ia1.png": [16,8,16,{"cn":[947456,125024]}], +"textures/segment2/segment2_cn.1E870.ia1.png": [16,8,16,{"cn":[947456,125040]}], +"textures/segment2/segment2_cn.1E880.ia1.png": [16,8,16,{"cn":[947456,125056]}], +"textures/segment2/segment2_cn.1E890.ia1.png": [16,8,16,{"cn":[947456,125072]}], +"textures/segment2/segment2_cn.1E8A0.ia1.png": [16,8,16,{"cn":[947456,125088]}], +"textures/segment2/segment2_cn.1E8B0.ia1.png": [16,8,16,{"cn":[947456,125104]}], +"textures/segment2/segment2_cn.1E8C0.ia1.png": [16,8,16,{"cn":[947456,125120]}], +"textures/segment2/segment2_cn.1E8D0.ia1.png": [16,8,16,{"cn":[947456,125136]}], +"textures/segment2/segment2_cn.1E8E0.ia1.png": [16,8,16,{"cn":[947456,125152]}], +"textures/segment2/segment2_cn.1E8F0.ia1.png": [16,8,16,{"cn":[947456,125168]}], +"textures/segment2/segment2_cn.1E900.ia1.png": [16,8,16,{"cn":[947456,125184]}], +"textures/segment2/segment2_cn.1E910.ia1.png": [16,8,16,{"cn":[947456,125200]}], +"textures/segment2/segment2_cn.1E920.ia1.png": [16,8,16,{"cn":[947456,125216]}], +"textures/segment2/segment2_cn.1E930.ia1.png": [16,8,16,{"cn":[947456,125232]}], +"textures/segment2/segment2_cn.1E940.ia1.png": [16,8,16,{"cn":[947456,125248]}], +"textures/segment2/segment2_cn.1E950.ia1.png": [16,8,16,{"cn":[947456,125264]}], +"textures/segment2/segment2_cn.1E960.ia1.png": [16,8,16,{"cn":[947456,125280]}], +"textures/segment2/segment2_cn.1E970.ia1.png": [16,8,16,{"cn":[947456,125296]}], +"textures/segment2/segment2_cn.1E980.ia1.png": [16,8,16,{"cn":[947456,125312]}], +"textures/segment2/segment2_cn.1E990.ia1.png": [16,8,16,{"cn":[947456,125328]}], +"textures/segment2/segment2_cn.1E9A0.ia1.png": [16,8,16,{"cn":[947456,125344]}], +"textures/segment2/segment2_cn.1E9B0.ia1.png": [16,8,16,{"cn":[947456,125360]}], +"textures/segment2/segment2_cn.1E9C0.ia1.png": [16,8,16,{"cn":[947456,125376]}], +"textures/segment2/segment2_cn.1E9D0.ia1.png": [16,8,16,{"cn":[947456,125392]}], +"textures/segment2/segment2_cn.1E9E0.ia1.png": [16,8,16,{"cn":[947456,125408]}], +"textures/segment2/segment2_cn.1E9F0.ia1.png": [16,8,16,{"cn":[947456,125424]}], +"textures/segment2/segment2_cn.1EA00.ia1.png": [16,8,16,{"cn":[947456,125440]}], +"textures/segment2/segment2_cn.1EA10.ia1.png": [16,8,16,{"cn":[947456,125456]}], +"textures/segment2/segment2_cn.1EA20.ia1.png": [16,8,16,{"cn":[947456,125472]}], +"textures/segment2/segment2_cn.1EA30.ia1.png": [16,8,16,{"cn":[947456,125488]}], +"textures/segment2/segment2_cn.1EA40.ia1.png": [16,8,16,{"cn":[947456,125504]}], +"textures/segment2/segment2_cn.1EA50.ia1.png": [16,8,16,{"cn":[947456,125520]}], +"textures/segment2/segment2_cn.1EA60.ia1.png": [16,8,16,{"cn":[947456,125536]}], +"textures/segment2/segment2_cn.1EA70.ia1.png": [16,8,16,{"cn":[947456,125552]}], +"textures/segment2/segment2_cn.1EA80.ia1.png": [16,8,16,{"cn":[947456,125568]}], +"textures/segment2/segment2_cn.1EA90.ia1.png": [16,8,16,{"cn":[947456,125584]}], +"textures/segment2/segment2_cn.1EAA0.ia1.png": [16,8,16,{"cn":[947456,125600]}], +"textures/segment2/segment2_cn.1EAB0.ia1.png": [16,8,16,{"cn":[947456,125616]}], +"textures/segment2/segment2_cn.1EAC0.ia1.png": [16,8,16,{"cn":[947456,125632]}], +"textures/segment2/segment2_cn.1EAD0.ia1.png": [16,8,16,{"cn":[947456,125648]}], +"textures/segment2/segment2_cn.1EAE0.ia1.png": [16,8,16,{"cn":[947456,125664]}], +"textures/segment2/segment2_cn.1EAF0.ia1.png": [16,8,16,{"cn":[947456,125680]}], +"textures/segment2/segment2_cn.1EB00.ia1.png": [16,8,16,{"cn":[947456,125696]}], +"textures/segment2/segment2_cn.1EB10.ia1.png": [16,8,16,{"cn":[947456,125712]}], +"textures/segment2/segment2_cn.1EB20.ia1.png": [16,8,16,{"cn":[947456,125728]}], +"textures/segment2/segment2_cn.1EB30.ia1.png": [16,8,16,{"cn":[947456,125744]}], +"textures/segment2/segment2_cn.1EB40.ia1.png": [16,8,16,{"cn":[947456,125760]}], +"textures/segment2/segment2_cn.1EB50.ia1.png": [16,8,16,{"cn":[947456,125776]}], +"textures/segment2/segment2_cn.1EB60.ia1.png": [16,8,16,{"cn":[947456,125792]}], +"textures/segment2/segment2_cn.1EB70.ia1.png": [16,8,16,{"cn":[947456,125808]}], +"textures/segment2/segment2_cn.1EB80.ia1.png": [16,8,16,{"cn":[947456,125824]}], +"textures/segment2/segment2_cn.1EB90.ia1.png": [16,8,16,{"cn":[947456,125840]}], +"textures/segment2/segment2_cn.1EBA0.ia1.png": [16,8,16,{"cn":[947456,125856]}], +"textures/segment2/segment2_cn.1EBB0.ia1.png": [16,8,16,{"cn":[947456,125872]}], +"textures/segment2/segment2_cn.1EBC0.ia1.png": [16,8,16,{"cn":[947456,125888]}], +"textures/segment2/segment2_cn.1EBD0.ia1.png": [16,8,16,{"cn":[947456,125904]}], +"textures/segment2/segment2_cn.1EBE0.ia1.png": [16,8,16,{"cn":[947456,125920]}], +"textures/segment2/segment2_cn.1EBF0.ia1.png": [16,8,16,{"cn":[947456,125936]}], +"textures/segment2/segment2_cn.1EC00.ia1.png": [16,8,16,{"cn":[947456,125952]}], +"textures/segment2/segment2_cn.1EC10.ia1.png": [16,8,16,{"cn":[947456,125968]}], +"textures/segment2/segment2_cn.1EC20.ia1.png": [16,8,16,{"cn":[947456,125984]}], +"textures/segment2/segment2_cn.1EC30.ia1.png": [16,8,16,{"cn":[947456,126000]}], +"textures/segment2/segment2_cn.1EC40.ia1.png": [16,8,16,{"cn":[947456,126016]}], +"textures/segment2/segment2_cn.1EC50.ia1.png": [16,8,16,{"cn":[947456,126032]}], +"textures/segment2/segment2_cn.1EC60.ia1.png": [16,8,16,{"cn":[947456,126048]}], +"textures/segment2/segment2_cn.1EC70.ia1.png": [16,8,16,{"cn":[947456,126064]}], +"textures/segment2/segment2_cn.1EC80.ia1.png": [16,8,16,{"cn":[947456,126080]}], +"textures/segment2/segment2_cn.1EC90.ia1.png": [16,8,16,{"cn":[947456,126096]}], +"textures/segment2/segment2_cn.1ECA0.ia1.png": [16,8,16,{"cn":[947456,126112]}], +"textures/segment2/segment2_cn.1ECB0.ia1.png": [16,8,16,{"cn":[947456,126128]}], +"textures/segment2/segment2_cn.1ECC0.ia1.png": [16,8,16,{"cn":[947456,126144]}], +"textures/segment2/segment2_cn.1ECD0.ia1.png": [16,8,16,{"cn":[947456,126160]}], +"textures/segment2/segment2_cn.1ECE0.ia1.png": [16,8,16,{"cn":[947456,126176]}], +"textures/segment2/segment2_cn.1ECF0.ia1.png": [16,8,16,{"cn":[947456,126192]}], +"textures/segment2/segment2_cn.1ED00.ia1.png": [16,8,16,{"cn":[947456,126208]}], +"textures/segment2/segment2_cn.1ED10.ia1.png": [16,8,16,{"cn":[947456,126224]}], +"textures/segment2/segment2_cn.1ED20.ia1.png": [16,8,16,{"cn":[947456,126240]}], +"textures/segment2/segment2_cn.1ED30.ia1.png": [16,8,16,{"cn":[947456,126256]}], +"textures/segment2/segment2_cn.1ED40.ia1.png": [16,8,16,{"cn":[947456,126272]}], +"textures/segment2/segment2_cn.1ED50.ia1.png": [16,8,16,{"cn":[947456,126288]}], +"textures/segment2/segment2_cn.1ED60.ia1.png": [16,8,16,{"cn":[947456,126304]}], +"textures/segment2/segment2_cn.1ED70.ia1.png": [16,8,16,{"cn":[947456,126320]}], +"textures/segment2/segment2_cn.1ED80.ia1.png": [16,8,16,{"cn":[947456,126336]}], +"textures/segment2/segment2_cn.1ED90.ia1.png": [16,8,16,{"cn":[947456,126352]}], +"textures/segment2/segment2_cn.1EDA0.ia1.png": [16,8,16,{"cn":[947456,126368]}], +"textures/segment2/segment2_cn.1EDB0.ia1.png": [16,8,16,{"cn":[947456,126384]}], +"textures/segment2/segment2_cn.1EDC0.ia1.png": [16,8,16,{"cn":[947456,126400]}], +"textures/segment2/segment2_cn.1EDD0.ia1.png": [16,8,16,{"cn":[947456,126416]}], +"textures/segment2/segment2_cn.1EDE0.ia1.png": [16,8,16,{"cn":[947456,126432]}], +"textures/segment2/segment2_cn.1EDF0.ia1.png": [16,8,16,{"cn":[947456,126448]}], +"textures/segment2/segment2_cn.1EE00.ia1.png": [16,8,16,{"cn":[947456,126464]}], +"textures/segment2/segment2_cn.1EE10.ia1.png": [16,8,16,{"cn":[947456,126480]}], +"textures/segment2/segment2_cn.1EE20.ia1.png": [16,8,16,{"cn":[947456,126496]}], +"textures/segment2/segment2_cn.1EE30.ia1.png": [16,8,16,{"cn":[947456,126512]}], +"textures/segment2/segment2_cn.1EE40.ia1.png": [16,8,16,{"cn":[947456,126528]}], +"textures/segment2/segment2_cn.1EE50.ia1.png": [16,8,16,{"cn":[947456,126544]}], +"textures/segment2/segment2_cn.1EE60.ia1.png": [16,8,16,{"cn":[947456,126560]}], +"textures/segment2/segment2_cn.1EE70.ia1.png": [16,8,16,{"cn":[947456,126576]}], +"textures/segment2/shadow_quarter_circle.ia8.png": [16,16,256,{"jp":[1078992,62040],"us":[1083968,73912],"eu":[909712,30584],"sh":[934640,62040],"cn":[947456,174376]}], +"textures/segment2/shadow_quarter_square.ia8.png": [16,16,256,{"jp":[1078992,62296],"us":[1083968,74168],"eu":[909712,30840],"sh":[934640,62296],"cn":[947456,174632]}], +"textures/sky/metal_hole.rgba16.png": [32,32,2048,{"jp":[3390640,26624],"us":[3397392,26624],"eu":[3270992,26624],"sh":[3245360,26624],"cn":[3319120,26624]}], +"textures/sky/rr_textures.00000.rgba16.png": [32,32,2048,{"jp":[3390640,0],"us":[3397392,0],"eu":[3270992,0],"sh":[3245360,0],"cn":[3319120,0]}], +"textures/sky/rr_textures.00800.rgba16.png": [32,32,2048,{"jp":[3390640,2048],"us":[3397392,2048],"eu":[3270992,2048],"sh":[3245360,2048],"cn":[3319120,2048]}], +"textures/sky/rr_textures.01000.rgba16.png": [32,32,2048,{"jp":[3390640,4096],"us":[3397392,4096],"eu":[3270992,4096],"sh":[3245360,4096],"cn":[3319120,4096]}], +"textures/sky/rr_textures.01800.rgba16.png": [32,32,2048,{"jp":[3390640,6144],"us":[3397392,6144],"eu":[3270992,6144],"sh":[3245360,6144],"cn":[3319120,6144]}], +"textures/sky/rr_textures.02000.rgba16.png": [32,64,4096,{"jp":[3390640,8192],"us":[3397392,8192],"eu":[3270992,8192],"sh":[3245360,8192],"cn":[3319120,8192]}], +"textures/sky/rr_textures.03000.rgba16.png": [32,32,2048,{"jp":[3390640,12288],"us":[3397392,12288],"eu":[3270992,12288],"sh":[3245360,12288],"cn":[3319120,12288]}], +"textures/sky/rr_textures.03800.rgba16.png": [64,32,4096,{"jp":[3390640,14336],"us":[3397392,14336],"eu":[3270992,14336],"sh":[3245360,14336],"cn":[3319120,14336]}], +"textures/sky/rr_textures.04800.rgba16.png": [32,32,2048,{"jp":[3390640,18432],"us":[3397392,18432],"eu":[3270992,18432],"sh":[3245360,18432],"cn":[3319120,18432]}], +"textures/sky/rr_textures.05000.rgba16.png": [32,32,2048,{"jp":[3390640,20480],"us":[3397392,20480],"eu":[3270992,20480],"sh":[3245360,20480],"cn":[3319120,20480]}], +"textures/sky/rr_textures.05800.rgba16.png": [32,32,2048,{"jp":[3390640,22528],"us":[3397392,22528],"eu":[3270992,22528],"sh":[3245360,22528],"cn":[3319120,22528]}], +"textures/sky/rr_textures.06000.rgba16.png": [32,32,2048,{"jp":[3390640,24576],"us":[3397392,24576],"eu":[3270992,24576],"sh":[3245360,24576],"cn":[3319120,24576]}], +"textures/sky/rr_textures.07000.rgba16.png": [32,32,2048,{"jp":[3390640,28672],"us":[3397392,28672],"eu":[3270992,28672],"sh":[3245360,28672],"cn":[3319120,28672]}], +"textures/sky/rr_textures.07800.rgba16.png": [32,32,2048,{"jp":[3390640,30720],"us":[3397392,30720],"eu":[3270992,30720],"sh":[3245360,30720],"cn":[3319120,30720]}], +"textures/sky/rr_textures.08000.rgba16.png": [32,32,2048,{"jp":[3390640,32768],"us":[3397392,32768],"eu":[3270992,32768],"sh":[3245360,32768],"cn":[3319120,32768]}], +"textures/snow/ccm_textures.00000.rgba16.png": [32,32,2048,{"jp":[3405536,0],"us":[3412288,0],"eu":[3285888,0],"sh":[3260256,0],"cn":[3334016,0]}], +"textures/snow/ccm_textures.00800.rgba16.png": [32,32,2048,{"jp":[3405536,2048],"us":[3412288,2048],"eu":[3285888,2048],"sh":[3260256,2048],"cn":[3334016,2048]}], +"textures/snow/ccm_textures.01000.rgba16.png": [32,64,4096,{"jp":[3405536,4096],"us":[3412288,4096],"eu":[3285888,4096],"sh":[3260256,4096],"cn":[3334016,4096]}], +"textures/snow/ccm_textures.02000.rgba16.png": [32,32,2048,{"jp":[3405536,8192],"us":[3412288,8192],"eu":[3285888,8192],"sh":[3260256,8192],"cn":[3334016,8192]}], +"textures/snow/ccm_textures.02800.rgba16.png": [32,32,2048,{"jp":[3405536,10240],"us":[3412288,10240],"eu":[3285888,10240],"sh":[3260256,10240],"cn":[3334016,10240]}], +"textures/snow/ccm_textures.03000.rgba16.png": [32,32,2048,{"jp":[3405536,12288],"us":[3412288,12288],"eu":[3285888,12288],"sh":[3260256,12288],"cn":[3334016,12288]}], +"textures/snow/ccm_textures.03800.rgba16.png": [32,32,2048,{"jp":[3405536,14336],"us":[3412288,14336],"eu":[3285888,14336],"sh":[3260256,14336],"cn":[3334016,14336]}], +"textures/snow/ccm_textures.04000.rgba16.png": [32,32,2048,{"jp":[3405536,16384],"us":[3412288,16384],"eu":[3285888,16384],"sh":[3260256,16384],"cn":[3334016,16384]}], +"textures/snow/ccm_textures.04800.rgba16.png": [32,32,2048,{"jp":[3405536,18432],"us":[3412288,18432],"eu":[3285888,18432],"sh":[3260256,18432],"cn":[3334016,18432]}], +"textures/snow/ccm_textures.05000.rgba16.png": [32,32,2048,{"jp":[3405536,20480],"us":[3412288,20480],"eu":[3285888,20480],"sh":[3260256,20480],"cn":[3334016,20480]}], +"textures/snow/ccm_textures.05800.rgba16.png": [32,32,2048,{"jp":[3405536,22528],"us":[3412288,22528],"eu":[3285888,22528],"sh":[3260256,22528],"cn":[3334016,22528]}], +"textures/snow/ccm_textures.06000.rgba16.png": [32,32,2048,{"jp":[3405536,24576],"us":[3412288,24576],"eu":[3285888,24576],"sh":[3260256,24576],"cn":[3334016,24576]}], +"textures/snow/ccm_textures.06800.rgba16.png": [32,32,2048,{"jp":[3405536,26624],"us":[3412288,26624],"eu":[3285888,26624],"sh":[3260256,26624],"cn":[3334016,26624]}], +"textures/snow/ccm_textures.07000.rgba16.png": [64,32,4096,{"jp":[3405536,28672],"us":[3412288,28672],"eu":[3285888,28672],"sh":[3260256,28672],"cn":[3334016,28672]}], +"textures/snow/ccm_textures.08000.rgba16.png": [32,32,2048,{"jp":[3405536,32768],"us":[3412288,32768],"eu":[3285888,32768],"sh":[3260256,32768],"cn":[3334016,32768]}], +"textures/snow/ccm_textures.08800.rgba16.png": [32,32,2048,{"jp":[3405536,34816],"us":[3412288,34816],"eu":[3285888,34816],"sh":[3260256,34816],"cn":[3334016,34816]}], +"textures/snow/ccm_textures.09000.ia16.png": [32,32,2048,{"jp":[3405536,36864],"us":[3412288,36864],"eu":[3285888,36864],"sh":[3260256,36864],"cn":[3334016,36864]}], +"textures/snow/ccm_textures.09800.ia16.png": [32,32,2048,{"jp":[3405536,38912],"us":[3412288,38912],"eu":[3285888,38912],"sh":[3260256,38912],"cn":[3334016,38912]}], +"textures/spooky/bbh_textures.00000.rgba16.png": [32,32,2048,{"jp":[3298272,0],"us":[3305024,0],"eu":[3178624,0],"sh":[3152992,0],"cn":[3226752,0]}], +"textures/spooky/bbh_textures.00800.rgba16.png": [32,64,4096,{"jp":[3298272,2048],"us":[3305024,2048],"eu":[3178624,2048],"sh":[3152992,2048],"cn":[3226752,2048]}], +"textures/spooky/bbh_textures.01800.rgba16.png": [32,64,4096,{"jp":[3298272,6144],"us":[3305024,6144],"eu":[3178624,6144],"sh":[3152992,6144],"cn":[3226752,6144]}], +"textures/spooky/bbh_textures.02800.rgba16.png": [32,64,4096,{"jp":[3298272,10240],"us":[3305024,10240],"eu":[3178624,10240],"sh":[3152992,10240],"cn":[3226752,10240]}], +"textures/spooky/bbh_textures.03800.rgba16.png": [32,64,4096,{"jp":[3298272,14336],"us":[3305024,14336],"eu":[3178624,14336],"sh":[3152992,14336],"cn":[3226752,14336]}], +"textures/spooky/bbh_textures.04800.rgba16.png": [32,32,2048,{"jp":[3298272,18432],"us":[3305024,18432],"eu":[3178624,18432],"sh":[3152992,18432],"cn":[3226752,18432]}], +"textures/spooky/bbh_textures.05000.rgba16.png": [32,64,4096,{"jp":[3298272,20480],"us":[3305024,20480],"eu":[3178624,20480],"sh":[3152992,20480],"cn":[3226752,20480]}], +"textures/spooky/bbh_textures.06000.rgba16.png": [32,32,2048,{"jp":[3298272,24576],"us":[3305024,24576],"eu":[3178624,24576],"sh":[3152992,24576],"cn":[3226752,24576]}], +"textures/spooky/bbh_textures.06800.rgba16.png": [32,32,2048,{"jp":[3298272,26624],"us":[3305024,26624],"eu":[3178624,26624],"sh":[3152992,26624],"cn":[3226752,26624]}], +"textures/spooky/bbh_textures.07000.rgba16.png": [64,32,4096,{"jp":[3298272,28672],"us":[3305024,28672],"eu":[3178624,28672],"sh":[3152992,28672],"cn":[3226752,28672]}], +"textures/spooky/bbh_textures.08000.rgba16.png": [32,32,2048,{"jp":[3298272,32768],"us":[3305024,32768],"eu":[3178624,32768],"sh":[3152992,32768],"cn":[3226752,32768]}], +"textures/spooky/bbh_textures.08800.rgba16.png": [32,32,2048,{"jp":[3298272,34816],"us":[3305024,34816],"eu":[3178624,34816],"sh":[3152992,34816],"cn":[3226752,34816]}], +"textures/spooky/bbh_textures.09000.rgba16.png": [64,32,4096,{"jp":[3298272,36864],"us":[3305024,36864],"eu":[3178624,36864],"sh":[3152992,36864],"cn":[3226752,36864]}], +"textures/spooky/bbh_textures.0A000.rgba16.png": [32,32,2048,{"jp":[1462368,49800],"us":[1469536,49800],"eu":[1341504,49800],"sh":[1318016,49800],"cn":[1384848,49800]}], +"textures/spooky/bbh_textures.0A800.ia16.png": [32,32,2048,{"jp":[3298272,43008],"us":[3305024,43008],"eu":[3178624,43008],"sh":[3152992,43008],"cn":[3226752,43008]}], +"textures/spooky/bbh_textures.0B000.ia16.png": [32,32,2048,{"jp":[3298272,45056],"us":[3305024,45056],"eu":[3178624,45056],"sh":[3152992,45056],"cn":[3226752,45056]}], +"textures/spooky/bbh_textures.0B800.ia16.png": [32,64,4096,{"jp":[3298272,47104],"us":[3305024,47104],"eu":[3178624,47104],"sh":[3152992,47104],"cn":[3226752,47104]}], "textures/title_screen_bg/title_screen_bg.001C0.rgba16.png": [80,20,3200,{"jp":[2550336,448],"us":[2558144,448],"eu":[2426672,448],"sh":[2403488,448]}], "textures/title_screen_bg/title_screen_bg.00E40.rgba16.png": [80,20,3200,{"jp":[2550336,3648],"us":[2558144,3648],"eu":[2426672,3648],"sh":[2403488,3648]}], "textures/title_screen_bg/title_screen_bg.01AC0.rgba16.png": [80,20,3200,{"jp":[2550336,6848],"us":[2558144,6848],"eu":[2426672,6848],"sh":[2403488,6848]}], @@ -1845,243 +4128,251 @@ "textures/title_screen_bg/title_screen_bg.04040.rgba16.png": [80,20,3200,{"jp":[2550336,16448],"us":[2558144,16448],"eu":[2426672,16448],"sh":[2403488,16448]}], "textures/title_screen_bg/title_screen_bg.04CC0.rgba16.png": [80,20,3200,{"jp":[2550336,19648],"us":[2558144,19648],"eu":[2426672,19648],"sh":[2403488,19648]}], "textures/title_screen_bg/title_screen_bg.05940.rgba16.png": [80,20,3200,{"jp":[2550336,22848],"us":[2558144,22848],"eu":[2426672,22848],"sh":[2403488,22848]}], -"textures/title_screen_bg/title_screen_bg.06648.rgba16.png": [80,24,3840,{"sh":[2403488,26184]}], -"textures/water/jrb_textures.00000.rgba16.png": [32,32,2048,{"jp":[3354832,0],"us":[3361584,0],"eu":[3235184,0],"sh":[3209552,0]}], -"textures/water/jrb_textures.00800.rgba16.png": [64,32,4096,{"jp":[3354832,2048],"us":[3361584,2048],"eu":[3235184,2048],"sh":[3209552,2048]}], -"textures/water/jrb_textures.01800.rgba16.png": [64,32,4096,{"jp":[3354832,6144],"us":[3361584,6144],"eu":[3235184,6144],"sh":[3209552,6144]}], -"textures/water/jrb_textures.02800.rgba16.png": [64,32,4096,{"jp":[3354832,10240],"us":[3361584,10240],"eu":[3235184,10240],"sh":[3209552,10240]}], -"textures/water/jrb_textures.03800.rgba16.png": [64,32,4096,{"jp":[3354832,14336],"us":[3361584,14336],"eu":[3235184,14336],"sh":[3209552,14336]}], -"textures/water/jrb_textures.04800.rgba16.png": [64,32,4096,{"jp":[3354832,18432],"us":[3361584,18432],"eu":[3235184,18432],"sh":[3209552,18432]}], -"textures/water/jrb_textures.05800.rgba16.png": [32,32,2048,{"jp":[3354832,22528],"us":[3361584,22528],"eu":[3235184,22528],"sh":[3209552,22528]}], -"textures/water/jrb_textures.06000.rgba16.png": [32,32,2048,{"jp":[3354832,24576],"us":[3361584,24576],"eu":[3235184,24576],"sh":[3209552,24576]}], -"textures/water/jrb_textures.06800.rgba16.png": [64,32,4096,{"jp":[3354832,26624],"us":[3361584,26624],"eu":[3235184,26624],"sh":[3209552,26624]}], -"textures/water/jrb_textures.07800.rgba16.png": [64,32,4096,{"jp":[3354832,30720],"us":[3361584,30720],"eu":[3235184,30720],"sh":[3209552,30720]}], -"textures/water/jrb_textures.08800.rgba16.png": [32,32,2048,{"jp":[3354832,34816],"us":[3361584,34816],"eu":[3235184,34816],"sh":[3209552,34816]}], -"textures/water/jrb_textures.09000.rgba16.png": [64,32,4096,{"jp":[3354832,36864],"us":[3361584,36864],"eu":[3235184,36864],"sh":[3209552,36864]}], -"textures/water/jrb_textures.0A000.rgba16.png": [32,32,2048,{"jp":[3354832,40960],"us":[3361584,40960],"eu":[3235184,40960],"sh":[3209552,40960]}], -"textures/water/jrb_textures.0A800.rgba16.png": [64,32,4096,{"jp":[3354832,43008],"us":[3361584,43008],"eu":[3235184,43008],"sh":[3209552,43008]}], -"textures/water/jrb_textures.0B800.rgba16.png": [64,32,4096,{"jp":[3354832,47104],"us":[3361584,47104],"eu":[3235184,47104],"sh":[3209552,47104]}], -"sound/samples/bowser_organ/00_organ_1.aiff": [0,{"jp":["@sound",195],"us":["@sound",216],"eu":["@sound",216]}], -"sound/samples/bowser_organ/01_organ_1_lq.aiff": [0,{"jp":["@sound",196],"us":["@sound",217],"eu":["@sound",217]}], -"sound/samples/bowser_organ/02_boys_choir.aiff": [0,{"jp":["@sound",197],"us":["@sound",218],"eu":["@sound",218]}], -"sound/samples/course_start/00_la.aiff": [0,{"jp":["@sound",194],"us":["@sound",215],"eu":["@sound",215]}], -"sound/samples/instruments/00.aiff": [0,{"jp":["@sound",120],"us":["@sound",141],"eu":["@sound",141],"sh":["@sound",141]}], -"sound/samples/instruments/01_banjo_1.aiff": [0,{"jp":["@sound",121],"us":["@sound",142],"eu":["@sound",142],"sh":["@sound",142]}], -"sound/samples/instruments/02.aiff": [0,{"jp":["@sound",122],"us":["@sound",143],"eu":["@sound",143],"sh":["@sound",143]}], -"sound/samples/instruments/03_human_whistle.aiff": [0,{"jp":["@sound",123],"us":["@sound",144],"eu":["@sound",144],"sh":["@sound",144]}], -"sound/samples/instruments/04_bright_piano.aiff": [0,{"jp":["@sound",124],"us":["@sound",145],"eu":["@sound",145],"sh":["@sound",145]}], -"sound/samples/instruments/05_acoustic_bass.aiff": [0,{"jp":["@sound",125],"us":["@sound",146],"eu":["@sound",146],"sh":["@sound",146]}], -"sound/samples/instruments/06_kick_drum_1.aiff": [0,{"jp":["@sound",126],"us":["@sound",147],"eu":["@sound",147],"sh":["@sound",147]}], -"sound/samples/instruments/07_rimshot.aiff": [0,{"jp":["@sound",127],"us":["@sound",148],"eu":["@sound",148],"sh":["@sound",148]}], -"sound/samples/instruments/08.aiff": [0,{"jp":["@sound",128],"us":["@sound",149],"eu":["@sound",149],"sh":["@sound",149]}], -"sound/samples/instruments/09.aiff": [0,{"jp":["@sound",129],"us":["@sound",150],"eu":["@sound",150],"sh":["@sound",150]}], -"sound/samples/instruments/0A_tambourine.aiff": [0,{"jp":["@sound",130],"us":["@sound",151],"eu":["@sound",151],"sh":["@sound",151]}], -"sound/samples/instruments/0B.aiff": [0,{"jp":["@sound",131],"us":["@sound",152],"eu":["@sound",152],"sh":["@sound",152]}], -"sound/samples/instruments/0C_conga_stick.aiff": [0,{"jp":["@sound",132],"us":["@sound",153],"eu":["@sound",153],"sh":["@sound",153]}], -"sound/samples/instruments/0D_clave.aiff": [0,{"jp":["@sound",133],"us":["@sound",154],"eu":["@sound",154],"sh":["@sound",154]}], -"sound/samples/instruments/0E_hihat_closed.aiff": [0,{"jp":["@sound",134],"us":["@sound",155],"eu":["@sound",155],"sh":["@sound",155]}], -"sound/samples/instruments/0F_hihat_open.aiff": [0,{"jp":["@sound",135],"us":["@sound",156],"eu":["@sound",156],"sh":["@sound",156]}], -"sound/samples/instruments/10_cymbal_bell.aiff": [0,{"jp":["@sound",136],"us":["@sound",157],"eu":["@sound",157],"sh":["@sound",157]}], -"sound/samples/instruments/11_splash_cymbal.aiff": [0,{"jp":["@sound",137],"us":["@sound",158],"eu":["@sound",158],"sh":["@sound",158]}], -"sound/samples/instruments/12_snare_drum_1.aiff": [0,{"jp":["@sound",138],"us":["@sound",159],"eu":["@sound",159],"sh":["@sound",159]}], -"sound/samples/instruments/13_snare_drum_2.aiff": [0,{"jp":["@sound",139],"us":["@sound",160],"eu":["@sound",160],"sh":["@sound",160]}], -"sound/samples/instruments/14_strings_5.aiff": [0,{"jp":["@sound",140],"us":["@sound",161],"eu":["@sound",161],"sh":["@sound",161]}], -"sound/samples/instruments/15_strings_4.aiff": [0,{"jp":["@sound",141],"us":["@sound",162],"eu":["@sound",162],"sh":["@sound",162]}], -"sound/samples/instruments/16_french_horns.aiff": [0,{"jp":["@sound",142],"us":["@sound",163],"eu":["@sound",163],"sh":["@sound",163]}], -"sound/samples/instruments/17_trumpet.aiff": [0,{"jp":["@sound",143],"us":["@sound",164],"eu":["@sound",164],"sh":["@sound",164]}], -"sound/samples/instruments/18_timpani.aiff": [0,{"jp":["@sound",144],"us":["@sound",165],"eu":["@sound",165],"sh":["@sound",165]}], -"sound/samples/instruments/19_brass.aiff": [0,{"jp":["@sound",145],"us":["@sound",166],"eu":["@sound",166],"sh":["@sound",166]}], -"sound/samples/instruments/1A_slap_bass.aiff": [0,{"jp":["@sound",146],"us":["@sound",167],"eu":["@sound",167],"sh":["@sound",167]}], -"sound/samples/instruments/1B_organ_2.aiff": [0,{"jp":["@sound",147],"us":["@sound",168],"eu":["@sound",168],"sh":["@sound",168]}], -"sound/samples/instruments/1C.aiff": [0,{"jp":["@sound",148],"us":["@sound",169],"eu":["@sound",169],"sh":["@sound",169]}], -"sound/samples/instruments/1D.aiff": [0,{"jp":["@sound",149],"us":["@sound",170],"eu":["@sound",170],"sh":["@sound",170]}], -"sound/samples/instruments/1E_closed_triangle.aiff": [0,{"jp":["@sound",150],"us":["@sound",171],"eu":["@sound",171],"sh":["@sound",171]}], -"sound/samples/instruments/1F_open_triangle.aiff": [0,{"jp":["@sound",151],"us":["@sound",172],"eu":["@sound",172],"sh":["@sound",172]}], -"sound/samples/instruments/20_cabasa.aiff": [0,{"jp":["@sound",152],"us":["@sound",173],"eu":["@sound",173],"sh":["@sound",173]}], -"sound/samples/instruments/21_sine_bass.aiff": [0,{"jp":["@sound",153],"us":["@sound",174],"eu":["@sound",174],"sh":["@sound",174]}], -"sound/samples/instruments/22_boys_choir.aiff": [0,{"jp":["@sound",154],"us":["@sound",175],"eu":["@sound",175],"sh":["@sound",175]}], -"sound/samples/instruments/23_strings_1.aiff": [0,{"jp":["@sound",155],"us":["@sound",176],"eu":["@sound",176],"sh":["@sound",176]}], -"sound/samples/instruments/24_strings_2.aiff": [0,{"jp":["@sound",156],"us":["@sound",177],"eu":["@sound",177],"sh":["@sound",177]}], -"sound/samples/instruments/25_strings_3.aiff": [0,{"jp":["@sound",157],"us":["@sound",178],"eu":["@sound",178],"sh":["@sound",178]}], -"sound/samples/instruments/26_crystal_rhodes.aiff": [0,{"jp":["@sound",158],"us":["@sound",179],"eu":["@sound",179],"sh":["@sound",179]}], -"sound/samples/instruments/27_harpsichord.aiff": [0,{"jp":["@sound",159],"us":["@sound",180],"eu":["@sound",180],"sh":["@sound",180]}], -"sound/samples/instruments/28_sitar_1.aiff": [0,{"jp":["@sound",160],"us":["@sound",181],"eu":["@sound",181],"sh":["@sound",181]}], -"sound/samples/instruments/29_orchestra_hit.aiff": [0,{"jp":["@sound",161],"us":["@sound",182],"eu":["@sound",182],"sh":["@sound",182]}], -"sound/samples/instruments/2A.aiff": [0,{"jp":["@sound",162],"us":["@sound",183],"eu":["@sound",183],"sh":["@sound",183]}], -"sound/samples/instruments/2B.aiff": [0,{"jp":["@sound",163],"us":["@sound",184],"eu":["@sound",184],"sh":["@sound",184]}], -"sound/samples/instruments/2C.aiff": [0,{"jp":["@sound",164],"us":["@sound",185],"eu":["@sound",185],"sh":["@sound",185]}], -"sound/samples/instruments/2D_trombone.aiff": [0,{"jp":["@sound",165],"us":["@sound",186],"eu":["@sound",186],"sh":["@sound",186]}], -"sound/samples/instruments/2E_accordion.aiff": [0,{"jp":["@sound",166],"us":["@sound",187],"eu":["@sound",187],"sh":["@sound",187]}], -"sound/samples/instruments/2F_sleigh_bells.aiff": [0,{"jp":["@sound",167],"us":["@sound",188],"eu":["@sound",188],"sh":["@sound",188]}], -"sound/samples/instruments/30_rarefaction-lahna.aiff": [0,{"jp":["@sound",168],"us":["@sound",189],"eu":["@sound",189],"sh":["@sound",189]}], -"sound/samples/instruments/31_rarefaction-convolution.aiff": [0,{"jp":["@sound",169],"us":["@sound",190],"eu":["@sound",190],"sh":["@sound",190]}], -"sound/samples/instruments/32_metal_rimshot.aiff": [0,{"jp":["@sound",170],"us":["@sound",191],"eu":["@sound",191],"sh":["@sound",191]}], -"sound/samples/instruments/33_kick_drum_2.aiff": [0,{"jp":["@sound",171],"us":["@sound",192],"eu":["@sound",192],"sh":["@sound",192]}], -"sound/samples/instruments/34_alto_flute.aiff": [0,{"jp":["@sound",172],"us":["@sound",193],"eu":["@sound",193],"sh":["@sound",193]}], -"sound/samples/instruments/34b_organ.aiff": [0,{"sh":["@sound",194]}], -"sound/samples/instruments/34c_organ_lq.aiff": [0,{"sh":["@sound",195]}], -"sound/samples/instruments/35_gospel_organ.aiff": [0,{"jp":["@sound",173],"us":["@sound",194],"eu":["@sound",194],"sh":["@sound",196]}], -"sound/samples/instruments/36_sawtooth_synth.aiff": [0,{"jp":["@sound",174],"us":["@sound",195],"eu":["@sound",195],"sh":["@sound",197]}], -"sound/samples/instruments/37_square_synth.aiff": [0,{"jp":["@sound",175],"us":["@sound",196],"eu":["@sound",196],"sh":["@sound",198]}], -"sound/samples/instruments/38_electric_kick_drum.aiff": [0,{"jp":["@sound",176],"us":["@sound",197],"eu":["@sound",197],"sh":["@sound",199]}], -"sound/samples/instruments/39_sitar_2.aiff": [0,{"jp":["@sound",177],"us":["@sound",198],"eu":["@sound",198],"sh":["@sound",200]}], -"sound/samples/instruments/3A_music_box.aiff": [0,{"jp":["@sound",178],"us":["@sound",199],"eu":["@sound",199],"sh":["@sound",201]}], -"sound/samples/instruments/3B_banjo_2.aiff": [0,{"jp":["@sound",179],"us":["@sound",200],"eu":["@sound",200],"sh":["@sound",202]}], -"sound/samples/instruments/3C_acoustic_guitar.aiff": [0,{"jp":["@sound",180],"us":["@sound",201],"eu":["@sound",201],"sh":["@sound",203]}], -"sound/samples/instruments/3D.aiff": [0,{"jp":["@sound",181],"us":["@sound",202],"eu":["@sound",202],"sh":["@sound",204]}], -"sound/samples/instruments/3E_monk_choir.aiff": [0,{"jp":["@sound",182],"us":["@sound",203],"eu":["@sound",203],"sh":["@sound",205]}], -"sound/samples/instruments/3F.aiff": [0,{"jp":["@sound",183],"us":["@sound",204],"eu":["@sound",204],"sh":["@sound",206]}], -"sound/samples/instruments/40_bell.aiff": [0,{"jp":["@sound",184],"us":["@sound",205],"eu":["@sound",205],"sh":["@sound",207]}], -"sound/samples/instruments/41_pan_flute.aiff": [0,{"jp":["@sound",185],"us":["@sound",206],"eu":["@sound",206],"sh":["@sound",208]}], -"sound/samples/instruments/42_vibraphone.aiff": [0,{"jp":["@sound",186],"us":["@sound",207],"eu":["@sound",207],"sh":["@sound",209]}], -"sound/samples/instruments/43_harmonica.aiff": [0,{"jp":["@sound",187],"us":["@sound",208],"eu":["@sound",208],"sh":["@sound",210]}], -"sound/samples/instruments/44_grand_piano.aiff": [0,{"jp":["@sound",188],"us":["@sound",209],"eu":["@sound",209],"sh":["@sound",211]}], -"sound/samples/instruments/45_french_horns_lq.aiff": [0,{"jp":["@sound",189],"us":["@sound",210],"eu":["@sound",210],"sh":["@sound",212]}], -"sound/samples/instruments/45b_la.aiff": [0,{"sh":["@sound",213]}], -"sound/samples/instruments/46_pizzicato_strings_1.aiff": [0,{"jp":["@sound",190],"us":["@sound",211],"eu":["@sound",211],"sh":["@sound",214]}], -"sound/samples/instruments/47_pizzicato_strings_2.aiff": [0,{"jp":["@sound",191],"us":["@sound",212],"eu":["@sound",212],"sh":["@sound",215]}], -"sound/samples/instruments/48_steel_drum.aiff": [0,{"jp":["@sound",192],"us":["@sound",213],"eu":["@sound",213],"sh":["@sound",216]}], -"sound/samples/piranha_music_box/00_music_box.aiff": [0,{"jp":["@sound",193],"us":["@sound",214],"eu":["@sound",214]}], -"sound/samples/sfx_1/00_twirl.aiff": [0,{"jp":["@sound",0],"us":["@sound",0],"eu":["@sound",0],"sh":["@sound",0]}], -"sound/samples/sfx_1/01_brushing.aiff": [0,{"jp":["@sound",1],"us":["@sound",1],"eu":["@sound",1],"sh":["@sound",1]}], -"sound/samples/sfx_1/02_hand_touch.aiff": [0,{"jp":["@sound",2],"us":["@sound",2],"eu":["@sound",2],"sh":["@sound",2]}], -"sound/samples/sfx_1/03_yoshi.aiff": [0,{"jp":["@sound",3],"us":["@sound",3],"eu":["@sound",3],"sh":["@sound",3]}], -"sound/samples/sfx_1/04_plop.aiff": [0,{"jp":["@sound",4],"us":["@sound",4],"eu":["@sound",4],"sh":["@sound",4]}], -"sound/samples/sfx_1/05_heavy_landing.aiff": [0,{"jp":["@sound",5],"us":["@sound",5],"eu":["@sound",5],"sh":["@sound",5]}], -"sound/samples/sfx_4/00.aiff": [0,{"jp":["@sound",17],"us":["@sound",17],"eu":["@sound",17],"sh":["@sound",17]}], -"sound/samples/sfx_4/01.aiff": [0,{"jp":["@sound",18],"us":["@sound",18],"eu":["@sound",18],"sh":["@sound",18]}], -"sound/samples/sfx_4/02.aiff": [0,{"jp":["@sound",19],"us":["@sound",19],"eu":["@sound",19],"sh":["@sound",19]}], -"sound/samples/sfx_4/03.aiff": [0,{"jp":["@sound",20],"us":["@sound",20],"eu":["@sound",20],"sh":["@sound",20]}], -"sound/samples/sfx_4/04.aiff": [0,{"jp":["@sound",21],"us":["@sound",21],"eu":["@sound",21],"sh":["@sound",21]}], -"sound/samples/sfx_4/05.aiff": [0,{"jp":["@sound",22],"us":["@sound",22],"eu":["@sound",22],"sh":["@sound",22]}], -"sound/samples/sfx_4/06.aiff": [0,{"jp":["@sound",23],"us":["@sound",23],"eu":["@sound",23],"sh":["@sound",23]}], -"sound/samples/sfx_4/07.aiff": [0,{"jp":["@sound",24],"us":["@sound",24],"eu":["@sound",24],"sh":["@sound",24]}], -"sound/samples/sfx_4/08.aiff": [0,{"jp":["@sound",25],"us":["@sound",25],"eu":["@sound",25],"sh":["@sound",25]}], -"sound/samples/sfx_4/09.aiff": [0,{"jp":["@sound",26],"us":["@sound",26],"eu":["@sound",26],"sh":["@sound",26]}], -"sound/samples/sfx_5/00.aiff": [0,{"jp":["@sound",27],"us":["@sound",27],"eu":["@sound",27],"sh":["@sound",27]}], -"sound/samples/sfx_5/01.aiff": [0,{"jp":["@sound",28],"us":["@sound",28],"eu":["@sound",28],"sh":["@sound",28]}], -"sound/samples/sfx_5/02.aiff": [0,{"jp":["@sound",29],"us":["@sound",29],"eu":["@sound",29],"sh":["@sound",29]}], -"sound/samples/sfx_5/03.aiff": [0,{"jp":["@sound",30],"us":["@sound",30],"eu":["@sound",30],"sh":["@sound",30]}], -"sound/samples/sfx_5/04.aiff": [0,{"jp":["@sound",31],"us":["@sound",31],"eu":["@sound",31],"sh":["@sound",31]}], -"sound/samples/sfx_5/05.aiff": [0,{"jp":["@sound",32],"us":["@sound",32],"eu":["@sound",32],"sh":["@sound",32]}], -"sound/samples/sfx_5/06.aiff": [0,{"jp":["@sound",33],"us":["@sound",33],"eu":["@sound",33],"sh":["@sound",33]}], -"sound/samples/sfx_5/07.aiff": [0,{"jp":["@sound",34],"us":["@sound",34],"eu":["@sound",34],"sh":["@sound",34]}], -"sound/samples/sfx_5/08.aiff": [0,{"jp":["@sound",35],"us":["@sound",35],"eu":["@sound",35],"sh":["@sound",35]}], -"sound/samples/sfx_5/09.aiff": [0,{"jp":["@sound",36],"us":["@sound",36],"eu":["@sound",36],"sh":["@sound",36]}], -"sound/samples/sfx_5/0A.aiff": [0,{"jp":["@sound",37],"us":["@sound",37],"eu":["@sound",37],"sh":["@sound",37]}], -"sound/samples/sfx_5/0B.aiff": [0,{"jp":["@sound",38],"us":["@sound",38],"eu":["@sound",38],"sh":["@sound",38]}], -"sound/samples/sfx_5/0C.aiff": [0,{"jp":["@sound",39],"us":["@sound",39],"eu":["@sound",39],"sh":["@sound",39]}], -"sound/samples/sfx_5/0D.aiff": [0,{"jp":["@sound",40],"us":["@sound",40],"eu":["@sound",40],"sh":["@sound",40]}], -"sound/samples/sfx_5/0E.aiff": [0,{"jp":["@sound",41],"us":["@sound",41],"eu":["@sound",41],"sh":["@sound",41]}], -"sound/samples/sfx_5/0F.aiff": [0,{"jp":["@sound",42],"us":["@sound",42],"eu":["@sound",42],"sh":["@sound",42]}], -"sound/samples/sfx_5/10.aiff": [0,{"jp":["@sound",43],"us":["@sound",43],"eu":["@sound",43],"sh":["@sound",43]}], -"sound/samples/sfx_5/11.aiff": [0,{"jp":["@sound",44],"us":["@sound",44],"eu":["@sound",44],"sh":["@sound",44]}], -"sound/samples/sfx_5/12.aiff": [0,{"jp":["@sound",45],"us":["@sound",45],"eu":["@sound",45],"sh":["@sound",45]}], -"sound/samples/sfx_5/13.aiff": [0,{"jp":["@sound",46],"us":["@sound",46],"eu":["@sound",46],"sh":["@sound",46]}], -"sound/samples/sfx_5/14.aiff": [0,{"jp":["@sound",47],"us":["@sound",47],"eu":["@sound",47],"sh":["@sound",47]}], -"sound/samples/sfx_5/15.aiff": [0,{"jp":["@sound",48],"us":["@sound",48],"eu":["@sound",48],"sh":["@sound",48]}], -"sound/samples/sfx_5/16.aiff": [0,{"jp":["@sound",49],"us":["@sound",49],"eu":["@sound",49],"sh":["@sound",49]}], -"sound/samples/sfx_5/17.aiff": [0,{"jp":["@sound",50],"us":["@sound",50],"eu":["@sound",50],"sh":["@sound",50]}], -"sound/samples/sfx_5/18.aiff": [0,{"jp":["@sound",51],"us":["@sound",51],"eu":["@sound",51],"sh":["@sound",51]}], -"sound/samples/sfx_5/19.aiff": [0,{"jp":["@sound",52],"us":["@sound",52],"eu":["@sound",52],"sh":["@sound",52]}], -"sound/samples/sfx_5/1A.aiff": [0,{"jp":["@sound",53],"us":["@sound",53],"eu":["@sound",53],"sh":["@sound",53]}], -"sound/samples/sfx_5/1B.aiff": [0,{"jp":["@sound",54],"us":["@sound",54],"eu":["@sound",54],"sh":["@sound",54]}], -"sound/samples/sfx_5/1C.aiff": [0,{"jp":["@sound",55],"us":["@sound",55],"eu":["@sound",55],"sh":["@sound",55]}], -"sound/samples/sfx_6/00.aiff": [0,{"jp":["@sound",56],"us":["@sound",56],"eu":["@sound",56],"sh":["@sound",56]}], -"sound/samples/sfx_6/01.aiff": [0,{"jp":["@sound",57],"us":["@sound",57],"eu":["@sound",57],"sh":["@sound",57]}], -"sound/samples/sfx_6/02.aiff": [0,{"jp":["@sound",58],"us":["@sound",58],"eu":["@sound",58],"sh":["@sound",58]}], -"sound/samples/sfx_6/03.aiff": [0,{"jp":["@sound",59],"us":["@sound",59],"eu":["@sound",59],"sh":["@sound",59]}], -"sound/samples/sfx_6/04.aiff": [0,{"jp":["@sound",60],"us":["@sound",60],"eu":["@sound",60],"sh":["@sound",60]}], -"sound/samples/sfx_6/05.aiff": [0,{"jp":["@sound",61],"us":["@sound",61],"eu":["@sound",61],"sh":["@sound",61]}], -"sound/samples/sfx_6/06.aiff": [0,{"jp":["@sound",62],"us":["@sound",62],"eu":["@sound",62],"sh":["@sound",62]}], -"sound/samples/sfx_6/07.aiff": [0,{"jp":["@sound",63],"us":["@sound",63],"eu":["@sound",63],"sh":["@sound",63]}], -"sound/samples/sfx_6/08.aiff": [0,{"jp":["@sound",64],"us":["@sound",64],"eu":["@sound",64],"sh":["@sound",64]}], -"sound/samples/sfx_6/09.aiff": [0,{"jp":["@sound",65],"us":["@sound",65],"eu":["@sound",65],"sh":["@sound",65]}], -"sound/samples/sfx_6/0A.aiff": [0,{"jp":["@sound",66],"us":["@sound",66],"eu":["@sound",66],"sh":["@sound",66]}], -"sound/samples/sfx_6/0B.aiff": [0,{"jp":["@sound",67],"us":["@sound",67],"eu":["@sound",67],"sh":["@sound",67]}], -"sound/samples/sfx_6/0C.aiff": [0,{"jp":["@sound",68],"us":["@sound",68],"eu":["@sound",68],"sh":["@sound",68]}], -"sound/samples/sfx_6/0D.aiff": [0,{"jp":["@sound",69],"us":["@sound",69],"eu":["@sound",69],"sh":["@sound",69]}], -"sound/samples/sfx_7/00.aiff": [0,{"jp":["@sound",70],"us":["@sound",70],"eu":["@sound",70],"sh":["@sound",70]}], -"sound/samples/sfx_7/01.aiff": [0,{"jp":["@sound",71],"us":["@sound",71],"eu":["@sound",71],"sh":["@sound",71]}], -"sound/samples/sfx_7/02.aiff": [0,{"jp":["@sound",72],"us":["@sound",72],"eu":["@sound",72],"sh":["@sound",72]}], -"sound/samples/sfx_7/03.aiff": [0,{"jp":["@sound",73],"us":["@sound",73],"eu":["@sound",73],"sh":["@sound",73]}], -"sound/samples/sfx_7/04.aiff": [0,{"jp":["@sound",74],"us":["@sound",74],"eu":["@sound",74],"sh":["@sound",74]}], -"sound/samples/sfx_7/05.aiff": [0,{"jp":["@sound",75],"us":["@sound",75],"eu":["@sound",75],"sh":["@sound",75]}], -"sound/samples/sfx_7/06.aiff": [0,{"jp":["@sound",76],"us":["@sound",76],"eu":["@sound",76],"sh":["@sound",76]}], -"sound/samples/sfx_7/07.aiff": [0,{"jp":["@sound",77],"us":["@sound",77],"eu":["@sound",77],"sh":["@sound",77]}], -"sound/samples/sfx_7/08.aiff": [0,{"jp":["@sound",78],"us":["@sound",78],"eu":["@sound",78],"sh":["@sound",78]}], -"sound/samples/sfx_7/09.aiff": [0,{"jp":["@sound",79],"us":["@sound",79],"eu":["@sound",79],"sh":["@sound",79]}], -"sound/samples/sfx_7/0A.aiff": [0,{"jp":["@sound",80],"us":["@sound",80],"eu":["@sound",80],"sh":["@sound",80]}], -"sound/samples/sfx_7/0B.aiff": [0,{"jp":["@sound",81],"us":["@sound",81],"eu":["@sound",81],"sh":["@sound",81]}], -"sound/samples/sfx_7/0C.aiff": [0,{"jp":["@sound",82],"us":["@sound",82],"eu":["@sound",82],"sh":["@sound",82]}], -"sound/samples/sfx_7/0D_chain_chomp_bark.aiff": [0,{"us":["@sound",83],"eu":["@sound",83],"sh":["@sound",83]}], -"sound/samples/sfx_9/00.aiff": [0,{"jp":["@sound",99],"us":["@sound",111],"eu":["@sound",111],"sh":["@sound",111]}], -"sound/samples/sfx_9/01.aiff": [0,{"jp":["@sound",100],"us":["@sound",112],"eu":["@sound",112],"sh":["@sound",112]}], -"sound/samples/sfx_9/02.aiff": [0,{"jp":["@sound",101],"us":["@sound",113],"eu":["@sound",113],"sh":["@sound",113]}], -"sound/samples/sfx_9/03.aiff": [0,{"jp":["@sound",102],"us":["@sound",114],"eu":["@sound",114],"sh":["@sound",114]}], -"sound/samples/sfx_9/04_camera_buzz.aiff": [0,{"jp":["@sound",103],"us":["@sound",115],"eu":["@sound",115],"sh":["@sound",115]}], -"sound/samples/sfx_9/05_camera_shutter.aiff": [0,{"jp":["@sound",104],"us":["@sound",116],"eu":["@sound",116],"sh":["@sound",116]}], -"sound/samples/sfx_9/06.aiff": [0,{"jp":["@sound",105],"us":["@sound",117],"eu":["@sound",117],"sh":["@sound",117]}], -"sound/samples/sfx_mario/00_mario_jump_hoo.aiff": [0,{"jp":["@sound",83],"us":["@sound",84],"eu":["@sound",84],"sh":["@sound",84]}], -"sound/samples/sfx_mario/01_mario_jump_wah.aiff": [0,{"jp":["@sound",84],"us":["@sound",85],"eu":["@sound",85],"sh":["@sound",85]}], -"sound/samples/sfx_mario/02_mario_yah.aiff": [0,{"jp":["@sound",85],"us":["@sound",86],"eu":["@sound",86],"sh":["@sound",86]}], -"sound/samples/sfx_mario/03_mario_haha.aiff": [0,{"jp":["@sound",86],"us":["@sound",87],"eu":["@sound",87],"sh":["@sound",87]}], -"sound/samples/sfx_mario/04_mario_yahoo.aiff": [0,{"jp":["@sound",87],"us":["@sound",88],"eu":["@sound",88],"sh":["@sound",88]}], -"sound/samples/sfx_mario/05_mario_uh.aiff": [0,{"jp":["@sound",88],"us":["@sound",89],"eu":["@sound",89],"sh":["@sound",89]}], -"sound/samples/sfx_mario/06_mario_hrmm.aiff": [0,{"jp":["@sound",89],"us":["@sound",90],"eu":["@sound",90],"sh":["@sound",90]}], -"sound/samples/sfx_mario/07_mario_wah2.aiff": [0,{"jp":["@sound",90],"us":["@sound",91],"eu":["@sound",91],"sh":["@sound",91]}], -"sound/samples/sfx_mario/08_mario_whoa.aiff": [0,{"jp":["@sound",91],"us":["@sound",92],"eu":["@sound",92],"sh":["@sound",92]}], -"sound/samples/sfx_mario/09_mario_eeuh.aiff": [0,{"jp":["@sound",92],"us":["@sound",93],"eu":["@sound",93],"sh":["@sound",93]}], -"sound/samples/sfx_mario/0A_mario_attacked.aiff": [0,{"jp":["@sound",93],"us":["@sound",94],"eu":["@sound",94],"sh":["@sound",94]}], -"sound/samples/sfx_mario/0B_mario_ooof.aiff": [0,{"jp":["@sound",94],"us":["@sound",95],"eu":["@sound",95],"sh":["@sound",95]}], -"sound/samples/sfx_mario/0C_mario_here_we_go.aiff": [0,{"jp":["@sound",95],"us":["@sound",96],"eu":["@sound",96],"sh":["@sound",96]}], -"sound/samples/sfx_mario/0D_mario_yawning.aiff": [0,{"jp":["@sound",96],"us":["@sound",97],"eu":["@sound",97],"sh":["@sound",97]}], -"sound/samples/sfx_mario/0E_mario_snoring1.aiff": [0,{"jp":["@sound",97],"us":["@sound",98],"eu":["@sound",98],"sh":["@sound",98]}], -"sound/samples/sfx_mario/0F_mario_snoring2.aiff": [0,{"jp":["@sound",98],"us":["@sound",99],"eu":["@sound",99],"sh":["@sound",99]}], -"sound/samples/sfx_mario/10_mario_doh.aiff": [0,{"us":["@sound",100],"eu":["@sound",100],"sh":["@sound",100]}], -"sound/samples/sfx_mario/11_mario_game_over.aiff": [0,{"us":["@sound",101],"eu":["@sound",101],"sh":["@sound",101]}], -"sound/samples/sfx_mario/12_mario_hello.aiff": [0,{"us":["@sound",102],"eu":["@sound",102],"sh":["@sound",102]}], -"sound/samples/sfx_mario/13_mario_press_start_to_play.aiff": [0,{"us":["@sound",103],"eu":["@sound",103],"sh":["@sound",103]}], -"sound/samples/sfx_mario/14_mario_twirl_bounce.aiff": [0,{"us":["@sound",104],"eu":["@sound",104],"sh":["@sound",104]}], -"sound/samples/sfx_mario/15_mario_snoring3.aiff": [0,{"us":["@sound",105],"eu":["@sound",105],"sh":["@sound",105]}], +"textures/title_screen_bg/title_screen_bg.06648.rgba16.png": [80,24,3840,{"sh":[2403488,26184],"cn":[2474624,26184]}], +"textures/title_screen_bg/title_screen_bg_ique.001C0.rgba16.png": [80,20,3200,{"cn":[2474624,448]}], +"textures/title_screen_bg/title_screen_bg_ique.00E40.rgba16.png": [80,20,3200,{"cn":[2474624,3648]}], +"textures/title_screen_bg/title_screen_bg_ique.01AC0.rgba16.png": [80,20,3200,{"cn":[2474624,6848]}], +"textures/title_screen_bg/title_screen_bg_ique.02740.rgba16.png": [80,20,3200,{"cn":[2474624,10048]}], +"textures/title_screen_bg/title_screen_bg_ique.033C0.rgba16.png": [80,20,3200,{"cn":[2474624,13248]}], +"textures/title_screen_bg/title_screen_bg_ique.04040.rgba16.png": [80,20,3200,{"cn":[2474624,16448]}], +"textures/title_screen_bg/title_screen_bg_ique.04CC0.rgba16.png": [80,20,3200,{"cn":[2474624,19648]}], +"textures/title_screen_bg/title_screen_bg_ique.05940.rgba16.png": [80,20,3200,{"cn":[2474624,22848]}], +"textures/water/jrb_textures.00000.rgba16.png": [32,32,2048,{"jp":[3354832,0],"us":[3361584,0],"eu":[3235184,0],"sh":[3209552,0],"cn":[3283312,0]}], +"textures/water/jrb_textures.00800.rgba16.png": [64,32,4096,{"jp":[3354832,2048],"us":[3361584,2048],"eu":[3235184,2048],"sh":[3209552,2048],"cn":[3283312,2048]}], +"textures/water/jrb_textures.01800.rgba16.png": [64,32,4096,{"jp":[3354832,6144],"us":[3361584,6144],"eu":[3235184,6144],"sh":[3209552,6144],"cn":[3283312,6144]}], +"textures/water/jrb_textures.02800.rgba16.png": [64,32,4096,{"jp":[3354832,10240],"us":[3361584,10240],"eu":[3235184,10240],"sh":[3209552,10240],"cn":[3283312,10240]}], +"textures/water/jrb_textures.03800.rgba16.png": [64,32,4096,{"jp":[3354832,14336],"us":[3361584,14336],"eu":[3235184,14336],"sh":[3209552,14336],"cn":[3283312,14336]}], +"textures/water/jrb_textures.04800.rgba16.png": [64,32,4096,{"jp":[3354832,18432],"us":[3361584,18432],"eu":[3235184,18432],"sh":[3209552,18432],"cn":[3283312,18432]}], +"textures/water/jrb_textures.05800.rgba16.png": [32,32,2048,{"jp":[3354832,22528],"us":[3361584,22528],"eu":[3235184,22528],"sh":[3209552,22528],"cn":[3283312,22528]}], +"textures/water/jrb_textures.06000.rgba16.png": [32,32,2048,{"jp":[3354832,24576],"us":[3361584,24576],"eu":[3235184,24576],"sh":[3209552,24576],"cn":[3283312,24576]}], +"textures/water/jrb_textures.06800.rgba16.png": [64,32,4096,{"jp":[3354832,26624],"us":[3361584,26624],"eu":[3235184,26624],"sh":[3209552,26624],"cn":[3283312,26624]}], +"textures/water/jrb_textures.07800.rgba16.png": [64,32,4096,{"jp":[3354832,30720],"us":[3361584,30720],"eu":[3235184,30720],"sh":[3209552,30720],"cn":[3283312,30720]}], +"textures/water/jrb_textures.08800.rgba16.png": [32,32,2048,{"jp":[3354832,34816],"us":[3361584,34816],"eu":[3235184,34816],"sh":[3209552,34816],"cn":[3283312,34816]}], +"textures/water/jrb_textures.09000.rgba16.png": [64,32,4096,{"jp":[3354832,36864],"us":[3361584,36864],"eu":[3235184,36864],"sh":[3209552,36864],"cn":[3283312,36864]}], +"textures/water/jrb_textures.0A000.rgba16.png": [32,32,2048,{"jp":[3354832,40960],"us":[3361584,40960],"eu":[3235184,40960],"sh":[3209552,40960],"cn":[3283312,40960]}], +"textures/water/jrb_textures.0A800.rgba16.png": [64,32,4096,{"jp":[3354832,43008],"us":[3361584,43008],"eu":[3235184,43008],"sh":[3209552,43008],"cn":[3283312,43008]}], +"textures/water/jrb_textures.0B800.rgba16.png": [64,32,4096,{"jp":[3354832,47104],"us":[3361584,47104],"eu":[3235184,47104],"sh":[3209552,47104],"cn":[3283312,47104]}], +"sound/samples/bowser_organ/00_organ_C3.aiff": [0,{"jp":["@sound",195],"us":["@sound",216],"eu":["@sound",216]}], +"sound/samples/bowser_organ/01_organ_C4.aiff": [0,{"jp":["@sound",196],"us":["@sound",217],"eu":["@sound",217]}], +"sound/samples/bowser_organ/02_boys_choir_Bb4.aiff": [0,{"jp":["@sound",197],"us":["@sound",218],"eu":["@sound",218]}], +"sound/samples/course_start/00_la_E3.aiff": [0,{"jp":["@sound",194],"us":["@sound",215],"eu":["@sound",215]}], +"sound/samples/instruments/00_banjo_D2.aiff": [0,{"jp":["@sound",120],"us":["@sound",141],"eu":["@sound",141],"sh":["@sound",141],"cn":["@sound",141]}], +"sound/samples/instruments/01_banjo_A2.aiff": [0,{"jp":["@sound",121],"us":["@sound",142],"eu":["@sound",142],"sh":["@sound",142],"cn":["@sound",142]}], +"sound/samples/instruments/02_violin_B2.aiff": [0,{"jp":["@sound",122],"us":["@sound",143],"eu":["@sound",143],"sh":["@sound",143],"cn":["@sound",143]}], +"sound/samples/instruments/03_human_whistle_C3.aiff": [0,{"jp":["@sound",123],"us":["@sound",144],"eu":["@sound",144],"sh":["@sound",144],"cn":["@sound",144]}], +"sound/samples/instruments/04_bright_piano_G#3.aiff": [0,{"jp":["@sound",124],"us":["@sound",145],"eu":["@sound",145],"sh":["@sound",145],"cn":["@sound",145]}], +"sound/samples/instruments/05_acoustic_bass_A1.aiff": [0,{"jp":["@sound",125],"us":["@sound",146],"eu":["@sound",146],"sh":["@sound",146],"cn":["@sound",146]}], +"sound/samples/instruments/06_kick_drum_1.aiff": [0,{"jp":["@sound",126],"us":["@sound",147],"eu":["@sound",147],"sh":["@sound",147],"cn":["@sound",147]}], +"sound/samples/instruments/07_rimshot.aiff": [0,{"jp":["@sound",127],"us":["@sound",148],"eu":["@sound",148],"sh":["@sound",148],"cn":["@sound",148]}], +"sound/samples/instruments/08.aiff": [0,{"jp":["@sound",128],"us":["@sound",149],"eu":["@sound",149],"sh":["@sound",149],"cn":["@sound",149]}], +"sound/samples/instruments/09.aiff": [0,{"jp":["@sound",129],"us":["@sound",150],"eu":["@sound",150],"sh":["@sound",150],"cn":["@sound",150]}], +"sound/samples/instruments/0A_tambourine.aiff": [0,{"jp":["@sound",130],"us":["@sound",151],"eu":["@sound",151],"sh":["@sound",151],"cn":["@sound",151]}], +"sound/samples/instruments/0B.aiff": [0,{"jp":["@sound",131],"us":["@sound",152],"eu":["@sound",152],"sh":["@sound",152],"cn":["@sound",152]}], +"sound/samples/instruments/0C_conga_stick.aiff": [0,{"jp":["@sound",132],"us":["@sound",153],"eu":["@sound",153],"sh":["@sound",153],"cn":["@sound",153]}], +"sound/samples/instruments/0D_clave.aiff": [0,{"jp":["@sound",133],"us":["@sound",154],"eu":["@sound",154],"sh":["@sound",154],"cn":["@sound",154]}], +"sound/samples/instruments/0E_hihat_closed.aiff": [0,{"jp":["@sound",134],"us":["@sound",155],"eu":["@sound",155],"sh":["@sound",155],"cn":["@sound",155]}], +"sound/samples/instruments/0F_hihat_open.aiff": [0,{"jp":["@sound",135],"us":["@sound",156],"eu":["@sound",156],"sh":["@sound",156],"cn":["@sound",156]}], +"sound/samples/instruments/10_cymbal_bell.aiff": [0,{"jp":["@sound",136],"us":["@sound",157],"eu":["@sound",157],"sh":["@sound",157],"cn":["@sound",157]}], +"sound/samples/instruments/11_splash_cymbal.aiff": [0,{"jp":["@sound",137],"us":["@sound",158],"eu":["@sound",158],"sh":["@sound",158],"cn":["@sound",158]}], +"sound/samples/instruments/12_snare_drum_1.aiff": [0,{"jp":["@sound",138],"us":["@sound",159],"eu":["@sound",159],"sh":["@sound",159],"cn":["@sound",159]}], +"sound/samples/instruments/13_snare_drum_2.aiff": [0,{"jp":["@sound",139],"us":["@sound",160],"eu":["@sound",160],"sh":["@sound",160],"cn":["@sound",160]}], +"sound/samples/instruments/14_strings_Eb2.aiff": [0,{"jp":["@sound",140],"us":["@sound",161],"eu":["@sound",161],"sh":["@sound",161],"cn":["@sound",161]}], +"sound/samples/instruments/15_strings_B3.aiff": [0,{"jp":["@sound",141],"us":["@sound",162],"eu":["@sound",162],"sh":["@sound",162],"cn":["@sound",162]}], +"sound/samples/instruments/16_french_horns_C3.aiff": [0,{"jp":["@sound",142],"us":["@sound",163],"eu":["@sound",163],"sh":["@sound",163],"cn":["@sound",163]}], +"sound/samples/instruments/17_trumpet_C#3.aiff": [0,{"jp":["@sound",143],"us":["@sound",164],"eu":["@sound",164],"sh":["@sound",164],"cn":["@sound",164]}], +"sound/samples/instruments/18_timpani.aiff": [0,{"jp":["@sound",144],"us":["@sound",165],"eu":["@sound",165],"sh":["@sound",165],"cn":["@sound",165]}], +"sound/samples/instruments/19_brass_Eb3.aiff": [0,{"jp":["@sound",145],"us":["@sound",166],"eu":["@sound",166],"sh":["@sound",166],"cn":["@sound",166]}], +"sound/samples/instruments/1A_slap_bass_G#2.aiff": [0,{"jp":["@sound",146],"us":["@sound",167],"eu":["@sound",167],"sh":["@sound",167],"cn":["@sound",167]}], +"sound/samples/instruments/1B_percussive_synth_Eb3.aiff": [0,{"jp":["@sound",147],"us":["@sound",168],"eu":["@sound",168],"sh":["@sound",168],"cn":["@sound",168]}], +"sound/samples/instruments/1C_les_paul_guitar_E2.aiff": [0,{"jp":["@sound",148],"us":["@sound",169],"eu":["@sound",169],"sh":["@sound",169],"cn":["@sound",169]}], +"sound/samples/instruments/1D.aiff": [0,{"jp":["@sound",149],"us":["@sound",170],"eu":["@sound",170],"sh":["@sound",170],"cn":["@sound",170]}], +"sound/samples/instruments/1E_closed_triangle.aiff": [0,{"jp":["@sound",150],"us":["@sound",171],"eu":["@sound",171],"sh":["@sound",171],"cn":["@sound",171]}], +"sound/samples/instruments/1F_open_triangle.aiff": [0,{"jp":["@sound",151],"us":["@sound",172],"eu":["@sound",172],"sh":["@sound",172],"cn":["@sound",172]}], +"sound/samples/instruments/20_cabasa.aiff": [0,{"jp":["@sound",152],"us":["@sound",173],"eu":["@sound",173],"sh":["@sound",173],"cn":["@sound",173]}], +"sound/samples/instruments/21_sine_bass_Bb2.aiff": [0,{"jp":["@sound",153],"us":["@sound",174],"eu":["@sound",174],"sh":["@sound",174],"cn":["@sound",174]}], +"sound/samples/instruments/22_boys_choir_Bb4.aiff": [0,{"jp":["@sound",154],"us":["@sound",175],"eu":["@sound",175],"sh":["@sound",175],"cn":["@sound",175]}], +"sound/samples/instruments/23_strings_Eb2.aiff": [0,{"jp":["@sound",155],"us":["@sound",176],"eu":["@sound",176],"sh":["@sound",176],"cn":["@sound",176]}], +"sound/samples/instruments/24_strings_G#2.aiff": [0,{"jp":["@sound",156],"us":["@sound",177],"eu":["@sound",177],"sh":["@sound",177],"cn":["@sound",177]}], +"sound/samples/instruments/25_strings_F#3.aiff": [0,{"jp":["@sound",157],"us":["@sound",178],"eu":["@sound",178],"sh":["@sound",178],"cn":["@sound",178]}], +"sound/samples/instruments/26_crystal_rhodes_C4.aiff": [0,{"jp":["@sound",158],"us":["@sound",179],"eu":["@sound",179],"sh":["@sound",179],"cn":["@sound",179]}], +"sound/samples/instruments/27_harpsichord_F3.aiff": [0,{"jp":["@sound",159],"us":["@sound",180],"eu":["@sound",180],"sh":["@sound",180],"cn":["@sound",180]}], +"sound/samples/instruments/28_sitar_1_A2.aiff": [0,{"jp":["@sound",160],"us":["@sound",181],"eu":["@sound",181],"sh":["@sound",181],"cn":["@sound",181]}], +"sound/samples/instruments/29_orchestra_hit_C3.aiff": [0,{"jp":["@sound",161],"us":["@sound",182],"eu":["@sound",182],"sh":["@sound",182],"cn":["@sound",182]}], +"sound/samples/instruments/2A_tabla_riff_1.aiff": [0,{"jp":["@sound",162],"us":["@sound",183],"eu":["@sound",183],"sh":["@sound",183],"cn":["@sound",183]}], +"sound/samples/instruments/2B_tabla_riff_2.aiff": [0,{"jp":["@sound",163],"us":["@sound",184],"eu":["@sound",184],"sh":["@sound",184],"cn":["@sound",184]}], +"sound/samples/instruments/2C_tabla_riff_3.aiff": [0,{"jp":["@sound",164],"us":["@sound",185],"eu":["@sound",185],"sh":["@sound",185],"cn":["@sound",185]}], +"sound/samples/instruments/2D_trombone_Bb2.aiff": [0,{"jp":["@sound",165],"us":["@sound",186],"eu":["@sound",186],"sh":["@sound",186],"cn":["@sound",186]}], +"sound/samples/instruments/2E_accordion_C4.aiff": [0,{"jp":["@sound",166],"us":["@sound",187],"eu":["@sound",187],"sh":["@sound",187],"cn":["@sound",187]}], +"sound/samples/instruments/2F_sleigh_bells.aiff": [0,{"jp":["@sound",167],"us":["@sound",188],"eu":["@sound",188],"sh":["@sound",188],"cn":["@sound",188]}], +"sound/samples/instruments/30_rarefaction-lahna_E4.aiff": [0,{"jp":["@sound",168],"us":["@sound",189],"eu":["@sound",189],"sh":["@sound",189],"cn":["@sound",189]}], +"sound/samples/instruments/31_rarefaction-convolution_Eb2.aiff": [0,{"jp":["@sound",169],"us":["@sound",190],"eu":["@sound",190],"sh":["@sound",190],"cn":["@sound",190]}], +"sound/samples/instruments/32_metal_rimshot.aiff": [0,{"jp":["@sound",170],"us":["@sound",191],"eu":["@sound",191],"sh":["@sound",191],"cn":["@sound",191]}], +"sound/samples/instruments/33_kick_drum_2.aiff": [0,{"jp":["@sound",171],"us":["@sound",192],"eu":["@sound",192],"sh":["@sound",192],"cn":["@sound",192]}], +"sound/samples/instruments/34_alto_flute_A4.aiff": [0,{"jp":["@sound",172],"us":["@sound",193],"eu":["@sound",193],"sh":["@sound",193],"cn":["@sound",193]}], +"sound/samples/instruments/34b_organ_C3.aiff": [0,{"sh":["@sound",194],"cn":["@sound",194]}], +"sound/samples/instruments/34c_organ_C4.aiff": [0,{"sh":["@sound",195],"cn":["@sound",195]}], +"sound/samples/instruments/35_gospel_organ_F4.aiff": [0,{"jp":["@sound",173],"us":["@sound",194],"eu":["@sound",194],"sh":["@sound",196],"cn":["@sound",196]}], +"sound/samples/instruments/36_sawtooth_synth_Eb1.aiff": [0,{"jp":["@sound",174],"us":["@sound",195],"eu":["@sound",195],"sh":["@sound",197],"cn":["@sound",197]}], +"sound/samples/instruments/37_square_synth_C5.aiff": [0,{"jp":["@sound",175],"us":["@sound",196],"eu":["@sound",196],"sh":["@sound",198],"cn":["@sound",198]}], +"sound/samples/instruments/38_electric_kick_drum.aiff": [0,{"jp":["@sound",176],"us":["@sound",197],"eu":["@sound",197],"sh":["@sound",199],"cn":["@sound",199]}], +"sound/samples/instruments/39_sitar_2_C#3.aiff": [0,{"jp":["@sound",177],"us":["@sound",198],"eu":["@sound",198],"sh":["@sound",200],"cn":["@sound",200]}], +"sound/samples/instruments/3A_music_box_C5.aiff": [0,{"jp":["@sound",178],"us":["@sound",199],"eu":["@sound",199],"sh":["@sound",201],"cn":["@sound",201]}], +"sound/samples/instruments/3B_acoustic_guitar_A1.aiff": [0,{"jp":["@sound",179],"us":["@sound",200],"eu":["@sound",200],"sh":["@sound",202],"cn":["@sound",202]}], +"sound/samples/instruments/3C_acoustic_guitar_E3.aiff": [0,{"jp":["@sound",180],"us":["@sound",201],"eu":["@sound",201],"sh":["@sound",203],"cn":["@sound",203]}], +"sound/samples/instruments/3D_acoustic_guitar_B6.aiff": [0,{"jp":["@sound",181],"us":["@sound",202],"eu":["@sound",202],"sh":["@sound",204],"cn":["@sound",204]}], +"sound/samples/instruments/3E_monk_choir_B2.aiff": [0,{"jp":["@sound",182],"us":["@sound",203],"eu":["@sound",203],"sh":["@sound",205],"cn":["@sound",205]}], +"sound/samples/instruments/3F_small_gamelan.aiff": [0,{"jp":["@sound",183],"us":["@sound",204],"eu":["@sound",204],"sh":["@sound",206],"cn":["@sound",206]}], +"sound/samples/instruments/40_fu_yin_gong_C4.aiff": [0,{"jp":["@sound",184],"us":["@sound",205],"eu":["@sound",205],"sh":["@sound",207],"cn":["@sound",207]}], +"sound/samples/instruments/41_pan_flute_C3.aiff": [0,{"jp":["@sound",185],"us":["@sound",206],"eu":["@sound",206],"sh":["@sound",208],"cn":["@sound",208]}], +"sound/samples/instruments/42_vibraphone_F#4.aiff": [0,{"jp":["@sound",186],"us":["@sound",207],"eu":["@sound",207],"sh":["@sound",209],"cn":["@sound",209]}], +"sound/samples/instruments/43_harmonica_C4.aiff": [0,{"jp":["@sound",187],"us":["@sound",208],"eu":["@sound",208],"sh":["@sound",210],"cn":["@sound",210]}], +"sound/samples/instruments/44_grand_piano_F#5.aiff": [0,{"jp":["@sound",188],"us":["@sound",209],"eu":["@sound",209],"sh":["@sound",211],"cn":["@sound",211]}], +"sound/samples/instruments/45_french_horns_C4.aiff": [0,{"jp":["@sound",189],"us":["@sound",210],"eu":["@sound",210],"sh":["@sound",212],"cn":["@sound",212]}], +"sound/samples/instruments/45b_la_E3.aiff": [0,{"sh":["@sound",213],"cn":["@sound",213]}], +"sound/samples/instruments/46_pizzicato_strings_Bb2.aiff": [0,{"jp":["@sound",190],"us":["@sound",211],"eu":["@sound",211],"sh":["@sound",214],"cn":["@sound",214]}], +"sound/samples/instruments/47_pizzicato_strings_Bb3.aiff": [0,{"jp":["@sound",191],"us":["@sound",212],"eu":["@sound",212],"sh":["@sound",215],"cn":["@sound",215]}], +"sound/samples/instruments/48_steel_drum_C#3.aiff": [0,{"jp":["@sound",192],"us":["@sound",213],"eu":["@sound",213],"sh":["@sound",216],"cn":["@sound",216]}], +"sound/samples/piranha_music_box/00_music_box_C5.aiff": [0,{"jp":["@sound",193],"us":["@sound",214],"eu":["@sound",214]}], +"sound/samples/sfx_1/00_twirl.aiff": [0,{"jp":["@sound",0],"us":["@sound",0],"eu":["@sound",0],"sh":["@sound",0],"cn":["@sound",0]}], +"sound/samples/sfx_1/01_brushing.aiff": [0,{"jp":["@sound",1],"us":["@sound",1],"eu":["@sound",1],"sh":["@sound",1],"cn":["@sound",1]}], +"sound/samples/sfx_1/02_hand_touch.aiff": [0,{"jp":["@sound",2],"us":["@sound",2],"eu":["@sound",2],"sh":["@sound",2],"cn":["@sound",2]}], +"sound/samples/sfx_1/03_yoshi.aiff": [0,{"jp":["@sound",3],"us":["@sound",3],"eu":["@sound",3],"sh":["@sound",3],"cn":["@sound",3]}], +"sound/samples/sfx_1/04_plop.aiff": [0,{"jp":["@sound",4],"us":["@sound",4],"eu":["@sound",4],"sh":["@sound",4],"cn":["@sound",4]}], +"sound/samples/sfx_1/05_heavy_landing.aiff": [0,{"jp":["@sound",5],"us":["@sound",5],"eu":["@sound",5],"sh":["@sound",5],"cn":["@sound",5]}], +"sound/samples/sfx_4/00.aiff": [0,{"jp":["@sound",17],"us":["@sound",17],"eu":["@sound",17],"sh":["@sound",17],"cn":["@sound",17]}], +"sound/samples/sfx_4/01.aiff": [0,{"jp":["@sound",18],"us":["@sound",18],"eu":["@sound",18],"sh":["@sound",18],"cn":["@sound",18]}], +"sound/samples/sfx_4/02.aiff": [0,{"jp":["@sound",19],"us":["@sound",19],"eu":["@sound",19],"sh":["@sound",19],"cn":["@sound",19]}], +"sound/samples/sfx_4/03.aiff": [0,{"jp":["@sound",20],"us":["@sound",20],"eu":["@sound",20],"sh":["@sound",20],"cn":["@sound",20]}], +"sound/samples/sfx_4/04.aiff": [0,{"jp":["@sound",21],"us":["@sound",21],"eu":["@sound",21],"sh":["@sound",21],"cn":["@sound",21]}], +"sound/samples/sfx_4/05.aiff": [0,{"jp":["@sound",22],"us":["@sound",22],"eu":["@sound",22],"sh":["@sound",22],"cn":["@sound",22]}], +"sound/samples/sfx_4/06.aiff": [0,{"jp":["@sound",23],"us":["@sound",23],"eu":["@sound",23],"sh":["@sound",23],"cn":["@sound",23]}], +"sound/samples/sfx_4/07.aiff": [0,{"jp":["@sound",24],"us":["@sound",24],"eu":["@sound",24],"sh":["@sound",24],"cn":["@sound",24]}], +"sound/samples/sfx_4/08.aiff": [0,{"jp":["@sound",25],"us":["@sound",25],"eu":["@sound",25],"sh":["@sound",25],"cn":["@sound",25]}], +"sound/samples/sfx_4/09.aiff": [0,{"jp":["@sound",26],"us":["@sound",26],"eu":["@sound",26],"sh":["@sound",26],"cn":["@sound",26]}], +"sound/samples/sfx_5/00.aiff": [0,{"jp":["@sound",27],"us":["@sound",27],"eu":["@sound",27],"sh":["@sound",27],"cn":["@sound",27]}], +"sound/samples/sfx_5/01.aiff": [0,{"jp":["@sound",28],"us":["@sound",28],"eu":["@sound",28],"sh":["@sound",28],"cn":["@sound",28]}], +"sound/samples/sfx_5/02.aiff": [0,{"jp":["@sound",29],"us":["@sound",29],"eu":["@sound",29],"sh":["@sound",29],"cn":["@sound",29]}], +"sound/samples/sfx_5/03.aiff": [0,{"jp":["@sound",30],"us":["@sound",30],"eu":["@sound",30],"sh":["@sound",30],"cn":["@sound",30]}], +"sound/samples/sfx_5/04.aiff": [0,{"jp":["@sound",31],"us":["@sound",31],"eu":["@sound",31],"sh":["@sound",31],"cn":["@sound",31]}], +"sound/samples/sfx_5/05.aiff": [0,{"jp":["@sound",32],"us":["@sound",32],"eu":["@sound",32],"sh":["@sound",32],"cn":["@sound",32]}], +"sound/samples/sfx_5/06.aiff": [0,{"jp":["@sound",33],"us":["@sound",33],"eu":["@sound",33],"sh":["@sound",33],"cn":["@sound",33]}], +"sound/samples/sfx_5/07.aiff": [0,{"jp":["@sound",34],"us":["@sound",34],"eu":["@sound",34],"sh":["@sound",34],"cn":["@sound",34]}], +"sound/samples/sfx_5/08.aiff": [0,{"jp":["@sound",35],"us":["@sound",35],"eu":["@sound",35],"sh":["@sound",35],"cn":["@sound",35]}], +"sound/samples/sfx_5/09.aiff": [0,{"jp":["@sound",36],"us":["@sound",36],"eu":["@sound",36],"sh":["@sound",36],"cn":["@sound",36]}], +"sound/samples/sfx_5/0A.aiff": [0,{"jp":["@sound",37],"us":["@sound",37],"eu":["@sound",37],"sh":["@sound",37],"cn":["@sound",37]}], +"sound/samples/sfx_5/0B.aiff": [0,{"jp":["@sound",38],"us":["@sound",38],"eu":["@sound",38],"sh":["@sound",38],"cn":["@sound",38]}], +"sound/samples/sfx_5/0C.aiff": [0,{"jp":["@sound",39],"us":["@sound",39],"eu":["@sound",39],"sh":["@sound",39],"cn":["@sound",39]}], +"sound/samples/sfx_5/0D.aiff": [0,{"jp":["@sound",40],"us":["@sound",40],"eu":["@sound",40],"sh":["@sound",40],"cn":["@sound",40]}], +"sound/samples/sfx_5/0E.aiff": [0,{"jp":["@sound",41],"us":["@sound",41],"eu":["@sound",41],"sh":["@sound",41],"cn":["@sound",41]}], +"sound/samples/sfx_5/0F.aiff": [0,{"jp":["@sound",42],"us":["@sound",42],"eu":["@sound",42],"sh":["@sound",42],"cn":["@sound",42]}], +"sound/samples/sfx_5/10.aiff": [0,{"jp":["@sound",43],"us":["@sound",43],"eu":["@sound",43],"sh":["@sound",43],"cn":["@sound",43]}], +"sound/samples/sfx_5/11.aiff": [0,{"jp":["@sound",44],"us":["@sound",44],"eu":["@sound",44],"sh":["@sound",44],"cn":["@sound",44]}], +"sound/samples/sfx_5/12.aiff": [0,{"jp":["@sound",45],"us":["@sound",45],"eu":["@sound",45],"sh":["@sound",45],"cn":["@sound",45]}], +"sound/samples/sfx_5/13.aiff": [0,{"jp":["@sound",46],"us":["@sound",46],"eu":["@sound",46],"sh":["@sound",46],"cn":["@sound",46]}], +"sound/samples/sfx_5/14.aiff": [0,{"jp":["@sound",47],"us":["@sound",47],"eu":["@sound",47],"sh":["@sound",47],"cn":["@sound",47]}], +"sound/samples/sfx_5/15.aiff": [0,{"jp":["@sound",48],"us":["@sound",48],"eu":["@sound",48],"sh":["@sound",48],"cn":["@sound",48]}], +"sound/samples/sfx_5/16.aiff": [0,{"jp":["@sound",49],"us":["@sound",49],"eu":["@sound",49],"sh":["@sound",49],"cn":["@sound",49]}], +"sound/samples/sfx_5/17.aiff": [0,{"jp":["@sound",50],"us":["@sound",50],"eu":["@sound",50],"sh":["@sound",50],"cn":["@sound",50]}], +"sound/samples/sfx_5/18.aiff": [0,{"jp":["@sound",51],"us":["@sound",51],"eu":["@sound",51],"sh":["@sound",51],"cn":["@sound",51]}], +"sound/samples/sfx_5/19.aiff": [0,{"jp":["@sound",52],"us":["@sound",52],"eu":["@sound",52],"sh":["@sound",52],"cn":["@sound",52]}], +"sound/samples/sfx_5/1A.aiff": [0,{"jp":["@sound",53],"us":["@sound",53],"eu":["@sound",53],"sh":["@sound",53],"cn":["@sound",53]}], +"sound/samples/sfx_5/1B.aiff": [0,{"jp":["@sound",54],"us":["@sound",54],"eu":["@sound",54],"sh":["@sound",54],"cn":["@sound",54]}], +"sound/samples/sfx_5/1C.aiff": [0,{"jp":["@sound",55],"us":["@sound",55],"eu":["@sound",55],"sh":["@sound",55],"cn":["@sound",55]}], +"sound/samples/sfx_6/00.aiff": [0,{"jp":["@sound",56],"us":["@sound",56],"eu":["@sound",56],"sh":["@sound",56],"cn":["@sound",56]}], +"sound/samples/sfx_6/01.aiff": [0,{"jp":["@sound",57],"us":["@sound",57],"eu":["@sound",57],"sh":["@sound",57],"cn":["@sound",57]}], +"sound/samples/sfx_6/02.aiff": [0,{"jp":["@sound",58],"us":["@sound",58],"eu":["@sound",58],"sh":["@sound",58],"cn":["@sound",58]}], +"sound/samples/sfx_6/03.aiff": [0,{"jp":["@sound",59],"us":["@sound",59],"eu":["@sound",59],"sh":["@sound",59],"cn":["@sound",59]}], +"sound/samples/sfx_6/04.aiff": [0,{"jp":["@sound",60],"us":["@sound",60],"eu":["@sound",60],"sh":["@sound",60],"cn":["@sound",60]}], +"sound/samples/sfx_6/05.aiff": [0,{"jp":["@sound",61],"us":["@sound",61],"eu":["@sound",61],"sh":["@sound",61],"cn":["@sound",61]}], +"sound/samples/sfx_6/06.aiff": [0,{"jp":["@sound",62],"us":["@sound",62],"eu":["@sound",62],"sh":["@sound",62],"cn":["@sound",62]}], +"sound/samples/sfx_6/07.aiff": [0,{"jp":["@sound",63],"us":["@sound",63],"eu":["@sound",63],"sh":["@sound",63],"cn":["@sound",63]}], +"sound/samples/sfx_6/08.aiff": [0,{"jp":["@sound",64],"us":["@sound",64],"eu":["@sound",64],"sh":["@sound",64],"cn":["@sound",64]}], +"sound/samples/sfx_6/09.aiff": [0,{"jp":["@sound",65],"us":["@sound",65],"eu":["@sound",65],"sh":["@sound",65],"cn":["@sound",65]}], +"sound/samples/sfx_6/0A.aiff": [0,{"jp":["@sound",66],"us":["@sound",66],"eu":["@sound",66],"sh":["@sound",66],"cn":["@sound",66]}], +"sound/samples/sfx_6/0B.aiff": [0,{"jp":["@sound",67],"us":["@sound",67],"eu":["@sound",67],"sh":["@sound",67],"cn":["@sound",67]}], +"sound/samples/sfx_6/0C.aiff": [0,{"jp":["@sound",68],"us":["@sound",68],"eu":["@sound",68],"sh":["@sound",68],"cn":["@sound",68]}], +"sound/samples/sfx_6/0D.aiff": [0,{"jp":["@sound",69],"us":["@sound",69],"eu":["@sound",69],"sh":["@sound",69],"cn":["@sound",69]}], +"sound/samples/sfx_7/00.aiff": [0,{"jp":["@sound",70],"us":["@sound",70],"eu":["@sound",70],"sh":["@sound",70],"cn":["@sound",70]}], +"sound/samples/sfx_7/01.aiff": [0,{"jp":["@sound",71],"us":["@sound",71],"eu":["@sound",71],"sh":["@sound",71],"cn":["@sound",71]}], +"sound/samples/sfx_7/02.aiff": [0,{"jp":["@sound",72],"us":["@sound",72],"eu":["@sound",72],"sh":["@sound",72],"cn":["@sound",72]}], +"sound/samples/sfx_7/03.aiff": [0,{"jp":["@sound",73],"us":["@sound",73],"eu":["@sound",73],"sh":["@sound",73],"cn":["@sound",73]}], +"sound/samples/sfx_7/04.aiff": [0,{"jp":["@sound",74],"us":["@sound",74],"eu":["@sound",74],"sh":["@sound",74],"cn":["@sound",74]}], +"sound/samples/sfx_7/05.aiff": [0,{"jp":["@sound",75],"us":["@sound",75],"eu":["@sound",75],"sh":["@sound",75],"cn":["@sound",75]}], +"sound/samples/sfx_7/06.aiff": [0,{"jp":["@sound",76],"us":["@sound",76],"eu":["@sound",76],"sh":["@sound",76],"cn":["@sound",76]}], +"sound/samples/sfx_7/07.aiff": [0,{"jp":["@sound",77],"us":["@sound",77],"eu":["@sound",77],"sh":["@sound",77],"cn":["@sound",77]}], +"sound/samples/sfx_7/08.aiff": [0,{"jp":["@sound",78],"us":["@sound",78],"eu":["@sound",78],"sh":["@sound",78],"cn":["@sound",78]}], +"sound/samples/sfx_7/09.aiff": [0,{"jp":["@sound",79],"us":["@sound",79],"eu":["@sound",79],"sh":["@sound",79],"cn":["@sound",79]}], +"sound/samples/sfx_7/0A.aiff": [0,{"jp":["@sound",80],"us":["@sound",80],"eu":["@sound",80],"sh":["@sound",80],"cn":["@sound",80]}], +"sound/samples/sfx_7/0B.aiff": [0,{"jp":["@sound",81],"us":["@sound",81],"eu":["@sound",81],"sh":["@sound",81],"cn":["@sound",81]}], +"sound/samples/sfx_7/0C.aiff": [0,{"jp":["@sound",82],"us":["@sound",82],"eu":["@sound",82],"sh":["@sound",82],"cn":["@sound",82]}], +"sound/samples/sfx_7/0D_chain_chomp_bark.aiff": [0,{"us":["@sound",83],"eu":["@sound",83],"sh":["@sound",83],"cn":["@sound",83]}], +"sound/samples/sfx_9/00.aiff": [0,{"jp":["@sound",99],"us":["@sound",111],"eu":["@sound",111],"sh":["@sound",111],"cn":["@sound",111]}], +"sound/samples/sfx_9/01.aiff": [0,{"jp":["@sound",100],"us":["@sound",112],"eu":["@sound",112],"sh":["@sound",112],"cn":["@sound",112]}], +"sound/samples/sfx_9/02.aiff": [0,{"jp":["@sound",101],"us":["@sound",113],"eu":["@sound",113],"sh":["@sound",113],"cn":["@sound",113]}], +"sound/samples/sfx_9/03.aiff": [0,{"jp":["@sound",102],"us":["@sound",114],"eu":["@sound",114],"sh":["@sound",114],"cn":["@sound",114]}], +"sound/samples/sfx_9/04_camera_buzz.aiff": [0,{"jp":["@sound",103],"us":["@sound",115],"eu":["@sound",115],"sh":["@sound",115],"cn":["@sound",115]}], +"sound/samples/sfx_9/05_camera_shutter.aiff": [0,{"jp":["@sound",104],"us":["@sound",116],"eu":["@sound",116],"sh":["@sound",116],"cn":["@sound",116]}], +"sound/samples/sfx_9/06.aiff": [0,{"jp":["@sound",105],"us":["@sound",117],"eu":["@sound",117],"sh":["@sound",117],"cn":["@sound",117]}], +"sound/samples/sfx_mario/00_mario_jump_hoo.aiff": [0,{"jp":["@sound",83],"us":["@sound",84],"eu":["@sound",84],"sh":["@sound",84],"cn":["@sound",84]}], +"sound/samples/sfx_mario/01_mario_jump_wah.aiff": [0,{"jp":["@sound",84],"us":["@sound",85],"eu":["@sound",85],"sh":["@sound",85],"cn":["@sound",85]}], +"sound/samples/sfx_mario/02_mario_yah.aiff": [0,{"jp":["@sound",85],"us":["@sound",86],"eu":["@sound",86],"sh":["@sound",86],"cn":["@sound",86]}], +"sound/samples/sfx_mario/03_mario_haha.aiff": [0,{"jp":["@sound",86],"us":["@sound",87],"eu":["@sound",87],"sh":["@sound",87],"cn":["@sound",87]}], +"sound/samples/sfx_mario/04_mario_yahoo.aiff": [0,{"jp":["@sound",87],"us":["@sound",88],"eu":["@sound",88],"sh":["@sound",88],"cn":["@sound",88]}], +"sound/samples/sfx_mario/05_mario_uh.aiff": [0,{"jp":["@sound",88],"us":["@sound",89],"eu":["@sound",89],"sh":["@sound",89],"cn":["@sound",89]}], +"sound/samples/sfx_mario/06_mario_hrmm.aiff": [0,{"jp":["@sound",89],"us":["@sound",90],"eu":["@sound",90],"sh":["@sound",90],"cn":["@sound",90]}], +"sound/samples/sfx_mario/07_mario_wah2.aiff": [0,{"jp":["@sound",90],"us":["@sound",91],"eu":["@sound",91],"sh":["@sound",91],"cn":["@sound",91]}], +"sound/samples/sfx_mario/08_mario_whoa.aiff": [0,{"jp":["@sound",91],"us":["@sound",92],"eu":["@sound",92],"sh":["@sound",92],"cn":["@sound",92]}], +"sound/samples/sfx_mario/09_mario_eeuh.aiff": [0,{"jp":["@sound",92],"us":["@sound",93],"eu":["@sound",93],"sh":["@sound",93],"cn":["@sound",93]}], +"sound/samples/sfx_mario/0A_mario_attacked.aiff": [0,{"jp":["@sound",93],"us":["@sound",94],"eu":["@sound",94],"sh":["@sound",94],"cn":["@sound",94]}], +"sound/samples/sfx_mario/0B_mario_ooof.aiff": [0,{"jp":["@sound",94],"us":["@sound",95],"eu":["@sound",95],"sh":["@sound",95],"cn":["@sound",95]}], +"sound/samples/sfx_mario/0C_mario_here_we_go.aiff": [0,{"jp":["@sound",95],"us":["@sound",96],"eu":["@sound",96],"sh":["@sound",96],"cn":["@sound",96]}], +"sound/samples/sfx_mario/0D_mario_yawning.aiff": [0,{"jp":["@sound",96],"us":["@sound",97],"eu":["@sound",97],"sh":["@sound",97],"cn":["@sound",97]}], +"sound/samples/sfx_mario/0E_mario_snoring1.aiff": [0,{"jp":["@sound",97],"us":["@sound",98],"eu":["@sound",98],"sh":["@sound",98],"cn":["@sound",98]}], +"sound/samples/sfx_mario/0F_mario_snoring2.aiff": [0,{"jp":["@sound",98],"us":["@sound",99],"eu":["@sound",99],"sh":["@sound",99],"cn":["@sound",99]}], +"sound/samples/sfx_mario/10_mario_doh.aiff": [0,{"us":["@sound",100],"eu":["@sound",100],"sh":["@sound",100],"cn":["@sound",100]}], +"sound/samples/sfx_mario/11_mario_game_over.aiff": [0,{"us":["@sound",101],"eu":["@sound",101],"sh":["@sound",101],"cn":["@sound",101]}], +"sound/samples/sfx_mario/12_mario_hello.aiff": [0,{"us":["@sound",102],"eu":["@sound",102],"sh":["@sound",102],"cn":["@sound",102]}], +"sound/samples/sfx_mario/13_mario_press_start_to_play.aiff": [0,{"us":["@sound",103],"eu":["@sound",103],"sh":["@sound",103],"cn":["@sound",103]}], +"sound/samples/sfx_mario/14_mario_twirl_bounce.aiff": [0,{"us":["@sound",104],"eu":["@sound",104],"sh":["@sound",104],"cn":["@sound",104]}], +"sound/samples/sfx_mario/15_mario_snoring3.aiff": [0,{"us":["@sound",105],"eu":["@sound",105],"sh":["@sound",105],"cn":["@sound",105]}], "sound/samples/sfx_mario/16_mario_so_longa_bowser.aiff": [0,{"us":["@sound",106],"eu":["@sound",106]}], -"sound/samples/sfx_mario/16_mario_bye_bye.aiff": [0,{"sh":["@sound",106]}], -"sound/samples/sfx_mario/17_mario_ima_tired.aiff": [0,{"us":["@sound",107],"eu":["@sound",107],"sh":["@sound",107]}], -"sound/samples/sfx_mario/18_mario_waha.aiff": [0,{"us":["@sound",108],"eu":["@sound",108],"sh":["@sound",108]}], -"sound/samples/sfx_mario/19_mario_yippee.aiff": [0,{"us":["@sound",109],"eu":["@sound",109],"sh":["@sound",109]}], -"sound/samples/sfx_mario/1A_mario_lets_a_go.aiff": [0,{"us":["@sound",110],"eu":["@sound",110],"sh":["@sound",110]}], -"sound/samples/sfx_mario_peach/00_mario_waaaooow.aiff": [0,{"jp":["@sound",106],"us":["@sound",118],"eu":["@sound",118],"sh":["@sound",118]}], -"sound/samples/sfx_mario_peach/01_mario_hoohoo.aiff": [0,{"jp":["@sound",107],"us":["@sound",119],"eu":["@sound",119],"sh":["@sound",119]}], -"sound/samples/sfx_mario_peach/02_mario_panting.aiff": [0,{"jp":["@sound",108],"us":["@sound",120],"eu":["@sound",120],"sh":["@sound",120]}], -"sound/samples/sfx_mario_peach/03_mario_dying.aiff": [0,{"jp":["@sound",109],"us":["@sound",121],"eu":["@sound",121],"sh":["@sound",121]}], -"sound/samples/sfx_mario_peach/04_mario_on_fire.aiff": [0,{"jp":["@sound",110],"us":["@sound",122],"eu":["@sound",122],"sh":["@sound",122]}], -"sound/samples/sfx_mario_peach/05_mario_uh2.aiff": [0,{"jp":["@sound",111],"us":["@sound",123],"eu":["@sound",123],"sh":["@sound",123]}], -"sound/samples/sfx_mario_peach/06_mario_coughing.aiff": [0,{"jp":["@sound",112],"us":["@sound",124],"eu":["@sound",124],"sh":["@sound",124]}], -"sound/samples/sfx_mario_peach/07_mario_its_a_me_mario.aiff": [0,{"jp":["@sound",113],"us":["@sound",125],"eu":["@sound",125],"sh":["@sound",125]}], -"sound/samples/sfx_mario_peach/08_mario_punch_yah.aiff": [0,{"jp":["@sound",114],"us":["@sound",126],"eu":["@sound",126],"sh":["@sound",126]}], -"sound/samples/sfx_mario_peach/09_mario_punch_hoo.aiff": [0,{"jp":["@sound",115],"us":["@sound",127],"eu":["@sound",127],"sh":["@sound",127]}], -"sound/samples/sfx_mario_peach/0A_mario_mama_mia.aiff": [0,{"jp":["@sound",116],"us":["@sound",128],"eu":["@sound",128],"sh":["@sound",128]}], -"sound/samples/sfx_mario_peach/0B_mario_okey_dokey.aiff": [0,{"jp":["@sound",117],"us":["@sound",129],"eu":["@sound",129],"sh":["@sound",129]}], -"sound/samples/sfx_mario_peach/0C_mario_drowning.aiff": [0,{"jp":["@sound",118],"us":["@sound",130],"eu":["@sound",130],"sh":["@sound",130]}], -"sound/samples/sfx_mario_peach/0D_mario_thank_you_playing_my_game.aiff": [0,{"jp":["@sound",119],"us":["@sound",131],"eu":["@sound",131],"sh":["@sound",131]}], -"sound/samples/sfx_mario_peach/0E_peach_dear_mario.aiff": [0,{"us":["@sound",132],"eu":["@sound",132],"sh":["@sound",132]}], -"sound/samples/sfx_mario_peach/0F_peach_mario.aiff": [0,{"us":["@sound",133],"eu":["@sound",133],"sh":["@sound",133]}], -"sound/samples/sfx_mario_peach/10_peach_power_of_the_stars.aiff": [0,{"us":["@sound",134],"eu":["@sound",134],"sh":["@sound",134]}], -"sound/samples/sfx_mario_peach/11_peach_thanks_to_you.aiff": [0,{"us":["@sound",135],"eu":["@sound",135],"sh":["@sound",135]}], -"sound/samples/sfx_mario_peach/12_peach_thank_you_mario.aiff": [0,{"us":["@sound",136],"eu":["@sound",136],"sh":["@sound",136]}], -"sound/samples/sfx_mario_peach/13_peach_something_special.aiff": [0,{"us":["@sound",137],"eu":["@sound",137],"sh":["@sound",137]}], -"sound/samples/sfx_mario_peach/14_peach_bake_a_cake.aiff": [0,{"us":["@sound",138],"eu":["@sound",138],"sh":["@sound",138]}], -"sound/samples/sfx_mario_peach/15_peach_for_mario.aiff": [0,{"us":["@sound",139],"eu":["@sound",139],"sh":["@sound",139]}], -"sound/samples/sfx_mario_peach/16_peach_mario2.aiff": [0,{"us":["@sound",140],"eu":["@sound",140],"sh":["@sound",140]}], -"sound/samples/sfx_terrain/00_step_default.aiff": [0,{"jp":["@sound",6],"us":["@sound",6],"eu":["@sound",6],"sh":["@sound",6]}], -"sound/samples/sfx_terrain/01_step_grass.aiff": [0,{"jp":["@sound",7],"us":["@sound",7],"eu":["@sound",7],"sh":["@sound",7]}], -"sound/samples/sfx_terrain/02_step_stone.aiff": [0,{"jp":["@sound",8],"us":["@sound",8],"eu":["@sound",8],"sh":["@sound",8]}], -"sound/samples/sfx_terrain/03_step_spooky.aiff": [0,{"jp":["@sound",9],"us":["@sound",9],"eu":["@sound",9],"sh":["@sound",9]}], -"sound/samples/sfx_terrain/04_step_snow.aiff": [0,{"jp":["@sound",10],"us":["@sound",10],"eu":["@sound",10],"sh":["@sound",10]}], -"sound/samples/sfx_terrain/05_step_ice.aiff": [0,{"jp":["@sound",11],"us":["@sound",11],"eu":["@sound",11],"sh":["@sound",11]}], -"sound/samples/sfx_terrain/06_step_metal.aiff": [0,{"jp":["@sound",12],"us":["@sound",12],"eu":["@sound",12],"sh":["@sound",12]}], -"sound/samples/sfx_terrain/07_step_sand.aiff": [0,{"jp":["@sound",13],"us":["@sound",13],"eu":["@sound",13],"sh":["@sound",13]}], -"sound/samples/sfx_water/00_plunge.aiff": [0,{"jp":["@sound",14],"us":["@sound",14],"eu":["@sound",14],"sh":["@sound",14]}], -"sound/samples/sfx_water/01_splash.aiff": [0,{"jp":["@sound",15],"us":["@sound",15],"eu":["@sound",15],"sh":["@sound",15]}], -"sound/samples/sfx_water/02_swim.aiff": [0,{"jp":["@sound",16],"us":["@sound",16],"eu":["@sound",16],"sh":["@sound",16]}] +"sound/samples/sfx_mario/16_mario_bye_bye.aiff": [0,{"sh":["@sound",106],"cn":["@sound",106]}], +"sound/samples/sfx_mario/17_mario_ima_tired.aiff": [0,{"us":["@sound",107],"eu":["@sound",107],"sh":["@sound",107],"cn":["@sound",107]}], +"sound/samples/sfx_mario/18_mario_waha.aiff": [0,{"us":["@sound",108],"eu":["@sound",108],"sh":["@sound",108],"cn":["@sound",108]}], +"sound/samples/sfx_mario/19_mario_yippee.aiff": [0,{"us":["@sound",109],"eu":["@sound",109],"sh":["@sound",109],"cn":["@sound",109]}], +"sound/samples/sfx_mario/1A_mario_lets_a_go.aiff": [0,{"us":["@sound",110],"eu":["@sound",110],"sh":["@sound",110],"cn":["@sound",110]}], +"sound/samples/sfx_mario_peach/00_mario_waaaooow.aiff": [0,{"jp":["@sound",106],"us":["@sound",118],"eu":["@sound",118],"sh":["@sound",118],"cn":["@sound",118]}], +"sound/samples/sfx_mario_peach/01_mario_hoohoo.aiff": [0,{"jp":["@sound",107],"us":["@sound",119],"eu":["@sound",119],"sh":["@sound",119],"cn":["@sound",119]}], +"sound/samples/sfx_mario_peach/02_mario_panting.aiff": [0,{"jp":["@sound",108],"us":["@sound",120],"eu":["@sound",120],"sh":["@sound",120],"cn":["@sound",120]}], +"sound/samples/sfx_mario_peach/03_mario_dying.aiff": [0,{"jp":["@sound",109],"us":["@sound",121],"eu":["@sound",121],"sh":["@sound",121],"cn":["@sound",121]}], +"sound/samples/sfx_mario_peach/04_mario_on_fire.aiff": [0,{"jp":["@sound",110],"us":["@sound",122],"eu":["@sound",122],"sh":["@sound",122],"cn":["@sound",122]}], +"sound/samples/sfx_mario_peach/05_mario_uh2.aiff": [0,{"jp":["@sound",111],"us":["@sound",123],"eu":["@sound",123],"sh":["@sound",123],"cn":["@sound",123]}], +"sound/samples/sfx_mario_peach/06_mario_coughing.aiff": [0,{"jp":["@sound",112],"us":["@sound",124],"eu":["@sound",124],"sh":["@sound",124],"cn":["@sound",124]}], +"sound/samples/sfx_mario_peach/07_mario_its_a_me_mario.aiff": [0,{"jp":["@sound",113],"us":["@sound",125],"eu":["@sound",125],"sh":["@sound",125],"cn":["@sound",125]}], +"sound/samples/sfx_mario_peach/08_mario_punch_yah.aiff": [0,{"jp":["@sound",114],"us":["@sound",126],"eu":["@sound",126],"sh":["@sound",126],"cn":["@sound",126]}], +"sound/samples/sfx_mario_peach/09_mario_punch_hoo.aiff": [0,{"jp":["@sound",115],"us":["@sound",127],"eu":["@sound",127],"sh":["@sound",127],"cn":["@sound",127]}], +"sound/samples/sfx_mario_peach/0A_mario_mama_mia.aiff": [0,{"jp":["@sound",116],"us":["@sound",128],"eu":["@sound",128],"sh":["@sound",128],"cn":["@sound",128]}], +"sound/samples/sfx_mario_peach/0B_mario_okey_dokey.aiff": [0,{"jp":["@sound",117],"us":["@sound",129],"eu":["@sound",129],"sh":["@sound",129],"cn":["@sound",129]}], +"sound/samples/sfx_mario_peach/0C_mario_drowning.aiff": [0,{"jp":["@sound",118],"us":["@sound",130],"eu":["@sound",130],"sh":["@sound",130],"cn":["@sound",130]}], +"sound/samples/sfx_mario_peach/0D_mario_thank_you_playing_my_game.aiff": [0,{"jp":["@sound",119],"us":["@sound",131],"eu":["@sound",131],"sh":["@sound",131],"cn":["@sound",131]}], +"sound/samples/sfx_mario_peach/0E_peach_dear_mario.aiff": [0,{"us":["@sound",132],"eu":["@sound",132],"sh":["@sound",132],"cn":["@sound",132]}], +"sound/samples/sfx_mario_peach/0F_peach_mario.aiff": [0,{"us":["@sound",133],"eu":["@sound",133],"sh":["@sound",133],"cn":["@sound",133]}], +"sound/samples/sfx_mario_peach/10_peach_power_of_the_stars.aiff": [0,{"us":["@sound",134],"eu":["@sound",134],"sh":["@sound",134],"cn":["@sound",134]}], +"sound/samples/sfx_mario_peach/11_peach_thanks_to_you.aiff": [0,{"us":["@sound",135],"eu":["@sound",135],"sh":["@sound",135],"cn":["@sound",135]}], +"sound/samples/sfx_mario_peach/12_peach_thank_you_mario.aiff": [0,{"us":["@sound",136],"eu":["@sound",136],"sh":["@sound",136],"cn":["@sound",136]}], +"sound/samples/sfx_mario_peach/13_peach_something_special.aiff": [0,{"us":["@sound",137],"eu":["@sound",137],"sh":["@sound",137],"cn":["@sound",137]}], +"sound/samples/sfx_mario_peach/14_peach_bake_a_cake.aiff": [0,{"us":["@sound",138],"eu":["@sound",138],"sh":["@sound",138],"cn":["@sound",138]}], +"sound/samples/sfx_mario_peach/15_peach_for_mario.aiff": [0,{"us":["@sound",139],"eu":["@sound",139],"sh":["@sound",139],"cn":["@sound",139]}], +"sound/samples/sfx_mario_peach/16_peach_mario2.aiff": [0,{"us":["@sound",140],"eu":["@sound",140],"sh":["@sound",140],"cn":["@sound",140]}], +"sound/samples/sfx_terrain/00_step_default.aiff": [0,{"jp":["@sound",6],"us":["@sound",6],"eu":["@sound",6],"sh":["@sound",6],"cn":["@sound",6]}], +"sound/samples/sfx_terrain/01_step_grass.aiff": [0,{"jp":["@sound",7],"us":["@sound",7],"eu":["@sound",7],"sh":["@sound",7],"cn":["@sound",7]}], +"sound/samples/sfx_terrain/02_step_stone.aiff": [0,{"jp":["@sound",8],"us":["@sound",8],"eu":["@sound",8],"sh":["@sound",8],"cn":["@sound",8]}], +"sound/samples/sfx_terrain/03_step_spooky.aiff": [0,{"jp":["@sound",9],"us":["@sound",9],"eu":["@sound",9],"sh":["@sound",9],"cn":["@sound",9]}], +"sound/samples/sfx_terrain/04_step_snow.aiff": [0,{"jp":["@sound",10],"us":["@sound",10],"eu":["@sound",10],"sh":["@sound",10],"cn":["@sound",10]}], +"sound/samples/sfx_terrain/05_step_ice.aiff": [0,{"jp":["@sound",11],"us":["@sound",11],"eu":["@sound",11],"sh":["@sound",11],"cn":["@sound",11]}], +"sound/samples/sfx_terrain/06_step_metal.aiff": [0,{"jp":["@sound",12],"us":["@sound",12],"eu":["@sound",12],"sh":["@sound",12],"cn":["@sound",12]}], +"sound/samples/sfx_terrain/07_step_sand.aiff": [0,{"jp":["@sound",13],"us":["@sound",13],"eu":["@sound",13],"sh":["@sound",13],"cn":["@sound",13]}], +"sound/samples/sfx_water/00_plunge.aiff": [0,{"jp":["@sound",14],"us":["@sound",14],"eu":["@sound",14],"sh":["@sound",14],"cn":["@sound",14]}], +"sound/samples/sfx_water/01_splash.aiff": [0,{"jp":["@sound",15],"us":["@sound",15],"eu":["@sound",15],"sh":["@sound",15],"cn":["@sound",15]}], +"sound/samples/sfx_water/02_swim.aiff": [0,{"jp":["@sound",16],"us":["@sound",16],"eu":["@sound",16],"sh":["@sound",16],"cn":["@sound",16]}] } diff --git a/assets/demo_data.json b/assets/demo_data.json index 3652b490..e723caf8 100644 --- a/assets/demo_data.json +++ b/assets/demo_data.json @@ -19,7 +19,7 @@ { "table": [ - {"demofile":"bitdw", "ifdef":["VERSION_US", "VERSION_SH"]}, + {"demofile":"bitdw", "ifdef":["VERSION_US", "VERSION_SH", "VERSION_CN"]}, /* Whomp's Fortress has the wrong size. The original entries probably manually input the sizes. */ @@ -44,6 +44,6 @@ Mario runs into the sign and aligns himself as if it were a mistake. */ {"name":"unused"}, - {"name":"bitdw", "ifdef":["VERSION_US", "VERSION_SH"]} + {"name":"bitdw", "ifdef":["VERSION_US", "VERSION_SH", "VERSION_CN"]} ] } diff --git a/bin/segment2.c b/bin/segment2.c index ea305277..7f69dc33 100644 --- a/bin/segment2.c +++ b/bin/segment2.c @@ -138,7 +138,7 @@ ALIGNED8 static const Texture texture_hud_char_U[] = { #include "textures/segment2/segment2.03C00.rgba16.inc.c" }; -#if defined(VERSION_JP) || defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_JP) || defined(VERSION_SH) ALIGNED8 static const Texture texture_hud_char_V[] = { #include "textures/segment2/segment2.03E00.rgba16.inc.c" }; @@ -158,7 +158,7 @@ ALIGNED8 static const Texture texture_hud_char_Y[] = { #include "textures/segment2/segment2.04400.rgba16.inc.c" }; -#if defined(VERSION_JP) || defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_JP) || defined(VERSION_SH) ALIGNED8 static const Texture texture_hud_char_Z[] = { #include "textures/segment2/segment2.04600.rgba16.inc.c" }; @@ -228,6 +228,504 @@ ALIGNED8 static const Texture texture_hud_char_beta_key[] = { }; #endif +#if defined(VERSION_CN) +ALIGNED8 static const Texture texture_hud_char_cn_04A00[] = { +#include "textures/segment2/segment2_cn.04A00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_04C00[] = { +#include "textures/segment2/segment2_cn.04C00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_04E00[] = { +#include "textures/segment2/segment2_cn.04E00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_05000[] = { +#include "textures/segment2/segment2_cn.05000.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_05200[] = { +#include "textures/segment2/segment2_cn.05200.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_05400[] = { +#include "textures/segment2/segment2_cn.05400.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_05600[] = { +#include "textures/segment2/segment2_cn.05600.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_05800[] = { +#include "textures/segment2/segment2_cn.05800.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_05A00[] = { +#include "textures/segment2/segment2_cn.05A00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_05C00[] = { +#include "textures/segment2/segment2_cn.05C00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_05E00[] = { +#include "textures/segment2/segment2_cn.05E00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_06000[] = { +#include "textures/segment2/segment2_cn.06000.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_06200[] = { +#include "textures/segment2/segment2_cn.06200.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_06400[] = { +#include "textures/segment2/segment2_cn.06400.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_06600[] = { +#include "textures/segment2/segment2_cn.06600.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_06800[] = { +#include "textures/segment2/segment2_cn.06800.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_06A00[] = { +#include "textures/segment2/segment2_cn.06A00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_06C00[] = { +#include "textures/segment2/segment2_cn.06C00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_06E00[] = { +#include "textures/segment2/segment2_cn.06E00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_07000[] = { +#include "textures/segment2/segment2_cn.07000.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_07200[] = { +#include "textures/segment2/segment2_cn.07200.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_07400[] = { +#include "textures/segment2/segment2_cn.07400.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_07600[] = { +#include "textures/segment2/segment2_cn.07600.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_07800[] = { +#include "textures/segment2/segment2_cn.07800.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_07A00[] = { +#include "textures/segment2/segment2_cn.07A00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_07C00[] = { +#include "textures/segment2/segment2_cn.07C00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_07E00[] = { +#include "textures/segment2/segment2_cn.07E00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_08000[] = { +#include "textures/segment2/segment2_cn.08000.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_08200[] = { +#include "textures/segment2/segment2_cn.08200.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_08400[] = { +#include "textures/segment2/segment2_cn.08400.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_08600[] = { +#include "textures/segment2/segment2_cn.08600.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_08800[] = { +#include "textures/segment2/segment2_cn.08800.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_08A00[] = { +#include "textures/segment2/segment2_cn.08A00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_08C00[] = { +#include "textures/segment2/segment2_cn.08C00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_08E00[] = { +#include "textures/segment2/segment2_cn.08E00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_09000[] = { +#include "textures/segment2/segment2_cn.09000.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_09200[] = { +#include "textures/segment2/segment2_cn.09200.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_09400[] = { +#include "textures/segment2/segment2_cn.09400.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_09600[] = { +#include "textures/segment2/segment2_cn.09600.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_09800[] = { +#include "textures/segment2/segment2_cn.09800.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_09A00[] = { +#include "textures/segment2/segment2_cn.09A00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_09C00[] = { +#include "textures/segment2/segment2_cn.09C00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_09E00[] = { +#include "textures/segment2/segment2_cn.09E00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0A000[] = { +#include "textures/segment2/segment2_cn.0A000.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0A200[] = { +#include "textures/segment2/segment2_cn.0A200.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0A400[] = { +#include "textures/segment2/segment2_cn.0A400.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0A600[] = { +#include "textures/segment2/segment2_cn.0A600.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0A800[] = { +#include "textures/segment2/segment2_cn.0A800.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0AA00[] = { +#include "textures/segment2/segment2_cn.0AA00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0AC00[] = { +#include "textures/segment2/segment2_cn.0AC00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0AE00[] = { +#include "textures/segment2/segment2_cn.0AE00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0B000[] = { +#include "textures/segment2/segment2_cn.0B000.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0B200[] = { +#include "textures/segment2/segment2_cn.0B200.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0B400[] = { +#include "textures/segment2/segment2_cn.0B400.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0B600[] = { +#include "textures/segment2/segment2_cn.0B600.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0B800[] = { +#include "textures/segment2/segment2_cn.0B800.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0BA00[] = { +#include "textures/segment2/segment2_cn.0BA00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0BC00[] = { +#include "textures/segment2/segment2_cn.0BC00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0BE00[] = { +#include "textures/segment2/segment2_cn.0BE00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0C000[] = { +#include "textures/segment2/segment2_cn.0C000.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0C200[] = { +#include "textures/segment2/segment2_cn.0C200.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0C400[] = { +#include "textures/segment2/segment2_cn.0C400.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0C600[] = { +#include "textures/segment2/segment2_cn.0C600.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0C800[] = { +#include "textures/segment2/segment2_cn.0C800.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0CA00[] = { +#include "textures/segment2/segment2_cn.0CA00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0CC00[] = { +#include "textures/segment2/segment2_cn.0CC00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0CE00[] = { +#include "textures/segment2/segment2_cn.0CE00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0D000[] = { +#include "textures/segment2/segment2_cn.0D000.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0D200[] = { +#include "textures/segment2/segment2_cn.0D200.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0D400[] = { +#include "textures/segment2/segment2_cn.0D400.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0D600[] = { +#include "textures/segment2/segment2_cn.0D600.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0D800[] = { +#include "textures/segment2/segment2_cn.0D800.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0DA00[] = { +#include "textures/segment2/segment2_cn.0DA00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0DC00[] = { +#include "textures/segment2/segment2_cn.0DC00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0DE00[] = { +#include "textures/segment2/segment2_cn.0DE00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0E000[] = { +#include "textures/segment2/segment2_cn.0E000.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0E200[] = { +#include "textures/segment2/segment2_cn.0E200.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0E400[] = { +#include "textures/segment2/segment2_cn.0E400.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0E600[] = { +#include "textures/segment2/segment2_cn.0E600.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0E800[] = { +#include "textures/segment2/segment2_cn.0E800.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0EA00[] = { +#include "textures/segment2/segment2_cn.0EA00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0EC00[] = { +#include "textures/segment2/segment2_cn.0EC00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0EE00[] = { +#include "textures/segment2/segment2_cn.0EE00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0F000[] = { +#include "textures/segment2/segment2_cn.0F000.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0F200[] = { +#include "textures/segment2/segment2_cn.0F200.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0F400[] = { +#include "textures/segment2/segment2_cn.0F400.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0F600[] = { +#include "textures/segment2/segment2_cn.0F600.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0F800[] = { +#include "textures/segment2/segment2_cn.0F800.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0FA00[] = { +#include "textures/segment2/segment2_cn.0FA00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0FC00[] = { +#include "textures/segment2/segment2_cn.0FC00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_0FE00[] = { +#include "textures/segment2/segment2_cn.0FE00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_10000[] = { +#include "textures/segment2/segment2_cn.10000.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_10200[] = { +#include "textures/segment2/segment2_cn.10200.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_10400[] = { +#include "textures/segment2/segment2_cn.10400.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_10600[] = { +#include "textures/segment2/segment2_cn.10600.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_10800[] = { +#include "textures/segment2/segment2_cn.10800.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_10A00[] = { +#include "textures/segment2/segment2_cn.10A00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_10C00[] = { +#include "textures/segment2/segment2_cn.10C00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_10E00[] = { +#include "textures/segment2/segment2_cn.10E00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_11000[] = { +#include "textures/segment2/segment2_cn.11000.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_11200[] = { +#include "textures/segment2/segment2_cn.11200.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_11400[] = { +#include "textures/segment2/segment2_cn.11400.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_11600[] = { +#include "textures/segment2/segment2_cn.11600.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_11800[] = { +#include "textures/segment2/segment2_cn.11800.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_11A00[] = { +#include "textures/segment2/segment2_cn.11A00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_11C00[] = { +#include "textures/segment2/segment2_cn.11C00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_11E00[] = { +#include "textures/segment2/segment2_cn.11E00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_12000[] = { +#include "textures/segment2/segment2_cn.12000.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_12200[] = { +#include "textures/segment2/segment2_cn.12200.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_12400[] = { +#include "textures/segment2/segment2_cn.12400.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_12600[] = { +#include "textures/segment2/segment2_cn.12600.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_12800[] = { +#include "textures/segment2/segment2_cn.12800.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_12A00[] = { +#include "textures/segment2/segment2_cn.12A00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_12C00[] = { +#include "textures/segment2/segment2_cn.12C00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_12E00[] = { +#include "textures/segment2/segment2_cn.12E00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_13000[] = { +#include "textures/segment2/segment2_cn.13000.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_13200[] = { +#include "textures/segment2/segment2_cn.13200.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_13400[] = { +#include "textures/segment2/segment2_cn.13400.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_13600[] = { +#include "textures/segment2/segment2_cn.13600.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_13800[] = { +#include "textures/segment2/segment2_cn.13800.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_13A00[] = { +#include "textures/segment2/segment2_cn.13A00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_13C00[] = { +#include "textures/segment2/segment2_cn.13C00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_13E00[] = { +#include "textures/segment2/segment2_cn.13E00.rgba16.inc.c" +}; + +ALIGNED8 static const Texture texture_hud_char_cn_14000[] = { +#include "textures/segment2/segment2_cn.14000.rgba16.inc.c" +}; +#endif // VERSION_CN + ALIGNED8 static const Texture texture_credits_char_3[] = { #include "textures/segment2/segment2.06200.rgba16.inc.c" }; @@ -1784,6 +2282,8616 @@ ALIGNED8 static const Texture texture_font_char_us_button_C_right[] = { }; #endif +#if defined(VERSION_CN) +ALIGNED8 static const Texture texture_font_char_cn_16800[] = { +#include "textures/segment2/segment2_cn.16800.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16810[] = { +#include "textures/segment2/segment2_cn.16810.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16820[] = { +#include "textures/segment2/segment2_cn.16820.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16830[] = { +#include "textures/segment2/segment2_cn.16830.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16840[] = { +#include "textures/segment2/segment2_cn.16840.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16850[] = { +#include "textures/segment2/segment2_cn.16850.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16860[] = { +#include "textures/segment2/segment2_cn.16860.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16870[] = { +#include "textures/segment2/segment2_cn.16870.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16880[] = { +#include "textures/segment2/segment2_cn.16880.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16890[] = { +#include "textures/segment2/segment2_cn.16890.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_168A0[] = { +#include "textures/segment2/segment2_cn.168A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_168B0[] = { +#include "textures/segment2/segment2_cn.168B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_168C0[] = { +#include "textures/segment2/segment2_cn.168C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_168D0[] = { +#include "textures/segment2/segment2_cn.168D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_168E0[] = { +#include "textures/segment2/segment2_cn.168E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_168F0[] = { +#include "textures/segment2/segment2_cn.168F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16900[] = { +#include "textures/segment2/segment2_cn.16900.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16910[] = { +#include "textures/segment2/segment2_cn.16910.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16920[] = { +#include "textures/segment2/segment2_cn.16920.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16930[] = { +#include "textures/segment2/segment2_cn.16930.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16940[] = { +#include "textures/segment2/segment2_cn.16940.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16950[] = { +#include "textures/segment2/segment2_cn.16950.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16960[] = { +#include "textures/segment2/segment2_cn.16960.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16970[] = { +#include "textures/segment2/segment2_cn.16970.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16980[] = { +#include "textures/segment2/segment2_cn.16980.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16990[] = { +#include "textures/segment2/segment2_cn.16990.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_169A0[] = { +#include "textures/segment2/segment2_cn.169A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_169B0[] = { +#include "textures/segment2/segment2_cn.169B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_169C0[] = { +#include "textures/segment2/segment2_cn.169C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_169D0[] = { +#include "textures/segment2/segment2_cn.169D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_169E0[] = { +#include "textures/segment2/segment2_cn.169E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_169F0[] = { +#include "textures/segment2/segment2_cn.169F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16A00[] = { +#include "textures/segment2/segment2_cn.16A00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16A10[] = { +#include "textures/segment2/segment2_cn.16A10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16A20[] = { +#include "textures/segment2/segment2_cn.16A20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16A30[] = { +#include "textures/segment2/segment2_cn.16A30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16A40[] = { +#include "textures/segment2/segment2_cn.16A40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16A50[] = { +#include "textures/segment2/segment2_cn.16A50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16A60[] = { +#include "textures/segment2/segment2_cn.16A60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16A70[] = { +#include "textures/segment2/segment2_cn.16A70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16A80[] = { +#include "textures/segment2/segment2_cn.16A80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16A90[] = { +#include "textures/segment2/segment2_cn.16A90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16AA0[] = { +#include "textures/segment2/segment2_cn.16AA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16AB0[] = { +#include "textures/segment2/segment2_cn.16AB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16AC0[] = { +#include "textures/segment2/segment2_cn.16AC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16AD0[] = { +#include "textures/segment2/segment2_cn.16AD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16AE0[] = { +#include "textures/segment2/segment2_cn.16AE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16AF0[] = { +#include "textures/segment2/segment2_cn.16AF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16B00[] = { +#include "textures/segment2/segment2_cn.16B00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16B10[] = { +#include "textures/segment2/segment2_cn.16B10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16B20[] = { +#include "textures/segment2/segment2_cn.16B20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16B30[] = { +#include "textures/segment2/segment2_cn.16B30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16B40[] = { +#include "textures/segment2/segment2_cn.16B40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16B50[] = { +#include "textures/segment2/segment2_cn.16B50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16B60[] = { +#include "textures/segment2/segment2_cn.16B60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16B70[] = { +#include "textures/segment2/segment2_cn.16B70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16B80[] = { +#include "textures/segment2/segment2_cn.16B80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16B90[] = { +#include "textures/segment2/segment2_cn.16B90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16BA0[] = { +#include "textures/segment2/segment2_cn.16BA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16BB0[] = { +#include "textures/segment2/segment2_cn.16BB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16BC0[] = { +#include "textures/segment2/segment2_cn.16BC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16BD0[] = { +#include "textures/segment2/segment2_cn.16BD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16BE0[] = { +#include "textures/segment2/segment2_cn.16BE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16BF0[] = { +#include "textures/segment2/segment2_cn.16BF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16C00[] = { +#include "textures/segment2/segment2_cn.16C00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16C10[] = { +#include "textures/segment2/segment2_cn.16C10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16C20[] = { +#include "textures/segment2/segment2_cn.16C20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16C30[] = { +#include "textures/segment2/segment2_cn.16C30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16C40[] = { +#include "textures/segment2/segment2_cn.16C40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16C50[] = { +#include "textures/segment2/segment2_cn.16C50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16C60[] = { +#include "textures/segment2/segment2_cn.16C60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16C70[] = { +#include "textures/segment2/segment2_cn.16C70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16C80[] = { +#include "textures/segment2/segment2_cn.16C80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16C90[] = { +#include "textures/segment2/segment2_cn.16C90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16CA0[] = { +#include "textures/segment2/segment2_cn.16CA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16CB0[] = { +#include "textures/segment2/segment2_cn.16CB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16CC0[] = { +#include "textures/segment2/segment2_cn.16CC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16CD0[] = { +#include "textures/segment2/segment2_cn.16CD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16CE0[] = { +#include "textures/segment2/segment2_cn.16CE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16CF0[] = { +#include "textures/segment2/segment2_cn.16CF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16D00[] = { +#include "textures/segment2/segment2_cn.16D00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16D10[] = { +#include "textures/segment2/segment2_cn.16D10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16D20[] = { +#include "textures/segment2/segment2_cn.16D20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16D30[] = { +#include "textures/segment2/segment2_cn.16D30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16D40[] = { +#include "textures/segment2/segment2_cn.16D40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16D50[] = { +#include "textures/segment2/segment2_cn.16D50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16D60[] = { +#include "textures/segment2/segment2_cn.16D60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16D70[] = { +#include "textures/segment2/segment2_cn.16D70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16D80[] = { +#include "textures/segment2/segment2_cn.16D80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16D90[] = { +#include "textures/segment2/segment2_cn.16D90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16DA0[] = { +#include "textures/segment2/segment2_cn.16DA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16DB0[] = { +#include "textures/segment2/segment2_cn.16DB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16DC0[] = { +#include "textures/segment2/segment2_cn.16DC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16DD0[] = { +#include "textures/segment2/segment2_cn.16DD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16DE0[] = { +#include "textures/segment2/segment2_cn.16DE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16DF0[] = { +#include "textures/segment2/segment2_cn.16DF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16E00[] = { +#include "textures/segment2/segment2_cn.16E00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16E10[] = { +#include "textures/segment2/segment2_cn.16E10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16E20[] = { +#include "textures/segment2/segment2_cn.16E20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16E30[] = { +#include "textures/segment2/segment2_cn.16E30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16E40[] = { +#include "textures/segment2/segment2_cn.16E40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16E50[] = { +#include "textures/segment2/segment2_cn.16E50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16E60[] = { +#include "textures/segment2/segment2_cn.16E60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16E70[] = { +#include "textures/segment2/segment2_cn.16E70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16E80[] = { +#include "textures/segment2/segment2_cn.16E80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16E90[] = { +#include "textures/segment2/segment2_cn.16E90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16EA0[] = { +#include "textures/segment2/segment2_cn.16EA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16EB0[] = { +#include "textures/segment2/segment2_cn.16EB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16EC0[] = { +#include "textures/segment2/segment2_cn.16EC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16ED0[] = { +#include "textures/segment2/segment2_cn.16ED0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16EE0[] = { +#include "textures/segment2/segment2_cn.16EE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16EF0[] = { +#include "textures/segment2/segment2_cn.16EF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16F00[] = { +#include "textures/segment2/segment2_cn.16F00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16F10[] = { +#include "textures/segment2/segment2_cn.16F10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16F20[] = { +#include "textures/segment2/segment2_cn.16F20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16F30[] = { +#include "textures/segment2/segment2_cn.16F30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16F40[] = { +#include "textures/segment2/segment2_cn.16F40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16F50[] = { +#include "textures/segment2/segment2_cn.16F50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16F60[] = { +#include "textures/segment2/segment2_cn.16F60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16F70[] = { +#include "textures/segment2/segment2_cn.16F70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16F80[] = { +#include "textures/segment2/segment2_cn.16F80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16F90[] = { +#include "textures/segment2/segment2_cn.16F90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16FA0[] = { +#include "textures/segment2/segment2_cn.16FA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16FB0[] = { +#include "textures/segment2/segment2_cn.16FB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16FC0[] = { +#include "textures/segment2/segment2_cn.16FC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16FD0[] = { +#include "textures/segment2/segment2_cn.16FD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16FE0[] = { +#include "textures/segment2/segment2_cn.16FE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_16FF0[] = { +#include "textures/segment2/segment2_cn.16FF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17000[] = { +#include "textures/segment2/segment2_cn.17000.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17010[] = { +#include "textures/segment2/segment2_cn.17010.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17020[] = { +#include "textures/segment2/segment2_cn.17020.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17030[] = { +#include "textures/segment2/segment2_cn.17030.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17040[] = { +#include "textures/segment2/segment2_cn.17040.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17050[] = { +#include "textures/segment2/segment2_cn.17050.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17060[] = { +#include "textures/segment2/segment2_cn.17060.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17070[] = { +#include "textures/segment2/segment2_cn.17070.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17080[] = { +#include "textures/segment2/segment2_cn.17080.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17090[] = { +#include "textures/segment2/segment2_cn.17090.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_170A0[] = { +#include "textures/segment2/segment2_cn.170A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_170B0[] = { +#include "textures/segment2/segment2_cn.170B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_170C0[] = { +#include "textures/segment2/segment2_cn.170C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_170D0[] = { +#include "textures/segment2/segment2_cn.170D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_170E0[] = { +#include "textures/segment2/segment2_cn.170E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_170F0[] = { +#include "textures/segment2/segment2_cn.170F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17100[] = { +#include "textures/segment2/segment2_cn.17100.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17110[] = { +#include "textures/segment2/segment2_cn.17110.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17120[] = { +#include "textures/segment2/segment2_cn.17120.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17130[] = { +#include "textures/segment2/segment2_cn.17130.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17140[] = { +#include "textures/segment2/segment2_cn.17140.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17150[] = { +#include "textures/segment2/segment2_cn.17150.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17160[] = { +#include "textures/segment2/segment2_cn.17160.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17170[] = { +#include "textures/segment2/segment2_cn.17170.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17180[] = { +#include "textures/segment2/segment2_cn.17180.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17190[] = { +#include "textures/segment2/segment2_cn.17190.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_171A0[] = { +#include "textures/segment2/segment2_cn.171A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_171B0[] = { +#include "textures/segment2/segment2_cn.171B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_171C0[] = { +#include "textures/segment2/segment2_cn.171C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_171D0[] = { +#include "textures/segment2/segment2_cn.171D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_171E0[] = { +#include "textures/segment2/segment2_cn.171E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_171F0[] = { +#include "textures/segment2/segment2_cn.171F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17200[] = { +#include "textures/segment2/segment2_cn.17200.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17210[] = { +#include "textures/segment2/segment2_cn.17210.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17220[] = { +#include "textures/segment2/segment2_cn.17220.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17230[] = { +#include "textures/segment2/segment2_cn.17230.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17240[] = { +#include "textures/segment2/segment2_cn.17240.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17250[] = { +#include "textures/segment2/segment2_cn.17250.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17260[] = { +#include "textures/segment2/segment2_cn.17260.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17270[] = { +#include "textures/segment2/segment2_cn.17270.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17280[] = { +#include "textures/segment2/segment2_cn.17280.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17290[] = { +#include "textures/segment2/segment2_cn.17290.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_172A0[] = { +#include "textures/segment2/segment2_cn.172A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_172B0[] = { +#include "textures/segment2/segment2_cn.172B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_172C0[] = { +#include "textures/segment2/segment2_cn.172C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_172D0[] = { +#include "textures/segment2/segment2_cn.172D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_172E0[] = { +#include "textures/segment2/segment2_cn.172E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_172F0[] = { +#include "textures/segment2/segment2_cn.172F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17300[] = { +#include "textures/segment2/segment2_cn.17300.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17310[] = { +#include "textures/segment2/segment2_cn.17310.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17320[] = { +#include "textures/segment2/segment2_cn.17320.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17330[] = { +#include "textures/segment2/segment2_cn.17330.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17340[] = { +#include "textures/segment2/segment2_cn.17340.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17350[] = { +#include "textures/segment2/segment2_cn.17350.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17360[] = { +#include "textures/segment2/segment2_cn.17360.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17370[] = { +#include "textures/segment2/segment2_cn.17370.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17380[] = { +#include "textures/segment2/segment2_cn.17380.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17390[] = { +#include "textures/segment2/segment2_cn.17390.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_173A0[] = { +#include "textures/segment2/segment2_cn.173A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_173B0[] = { +#include "textures/segment2/segment2_cn.173B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_173C0[] = { +#include "textures/segment2/segment2_cn.173C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_173D0[] = { +#include "textures/segment2/segment2_cn.173D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_173E0[] = { +#include "textures/segment2/segment2_cn.173E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_173F0[] = { +#include "textures/segment2/segment2_cn.173F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17400[] = { +#include "textures/segment2/segment2_cn.17400.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17410[] = { +#include "textures/segment2/segment2_cn.17410.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17420[] = { +#include "textures/segment2/segment2_cn.17420.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17430[] = { +#include "textures/segment2/segment2_cn.17430.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17440[] = { +#include "textures/segment2/segment2_cn.17440.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17450[] = { +#include "textures/segment2/segment2_cn.17450.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17460[] = { +#include "textures/segment2/segment2_cn.17460.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17470[] = { +#include "textures/segment2/segment2_cn.17470.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17480[] = { +#include "textures/segment2/segment2_cn.17480.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17490[] = { +#include "textures/segment2/segment2_cn.17490.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_174A0[] = { +#include "textures/segment2/segment2_cn.174A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_174B0[] = { +#include "textures/segment2/segment2_cn.174B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_174C0[] = { +#include "textures/segment2/segment2_cn.174C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_174D0[] = { +#include "textures/segment2/segment2_cn.174D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_174E0[] = { +#include "textures/segment2/segment2_cn.174E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_174F0[] = { +#include "textures/segment2/segment2_cn.174F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17500[] = { +#include "textures/segment2/segment2_cn.17500.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17510[] = { +#include "textures/segment2/segment2_cn.17510.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17520[] = { +#include "textures/segment2/segment2_cn.17520.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17530[] = { +#include "textures/segment2/segment2_cn.17530.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17540[] = { +#include "textures/segment2/segment2_cn.17540.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17550[] = { +#include "textures/segment2/segment2_cn.17550.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17560[] = { +#include "textures/segment2/segment2_cn.17560.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17570[] = { +#include "textures/segment2/segment2_cn.17570.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17580[] = { +#include "textures/segment2/segment2_cn.17580.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17590[] = { +#include "textures/segment2/segment2_cn.17590.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_175A0[] = { +#include "textures/segment2/segment2_cn.175A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_175B0[] = { +#include "textures/segment2/segment2_cn.175B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_175C0[] = { +#include "textures/segment2/segment2_cn.175C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_175D0[] = { +#include "textures/segment2/segment2_cn.175D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_175E0[] = { +#include "textures/segment2/segment2_cn.175E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_175F0[] = { +#include "textures/segment2/segment2_cn.175F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17600[] = { +#include "textures/segment2/segment2_cn.17600.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17610[] = { +#include "textures/segment2/segment2_cn.17610.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17620[] = { +#include "textures/segment2/segment2_cn.17620.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17630[] = { +#include "textures/segment2/segment2_cn.17630.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17640[] = { +#include "textures/segment2/segment2_cn.17640.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17650[] = { +#include "textures/segment2/segment2_cn.17650.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17660[] = { +#include "textures/segment2/segment2_cn.17660.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17670[] = { +#include "textures/segment2/segment2_cn.17670.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17680[] = { +#include "textures/segment2/segment2_cn.17680.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17690[] = { +#include "textures/segment2/segment2_cn.17690.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_176A0[] = { +#include "textures/segment2/segment2_cn.176A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_176B0[] = { +#include "textures/segment2/segment2_cn.176B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_176C0[] = { +#include "textures/segment2/segment2_cn.176C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_176D0[] = { +#include "textures/segment2/segment2_cn.176D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_176E0[] = { +#include "textures/segment2/segment2_cn.176E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_176F0[] = { +#include "textures/segment2/segment2_cn.176F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17700[] = { +#include "textures/segment2/segment2_cn.17700.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17710[] = { +#include "textures/segment2/segment2_cn.17710.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17720[] = { +#include "textures/segment2/segment2_cn.17720.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17730[] = { +#include "textures/segment2/segment2_cn.17730.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17740[] = { +#include "textures/segment2/segment2_cn.17740.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17750[] = { +#include "textures/segment2/segment2_cn.17750.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17760[] = { +#include "textures/segment2/segment2_cn.17760.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17770[] = { +#include "textures/segment2/segment2_cn.17770.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17780[] = { +#include "textures/segment2/segment2_cn.17780.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17790[] = { +#include "textures/segment2/segment2_cn.17790.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_177A0[] = { +#include "textures/segment2/segment2_cn.177A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_177B0[] = { +#include "textures/segment2/segment2_cn.177B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_177C0[] = { +#include "textures/segment2/segment2_cn.177C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_177D0[] = { +#include "textures/segment2/segment2_cn.177D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_177E0[] = { +#include "textures/segment2/segment2_cn.177E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_177F0[] = { +#include "textures/segment2/segment2_cn.177F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17800[] = { +#include "textures/segment2/segment2_cn.17800.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17810[] = { +#include "textures/segment2/segment2_cn.17810.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17820[] = { +#include "textures/segment2/segment2_cn.17820.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17830[] = { +#include "textures/segment2/segment2_cn.17830.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17840[] = { +#include "textures/segment2/segment2_cn.17840.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17850[] = { +#include "textures/segment2/segment2_cn.17850.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17860[] = { +#include "textures/segment2/segment2_cn.17860.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17870[] = { +#include "textures/segment2/segment2_cn.17870.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17880[] = { +#include "textures/segment2/segment2_cn.17880.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17890[] = { +#include "textures/segment2/segment2_cn.17890.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_178A0[] = { +#include "textures/segment2/segment2_cn.178A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_178B0[] = { +#include "textures/segment2/segment2_cn.178B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_178C0[] = { +#include "textures/segment2/segment2_cn.178C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_178D0[] = { +#include "textures/segment2/segment2_cn.178D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_178E0[] = { +#include "textures/segment2/segment2_cn.178E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_178F0[] = { +#include "textures/segment2/segment2_cn.178F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17900[] = { +#include "textures/segment2/segment2_cn.17900.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17910[] = { +#include "textures/segment2/segment2_cn.17910.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17920[] = { +#include "textures/segment2/segment2_cn.17920.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17930[] = { +#include "textures/segment2/segment2_cn.17930.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17940[] = { +#include "textures/segment2/segment2_cn.17940.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17950[] = { +#include "textures/segment2/segment2_cn.17950.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17960[] = { +#include "textures/segment2/segment2_cn.17960.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17970[] = { +#include "textures/segment2/segment2_cn.17970.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17980[] = { +#include "textures/segment2/segment2_cn.17980.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17990[] = { +#include "textures/segment2/segment2_cn.17990.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_179A0[] = { +#include "textures/segment2/segment2_cn.179A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_179B0[] = { +#include "textures/segment2/segment2_cn.179B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_179C0[] = { +#include "textures/segment2/segment2_cn.179C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_179D0[] = { +#include "textures/segment2/segment2_cn.179D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_179E0[] = { +#include "textures/segment2/segment2_cn.179E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_179F0[] = { +#include "textures/segment2/segment2_cn.179F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17A00[] = { +#include "textures/segment2/segment2_cn.17A00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17A10[] = { +#include "textures/segment2/segment2_cn.17A10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17A20[] = { +#include "textures/segment2/segment2_cn.17A20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17A30[] = { +#include "textures/segment2/segment2_cn.17A30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17A40[] = { +#include "textures/segment2/segment2_cn.17A40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17A50[] = { +#include "textures/segment2/segment2_cn.17A50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17A60[] = { +#include "textures/segment2/segment2_cn.17A60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17A70[] = { +#include "textures/segment2/segment2_cn.17A70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17A80[] = { +#include "textures/segment2/segment2_cn.17A80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17A90[] = { +#include "textures/segment2/segment2_cn.17A90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17AA0[] = { +#include "textures/segment2/segment2_cn.17AA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17AB0[] = { +#include "textures/segment2/segment2_cn.17AB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17AC0[] = { +#include "textures/segment2/segment2_cn.17AC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17AD0[] = { +#include "textures/segment2/segment2_cn.17AD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17AE0[] = { +#include "textures/segment2/segment2_cn.17AE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17AF0[] = { +#include "textures/segment2/segment2_cn.17AF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17B00[] = { +#include "textures/segment2/segment2_cn.17B00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17B10[] = { +#include "textures/segment2/segment2_cn.17B10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17B20[] = { +#include "textures/segment2/segment2_cn.17B20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17B30[] = { +#include "textures/segment2/segment2_cn.17B30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17B40[] = { +#include "textures/segment2/segment2_cn.17B40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17B50[] = { +#include "textures/segment2/segment2_cn.17B50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17B60[] = { +#include "textures/segment2/segment2_cn.17B60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17B70[] = { +#include "textures/segment2/segment2_cn.17B70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17B80[] = { +#include "textures/segment2/segment2_cn.17B80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17B90[] = { +#include "textures/segment2/segment2_cn.17B90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17BA0[] = { +#include "textures/segment2/segment2_cn.17BA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17BB0[] = { +#include "textures/segment2/segment2_cn.17BB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17BC0[] = { +#include "textures/segment2/segment2_cn.17BC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17BD0[] = { +#include "textures/segment2/segment2_cn.17BD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17BE0[] = { +#include "textures/segment2/segment2_cn.17BE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17BF0[] = { +#include "textures/segment2/segment2_cn.17BF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17C00[] = { +#include "textures/segment2/segment2_cn.17C00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17C10[] = { +#include "textures/segment2/segment2_cn.17C10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17C20[] = { +#include "textures/segment2/segment2_cn.17C20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17C30[] = { +#include "textures/segment2/segment2_cn.17C30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17C40[] = { +#include "textures/segment2/segment2_cn.17C40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17C50[] = { +#include "textures/segment2/segment2_cn.17C50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17C60[] = { +#include "textures/segment2/segment2_cn.17C60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17C70[] = { +#include "textures/segment2/segment2_cn.17C70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17C80[] = { +#include "textures/segment2/segment2_cn.17C80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17C90[] = { +#include "textures/segment2/segment2_cn.17C90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17CA0[] = { +#include "textures/segment2/segment2_cn.17CA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17CB0[] = { +#include "textures/segment2/segment2_cn.17CB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17CC0[] = { +#include "textures/segment2/segment2_cn.17CC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17CD0[] = { +#include "textures/segment2/segment2_cn.17CD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17CE0[] = { +#include "textures/segment2/segment2_cn.17CE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17CF0[] = { +#include "textures/segment2/segment2_cn.17CF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17D00[] = { +#include "textures/segment2/segment2_cn.17D00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17D10[] = { +#include "textures/segment2/segment2_cn.17D10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17D20[] = { +#include "textures/segment2/segment2_cn.17D20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17D30[] = { +#include "textures/segment2/segment2_cn.17D30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17D40[] = { +#include "textures/segment2/segment2_cn.17D40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17D50[] = { +#include "textures/segment2/segment2_cn.17D50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17D60[] = { +#include "textures/segment2/segment2_cn.17D60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17D70[] = { +#include "textures/segment2/segment2_cn.17D70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17D80[] = { +#include "textures/segment2/segment2_cn.17D80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17D90[] = { +#include "textures/segment2/segment2_cn.17D90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17DA0[] = { +#include "textures/segment2/segment2_cn.17DA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17DB0[] = { +#include "textures/segment2/segment2_cn.17DB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17DC0[] = { +#include "textures/segment2/segment2_cn.17DC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17DD0[] = { +#include "textures/segment2/segment2_cn.17DD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17DE0[] = { +#include "textures/segment2/segment2_cn.17DE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17DF0[] = { +#include "textures/segment2/segment2_cn.17DF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17E00[] = { +#include "textures/segment2/segment2_cn.17E00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17E10[] = { +#include "textures/segment2/segment2_cn.17E10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17E20[] = { +#include "textures/segment2/segment2_cn.17E20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17E30[] = { +#include "textures/segment2/segment2_cn.17E30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17E40[] = { +#include "textures/segment2/segment2_cn.17E40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17E50[] = { +#include "textures/segment2/segment2_cn.17E50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17E60[] = { +#include "textures/segment2/segment2_cn.17E60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17E70[] = { +#include "textures/segment2/segment2_cn.17E70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17E80[] = { +#include "textures/segment2/segment2_cn.17E80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17E90[] = { +#include "textures/segment2/segment2_cn.17E90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17EA0[] = { +#include "textures/segment2/segment2_cn.17EA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17EB0[] = { +#include "textures/segment2/segment2_cn.17EB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17EC0[] = { +#include "textures/segment2/segment2_cn.17EC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17ED0[] = { +#include "textures/segment2/segment2_cn.17ED0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17EE0[] = { +#include "textures/segment2/segment2_cn.17EE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17EF0[] = { +#include "textures/segment2/segment2_cn.17EF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17F00[] = { +#include "textures/segment2/segment2_cn.17F00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17F10[] = { +#include "textures/segment2/segment2_cn.17F10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17F20[] = { +#include "textures/segment2/segment2_cn.17F20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17F30[] = { +#include "textures/segment2/segment2_cn.17F30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17F40[] = { +#include "textures/segment2/segment2_cn.17F40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17F50[] = { +#include "textures/segment2/segment2_cn.17F50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17F60[] = { +#include "textures/segment2/segment2_cn.17F60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17F70[] = { +#include "textures/segment2/segment2_cn.17F70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17F80[] = { +#include "textures/segment2/segment2_cn.17F80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17F90[] = { +#include "textures/segment2/segment2_cn.17F90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17FA0[] = { +#include "textures/segment2/segment2_cn.17FA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17FB0[] = { +#include "textures/segment2/segment2_cn.17FB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17FC0[] = { +#include "textures/segment2/segment2_cn.17FC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17FD0[] = { +#include "textures/segment2/segment2_cn.17FD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17FE0[] = { +#include "textures/segment2/segment2_cn.17FE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_17FF0[] = { +#include "textures/segment2/segment2_cn.17FF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18000[] = { +#include "textures/segment2/segment2_cn.18000.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18010[] = { +#include "textures/segment2/segment2_cn.18010.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18020[] = { +#include "textures/segment2/segment2_cn.18020.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18030[] = { +#include "textures/segment2/segment2_cn.18030.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18040[] = { +#include "textures/segment2/segment2_cn.18040.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18050[] = { +#include "textures/segment2/segment2_cn.18050.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18060[] = { +#include "textures/segment2/segment2_cn.18060.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18070[] = { +#include "textures/segment2/segment2_cn.18070.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18080[] = { +#include "textures/segment2/segment2_cn.18080.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18090[] = { +#include "textures/segment2/segment2_cn.18090.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_180A0[] = { +#include "textures/segment2/segment2_cn.180A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_180B0[] = { +#include "textures/segment2/segment2_cn.180B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_180C0[] = { +#include "textures/segment2/segment2_cn.180C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_180D0[] = { +#include "textures/segment2/segment2_cn.180D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_180E0[] = { +#include "textures/segment2/segment2_cn.180E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_180F0[] = { +#include "textures/segment2/segment2_cn.180F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18100[] = { +#include "textures/segment2/segment2_cn.18100.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18110[] = { +#include "textures/segment2/segment2_cn.18110.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18120[] = { +#include "textures/segment2/segment2_cn.18120.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18130[] = { +#include "textures/segment2/segment2_cn.18130.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18140[] = { +#include "textures/segment2/segment2_cn.18140.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18150[] = { +#include "textures/segment2/segment2_cn.18150.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18160[] = { +#include "textures/segment2/segment2_cn.18160.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18170[] = { +#include "textures/segment2/segment2_cn.18170.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18180[] = { +#include "textures/segment2/segment2_cn.18180.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18190[] = { +#include "textures/segment2/segment2_cn.18190.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_181A0[] = { +#include "textures/segment2/segment2_cn.181A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_181B0[] = { +#include "textures/segment2/segment2_cn.181B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_181C0[] = { +#include "textures/segment2/segment2_cn.181C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_181D0[] = { +#include "textures/segment2/segment2_cn.181D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_181E0[] = { +#include "textures/segment2/segment2_cn.181E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_181F0[] = { +#include "textures/segment2/segment2_cn.181F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18200[] = { +#include "textures/segment2/segment2_cn.18200.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18210[] = { +#include "textures/segment2/segment2_cn.18210.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18220[] = { +#include "textures/segment2/segment2_cn.18220.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18230[] = { +#include "textures/segment2/segment2_cn.18230.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18240[] = { +#include "textures/segment2/segment2_cn.18240.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18250[] = { +#include "textures/segment2/segment2_cn.18250.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18260[] = { +#include "textures/segment2/segment2_cn.18260.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18270[] = { +#include "textures/segment2/segment2_cn.18270.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18280[] = { +#include "textures/segment2/segment2_cn.18280.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18290[] = { +#include "textures/segment2/segment2_cn.18290.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_182A0[] = { +#include "textures/segment2/segment2_cn.182A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_182B0[] = { +#include "textures/segment2/segment2_cn.182B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_182C0[] = { +#include "textures/segment2/segment2_cn.182C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_182D0[] = { +#include "textures/segment2/segment2_cn.182D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_182E0[] = { +#include "textures/segment2/segment2_cn.182E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_182F0[] = { +#include "textures/segment2/segment2_cn.182F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18300[] = { +#include "textures/segment2/segment2_cn.18300.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18310[] = { +#include "textures/segment2/segment2_cn.18310.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18320[] = { +#include "textures/segment2/segment2_cn.18320.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18330[] = { +#include "textures/segment2/segment2_cn.18330.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18340[] = { +#include "textures/segment2/segment2_cn.18340.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18350[] = { +#include "textures/segment2/segment2_cn.18350.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18360[] = { +#include "textures/segment2/segment2_cn.18360.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18370[] = { +#include "textures/segment2/segment2_cn.18370.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18380[] = { +#include "textures/segment2/segment2_cn.18380.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18390[] = { +#include "textures/segment2/segment2_cn.18390.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_183A0[] = { +#include "textures/segment2/segment2_cn.183A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_183B0[] = { +#include "textures/segment2/segment2_cn.183B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_183C0[] = { +#include "textures/segment2/segment2_cn.183C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_183D0[] = { +#include "textures/segment2/segment2_cn.183D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_183E0[] = { +#include "textures/segment2/segment2_cn.183E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_183F0[] = { +#include "textures/segment2/segment2_cn.183F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18400[] = { +#include "textures/segment2/segment2_cn.18400.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18410[] = { +#include "textures/segment2/segment2_cn.18410.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18420[] = { +#include "textures/segment2/segment2_cn.18420.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18430[] = { +#include "textures/segment2/segment2_cn.18430.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18440[] = { +#include "textures/segment2/segment2_cn.18440.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18450[] = { +#include "textures/segment2/segment2_cn.18450.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18460[] = { +#include "textures/segment2/segment2_cn.18460.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18470[] = { +#include "textures/segment2/segment2_cn.18470.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18480[] = { +#include "textures/segment2/segment2_cn.18480.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18490[] = { +#include "textures/segment2/segment2_cn.18490.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_184A0[] = { +#include "textures/segment2/segment2_cn.184A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_184B0[] = { +#include "textures/segment2/segment2_cn.184B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_184C0[] = { +#include "textures/segment2/segment2_cn.184C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_184D0[] = { +#include "textures/segment2/segment2_cn.184D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_184E0[] = { +#include "textures/segment2/segment2_cn.184E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_184F0[] = { +#include "textures/segment2/segment2_cn.184F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18500[] = { +#include "textures/segment2/segment2_cn.18500.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18510[] = { +#include "textures/segment2/segment2_cn.18510.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18520[] = { +#include "textures/segment2/segment2_cn.18520.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18530[] = { +#include "textures/segment2/segment2_cn.18530.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18540[] = { +#include "textures/segment2/segment2_cn.18540.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18550[] = { +#include "textures/segment2/segment2_cn.18550.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18560[] = { +#include "textures/segment2/segment2_cn.18560.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18570[] = { +#include "textures/segment2/segment2_cn.18570.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18580[] = { +#include "textures/segment2/segment2_cn.18580.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18590[] = { +#include "textures/segment2/segment2_cn.18590.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_185A0[] = { +#include "textures/segment2/segment2_cn.185A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_185B0[] = { +#include "textures/segment2/segment2_cn.185B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_185C0[] = { +#include "textures/segment2/segment2_cn.185C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_185D0[] = { +#include "textures/segment2/segment2_cn.185D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_185E0[] = { +#include "textures/segment2/segment2_cn.185E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_185F0[] = { +#include "textures/segment2/segment2_cn.185F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18600[] = { +#include "textures/segment2/segment2_cn.18600.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18610[] = { +#include "textures/segment2/segment2_cn.18610.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18620[] = { +#include "textures/segment2/segment2_cn.18620.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18630[] = { +#include "textures/segment2/segment2_cn.18630.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18640[] = { +#include "textures/segment2/segment2_cn.18640.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18650[] = { +#include "textures/segment2/segment2_cn.18650.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18660[] = { +#include "textures/segment2/segment2_cn.18660.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18670[] = { +#include "textures/segment2/segment2_cn.18670.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18680[] = { +#include "textures/segment2/segment2_cn.18680.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18690[] = { +#include "textures/segment2/segment2_cn.18690.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_186A0[] = { +#include "textures/segment2/segment2_cn.186A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_186B0[] = { +#include "textures/segment2/segment2_cn.186B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_186C0[] = { +#include "textures/segment2/segment2_cn.186C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_186D0[] = { +#include "textures/segment2/segment2_cn.186D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_186E0[] = { +#include "textures/segment2/segment2_cn.186E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_186F0[] = { +#include "textures/segment2/segment2_cn.186F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18700[] = { +#include "textures/segment2/segment2_cn.18700.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18710[] = { +#include "textures/segment2/segment2_cn.18710.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18720[] = { +#include "textures/segment2/segment2_cn.18720.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18730[] = { +#include "textures/segment2/segment2_cn.18730.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18740[] = { +#include "textures/segment2/segment2_cn.18740.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18750[] = { +#include "textures/segment2/segment2_cn.18750.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18760[] = { +#include "textures/segment2/segment2_cn.18760.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18770[] = { +#include "textures/segment2/segment2_cn.18770.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18780[] = { +#include "textures/segment2/segment2_cn.18780.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18790[] = { +#include "textures/segment2/segment2_cn.18790.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_187A0[] = { +#include "textures/segment2/segment2_cn.187A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_187B0[] = { +#include "textures/segment2/segment2_cn.187B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_187C0[] = { +#include "textures/segment2/segment2_cn.187C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_187D0[] = { +#include "textures/segment2/segment2_cn.187D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_187E0[] = { +#include "textures/segment2/segment2_cn.187E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_187F0[] = { +#include "textures/segment2/segment2_cn.187F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18800[] = { +#include "textures/segment2/segment2_cn.18800.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18810[] = { +#include "textures/segment2/segment2_cn.18810.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18820[] = { +#include "textures/segment2/segment2_cn.18820.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18830[] = { +#include "textures/segment2/segment2_cn.18830.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18840[] = { +#include "textures/segment2/segment2_cn.18840.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18850[] = { +#include "textures/segment2/segment2_cn.18850.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18860[] = { +#include "textures/segment2/segment2_cn.18860.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18870[] = { +#include "textures/segment2/segment2_cn.18870.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18880[] = { +#include "textures/segment2/segment2_cn.18880.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18890[] = { +#include "textures/segment2/segment2_cn.18890.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_188A0[] = { +#include "textures/segment2/segment2_cn.188A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_188B0[] = { +#include "textures/segment2/segment2_cn.188B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_188C0[] = { +#include "textures/segment2/segment2_cn.188C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_188D0[] = { +#include "textures/segment2/segment2_cn.188D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_188E0[] = { +#include "textures/segment2/segment2_cn.188E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_188F0[] = { +#include "textures/segment2/segment2_cn.188F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18900[] = { +#include "textures/segment2/segment2_cn.18900.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18910[] = { +#include "textures/segment2/segment2_cn.18910.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18920[] = { +#include "textures/segment2/segment2_cn.18920.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18930[] = { +#include "textures/segment2/segment2_cn.18930.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18940[] = { +#include "textures/segment2/segment2_cn.18940.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18950[] = { +#include "textures/segment2/segment2_cn.18950.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18960[] = { +#include "textures/segment2/segment2_cn.18960.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18970[] = { +#include "textures/segment2/segment2_cn.18970.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18980[] = { +#include "textures/segment2/segment2_cn.18980.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18990[] = { +#include "textures/segment2/segment2_cn.18990.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_189A0[] = { +#include "textures/segment2/segment2_cn.189A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_189B0[] = { +#include "textures/segment2/segment2_cn.189B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_189C0[] = { +#include "textures/segment2/segment2_cn.189C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_189D0[] = { +#include "textures/segment2/segment2_cn.189D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_189E0[] = { +#include "textures/segment2/segment2_cn.189E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_189F0[] = { +#include "textures/segment2/segment2_cn.189F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18A00[] = { +#include "textures/segment2/segment2_cn.18A00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18A10[] = { +#include "textures/segment2/segment2_cn.18A10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18A20[] = { +#include "textures/segment2/segment2_cn.18A20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18A30[] = { +#include "textures/segment2/segment2_cn.18A30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18A40[] = { +#include "textures/segment2/segment2_cn.18A40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18A50[] = { +#include "textures/segment2/segment2_cn.18A50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18A60[] = { +#include "textures/segment2/segment2_cn.18A60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18A70[] = { +#include "textures/segment2/segment2_cn.18A70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18A80[] = { +#include "textures/segment2/segment2_cn.18A80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18A90[] = { +#include "textures/segment2/segment2_cn.18A90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18AA0[] = { +#include "textures/segment2/segment2_cn.18AA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18AB0[] = { +#include "textures/segment2/segment2_cn.18AB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18AC0[] = { +#include "textures/segment2/segment2_cn.18AC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18AD0[] = { +#include "textures/segment2/segment2_cn.18AD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18AE0[] = { +#include "textures/segment2/segment2_cn.18AE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18AF0[] = { +#include "textures/segment2/segment2_cn.18AF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18B00[] = { +#include "textures/segment2/segment2_cn.18B00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18B10[] = { +#include "textures/segment2/segment2_cn.18B10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18B20[] = { +#include "textures/segment2/segment2_cn.18B20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18B30[] = { +#include "textures/segment2/segment2_cn.18B30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18B40[] = { +#include "textures/segment2/segment2_cn.18B40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18B50[] = { +#include "textures/segment2/segment2_cn.18B50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18B60[] = { +#include "textures/segment2/segment2_cn.18B60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18B70[] = { +#include "textures/segment2/segment2_cn.18B70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18B80[] = { +#include "textures/segment2/segment2_cn.18B80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18B90[] = { +#include "textures/segment2/segment2_cn.18B90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18BA0[] = { +#include "textures/segment2/segment2_cn.18BA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18BB0[] = { +#include "textures/segment2/segment2_cn.18BB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18BC0[] = { +#include "textures/segment2/segment2_cn.18BC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18BD0[] = { +#include "textures/segment2/segment2_cn.18BD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18BE0[] = { +#include "textures/segment2/segment2_cn.18BE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18BF0[] = { +#include "textures/segment2/segment2_cn.18BF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18C00[] = { +#include "textures/segment2/segment2_cn.18C00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18C10[] = { +#include "textures/segment2/segment2_cn.18C10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18C20[] = { +#include "textures/segment2/segment2_cn.18C20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18C30[] = { +#include "textures/segment2/segment2_cn.18C30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18C40[] = { +#include "textures/segment2/segment2_cn.18C40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18C50[] = { +#include "textures/segment2/segment2_cn.18C50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18C60[] = { +#include "textures/segment2/segment2_cn.18C60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18C70[] = { +#include "textures/segment2/segment2_cn.18C70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18C80[] = { +#include "textures/segment2/segment2_cn.18C80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18C90[] = { +#include "textures/segment2/segment2_cn.18C90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18CA0[] = { +#include "textures/segment2/segment2_cn.18CA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18CB0[] = { +#include "textures/segment2/segment2_cn.18CB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18CC0[] = { +#include "textures/segment2/segment2_cn.18CC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18CD0[] = { +#include "textures/segment2/segment2_cn.18CD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18CE0[] = { +#include "textures/segment2/segment2_cn.18CE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18CF0[] = { +#include "textures/segment2/segment2_cn.18CF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18D00[] = { +#include "textures/segment2/segment2_cn.18D00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18D10[] = { +#include "textures/segment2/segment2_cn.18D10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18D20[] = { +#include "textures/segment2/segment2_cn.18D20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18D30[] = { +#include "textures/segment2/segment2_cn.18D30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18D40[] = { +#include "textures/segment2/segment2_cn.18D40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18D50[] = { +#include "textures/segment2/segment2_cn.18D50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18D60[] = { +#include "textures/segment2/segment2_cn.18D60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18D70[] = { +#include "textures/segment2/segment2_cn.18D70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18D80[] = { +#include "textures/segment2/segment2_cn.18D80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18D90[] = { +#include "textures/segment2/segment2_cn.18D90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18DA0[] = { +#include "textures/segment2/segment2_cn.18DA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18DB0[] = { +#include "textures/segment2/segment2_cn.18DB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18DC0[] = { +#include "textures/segment2/segment2_cn.18DC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18DD0[] = { +#include "textures/segment2/segment2_cn.18DD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18DE0[] = { +#include "textures/segment2/segment2_cn.18DE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18DF0[] = { +#include "textures/segment2/segment2_cn.18DF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18E00[] = { +#include "textures/segment2/segment2_cn.18E00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18E10[] = { +#include "textures/segment2/segment2_cn.18E10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18E20[] = { +#include "textures/segment2/segment2_cn.18E20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18E30[] = { +#include "textures/segment2/segment2_cn.18E30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18E40[] = { +#include "textures/segment2/segment2_cn.18E40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18E50[] = { +#include "textures/segment2/segment2_cn.18E50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18E60[] = { +#include "textures/segment2/segment2_cn.18E60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18E70[] = { +#include "textures/segment2/segment2_cn.18E70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18E80[] = { +#include "textures/segment2/segment2_cn.18E80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18E90[] = { +#include "textures/segment2/segment2_cn.18E90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18EA0[] = { +#include "textures/segment2/segment2_cn.18EA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18EB0[] = { +#include "textures/segment2/segment2_cn.18EB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18EC0[] = { +#include "textures/segment2/segment2_cn.18EC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18ED0[] = { +#include "textures/segment2/segment2_cn.18ED0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18EE0[] = { +#include "textures/segment2/segment2_cn.18EE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18EF0[] = { +#include "textures/segment2/segment2_cn.18EF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18F00[] = { +#include "textures/segment2/segment2_cn.18F00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18F10[] = { +#include "textures/segment2/segment2_cn.18F10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18F20[] = { +#include "textures/segment2/segment2_cn.18F20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18F30[] = { +#include "textures/segment2/segment2_cn.18F30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18F40[] = { +#include "textures/segment2/segment2_cn.18F40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18F50[] = { +#include "textures/segment2/segment2_cn.18F50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18F60[] = { +#include "textures/segment2/segment2_cn.18F60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18F70[] = { +#include "textures/segment2/segment2_cn.18F70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18F80[] = { +#include "textures/segment2/segment2_cn.18F80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18F90[] = { +#include "textures/segment2/segment2_cn.18F90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18FA0[] = { +#include "textures/segment2/segment2_cn.18FA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18FB0[] = { +#include "textures/segment2/segment2_cn.18FB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18FC0[] = { +#include "textures/segment2/segment2_cn.18FC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18FD0[] = { +#include "textures/segment2/segment2_cn.18FD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18FE0[] = { +#include "textures/segment2/segment2_cn.18FE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_18FF0[] = { +#include "textures/segment2/segment2_cn.18FF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19000[] = { +#include "textures/segment2/segment2_cn.19000.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19010[] = { +#include "textures/segment2/segment2_cn.19010.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19020[] = { +#include "textures/segment2/segment2_cn.19020.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19030[] = { +#include "textures/segment2/segment2_cn.19030.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19040[] = { +#include "textures/segment2/segment2_cn.19040.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19050[] = { +#include "textures/segment2/segment2_cn.19050.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19060[] = { +#include "textures/segment2/segment2_cn.19060.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19070[] = { +#include "textures/segment2/segment2_cn.19070.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19080[] = { +#include "textures/segment2/segment2_cn.19080.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19090[] = { +#include "textures/segment2/segment2_cn.19090.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_190A0[] = { +#include "textures/segment2/segment2_cn.190A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_190B0[] = { +#include "textures/segment2/segment2_cn.190B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_190C0[] = { +#include "textures/segment2/segment2_cn.190C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_190D0[] = { +#include "textures/segment2/segment2_cn.190D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_190E0[] = { +#include "textures/segment2/segment2_cn.190E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_190F0[] = { +#include "textures/segment2/segment2_cn.190F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19100[] = { +#include "textures/segment2/segment2_cn.19100.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19110[] = { +#include "textures/segment2/segment2_cn.19110.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19120[] = { +#include "textures/segment2/segment2_cn.19120.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19130[] = { +#include "textures/segment2/segment2_cn.19130.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19140[] = { +#include "textures/segment2/segment2_cn.19140.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19150[] = { +#include "textures/segment2/segment2_cn.19150.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19160[] = { +#include "textures/segment2/segment2_cn.19160.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19170[] = { +#include "textures/segment2/segment2_cn.19170.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19180[] = { +#include "textures/segment2/segment2_cn.19180.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19190[] = { +#include "textures/segment2/segment2_cn.19190.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_191A0[] = { +#include "textures/segment2/segment2_cn.191A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_191B0[] = { +#include "textures/segment2/segment2_cn.191B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_191C0[] = { +#include "textures/segment2/segment2_cn.191C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_191D0[] = { +#include "textures/segment2/segment2_cn.191D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_191E0[] = { +#include "textures/segment2/segment2_cn.191E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_191F0[] = { +#include "textures/segment2/segment2_cn.191F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19200[] = { +#include "textures/segment2/segment2_cn.19200.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19210[] = { +#include "textures/segment2/segment2_cn.19210.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19220[] = { +#include "textures/segment2/segment2_cn.19220.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19230[] = { +#include "textures/segment2/segment2_cn.19230.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19240[] = { +#include "textures/segment2/segment2_cn.19240.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19250[] = { +#include "textures/segment2/segment2_cn.19250.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19260[] = { +#include "textures/segment2/segment2_cn.19260.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19270[] = { +#include "textures/segment2/segment2_cn.19270.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19280[] = { +#include "textures/segment2/segment2_cn.19280.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19290[] = { +#include "textures/segment2/segment2_cn.19290.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_192A0[] = { +#include "textures/segment2/segment2_cn.192A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_192B0[] = { +#include "textures/segment2/segment2_cn.192B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_192C0[] = { +#include "textures/segment2/segment2_cn.192C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_192D0[] = { +#include "textures/segment2/segment2_cn.192D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_192E0[] = { +#include "textures/segment2/segment2_cn.192E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_192F0[] = { +#include "textures/segment2/segment2_cn.192F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19300[] = { +#include "textures/segment2/segment2_cn.19300.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19310[] = { +#include "textures/segment2/segment2_cn.19310.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19320[] = { +#include "textures/segment2/segment2_cn.19320.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19330[] = { +#include "textures/segment2/segment2_cn.19330.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19340[] = { +#include "textures/segment2/segment2_cn.19340.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19350[] = { +#include "textures/segment2/segment2_cn.19350.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19360[] = { +#include "textures/segment2/segment2_cn.19360.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19370[] = { +#include "textures/segment2/segment2_cn.19370.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19380[] = { +#include "textures/segment2/segment2_cn.19380.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19390[] = { +#include "textures/segment2/segment2_cn.19390.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_193A0[] = { +#include "textures/segment2/segment2_cn.193A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_193B0[] = { +#include "textures/segment2/segment2_cn.193B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_193C0[] = { +#include "textures/segment2/segment2_cn.193C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_193D0[] = { +#include "textures/segment2/segment2_cn.193D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_193E0[] = { +#include "textures/segment2/segment2_cn.193E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_193F0[] = { +#include "textures/segment2/segment2_cn.193F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19400[] = { +#include "textures/segment2/segment2_cn.19400.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19410[] = { +#include "textures/segment2/segment2_cn.19410.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19420[] = { +#include "textures/segment2/segment2_cn.19420.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19430[] = { +#include "textures/segment2/segment2_cn.19430.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19440[] = { +#include "textures/segment2/segment2_cn.19440.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19450[] = { +#include "textures/segment2/segment2_cn.19450.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19460[] = { +#include "textures/segment2/segment2_cn.19460.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19470[] = { +#include "textures/segment2/segment2_cn.19470.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19480[] = { +#include "textures/segment2/segment2_cn.19480.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19490[] = { +#include "textures/segment2/segment2_cn.19490.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_194A0[] = { +#include "textures/segment2/segment2_cn.194A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_194B0[] = { +#include "textures/segment2/segment2_cn.194B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_194C0[] = { +#include "textures/segment2/segment2_cn.194C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_194D0[] = { +#include "textures/segment2/segment2_cn.194D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_194E0[] = { +#include "textures/segment2/segment2_cn.194E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_194F0[] = { +#include "textures/segment2/segment2_cn.194F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19500[] = { +#include "textures/segment2/segment2_cn.19500.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19510[] = { +#include "textures/segment2/segment2_cn.19510.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19520[] = { +#include "textures/segment2/segment2_cn.19520.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19530[] = { +#include "textures/segment2/segment2_cn.19530.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19540[] = { +#include "textures/segment2/segment2_cn.19540.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19550[] = { +#include "textures/segment2/segment2_cn.19550.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19560[] = { +#include "textures/segment2/segment2_cn.19560.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19570[] = { +#include "textures/segment2/segment2_cn.19570.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19580[] = { +#include "textures/segment2/segment2_cn.19580.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19590[] = { +#include "textures/segment2/segment2_cn.19590.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_195A0[] = { +#include "textures/segment2/segment2_cn.195A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_195B0[] = { +#include "textures/segment2/segment2_cn.195B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_195C0[] = { +#include "textures/segment2/segment2_cn.195C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_195D0[] = { +#include "textures/segment2/segment2_cn.195D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_195E0[] = { +#include "textures/segment2/segment2_cn.195E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_195F0[] = { +#include "textures/segment2/segment2_cn.195F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19600[] = { +#include "textures/segment2/segment2_cn.19600.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19610[] = { +#include "textures/segment2/segment2_cn.19610.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19620[] = { +#include "textures/segment2/segment2_cn.19620.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19630[] = { +#include "textures/segment2/segment2_cn.19630.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19640[] = { +#include "textures/segment2/segment2_cn.19640.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19650[] = { +#include "textures/segment2/segment2_cn.19650.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19660[] = { +#include "textures/segment2/segment2_cn.19660.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19670[] = { +#include "textures/segment2/segment2_cn.19670.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19680[] = { +#include "textures/segment2/segment2_cn.19680.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19690[] = { +#include "textures/segment2/segment2_cn.19690.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_196A0[] = { +#include "textures/segment2/segment2_cn.196A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_196B0[] = { +#include "textures/segment2/segment2_cn.196B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_196C0[] = { +#include "textures/segment2/segment2_cn.196C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_196D0[] = { +#include "textures/segment2/segment2_cn.196D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_196E0[] = { +#include "textures/segment2/segment2_cn.196E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_196F0[] = { +#include "textures/segment2/segment2_cn.196F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19700[] = { +#include "textures/segment2/segment2_cn.19700.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19710[] = { +#include "textures/segment2/segment2_cn.19710.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19720[] = { +#include "textures/segment2/segment2_cn.19720.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19730[] = { +#include "textures/segment2/segment2_cn.19730.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19740[] = { +#include "textures/segment2/segment2_cn.19740.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19750[] = { +#include "textures/segment2/segment2_cn.19750.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19760[] = { +#include "textures/segment2/segment2_cn.19760.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19770[] = { +#include "textures/segment2/segment2_cn.19770.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19780[] = { +#include "textures/segment2/segment2_cn.19780.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19790[] = { +#include "textures/segment2/segment2_cn.19790.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_197A0[] = { +#include "textures/segment2/segment2_cn.197A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_197B0[] = { +#include "textures/segment2/segment2_cn.197B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_197C0[] = { +#include "textures/segment2/segment2_cn.197C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_197D0[] = { +#include "textures/segment2/segment2_cn.197D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_197E0[] = { +#include "textures/segment2/segment2_cn.197E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_197F0[] = { +#include "textures/segment2/segment2_cn.197F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19800[] = { +#include "textures/segment2/segment2_cn.19800.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19810[] = { +#include "textures/segment2/segment2_cn.19810.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19820[] = { +#include "textures/segment2/segment2_cn.19820.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19830[] = { +#include "textures/segment2/segment2_cn.19830.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19840[] = { +#include "textures/segment2/segment2_cn.19840.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19850[] = { +#include "textures/segment2/segment2_cn.19850.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19860[] = { +#include "textures/segment2/segment2_cn.19860.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19870[] = { +#include "textures/segment2/segment2_cn.19870.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19880[] = { +#include "textures/segment2/segment2_cn.19880.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19890[] = { +#include "textures/segment2/segment2_cn.19890.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_198A0[] = { +#include "textures/segment2/segment2_cn.198A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_198B0[] = { +#include "textures/segment2/segment2_cn.198B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_198C0[] = { +#include "textures/segment2/segment2_cn.198C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_198D0[] = { +#include "textures/segment2/segment2_cn.198D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_198E0[] = { +#include "textures/segment2/segment2_cn.198E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_198F0[] = { +#include "textures/segment2/segment2_cn.198F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19900[] = { +#include "textures/segment2/segment2_cn.19900.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19910[] = { +#include "textures/segment2/segment2_cn.19910.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19920[] = { +#include "textures/segment2/segment2_cn.19920.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19930[] = { +#include "textures/segment2/segment2_cn.19930.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19940[] = { +#include "textures/segment2/segment2_cn.19940.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19950[] = { +#include "textures/segment2/segment2_cn.19950.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19960[] = { +#include "textures/segment2/segment2_cn.19960.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19970[] = { +#include "textures/segment2/segment2_cn.19970.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19980[] = { +#include "textures/segment2/segment2_cn.19980.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19990[] = { +#include "textures/segment2/segment2_cn.19990.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_199A0[] = { +#include "textures/segment2/segment2_cn.199A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_199B0[] = { +#include "textures/segment2/segment2_cn.199B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_199C0[] = { +#include "textures/segment2/segment2_cn.199C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_199D0[] = { +#include "textures/segment2/segment2_cn.199D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_199E0[] = { +#include "textures/segment2/segment2_cn.199E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_199F0[] = { +#include "textures/segment2/segment2_cn.199F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19A00[] = { +#include "textures/segment2/segment2_cn.19A00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19A10[] = { +#include "textures/segment2/segment2_cn.19A10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19A20[] = { +#include "textures/segment2/segment2_cn.19A20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19A30[] = { +#include "textures/segment2/segment2_cn.19A30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19A40[] = { +#include "textures/segment2/segment2_cn.19A40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19A50[] = { +#include "textures/segment2/segment2_cn.19A50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19A60[] = { +#include "textures/segment2/segment2_cn.19A60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19A70[] = { +#include "textures/segment2/segment2_cn.19A70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19A80[] = { +#include "textures/segment2/segment2_cn.19A80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19A90[] = { +#include "textures/segment2/segment2_cn.19A90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19AA0[] = { +#include "textures/segment2/segment2_cn.19AA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19AB0[] = { +#include "textures/segment2/segment2_cn.19AB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19AC0[] = { +#include "textures/segment2/segment2_cn.19AC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19AD0[] = { +#include "textures/segment2/segment2_cn.19AD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19AE0[] = { +#include "textures/segment2/segment2_cn.19AE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19AF0[] = { +#include "textures/segment2/segment2_cn.19AF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19B00[] = { +#include "textures/segment2/segment2_cn.19B00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19B10[] = { +#include "textures/segment2/segment2_cn.19B10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19B20[] = { +#include "textures/segment2/segment2_cn.19B20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19B30[] = { +#include "textures/segment2/segment2_cn.19B30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19B40[] = { +#include "textures/segment2/segment2_cn.19B40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19B50[] = { +#include "textures/segment2/segment2_cn.19B50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19B60[] = { +#include "textures/segment2/segment2_cn.19B60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19B70[] = { +#include "textures/segment2/segment2_cn.19B70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19B80[] = { +#include "textures/segment2/segment2_cn.19B80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19B90[] = { +#include "textures/segment2/segment2_cn.19B90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19BA0[] = { +#include "textures/segment2/segment2_cn.19BA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19BB0[] = { +#include "textures/segment2/segment2_cn.19BB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19BC0[] = { +#include "textures/segment2/segment2_cn.19BC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19BD0[] = { +#include "textures/segment2/segment2_cn.19BD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19BE0[] = { +#include "textures/segment2/segment2_cn.19BE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19BF0[] = { +#include "textures/segment2/segment2_cn.19BF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19C00[] = { +#include "textures/segment2/segment2_cn.19C00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19C10[] = { +#include "textures/segment2/segment2_cn.19C10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19C20[] = { +#include "textures/segment2/segment2_cn.19C20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19C30[] = { +#include "textures/segment2/segment2_cn.19C30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19C40[] = { +#include "textures/segment2/segment2_cn.19C40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19C50[] = { +#include "textures/segment2/segment2_cn.19C50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19C60[] = { +#include "textures/segment2/segment2_cn.19C60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19C70[] = { +#include "textures/segment2/segment2_cn.19C70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19C80[] = { +#include "textures/segment2/segment2_cn.19C80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19C90[] = { +#include "textures/segment2/segment2_cn.19C90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19CA0[] = { +#include "textures/segment2/segment2_cn.19CA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19CB0[] = { +#include "textures/segment2/segment2_cn.19CB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19CC0[] = { +#include "textures/segment2/segment2_cn.19CC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19CD0[] = { +#include "textures/segment2/segment2_cn.19CD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19CE0[] = { +#include "textures/segment2/segment2_cn.19CE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19CF0[] = { +#include "textures/segment2/segment2_cn.19CF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19D00[] = { +#include "textures/segment2/segment2_cn.19D00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19D10[] = { +#include "textures/segment2/segment2_cn.19D10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19D20[] = { +#include "textures/segment2/segment2_cn.19D20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19D30[] = { +#include "textures/segment2/segment2_cn.19D30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19D40[] = { +#include "textures/segment2/segment2_cn.19D40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19D50[] = { +#include "textures/segment2/segment2_cn.19D50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19D60[] = { +#include "textures/segment2/segment2_cn.19D60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19D70[] = { +#include "textures/segment2/segment2_cn.19D70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19D80[] = { +#include "textures/segment2/segment2_cn.19D80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19D90[] = { +#include "textures/segment2/segment2_cn.19D90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19DA0[] = { +#include "textures/segment2/segment2_cn.19DA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19DB0[] = { +#include "textures/segment2/segment2_cn.19DB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19DC0[] = { +#include "textures/segment2/segment2_cn.19DC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19DD0[] = { +#include "textures/segment2/segment2_cn.19DD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19DE0[] = { +#include "textures/segment2/segment2_cn.19DE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19DF0[] = { +#include "textures/segment2/segment2_cn.19DF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19E00[] = { +#include "textures/segment2/segment2_cn.19E00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19E10[] = { +#include "textures/segment2/segment2_cn.19E10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19E20[] = { +#include "textures/segment2/segment2_cn.19E20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19E30[] = { +#include "textures/segment2/segment2_cn.19E30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19E40[] = { +#include "textures/segment2/segment2_cn.19E40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19E50[] = { +#include "textures/segment2/segment2_cn.19E50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19E60[] = { +#include "textures/segment2/segment2_cn.19E60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19E70[] = { +#include "textures/segment2/segment2_cn.19E70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19E80[] = { +#include "textures/segment2/segment2_cn.19E80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19E90[] = { +#include "textures/segment2/segment2_cn.19E90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19EA0[] = { +#include "textures/segment2/segment2_cn.19EA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19EB0[] = { +#include "textures/segment2/segment2_cn.19EB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19EC0[] = { +#include "textures/segment2/segment2_cn.19EC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19ED0[] = { +#include "textures/segment2/segment2_cn.19ED0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19EE0[] = { +#include "textures/segment2/segment2_cn.19EE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19EF0[] = { +#include "textures/segment2/segment2_cn.19EF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19F00[] = { +#include "textures/segment2/segment2_cn.19F00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19F10[] = { +#include "textures/segment2/segment2_cn.19F10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19F20[] = { +#include "textures/segment2/segment2_cn.19F20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19F30[] = { +#include "textures/segment2/segment2_cn.19F30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19F40[] = { +#include "textures/segment2/segment2_cn.19F40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19F50[] = { +#include "textures/segment2/segment2_cn.19F50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19F60[] = { +#include "textures/segment2/segment2_cn.19F60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19F70[] = { +#include "textures/segment2/segment2_cn.19F70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19F80[] = { +#include "textures/segment2/segment2_cn.19F80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19F90[] = { +#include "textures/segment2/segment2_cn.19F90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19FA0[] = { +#include "textures/segment2/segment2_cn.19FA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19FB0[] = { +#include "textures/segment2/segment2_cn.19FB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19FC0[] = { +#include "textures/segment2/segment2_cn.19FC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19FD0[] = { +#include "textures/segment2/segment2_cn.19FD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19FE0[] = { +#include "textures/segment2/segment2_cn.19FE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_19FF0[] = { +#include "textures/segment2/segment2_cn.19FF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A000[] = { +#include "textures/segment2/segment2_cn.1A000.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A010[] = { +#include "textures/segment2/segment2_cn.1A010.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A020[] = { +#include "textures/segment2/segment2_cn.1A020.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A030[] = { +#include "textures/segment2/segment2_cn.1A030.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A040[] = { +#include "textures/segment2/segment2_cn.1A040.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A050[] = { +#include "textures/segment2/segment2_cn.1A050.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A060[] = { +#include "textures/segment2/segment2_cn.1A060.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A070[] = { +#include "textures/segment2/segment2_cn.1A070.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A080[] = { +#include "textures/segment2/segment2_cn.1A080.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A090[] = { +#include "textures/segment2/segment2_cn.1A090.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A0A0[] = { +#include "textures/segment2/segment2_cn.1A0A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A0B0[] = { +#include "textures/segment2/segment2_cn.1A0B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A0C0[] = { +#include "textures/segment2/segment2_cn.1A0C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A0D0[] = { +#include "textures/segment2/segment2_cn.1A0D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A0E0[] = { +#include "textures/segment2/segment2_cn.1A0E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A0F0[] = { +#include "textures/segment2/segment2_cn.1A0F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A100[] = { +#include "textures/segment2/segment2_cn.1A100.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A110[] = { +#include "textures/segment2/segment2_cn.1A110.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A120[] = { +#include "textures/segment2/segment2_cn.1A120.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A130[] = { +#include "textures/segment2/segment2_cn.1A130.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A140[] = { +#include "textures/segment2/segment2_cn.1A140.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A150[] = { +#include "textures/segment2/segment2_cn.1A150.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A160[] = { +#include "textures/segment2/segment2_cn.1A160.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A170[] = { +#include "textures/segment2/segment2_cn.1A170.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A180[] = { +#include "textures/segment2/segment2_cn.1A180.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A190[] = { +#include "textures/segment2/segment2_cn.1A190.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A1A0[] = { +#include "textures/segment2/segment2_cn.1A1A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A1B0[] = { +#include "textures/segment2/segment2_cn.1A1B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A1C0[] = { +#include "textures/segment2/segment2_cn.1A1C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A1D0[] = { +#include "textures/segment2/segment2_cn.1A1D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A1E0[] = { +#include "textures/segment2/segment2_cn.1A1E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A1F0[] = { +#include "textures/segment2/segment2_cn.1A1F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A200[] = { +#include "textures/segment2/segment2_cn.1A200.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A210[] = { +#include "textures/segment2/segment2_cn.1A210.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A220[] = { +#include "textures/segment2/segment2_cn.1A220.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A230[] = { +#include "textures/segment2/segment2_cn.1A230.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A240[] = { +#include "textures/segment2/segment2_cn.1A240.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A250[] = { +#include "textures/segment2/segment2_cn.1A250.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A260[] = { +#include "textures/segment2/segment2_cn.1A260.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A270[] = { +#include "textures/segment2/segment2_cn.1A270.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A280[] = { +#include "textures/segment2/segment2_cn.1A280.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A290[] = { +#include "textures/segment2/segment2_cn.1A290.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A2A0[] = { +#include "textures/segment2/segment2_cn.1A2A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A2B0[] = { +#include "textures/segment2/segment2_cn.1A2B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A2C0[] = { +#include "textures/segment2/segment2_cn.1A2C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A2D0[] = { +#include "textures/segment2/segment2_cn.1A2D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A2E0[] = { +#include "textures/segment2/segment2_cn.1A2E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A2F0[] = { +#include "textures/segment2/segment2_cn.1A2F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A300[] = { +#include "textures/segment2/segment2_cn.1A300.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A310[] = { +#include "textures/segment2/segment2_cn.1A310.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A320[] = { +#include "textures/segment2/segment2_cn.1A320.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A330[] = { +#include "textures/segment2/segment2_cn.1A330.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A340[] = { +#include "textures/segment2/segment2_cn.1A340.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A350[] = { +#include "textures/segment2/segment2_cn.1A350.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A360[] = { +#include "textures/segment2/segment2_cn.1A360.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A370[] = { +#include "textures/segment2/segment2_cn.1A370.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A380[] = { +#include "textures/segment2/segment2_cn.1A380.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A390[] = { +#include "textures/segment2/segment2_cn.1A390.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A3A0[] = { +#include "textures/segment2/segment2_cn.1A3A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A3B0[] = { +#include "textures/segment2/segment2_cn.1A3B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A3C0[] = { +#include "textures/segment2/segment2_cn.1A3C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A3D0[] = { +#include "textures/segment2/segment2_cn.1A3D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A3E0[] = { +#include "textures/segment2/segment2_cn.1A3E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A3F0[] = { +#include "textures/segment2/segment2_cn.1A3F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A400[] = { +#include "textures/segment2/segment2_cn.1A400.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A410[] = { +#include "textures/segment2/segment2_cn.1A410.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A420[] = { +#include "textures/segment2/segment2_cn.1A420.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A430[] = { +#include "textures/segment2/segment2_cn.1A430.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A440[] = { +#include "textures/segment2/segment2_cn.1A440.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A450[] = { +#include "textures/segment2/segment2_cn.1A450.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A460[] = { +#include "textures/segment2/segment2_cn.1A460.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A470[] = { +#include "textures/segment2/segment2_cn.1A470.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A480[] = { +#include "textures/segment2/segment2_cn.1A480.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A490[] = { +#include "textures/segment2/segment2_cn.1A490.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A4A0[] = { +#include "textures/segment2/segment2_cn.1A4A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A4B0[] = { +#include "textures/segment2/segment2_cn.1A4B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A4C0[] = { +#include "textures/segment2/segment2_cn.1A4C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A4D0[] = { +#include "textures/segment2/segment2_cn.1A4D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A4E0[] = { +#include "textures/segment2/segment2_cn.1A4E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A4F0[] = { +#include "textures/segment2/segment2_cn.1A4F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A500[] = { +#include "textures/segment2/segment2_cn.1A500.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A510[] = { +#include "textures/segment2/segment2_cn.1A510.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A520[] = { +#include "textures/segment2/segment2_cn.1A520.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A530[] = { +#include "textures/segment2/segment2_cn.1A530.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A540[] = { +#include "textures/segment2/segment2_cn.1A540.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A550[] = { +#include "textures/segment2/segment2_cn.1A550.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A560[] = { +#include "textures/segment2/segment2_cn.1A560.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A570[] = { +#include "textures/segment2/segment2_cn.1A570.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A580[] = { +#include "textures/segment2/segment2_cn.1A580.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A590[] = { +#include "textures/segment2/segment2_cn.1A590.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A5A0[] = { +#include "textures/segment2/segment2_cn.1A5A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A5B0[] = { +#include "textures/segment2/segment2_cn.1A5B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A5C0[] = { +#include "textures/segment2/segment2_cn.1A5C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A5D0[] = { +#include "textures/segment2/segment2_cn.1A5D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A5E0[] = { +#include "textures/segment2/segment2_cn.1A5E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A5F0[] = { +#include "textures/segment2/segment2_cn.1A5F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A600[] = { +#include "textures/segment2/segment2_cn.1A600.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A610[] = { +#include "textures/segment2/segment2_cn.1A610.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A620[] = { +#include "textures/segment2/segment2_cn.1A620.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A630[] = { +#include "textures/segment2/segment2_cn.1A630.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A640[] = { +#include "textures/segment2/segment2_cn.1A640.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A650[] = { +#include "textures/segment2/segment2_cn.1A650.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A660[] = { +#include "textures/segment2/segment2_cn.1A660.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A670[] = { +#include "textures/segment2/segment2_cn.1A670.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A680[] = { +#include "textures/segment2/segment2_cn.1A680.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A690[] = { +#include "textures/segment2/segment2_cn.1A690.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A6A0[] = { +#include "textures/segment2/segment2_cn.1A6A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A6B0[] = { +#include "textures/segment2/segment2_cn.1A6B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A6C0[] = { +#include "textures/segment2/segment2_cn.1A6C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A6D0[] = { +#include "textures/segment2/segment2_cn.1A6D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A6E0[] = { +#include "textures/segment2/segment2_cn.1A6E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A6F0[] = { +#include "textures/segment2/segment2_cn.1A6F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A700[] = { +#include "textures/segment2/segment2_cn.1A700.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A710[] = { +#include "textures/segment2/segment2_cn.1A710.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A720[] = { +#include "textures/segment2/segment2_cn.1A720.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A730[] = { +#include "textures/segment2/segment2_cn.1A730.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A740[] = { +#include "textures/segment2/segment2_cn.1A740.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A750[] = { +#include "textures/segment2/segment2_cn.1A750.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A760[] = { +#include "textures/segment2/segment2_cn.1A760.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A770[] = { +#include "textures/segment2/segment2_cn.1A770.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A780[] = { +#include "textures/segment2/segment2_cn.1A780.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A790[] = { +#include "textures/segment2/segment2_cn.1A790.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A7A0[] = { +#include "textures/segment2/segment2_cn.1A7A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A7B0[] = { +#include "textures/segment2/segment2_cn.1A7B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A7C0[] = { +#include "textures/segment2/segment2_cn.1A7C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A7D0[] = { +#include "textures/segment2/segment2_cn.1A7D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A7E0[] = { +#include "textures/segment2/segment2_cn.1A7E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A7F0[] = { +#include "textures/segment2/segment2_cn.1A7F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A800[] = { +#include "textures/segment2/segment2_cn.1A800.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A810[] = { +#include "textures/segment2/segment2_cn.1A810.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A820[] = { +#include "textures/segment2/segment2_cn.1A820.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A830[] = { +#include "textures/segment2/segment2_cn.1A830.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A840[] = { +#include "textures/segment2/segment2_cn.1A840.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A850[] = { +#include "textures/segment2/segment2_cn.1A850.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A860[] = { +#include "textures/segment2/segment2_cn.1A860.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A870[] = { +#include "textures/segment2/segment2_cn.1A870.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A880[] = { +#include "textures/segment2/segment2_cn.1A880.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A890[] = { +#include "textures/segment2/segment2_cn.1A890.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A8A0[] = { +#include "textures/segment2/segment2_cn.1A8A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A8B0[] = { +#include "textures/segment2/segment2_cn.1A8B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A8C0[] = { +#include "textures/segment2/segment2_cn.1A8C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A8D0[] = { +#include "textures/segment2/segment2_cn.1A8D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A8E0[] = { +#include "textures/segment2/segment2_cn.1A8E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A8F0[] = { +#include "textures/segment2/segment2_cn.1A8F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A900[] = { +#include "textures/segment2/segment2_cn.1A900.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A910[] = { +#include "textures/segment2/segment2_cn.1A910.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A920[] = { +#include "textures/segment2/segment2_cn.1A920.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A930[] = { +#include "textures/segment2/segment2_cn.1A930.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A940[] = { +#include "textures/segment2/segment2_cn.1A940.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A950[] = { +#include "textures/segment2/segment2_cn.1A950.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A960[] = { +#include "textures/segment2/segment2_cn.1A960.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A970[] = { +#include "textures/segment2/segment2_cn.1A970.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A980[] = { +#include "textures/segment2/segment2_cn.1A980.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A990[] = { +#include "textures/segment2/segment2_cn.1A990.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A9A0[] = { +#include "textures/segment2/segment2_cn.1A9A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A9B0[] = { +#include "textures/segment2/segment2_cn.1A9B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A9C0[] = { +#include "textures/segment2/segment2_cn.1A9C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A9D0[] = { +#include "textures/segment2/segment2_cn.1A9D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A9E0[] = { +#include "textures/segment2/segment2_cn.1A9E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1A9F0[] = { +#include "textures/segment2/segment2_cn.1A9F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AA00[] = { +#include "textures/segment2/segment2_cn.1AA00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AA10[] = { +#include "textures/segment2/segment2_cn.1AA10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AA20[] = { +#include "textures/segment2/segment2_cn.1AA20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AA30[] = { +#include "textures/segment2/segment2_cn.1AA30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AA40[] = { +#include "textures/segment2/segment2_cn.1AA40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AA50[] = { +#include "textures/segment2/segment2_cn.1AA50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AA60[] = { +#include "textures/segment2/segment2_cn.1AA60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AA70[] = { +#include "textures/segment2/segment2_cn.1AA70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AA80[] = { +#include "textures/segment2/segment2_cn.1AA80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AA90[] = { +#include "textures/segment2/segment2_cn.1AA90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AAA0[] = { +#include "textures/segment2/segment2_cn.1AAA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AAB0[] = { +#include "textures/segment2/segment2_cn.1AAB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AAC0[] = { +#include "textures/segment2/segment2_cn.1AAC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AAD0[] = { +#include "textures/segment2/segment2_cn.1AAD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AAE0[] = { +#include "textures/segment2/segment2_cn.1AAE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AAF0[] = { +#include "textures/segment2/segment2_cn.1AAF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AB00[] = { +#include "textures/segment2/segment2_cn.1AB00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AB10[] = { +#include "textures/segment2/segment2_cn.1AB10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AB20[] = { +#include "textures/segment2/segment2_cn.1AB20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AB30[] = { +#include "textures/segment2/segment2_cn.1AB30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AB40[] = { +#include "textures/segment2/segment2_cn.1AB40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AB50[] = { +#include "textures/segment2/segment2_cn.1AB50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AB60[] = { +#include "textures/segment2/segment2_cn.1AB60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AB70[] = { +#include "textures/segment2/segment2_cn.1AB70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AB80[] = { +#include "textures/segment2/segment2_cn.1AB80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AB90[] = { +#include "textures/segment2/segment2_cn.1AB90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ABA0[] = { +#include "textures/segment2/segment2_cn.1ABA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ABB0[] = { +#include "textures/segment2/segment2_cn.1ABB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ABC0[] = { +#include "textures/segment2/segment2_cn.1ABC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ABD0[] = { +#include "textures/segment2/segment2_cn.1ABD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ABE0[] = { +#include "textures/segment2/segment2_cn.1ABE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ABF0[] = { +#include "textures/segment2/segment2_cn.1ABF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AC00[] = { +#include "textures/segment2/segment2_cn.1AC00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AC10[] = { +#include "textures/segment2/segment2_cn.1AC10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AC20[] = { +#include "textures/segment2/segment2_cn.1AC20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AC30[] = { +#include "textures/segment2/segment2_cn.1AC30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AC40[] = { +#include "textures/segment2/segment2_cn.1AC40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AC50[] = { +#include "textures/segment2/segment2_cn.1AC50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AC60[] = { +#include "textures/segment2/segment2_cn.1AC60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AC70[] = { +#include "textures/segment2/segment2_cn.1AC70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AC80[] = { +#include "textures/segment2/segment2_cn.1AC80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AC90[] = { +#include "textures/segment2/segment2_cn.1AC90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ACA0[] = { +#include "textures/segment2/segment2_cn.1ACA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ACB0[] = { +#include "textures/segment2/segment2_cn.1ACB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ACC0[] = { +#include "textures/segment2/segment2_cn.1ACC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ACD0[] = { +#include "textures/segment2/segment2_cn.1ACD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ACE0[] = { +#include "textures/segment2/segment2_cn.1ACE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ACF0[] = { +#include "textures/segment2/segment2_cn.1ACF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AD00[] = { +#include "textures/segment2/segment2_cn.1AD00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AD10[] = { +#include "textures/segment2/segment2_cn.1AD10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AD20[] = { +#include "textures/segment2/segment2_cn.1AD20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AD30[] = { +#include "textures/segment2/segment2_cn.1AD30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AD40[] = { +#include "textures/segment2/segment2_cn.1AD40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AD50[] = { +#include "textures/segment2/segment2_cn.1AD50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AD60[] = { +#include "textures/segment2/segment2_cn.1AD60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AD70[] = { +#include "textures/segment2/segment2_cn.1AD70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AD80[] = { +#include "textures/segment2/segment2_cn.1AD80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AD90[] = { +#include "textures/segment2/segment2_cn.1AD90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ADA0[] = { +#include "textures/segment2/segment2_cn.1ADA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ADB0[] = { +#include "textures/segment2/segment2_cn.1ADB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ADC0[] = { +#include "textures/segment2/segment2_cn.1ADC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ADD0[] = { +#include "textures/segment2/segment2_cn.1ADD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ADE0[] = { +#include "textures/segment2/segment2_cn.1ADE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ADF0[] = { +#include "textures/segment2/segment2_cn.1ADF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AE00[] = { +#include "textures/segment2/segment2_cn.1AE00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AE10[] = { +#include "textures/segment2/segment2_cn.1AE10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AE20[] = { +#include "textures/segment2/segment2_cn.1AE20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AE30[] = { +#include "textures/segment2/segment2_cn.1AE30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AE40[] = { +#include "textures/segment2/segment2_cn.1AE40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AE50[] = { +#include "textures/segment2/segment2_cn.1AE50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AE60[] = { +#include "textures/segment2/segment2_cn.1AE60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AE70[] = { +#include "textures/segment2/segment2_cn.1AE70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AE80[] = { +#include "textures/segment2/segment2_cn.1AE80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AE90[] = { +#include "textures/segment2/segment2_cn.1AE90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AEA0[] = { +#include "textures/segment2/segment2_cn.1AEA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AEB0[] = { +#include "textures/segment2/segment2_cn.1AEB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AEC0[] = { +#include "textures/segment2/segment2_cn.1AEC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AED0[] = { +#include "textures/segment2/segment2_cn.1AED0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AEE0[] = { +#include "textures/segment2/segment2_cn.1AEE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AEF0[] = { +#include "textures/segment2/segment2_cn.1AEF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AF00[] = { +#include "textures/segment2/segment2_cn.1AF00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AF10[] = { +#include "textures/segment2/segment2_cn.1AF10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AF20[] = { +#include "textures/segment2/segment2_cn.1AF20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AF30[] = { +#include "textures/segment2/segment2_cn.1AF30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AF40[] = { +#include "textures/segment2/segment2_cn.1AF40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AF50[] = { +#include "textures/segment2/segment2_cn.1AF50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AF60[] = { +#include "textures/segment2/segment2_cn.1AF60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AF70[] = { +#include "textures/segment2/segment2_cn.1AF70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AF80[] = { +#include "textures/segment2/segment2_cn.1AF80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AF90[] = { +#include "textures/segment2/segment2_cn.1AF90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AFA0[] = { +#include "textures/segment2/segment2_cn.1AFA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AFB0[] = { +#include "textures/segment2/segment2_cn.1AFB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AFC0[] = { +#include "textures/segment2/segment2_cn.1AFC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AFD0[] = { +#include "textures/segment2/segment2_cn.1AFD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AFE0[] = { +#include "textures/segment2/segment2_cn.1AFE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1AFF0[] = { +#include "textures/segment2/segment2_cn.1AFF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B000[] = { +#include "textures/segment2/segment2_cn.1B000.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B010[] = { +#include "textures/segment2/segment2_cn.1B010.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B020[] = { +#include "textures/segment2/segment2_cn.1B020.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B030[] = { +#include "textures/segment2/segment2_cn.1B030.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B040[] = { +#include "textures/segment2/segment2_cn.1B040.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B050[] = { +#include "textures/segment2/segment2_cn.1B050.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B060[] = { +#include "textures/segment2/segment2_cn.1B060.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B070[] = { +#include "textures/segment2/segment2_cn.1B070.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B080[] = { +#include "textures/segment2/segment2_cn.1B080.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B090[] = { +#include "textures/segment2/segment2_cn.1B090.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B0A0[] = { +#include "textures/segment2/segment2_cn.1B0A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B0B0[] = { +#include "textures/segment2/segment2_cn.1B0B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B0C0[] = { +#include "textures/segment2/segment2_cn.1B0C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B0D0[] = { +#include "textures/segment2/segment2_cn.1B0D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B0E0[] = { +#include "textures/segment2/segment2_cn.1B0E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B0F0[] = { +#include "textures/segment2/segment2_cn.1B0F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B100[] = { +#include "textures/segment2/segment2_cn.1B100.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B110[] = { +#include "textures/segment2/segment2_cn.1B110.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B120[] = { +#include "textures/segment2/segment2_cn.1B120.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B130[] = { +#include "textures/segment2/segment2_cn.1B130.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B140[] = { +#include "textures/segment2/segment2_cn.1B140.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B150[] = { +#include "textures/segment2/segment2_cn.1B150.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B160[] = { +#include "textures/segment2/segment2_cn.1B160.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B170[] = { +#include "textures/segment2/segment2_cn.1B170.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B180[] = { +#include "textures/segment2/segment2_cn.1B180.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B190[] = { +#include "textures/segment2/segment2_cn.1B190.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B1A0[] = { +#include "textures/segment2/segment2_cn.1B1A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B1B0[] = { +#include "textures/segment2/segment2_cn.1B1B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B1C0[] = { +#include "textures/segment2/segment2_cn.1B1C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B1D0[] = { +#include "textures/segment2/segment2_cn.1B1D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B1E0[] = { +#include "textures/segment2/segment2_cn.1B1E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B1F0[] = { +#include "textures/segment2/segment2_cn.1B1F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B200[] = { +#include "textures/segment2/segment2_cn.1B200.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B210[] = { +#include "textures/segment2/segment2_cn.1B210.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B220[] = { +#include "textures/segment2/segment2_cn.1B220.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B230[] = { +#include "textures/segment2/segment2_cn.1B230.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B240[] = { +#include "textures/segment2/segment2_cn.1B240.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B250[] = { +#include "textures/segment2/segment2_cn.1B250.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B260[] = { +#include "textures/segment2/segment2_cn.1B260.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B270[] = { +#include "textures/segment2/segment2_cn.1B270.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B280[] = { +#include "textures/segment2/segment2_cn.1B280.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B290[] = { +#include "textures/segment2/segment2_cn.1B290.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B2A0[] = { +#include "textures/segment2/segment2_cn.1B2A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B2B0[] = { +#include "textures/segment2/segment2_cn.1B2B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B2C0[] = { +#include "textures/segment2/segment2_cn.1B2C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B2D0[] = { +#include "textures/segment2/segment2_cn.1B2D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B2E0[] = { +#include "textures/segment2/segment2_cn.1B2E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B2F0[] = { +#include "textures/segment2/segment2_cn.1B2F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B300[] = { +#include "textures/segment2/segment2_cn.1B300.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B310[] = { +#include "textures/segment2/segment2_cn.1B310.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B320[] = { +#include "textures/segment2/segment2_cn.1B320.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B330[] = { +#include "textures/segment2/segment2_cn.1B330.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B340[] = { +#include "textures/segment2/segment2_cn.1B340.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B350[] = { +#include "textures/segment2/segment2_cn.1B350.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B360[] = { +#include "textures/segment2/segment2_cn.1B360.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B370[] = { +#include "textures/segment2/segment2_cn.1B370.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B380[] = { +#include "textures/segment2/segment2_cn.1B380.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B390[] = { +#include "textures/segment2/segment2_cn.1B390.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B3A0[] = { +#include "textures/segment2/segment2_cn.1B3A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B3B0[] = { +#include "textures/segment2/segment2_cn.1B3B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B3C0[] = { +#include "textures/segment2/segment2_cn.1B3C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B3D0[] = { +#include "textures/segment2/segment2_cn.1B3D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B3E0[] = { +#include "textures/segment2/segment2_cn.1B3E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B3F0[] = { +#include "textures/segment2/segment2_cn.1B3F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B400[] = { +#include "textures/segment2/segment2_cn.1B400.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B410[] = { +#include "textures/segment2/segment2_cn.1B410.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B420[] = { +#include "textures/segment2/segment2_cn.1B420.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B430[] = { +#include "textures/segment2/segment2_cn.1B430.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B440[] = { +#include "textures/segment2/segment2_cn.1B440.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B450[] = { +#include "textures/segment2/segment2_cn.1B450.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B460[] = { +#include "textures/segment2/segment2_cn.1B460.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B470[] = { +#include "textures/segment2/segment2_cn.1B470.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B480[] = { +#include "textures/segment2/segment2_cn.1B480.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B490[] = { +#include "textures/segment2/segment2_cn.1B490.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B4A0[] = { +#include "textures/segment2/segment2_cn.1B4A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B4B0[] = { +#include "textures/segment2/segment2_cn.1B4B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B4C0[] = { +#include "textures/segment2/segment2_cn.1B4C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B4D0[] = { +#include "textures/segment2/segment2_cn.1B4D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B4E0[] = { +#include "textures/segment2/segment2_cn.1B4E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B4F0[] = { +#include "textures/segment2/segment2_cn.1B4F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B500[] = { +#include "textures/segment2/segment2_cn.1B500.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B510[] = { +#include "textures/segment2/segment2_cn.1B510.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B520[] = { +#include "textures/segment2/segment2_cn.1B520.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B530[] = { +#include "textures/segment2/segment2_cn.1B530.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B540[] = { +#include "textures/segment2/segment2_cn.1B540.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B550[] = { +#include "textures/segment2/segment2_cn.1B550.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B560[] = { +#include "textures/segment2/segment2_cn.1B560.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B570[] = { +#include "textures/segment2/segment2_cn.1B570.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B580[] = { +#include "textures/segment2/segment2_cn.1B580.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B590[] = { +#include "textures/segment2/segment2_cn.1B590.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B5A0[] = { +#include "textures/segment2/segment2_cn.1B5A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B5B0[] = { +#include "textures/segment2/segment2_cn.1B5B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B5C0[] = { +#include "textures/segment2/segment2_cn.1B5C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B5D0[] = { +#include "textures/segment2/segment2_cn.1B5D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B5E0[] = { +#include "textures/segment2/segment2_cn.1B5E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B5F0[] = { +#include "textures/segment2/segment2_cn.1B5F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B600[] = { +#include "textures/segment2/segment2_cn.1B600.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B610[] = { +#include "textures/segment2/segment2_cn.1B610.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B620[] = { +#include "textures/segment2/segment2_cn.1B620.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B630[] = { +#include "textures/segment2/segment2_cn.1B630.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B640[] = { +#include "textures/segment2/segment2_cn.1B640.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B650[] = { +#include "textures/segment2/segment2_cn.1B650.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B660[] = { +#include "textures/segment2/segment2_cn.1B660.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B670[] = { +#include "textures/segment2/segment2_cn.1B670.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B680[] = { +#include "textures/segment2/segment2_cn.1B680.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B690[] = { +#include "textures/segment2/segment2_cn.1B690.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B6A0[] = { +#include "textures/segment2/segment2_cn.1B6A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B6B0[] = { +#include "textures/segment2/segment2_cn.1B6B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B6C0[] = { +#include "textures/segment2/segment2_cn.1B6C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B6D0[] = { +#include "textures/segment2/segment2_cn.1B6D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B6E0[] = { +#include "textures/segment2/segment2_cn.1B6E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B6F0[] = { +#include "textures/segment2/segment2_cn.1B6F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B700[] = { +#include "textures/segment2/segment2_cn.1B700.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B710[] = { +#include "textures/segment2/segment2_cn.1B710.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B720[] = { +#include "textures/segment2/segment2_cn.1B720.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B730[] = { +#include "textures/segment2/segment2_cn.1B730.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B740[] = { +#include "textures/segment2/segment2_cn.1B740.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B750[] = { +#include "textures/segment2/segment2_cn.1B750.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B760[] = { +#include "textures/segment2/segment2_cn.1B760.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B770[] = { +#include "textures/segment2/segment2_cn.1B770.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B780[] = { +#include "textures/segment2/segment2_cn.1B780.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B790[] = { +#include "textures/segment2/segment2_cn.1B790.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B7A0[] = { +#include "textures/segment2/segment2_cn.1B7A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B7B0[] = { +#include "textures/segment2/segment2_cn.1B7B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B7C0[] = { +#include "textures/segment2/segment2_cn.1B7C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B7D0[] = { +#include "textures/segment2/segment2_cn.1B7D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B7E0[] = { +#include "textures/segment2/segment2_cn.1B7E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B7F0[] = { +#include "textures/segment2/segment2_cn.1B7F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B800[] = { +#include "textures/segment2/segment2_cn.1B800.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B810[] = { +#include "textures/segment2/segment2_cn.1B810.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B820[] = { +#include "textures/segment2/segment2_cn.1B820.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B830[] = { +#include "textures/segment2/segment2_cn.1B830.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B840[] = { +#include "textures/segment2/segment2_cn.1B840.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B850[] = { +#include "textures/segment2/segment2_cn.1B850.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B860[] = { +#include "textures/segment2/segment2_cn.1B860.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B870[] = { +#include "textures/segment2/segment2_cn.1B870.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B880[] = { +#include "textures/segment2/segment2_cn.1B880.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B890[] = { +#include "textures/segment2/segment2_cn.1B890.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B8A0[] = { +#include "textures/segment2/segment2_cn.1B8A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B8B0[] = { +#include "textures/segment2/segment2_cn.1B8B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B8C0[] = { +#include "textures/segment2/segment2_cn.1B8C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B8D0[] = { +#include "textures/segment2/segment2_cn.1B8D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B8E0[] = { +#include "textures/segment2/segment2_cn.1B8E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B8F0[] = { +#include "textures/segment2/segment2_cn.1B8F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B900[] = { +#include "textures/segment2/segment2_cn.1B900.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B910[] = { +#include "textures/segment2/segment2_cn.1B910.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B920[] = { +#include "textures/segment2/segment2_cn.1B920.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B930[] = { +#include "textures/segment2/segment2_cn.1B930.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B940[] = { +#include "textures/segment2/segment2_cn.1B940.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B950[] = { +#include "textures/segment2/segment2_cn.1B950.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B960[] = { +#include "textures/segment2/segment2_cn.1B960.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B970[] = { +#include "textures/segment2/segment2_cn.1B970.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B980[] = { +#include "textures/segment2/segment2_cn.1B980.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B990[] = { +#include "textures/segment2/segment2_cn.1B990.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B9A0[] = { +#include "textures/segment2/segment2_cn.1B9A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B9B0[] = { +#include "textures/segment2/segment2_cn.1B9B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B9C0[] = { +#include "textures/segment2/segment2_cn.1B9C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B9D0[] = { +#include "textures/segment2/segment2_cn.1B9D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B9E0[] = { +#include "textures/segment2/segment2_cn.1B9E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1B9F0[] = { +#include "textures/segment2/segment2_cn.1B9F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BA00[] = { +#include "textures/segment2/segment2_cn.1BA00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BA10[] = { +#include "textures/segment2/segment2_cn.1BA10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BA20[] = { +#include "textures/segment2/segment2_cn.1BA20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BA30[] = { +#include "textures/segment2/segment2_cn.1BA30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BA40[] = { +#include "textures/segment2/segment2_cn.1BA40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BA50[] = { +#include "textures/segment2/segment2_cn.1BA50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BA60[] = { +#include "textures/segment2/segment2_cn.1BA60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BA70[] = { +#include "textures/segment2/segment2_cn.1BA70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BA80[] = { +#include "textures/segment2/segment2_cn.1BA80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BA90[] = { +#include "textures/segment2/segment2_cn.1BA90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BAA0[] = { +#include "textures/segment2/segment2_cn.1BAA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BAB0[] = { +#include "textures/segment2/segment2_cn.1BAB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BAC0[] = { +#include "textures/segment2/segment2_cn.1BAC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BAD0[] = { +#include "textures/segment2/segment2_cn.1BAD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BAE0[] = { +#include "textures/segment2/segment2_cn.1BAE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BAF0[] = { +#include "textures/segment2/segment2_cn.1BAF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BB00[] = { +#include "textures/segment2/segment2_cn.1BB00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BB10[] = { +#include "textures/segment2/segment2_cn.1BB10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BB20[] = { +#include "textures/segment2/segment2_cn.1BB20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BB30[] = { +#include "textures/segment2/segment2_cn.1BB30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BB40[] = { +#include "textures/segment2/segment2_cn.1BB40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BB50[] = { +#include "textures/segment2/segment2_cn.1BB50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BB60[] = { +#include "textures/segment2/segment2_cn.1BB60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BB70[] = { +#include "textures/segment2/segment2_cn.1BB70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BB80[] = { +#include "textures/segment2/segment2_cn.1BB80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BB90[] = { +#include "textures/segment2/segment2_cn.1BB90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BBA0[] = { +#include "textures/segment2/segment2_cn.1BBA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BBB0[] = { +#include "textures/segment2/segment2_cn.1BBB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BBC0[] = { +#include "textures/segment2/segment2_cn.1BBC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BBD0[] = { +#include "textures/segment2/segment2_cn.1BBD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BBE0[] = { +#include "textures/segment2/segment2_cn.1BBE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BBF0[] = { +#include "textures/segment2/segment2_cn.1BBF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BC00[] = { +#include "textures/segment2/segment2_cn.1BC00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BC10[] = { +#include "textures/segment2/segment2_cn.1BC10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BC20[] = { +#include "textures/segment2/segment2_cn.1BC20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BC30[] = { +#include "textures/segment2/segment2_cn.1BC30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BC40[] = { +#include "textures/segment2/segment2_cn.1BC40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BC50[] = { +#include "textures/segment2/segment2_cn.1BC50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BC60[] = { +#include "textures/segment2/segment2_cn.1BC60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BC70[] = { +#include "textures/segment2/segment2_cn.1BC70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BC80[] = { +#include "textures/segment2/segment2_cn.1BC80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BC90[] = { +#include "textures/segment2/segment2_cn.1BC90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BCA0[] = { +#include "textures/segment2/segment2_cn.1BCA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BCB0[] = { +#include "textures/segment2/segment2_cn.1BCB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BCC0[] = { +#include "textures/segment2/segment2_cn.1BCC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BCD0[] = { +#include "textures/segment2/segment2_cn.1BCD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BCE0[] = { +#include "textures/segment2/segment2_cn.1BCE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BCF0[] = { +#include "textures/segment2/segment2_cn.1BCF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BD00[] = { +#include "textures/segment2/segment2_cn.1BD00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BD10[] = { +#include "textures/segment2/segment2_cn.1BD10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BD20[] = { +#include "textures/segment2/segment2_cn.1BD20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BD30[] = { +#include "textures/segment2/segment2_cn.1BD30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BD40[] = { +#include "textures/segment2/segment2_cn.1BD40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BD50[] = { +#include "textures/segment2/segment2_cn.1BD50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BD60[] = { +#include "textures/segment2/segment2_cn.1BD60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BD70[] = { +#include "textures/segment2/segment2_cn.1BD70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BD80[] = { +#include "textures/segment2/segment2_cn.1BD80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BD90[] = { +#include "textures/segment2/segment2_cn.1BD90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BDA0[] = { +#include "textures/segment2/segment2_cn.1BDA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BDB0[] = { +#include "textures/segment2/segment2_cn.1BDB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BDC0[] = { +#include "textures/segment2/segment2_cn.1BDC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BDD0[] = { +#include "textures/segment2/segment2_cn.1BDD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BDE0[] = { +#include "textures/segment2/segment2_cn.1BDE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BDF0[] = { +#include "textures/segment2/segment2_cn.1BDF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BE00[] = { +#include "textures/segment2/segment2_cn.1BE00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BE10[] = { +#include "textures/segment2/segment2_cn.1BE10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BE20[] = { +#include "textures/segment2/segment2_cn.1BE20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BE30[] = { +#include "textures/segment2/segment2_cn.1BE30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BE40[] = { +#include "textures/segment2/segment2_cn.1BE40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BE50[] = { +#include "textures/segment2/segment2_cn.1BE50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BE60[] = { +#include "textures/segment2/segment2_cn.1BE60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BE70[] = { +#include "textures/segment2/segment2_cn.1BE70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BE80[] = { +#include "textures/segment2/segment2_cn.1BE80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BE90[] = { +#include "textures/segment2/segment2_cn.1BE90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BEA0[] = { +#include "textures/segment2/segment2_cn.1BEA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BEB0[] = { +#include "textures/segment2/segment2_cn.1BEB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BEC0[] = { +#include "textures/segment2/segment2_cn.1BEC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BED0[] = { +#include "textures/segment2/segment2_cn.1BED0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BEE0[] = { +#include "textures/segment2/segment2_cn.1BEE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BEF0[] = { +#include "textures/segment2/segment2_cn.1BEF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BF00[] = { +#include "textures/segment2/segment2_cn.1BF00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BF10[] = { +#include "textures/segment2/segment2_cn.1BF10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BF20[] = { +#include "textures/segment2/segment2_cn.1BF20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BF30[] = { +#include "textures/segment2/segment2_cn.1BF30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BF40[] = { +#include "textures/segment2/segment2_cn.1BF40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BF50[] = { +#include "textures/segment2/segment2_cn.1BF50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BF60[] = { +#include "textures/segment2/segment2_cn.1BF60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BF70[] = { +#include "textures/segment2/segment2_cn.1BF70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BF80[] = { +#include "textures/segment2/segment2_cn.1BF80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BF90[] = { +#include "textures/segment2/segment2_cn.1BF90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BFA0[] = { +#include "textures/segment2/segment2_cn.1BFA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BFB0[] = { +#include "textures/segment2/segment2_cn.1BFB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BFC0[] = { +#include "textures/segment2/segment2_cn.1BFC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BFD0[] = { +#include "textures/segment2/segment2_cn.1BFD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BFE0[] = { +#include "textures/segment2/segment2_cn.1BFE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1BFF0[] = { +#include "textures/segment2/segment2_cn.1BFF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C000[] = { +#include "textures/segment2/segment2_cn.1C000.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C010[] = { +#include "textures/segment2/segment2_cn.1C010.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C020[] = { +#include "textures/segment2/segment2_cn.1C020.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C030[] = { +#include "textures/segment2/segment2_cn.1C030.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C040[] = { +#include "textures/segment2/segment2_cn.1C040.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C050[] = { +#include "textures/segment2/segment2_cn.1C050.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C060[] = { +#include "textures/segment2/segment2_cn.1C060.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C070[] = { +#include "textures/segment2/segment2_cn.1C070.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C080[] = { +#include "textures/segment2/segment2_cn.1C080.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C090[] = { +#include "textures/segment2/segment2_cn.1C090.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C0A0[] = { +#include "textures/segment2/segment2_cn.1C0A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C0B0[] = { +#include "textures/segment2/segment2_cn.1C0B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C0C0[] = { +#include "textures/segment2/segment2_cn.1C0C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C0D0[] = { +#include "textures/segment2/segment2_cn.1C0D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C0E0[] = { +#include "textures/segment2/segment2_cn.1C0E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C0F0[] = { +#include "textures/segment2/segment2_cn.1C0F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C100[] = { +#include "textures/segment2/segment2_cn.1C100.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C110[] = { +#include "textures/segment2/segment2_cn.1C110.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C120[] = { +#include "textures/segment2/segment2_cn.1C120.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C130[] = { +#include "textures/segment2/segment2_cn.1C130.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C140[] = { +#include "textures/segment2/segment2_cn.1C140.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C150[] = { +#include "textures/segment2/segment2_cn.1C150.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C160[] = { +#include "textures/segment2/segment2_cn.1C160.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C170[] = { +#include "textures/segment2/segment2_cn.1C170.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C180[] = { +#include "textures/segment2/segment2_cn.1C180.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C190[] = { +#include "textures/segment2/segment2_cn.1C190.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C1A0[] = { +#include "textures/segment2/segment2_cn.1C1A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C1B0[] = { +#include "textures/segment2/segment2_cn.1C1B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C1C0[] = { +#include "textures/segment2/segment2_cn.1C1C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C1D0[] = { +#include "textures/segment2/segment2_cn.1C1D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C1E0[] = { +#include "textures/segment2/segment2_cn.1C1E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C1F0[] = { +#include "textures/segment2/segment2_cn.1C1F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C200[] = { +#include "textures/segment2/segment2_cn.1C200.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C210[] = { +#include "textures/segment2/segment2_cn.1C210.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C220[] = { +#include "textures/segment2/segment2_cn.1C220.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C230[] = { +#include "textures/segment2/segment2_cn.1C230.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C240[] = { +#include "textures/segment2/segment2_cn.1C240.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C250[] = { +#include "textures/segment2/segment2_cn.1C250.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C260[] = { +#include "textures/segment2/segment2_cn.1C260.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C270[] = { +#include "textures/segment2/segment2_cn.1C270.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C280[] = { +#include "textures/segment2/segment2_cn.1C280.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C290[] = { +#include "textures/segment2/segment2_cn.1C290.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C2A0[] = { +#include "textures/segment2/segment2_cn.1C2A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C2B0[] = { +#include "textures/segment2/segment2_cn.1C2B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C2C0[] = { +#include "textures/segment2/segment2_cn.1C2C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C2D0[] = { +#include "textures/segment2/segment2_cn.1C2D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C2E0[] = { +#include "textures/segment2/segment2_cn.1C2E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C2F0[] = { +#include "textures/segment2/segment2_cn.1C2F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C300[] = { +#include "textures/segment2/segment2_cn.1C300.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C310[] = { +#include "textures/segment2/segment2_cn.1C310.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C320[] = { +#include "textures/segment2/segment2_cn.1C320.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C330[] = { +#include "textures/segment2/segment2_cn.1C330.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C340[] = { +#include "textures/segment2/segment2_cn.1C340.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C350[] = { +#include "textures/segment2/segment2_cn.1C350.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C360[] = { +#include "textures/segment2/segment2_cn.1C360.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C370[] = { +#include "textures/segment2/segment2_cn.1C370.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C380[] = { +#include "textures/segment2/segment2_cn.1C380.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C390[] = { +#include "textures/segment2/segment2_cn.1C390.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C3A0[] = { +#include "textures/segment2/segment2_cn.1C3A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C3B0[] = { +#include "textures/segment2/segment2_cn.1C3B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C3C0[] = { +#include "textures/segment2/segment2_cn.1C3C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C3D0[] = { +#include "textures/segment2/segment2_cn.1C3D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C3E0[] = { +#include "textures/segment2/segment2_cn.1C3E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C3F0[] = { +#include "textures/segment2/segment2_cn.1C3F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C400[] = { +#include "textures/segment2/segment2_cn.1C400.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C410[] = { +#include "textures/segment2/segment2_cn.1C410.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C420[] = { +#include "textures/segment2/segment2_cn.1C420.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C430[] = { +#include "textures/segment2/segment2_cn.1C430.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C440[] = { +#include "textures/segment2/segment2_cn.1C440.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C450[] = { +#include "textures/segment2/segment2_cn.1C450.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C460[] = { +#include "textures/segment2/segment2_cn.1C460.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C470[] = { +#include "textures/segment2/segment2_cn.1C470.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C480[] = { +#include "textures/segment2/segment2_cn.1C480.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C490[] = { +#include "textures/segment2/segment2_cn.1C490.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C4A0[] = { +#include "textures/segment2/segment2_cn.1C4A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C4B0[] = { +#include "textures/segment2/segment2_cn.1C4B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C4C0[] = { +#include "textures/segment2/segment2_cn.1C4C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C4D0[] = { +#include "textures/segment2/segment2_cn.1C4D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C4E0[] = { +#include "textures/segment2/segment2_cn.1C4E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C4F0[] = { +#include "textures/segment2/segment2_cn.1C4F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C500[] = { +#include "textures/segment2/segment2_cn.1C500.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C510[] = { +#include "textures/segment2/segment2_cn.1C510.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C520[] = { +#include "textures/segment2/segment2_cn.1C520.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C530[] = { +#include "textures/segment2/segment2_cn.1C530.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C540[] = { +#include "textures/segment2/segment2_cn.1C540.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C550[] = { +#include "textures/segment2/segment2_cn.1C550.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C560[] = { +#include "textures/segment2/segment2_cn.1C560.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C570[] = { +#include "textures/segment2/segment2_cn.1C570.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C580[] = { +#include "textures/segment2/segment2_cn.1C580.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C590[] = { +#include "textures/segment2/segment2_cn.1C590.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C5A0[] = { +#include "textures/segment2/segment2_cn.1C5A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C5B0[] = { +#include "textures/segment2/segment2_cn.1C5B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C5C0[] = { +#include "textures/segment2/segment2_cn.1C5C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C5D0[] = { +#include "textures/segment2/segment2_cn.1C5D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C5E0[] = { +#include "textures/segment2/segment2_cn.1C5E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C5F0[] = { +#include "textures/segment2/segment2_cn.1C5F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C600[] = { +#include "textures/segment2/segment2_cn.1C600.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C610[] = { +#include "textures/segment2/segment2_cn.1C610.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C620[] = { +#include "textures/segment2/segment2_cn.1C620.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C630[] = { +#include "textures/segment2/segment2_cn.1C630.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C640[] = { +#include "textures/segment2/segment2_cn.1C640.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C650[] = { +#include "textures/segment2/segment2_cn.1C650.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C660[] = { +#include "textures/segment2/segment2_cn.1C660.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C670[] = { +#include "textures/segment2/segment2_cn.1C670.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C680[] = { +#include "textures/segment2/segment2_cn.1C680.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C690[] = { +#include "textures/segment2/segment2_cn.1C690.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C6A0[] = { +#include "textures/segment2/segment2_cn.1C6A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C6B0[] = { +#include "textures/segment2/segment2_cn.1C6B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C6C0[] = { +#include "textures/segment2/segment2_cn.1C6C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C6D0[] = { +#include "textures/segment2/segment2_cn.1C6D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C6E0[] = { +#include "textures/segment2/segment2_cn.1C6E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C6F0[] = { +#include "textures/segment2/segment2_cn.1C6F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C700[] = { +#include "textures/segment2/segment2_cn.1C700.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C710[] = { +#include "textures/segment2/segment2_cn.1C710.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C720[] = { +#include "textures/segment2/segment2_cn.1C720.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C730[] = { +#include "textures/segment2/segment2_cn.1C730.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C740[] = { +#include "textures/segment2/segment2_cn.1C740.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C750[] = { +#include "textures/segment2/segment2_cn.1C750.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C760[] = { +#include "textures/segment2/segment2_cn.1C760.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C770[] = { +#include "textures/segment2/segment2_cn.1C770.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C780[] = { +#include "textures/segment2/segment2_cn.1C780.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C790[] = { +#include "textures/segment2/segment2_cn.1C790.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C7A0[] = { +#include "textures/segment2/segment2_cn.1C7A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C7B0[] = { +#include "textures/segment2/segment2_cn.1C7B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C7C0[] = { +#include "textures/segment2/segment2_cn.1C7C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C7D0[] = { +#include "textures/segment2/segment2_cn.1C7D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C7E0[] = { +#include "textures/segment2/segment2_cn.1C7E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C7F0[] = { +#include "textures/segment2/segment2_cn.1C7F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C800[] = { +#include "textures/segment2/segment2_cn.1C800.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C810[] = { +#include "textures/segment2/segment2_cn.1C810.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C820[] = { +#include "textures/segment2/segment2_cn.1C820.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C830[] = { +#include "textures/segment2/segment2_cn.1C830.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C840[] = { +#include "textures/segment2/segment2_cn.1C840.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C850[] = { +#include "textures/segment2/segment2_cn.1C850.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C860[] = { +#include "textures/segment2/segment2_cn.1C860.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C870[] = { +#include "textures/segment2/segment2_cn.1C870.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C880[] = { +#include "textures/segment2/segment2_cn.1C880.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C890[] = { +#include "textures/segment2/segment2_cn.1C890.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C8A0[] = { +#include "textures/segment2/segment2_cn.1C8A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C8B0[] = { +#include "textures/segment2/segment2_cn.1C8B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C8C0[] = { +#include "textures/segment2/segment2_cn.1C8C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C8D0[] = { +#include "textures/segment2/segment2_cn.1C8D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C8E0[] = { +#include "textures/segment2/segment2_cn.1C8E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C8F0[] = { +#include "textures/segment2/segment2_cn.1C8F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C900[] = { +#include "textures/segment2/segment2_cn.1C900.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C910[] = { +#include "textures/segment2/segment2_cn.1C910.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C920[] = { +#include "textures/segment2/segment2_cn.1C920.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C930[] = { +#include "textures/segment2/segment2_cn.1C930.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C940[] = { +#include "textures/segment2/segment2_cn.1C940.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C950[] = { +#include "textures/segment2/segment2_cn.1C950.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C960[] = { +#include "textures/segment2/segment2_cn.1C960.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C970[] = { +#include "textures/segment2/segment2_cn.1C970.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C980[] = { +#include "textures/segment2/segment2_cn.1C980.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C990[] = { +#include "textures/segment2/segment2_cn.1C990.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C9A0[] = { +#include "textures/segment2/segment2_cn.1C9A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C9B0[] = { +#include "textures/segment2/segment2_cn.1C9B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C9C0[] = { +#include "textures/segment2/segment2_cn.1C9C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C9D0[] = { +#include "textures/segment2/segment2_cn.1C9D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C9E0[] = { +#include "textures/segment2/segment2_cn.1C9E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1C9F0[] = { +#include "textures/segment2/segment2_cn.1C9F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CA00[] = { +#include "textures/segment2/segment2_cn.1CA00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CA10[] = { +#include "textures/segment2/segment2_cn.1CA10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CA20[] = { +#include "textures/segment2/segment2_cn.1CA20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CA30[] = { +#include "textures/segment2/segment2_cn.1CA30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CA40[] = { +#include "textures/segment2/segment2_cn.1CA40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CA50[] = { +#include "textures/segment2/segment2_cn.1CA50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CA60[] = { +#include "textures/segment2/segment2_cn.1CA60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CA70[] = { +#include "textures/segment2/segment2_cn.1CA70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CA80[] = { +#include "textures/segment2/segment2_cn.1CA80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CA90[] = { +#include "textures/segment2/segment2_cn.1CA90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CAA0[] = { +#include "textures/segment2/segment2_cn.1CAA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CAB0[] = { +#include "textures/segment2/segment2_cn.1CAB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CAC0[] = { +#include "textures/segment2/segment2_cn.1CAC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CAD0[] = { +#include "textures/segment2/segment2_cn.1CAD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CAE0[] = { +#include "textures/segment2/segment2_cn.1CAE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CAF0[] = { +#include "textures/segment2/segment2_cn.1CAF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CB00[] = { +#include "textures/segment2/segment2_cn.1CB00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CB10[] = { +#include "textures/segment2/segment2_cn.1CB10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CB20[] = { +#include "textures/segment2/segment2_cn.1CB20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CB30[] = { +#include "textures/segment2/segment2_cn.1CB30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CB40[] = { +#include "textures/segment2/segment2_cn.1CB40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CB50[] = { +#include "textures/segment2/segment2_cn.1CB50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CB60[] = { +#include "textures/segment2/segment2_cn.1CB60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CB70[] = { +#include "textures/segment2/segment2_cn.1CB70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CB80[] = { +#include "textures/segment2/segment2_cn.1CB80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CB90[] = { +#include "textures/segment2/segment2_cn.1CB90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CBA0[] = { +#include "textures/segment2/segment2_cn.1CBA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CBB0[] = { +#include "textures/segment2/segment2_cn.1CBB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CBC0[] = { +#include "textures/segment2/segment2_cn.1CBC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CBD0[] = { +#include "textures/segment2/segment2_cn.1CBD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CBE0[] = { +#include "textures/segment2/segment2_cn.1CBE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CBF0[] = { +#include "textures/segment2/segment2_cn.1CBF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CC00[] = { +#include "textures/segment2/segment2_cn.1CC00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CC10[] = { +#include "textures/segment2/segment2_cn.1CC10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CC20[] = { +#include "textures/segment2/segment2_cn.1CC20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CC30[] = { +#include "textures/segment2/segment2_cn.1CC30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CC40[] = { +#include "textures/segment2/segment2_cn.1CC40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CC50[] = { +#include "textures/segment2/segment2_cn.1CC50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CC60[] = { +#include "textures/segment2/segment2_cn.1CC60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CC70[] = { +#include "textures/segment2/segment2_cn.1CC70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CC80[] = { +#include "textures/segment2/segment2_cn.1CC80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CC90[] = { +#include "textures/segment2/segment2_cn.1CC90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CCA0[] = { +#include "textures/segment2/segment2_cn.1CCA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CCB0[] = { +#include "textures/segment2/segment2_cn.1CCB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CCC0[] = { +#include "textures/segment2/segment2_cn.1CCC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CCD0[] = { +#include "textures/segment2/segment2_cn.1CCD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CCE0[] = { +#include "textures/segment2/segment2_cn.1CCE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CCF0[] = { +#include "textures/segment2/segment2_cn.1CCF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CD00[] = { +#include "textures/segment2/segment2_cn.1CD00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CD10[] = { +#include "textures/segment2/segment2_cn.1CD10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CD20[] = { +#include "textures/segment2/segment2_cn.1CD20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CD30[] = { +#include "textures/segment2/segment2_cn.1CD30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CD40[] = { +#include "textures/segment2/segment2_cn.1CD40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CD50[] = { +#include "textures/segment2/segment2_cn.1CD50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CD60[] = { +#include "textures/segment2/segment2_cn.1CD60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CD70[] = { +#include "textures/segment2/segment2_cn.1CD70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CD80[] = { +#include "textures/segment2/segment2_cn.1CD80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CD90[] = { +#include "textures/segment2/segment2_cn.1CD90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CDA0[] = { +#include "textures/segment2/segment2_cn.1CDA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CDB0[] = { +#include "textures/segment2/segment2_cn.1CDB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CDC0[] = { +#include "textures/segment2/segment2_cn.1CDC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CDD0[] = { +#include "textures/segment2/segment2_cn.1CDD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CDE0[] = { +#include "textures/segment2/segment2_cn.1CDE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CDF0[] = { +#include "textures/segment2/segment2_cn.1CDF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CE00[] = { +#include "textures/segment2/segment2_cn.1CE00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CE10[] = { +#include "textures/segment2/segment2_cn.1CE10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CE20[] = { +#include "textures/segment2/segment2_cn.1CE20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CE30[] = { +#include "textures/segment2/segment2_cn.1CE30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CE40[] = { +#include "textures/segment2/segment2_cn.1CE40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CE50[] = { +#include "textures/segment2/segment2_cn.1CE50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CE60[] = { +#include "textures/segment2/segment2_cn.1CE60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CE70[] = { +#include "textures/segment2/segment2_cn.1CE70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CE80[] = { +#include "textures/segment2/segment2_cn.1CE80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CE90[] = { +#include "textures/segment2/segment2_cn.1CE90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CEA0[] = { +#include "textures/segment2/segment2_cn.1CEA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CEB0[] = { +#include "textures/segment2/segment2_cn.1CEB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CEC0[] = { +#include "textures/segment2/segment2_cn.1CEC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CED0[] = { +#include "textures/segment2/segment2_cn.1CED0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CEE0[] = { +#include "textures/segment2/segment2_cn.1CEE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CEF0[] = { +#include "textures/segment2/segment2_cn.1CEF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CF00[] = { +#include "textures/segment2/segment2_cn.1CF00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CF10[] = { +#include "textures/segment2/segment2_cn.1CF10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CF20[] = { +#include "textures/segment2/segment2_cn.1CF20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CF30[] = { +#include "textures/segment2/segment2_cn.1CF30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CF40[] = { +#include "textures/segment2/segment2_cn.1CF40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CF50[] = { +#include "textures/segment2/segment2_cn.1CF50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CF60[] = { +#include "textures/segment2/segment2_cn.1CF60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CF70[] = { +#include "textures/segment2/segment2_cn.1CF70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CF80[] = { +#include "textures/segment2/segment2_cn.1CF80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CF90[] = { +#include "textures/segment2/segment2_cn.1CF90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CFA0[] = { +#include "textures/segment2/segment2_cn.1CFA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CFB0[] = { +#include "textures/segment2/segment2_cn.1CFB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CFC0[] = { +#include "textures/segment2/segment2_cn.1CFC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CFD0[] = { +#include "textures/segment2/segment2_cn.1CFD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CFE0[] = { +#include "textures/segment2/segment2_cn.1CFE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1CFF0[] = { +#include "textures/segment2/segment2_cn.1CFF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D000[] = { +#include "textures/segment2/segment2_cn.1D000.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D010[] = { +#include "textures/segment2/segment2_cn.1D010.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D020[] = { +#include "textures/segment2/segment2_cn.1D020.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D030[] = { +#include "textures/segment2/segment2_cn.1D030.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D040[] = { +#include "textures/segment2/segment2_cn.1D040.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D050[] = { +#include "textures/segment2/segment2_cn.1D050.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D060[] = { +#include "textures/segment2/segment2_cn.1D060.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D070[] = { +#include "textures/segment2/segment2_cn.1D070.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D080[] = { +#include "textures/segment2/segment2_cn.1D080.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D090[] = { +#include "textures/segment2/segment2_cn.1D090.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D0A0[] = { +#include "textures/segment2/segment2_cn.1D0A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D0B0[] = { +#include "textures/segment2/segment2_cn.1D0B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D0C0[] = { +#include "textures/segment2/segment2_cn.1D0C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D0D0[] = { +#include "textures/segment2/segment2_cn.1D0D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D0E0[] = { +#include "textures/segment2/segment2_cn.1D0E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D0F0[] = { +#include "textures/segment2/segment2_cn.1D0F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D100[] = { +#include "textures/segment2/segment2_cn.1D100.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D110[] = { +#include "textures/segment2/segment2_cn.1D110.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D120[] = { +#include "textures/segment2/segment2_cn.1D120.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D130[] = { +#include "textures/segment2/segment2_cn.1D130.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D140[] = { +#include "textures/segment2/segment2_cn.1D140.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D150[] = { +#include "textures/segment2/segment2_cn.1D150.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D160[] = { +#include "textures/segment2/segment2_cn.1D160.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D170[] = { +#include "textures/segment2/segment2_cn.1D170.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D180[] = { +#include "textures/segment2/segment2_cn.1D180.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D190[] = { +#include "textures/segment2/segment2_cn.1D190.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D1A0[] = { +#include "textures/segment2/segment2_cn.1D1A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D1B0[] = { +#include "textures/segment2/segment2_cn.1D1B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D1C0[] = { +#include "textures/segment2/segment2_cn.1D1C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D1D0[] = { +#include "textures/segment2/segment2_cn.1D1D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D1E0[] = { +#include "textures/segment2/segment2_cn.1D1E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D1F0[] = { +#include "textures/segment2/segment2_cn.1D1F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D200[] = { +#include "textures/segment2/segment2_cn.1D200.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D210[] = { +#include "textures/segment2/segment2_cn.1D210.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D220[] = { +#include "textures/segment2/segment2_cn.1D220.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D230[] = { +#include "textures/segment2/segment2_cn.1D230.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D240[] = { +#include "textures/segment2/segment2_cn.1D240.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D250[] = { +#include "textures/segment2/segment2_cn.1D250.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D260[] = { +#include "textures/segment2/segment2_cn.1D260.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D270[] = { +#include "textures/segment2/segment2_cn.1D270.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D280[] = { +#include "textures/segment2/segment2_cn.1D280.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D290[] = { +#include "textures/segment2/segment2_cn.1D290.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D2A0[] = { +#include "textures/segment2/segment2_cn.1D2A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D2B0[] = { +#include "textures/segment2/segment2_cn.1D2B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D2C0[] = { +#include "textures/segment2/segment2_cn.1D2C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D2D0[] = { +#include "textures/segment2/segment2_cn.1D2D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D2E0[] = { +#include "textures/segment2/segment2_cn.1D2E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D2F0[] = { +#include "textures/segment2/segment2_cn.1D2F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D300[] = { +#include "textures/segment2/segment2_cn.1D300.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D310[] = { +#include "textures/segment2/segment2_cn.1D310.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D320[] = { +#include "textures/segment2/segment2_cn.1D320.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D330[] = { +#include "textures/segment2/segment2_cn.1D330.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D340[] = { +#include "textures/segment2/segment2_cn.1D340.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D350[] = { +#include "textures/segment2/segment2_cn.1D350.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D360[] = { +#include "textures/segment2/segment2_cn.1D360.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D370[] = { +#include "textures/segment2/segment2_cn.1D370.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D380[] = { +#include "textures/segment2/segment2_cn.1D380.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D390[] = { +#include "textures/segment2/segment2_cn.1D390.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D3A0[] = { +#include "textures/segment2/segment2_cn.1D3A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D3B0[] = { +#include "textures/segment2/segment2_cn.1D3B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D3C0[] = { +#include "textures/segment2/segment2_cn.1D3C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D3D0[] = { +#include "textures/segment2/segment2_cn.1D3D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D3E0[] = { +#include "textures/segment2/segment2_cn.1D3E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D3F0[] = { +#include "textures/segment2/segment2_cn.1D3F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D400[] = { +#include "textures/segment2/segment2_cn.1D400.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D410[] = { +#include "textures/segment2/segment2_cn.1D410.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D420[] = { +#include "textures/segment2/segment2_cn.1D420.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D430[] = { +#include "textures/segment2/segment2_cn.1D430.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D440[] = { +#include "textures/segment2/segment2_cn.1D440.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D450[] = { +#include "textures/segment2/segment2_cn.1D450.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D460[] = { +#include "textures/segment2/segment2_cn.1D460.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D470[] = { +#include "textures/segment2/segment2_cn.1D470.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D480[] = { +#include "textures/segment2/segment2_cn.1D480.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D490[] = { +#include "textures/segment2/segment2_cn.1D490.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D4A0[] = { +#include "textures/segment2/segment2_cn.1D4A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D4B0[] = { +#include "textures/segment2/segment2_cn.1D4B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D4C0[] = { +#include "textures/segment2/segment2_cn.1D4C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D4D0[] = { +#include "textures/segment2/segment2_cn.1D4D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D4E0[] = { +#include "textures/segment2/segment2_cn.1D4E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D4F0[] = { +#include "textures/segment2/segment2_cn.1D4F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D500[] = { +#include "textures/segment2/segment2_cn.1D500.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D510[] = { +#include "textures/segment2/segment2_cn.1D510.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D520[] = { +#include "textures/segment2/segment2_cn.1D520.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D530[] = { +#include "textures/segment2/segment2_cn.1D530.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D540[] = { +#include "textures/segment2/segment2_cn.1D540.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D550[] = { +#include "textures/segment2/segment2_cn.1D550.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D560[] = { +#include "textures/segment2/segment2_cn.1D560.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D570[] = { +#include "textures/segment2/segment2_cn.1D570.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D580[] = { +#include "textures/segment2/segment2_cn.1D580.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D590[] = { +#include "textures/segment2/segment2_cn.1D590.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D5A0[] = { +#include "textures/segment2/segment2_cn.1D5A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D5B0[] = { +#include "textures/segment2/segment2_cn.1D5B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D5C0[] = { +#include "textures/segment2/segment2_cn.1D5C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D5D0[] = { +#include "textures/segment2/segment2_cn.1D5D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D5E0[] = { +#include "textures/segment2/segment2_cn.1D5E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D5F0[] = { +#include "textures/segment2/segment2_cn.1D5F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D600[] = { +#include "textures/segment2/segment2_cn.1D600.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D610[] = { +#include "textures/segment2/segment2_cn.1D610.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D620[] = { +#include "textures/segment2/segment2_cn.1D620.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D630[] = { +#include "textures/segment2/segment2_cn.1D630.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D640[] = { +#include "textures/segment2/segment2_cn.1D640.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D650[] = { +#include "textures/segment2/segment2_cn.1D650.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D660[] = { +#include "textures/segment2/segment2_cn.1D660.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D670[] = { +#include "textures/segment2/segment2_cn.1D670.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D680[] = { +#include "textures/segment2/segment2_cn.1D680.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D690[] = { +#include "textures/segment2/segment2_cn.1D690.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D6A0[] = { +#include "textures/segment2/segment2_cn.1D6A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D6B0[] = { +#include "textures/segment2/segment2_cn.1D6B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D6C0[] = { +#include "textures/segment2/segment2_cn.1D6C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D6D0[] = { +#include "textures/segment2/segment2_cn.1D6D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D6E0[] = { +#include "textures/segment2/segment2_cn.1D6E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D6F0[] = { +#include "textures/segment2/segment2_cn.1D6F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D700[] = { +#include "textures/segment2/segment2_cn.1D700.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D710[] = { +#include "textures/segment2/segment2_cn.1D710.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D720[] = { +#include "textures/segment2/segment2_cn.1D720.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D730[] = { +#include "textures/segment2/segment2_cn.1D730.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D740[] = { +#include "textures/segment2/segment2_cn.1D740.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D750[] = { +#include "textures/segment2/segment2_cn.1D750.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D760[] = { +#include "textures/segment2/segment2_cn.1D760.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D770[] = { +#include "textures/segment2/segment2_cn.1D770.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D780[] = { +#include "textures/segment2/segment2_cn.1D780.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D790[] = { +#include "textures/segment2/segment2_cn.1D790.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D7A0[] = { +#include "textures/segment2/segment2_cn.1D7A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D7B0[] = { +#include "textures/segment2/segment2_cn.1D7B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D7C0[] = { +#include "textures/segment2/segment2_cn.1D7C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D7D0[] = { +#include "textures/segment2/segment2_cn.1D7D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D7E0[] = { +#include "textures/segment2/segment2_cn.1D7E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D7F0[] = { +#include "textures/segment2/segment2_cn.1D7F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D800[] = { +#include "textures/segment2/segment2_cn.1D800.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D810[] = { +#include "textures/segment2/segment2_cn.1D810.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D820[] = { +#include "textures/segment2/segment2_cn.1D820.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D830[] = { +#include "textures/segment2/segment2_cn.1D830.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D840[] = { +#include "textures/segment2/segment2_cn.1D840.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D850[] = { +#include "textures/segment2/segment2_cn.1D850.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D860[] = { +#include "textures/segment2/segment2_cn.1D860.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D870[] = { +#include "textures/segment2/segment2_cn.1D870.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D880[] = { +#include "textures/segment2/segment2_cn.1D880.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D890[] = { +#include "textures/segment2/segment2_cn.1D890.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D8A0[] = { +#include "textures/segment2/segment2_cn.1D8A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D8B0[] = { +#include "textures/segment2/segment2_cn.1D8B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D8C0[] = { +#include "textures/segment2/segment2_cn.1D8C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D8D0[] = { +#include "textures/segment2/segment2_cn.1D8D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D8E0[] = { +#include "textures/segment2/segment2_cn.1D8E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D8F0[] = { +#include "textures/segment2/segment2_cn.1D8F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D900[] = { +#include "textures/segment2/segment2_cn.1D900.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D910[] = { +#include "textures/segment2/segment2_cn.1D910.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D920[] = { +#include "textures/segment2/segment2_cn.1D920.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D930[] = { +#include "textures/segment2/segment2_cn.1D930.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D940[] = { +#include "textures/segment2/segment2_cn.1D940.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D950[] = { +#include "textures/segment2/segment2_cn.1D950.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D960[] = { +#include "textures/segment2/segment2_cn.1D960.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D970[] = { +#include "textures/segment2/segment2_cn.1D970.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D980[] = { +#include "textures/segment2/segment2_cn.1D980.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D990[] = { +#include "textures/segment2/segment2_cn.1D990.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D9A0[] = { +#include "textures/segment2/segment2_cn.1D9A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D9B0[] = { +#include "textures/segment2/segment2_cn.1D9B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D9C0[] = { +#include "textures/segment2/segment2_cn.1D9C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D9D0[] = { +#include "textures/segment2/segment2_cn.1D9D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D9E0[] = { +#include "textures/segment2/segment2_cn.1D9E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1D9F0[] = { +#include "textures/segment2/segment2_cn.1D9F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DA00[] = { +#include "textures/segment2/segment2_cn.1DA00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DA10[] = { +#include "textures/segment2/segment2_cn.1DA10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DA20[] = { +#include "textures/segment2/segment2_cn.1DA20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DA30[] = { +#include "textures/segment2/segment2_cn.1DA30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DA40[] = { +#include "textures/segment2/segment2_cn.1DA40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DA50[] = { +#include "textures/segment2/segment2_cn.1DA50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DA60[] = { +#include "textures/segment2/segment2_cn.1DA60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DA70[] = { +#include "textures/segment2/segment2_cn.1DA70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DA80[] = { +#include "textures/segment2/segment2_cn.1DA80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DA90[] = { +#include "textures/segment2/segment2_cn.1DA90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DAA0[] = { +#include "textures/segment2/segment2_cn.1DAA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DAB0[] = { +#include "textures/segment2/segment2_cn.1DAB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DAC0[] = { +#include "textures/segment2/segment2_cn.1DAC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DAD0[] = { +#include "textures/segment2/segment2_cn.1DAD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DAE0[] = { +#include "textures/segment2/segment2_cn.1DAE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DAF0[] = { +#include "textures/segment2/segment2_cn.1DAF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DB00[] = { +#include "textures/segment2/segment2_cn.1DB00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DB10[] = { +#include "textures/segment2/segment2_cn.1DB10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DB20[] = { +#include "textures/segment2/segment2_cn.1DB20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DB30[] = { +#include "textures/segment2/segment2_cn.1DB30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DB40[] = { +#include "textures/segment2/segment2_cn.1DB40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DB50[] = { +#include "textures/segment2/segment2_cn.1DB50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DB60[] = { +#include "textures/segment2/segment2_cn.1DB60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DB70[] = { +#include "textures/segment2/segment2_cn.1DB70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DB80[] = { +#include "textures/segment2/segment2_cn.1DB80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DB90[] = { +#include "textures/segment2/segment2_cn.1DB90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DBA0[] = { +#include "textures/segment2/segment2_cn.1DBA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DBB0[] = { +#include "textures/segment2/segment2_cn.1DBB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DBC0[] = { +#include "textures/segment2/segment2_cn.1DBC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DBD0[] = { +#include "textures/segment2/segment2_cn.1DBD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DBE0[] = { +#include "textures/segment2/segment2_cn.1DBE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DBF0[] = { +#include "textures/segment2/segment2_cn.1DBF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DC00[] = { +#include "textures/segment2/segment2_cn.1DC00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DC10[] = { +#include "textures/segment2/segment2_cn.1DC10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DC20[] = { +#include "textures/segment2/segment2_cn.1DC20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DC30[] = { +#include "textures/segment2/segment2_cn.1DC30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DC40[] = { +#include "textures/segment2/segment2_cn.1DC40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DC50[] = { +#include "textures/segment2/segment2_cn.1DC50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DC60[] = { +#include "textures/segment2/segment2_cn.1DC60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DC70[] = { +#include "textures/segment2/segment2_cn.1DC70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DC80[] = { +#include "textures/segment2/segment2_cn.1DC80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DC90[] = { +#include "textures/segment2/segment2_cn.1DC90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DCA0[] = { +#include "textures/segment2/segment2_cn.1DCA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DCB0[] = { +#include "textures/segment2/segment2_cn.1DCB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DCC0[] = { +#include "textures/segment2/segment2_cn.1DCC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DCD0[] = { +#include "textures/segment2/segment2_cn.1DCD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DCE0[] = { +#include "textures/segment2/segment2_cn.1DCE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DCF0[] = { +#include "textures/segment2/segment2_cn.1DCF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DD00[] = { +#include "textures/segment2/segment2_cn.1DD00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DD10[] = { +#include "textures/segment2/segment2_cn.1DD10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DD20[] = { +#include "textures/segment2/segment2_cn.1DD20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DD30[] = { +#include "textures/segment2/segment2_cn.1DD30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DD40[] = { +#include "textures/segment2/segment2_cn.1DD40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DD50[] = { +#include "textures/segment2/segment2_cn.1DD50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DD60[] = { +#include "textures/segment2/segment2_cn.1DD60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DD70[] = { +#include "textures/segment2/segment2_cn.1DD70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DD80[] = { +#include "textures/segment2/segment2_cn.1DD80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DD90[] = { +#include "textures/segment2/segment2_cn.1DD90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DDA0[] = { +#include "textures/segment2/segment2_cn.1DDA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DDB0[] = { +#include "textures/segment2/segment2_cn.1DDB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DDC0[] = { +#include "textures/segment2/segment2_cn.1DDC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DDD0[] = { +#include "textures/segment2/segment2_cn.1DDD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DDE0[] = { +#include "textures/segment2/segment2_cn.1DDE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DDF0[] = { +#include "textures/segment2/segment2_cn.1DDF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DE00[] = { +#include "textures/segment2/segment2_cn.1DE00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DE10[] = { +#include "textures/segment2/segment2_cn.1DE10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DE20[] = { +#include "textures/segment2/segment2_cn.1DE20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DE30[] = { +#include "textures/segment2/segment2_cn.1DE30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DE40[] = { +#include "textures/segment2/segment2_cn.1DE40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DE50[] = { +#include "textures/segment2/segment2_cn.1DE50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DE60[] = { +#include "textures/segment2/segment2_cn.1DE60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DE70[] = { +#include "textures/segment2/segment2_cn.1DE70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DE80[] = { +#include "textures/segment2/segment2_cn.1DE80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DE90[] = { +#include "textures/segment2/segment2_cn.1DE90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DEA0[] = { +#include "textures/segment2/segment2_cn.1DEA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DEB0[] = { +#include "textures/segment2/segment2_cn.1DEB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DEC0[] = { +#include "textures/segment2/segment2_cn.1DEC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DED0[] = { +#include "textures/segment2/segment2_cn.1DED0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DEE0[] = { +#include "textures/segment2/segment2_cn.1DEE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DEF0[] = { +#include "textures/segment2/segment2_cn.1DEF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DF00[] = { +#include "textures/segment2/segment2_cn.1DF00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DF10[] = { +#include "textures/segment2/segment2_cn.1DF10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DF20[] = { +#include "textures/segment2/segment2_cn.1DF20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DF30[] = { +#include "textures/segment2/segment2_cn.1DF30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DF40[] = { +#include "textures/segment2/segment2_cn.1DF40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DF50[] = { +#include "textures/segment2/segment2_cn.1DF50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DF60[] = { +#include "textures/segment2/segment2_cn.1DF60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DF70[] = { +#include "textures/segment2/segment2_cn.1DF70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DF80[] = { +#include "textures/segment2/segment2_cn.1DF80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DF90[] = { +#include "textures/segment2/segment2_cn.1DF90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DFA0[] = { +#include "textures/segment2/segment2_cn.1DFA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DFB0[] = { +#include "textures/segment2/segment2_cn.1DFB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DFC0[] = { +#include "textures/segment2/segment2_cn.1DFC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DFD0[] = { +#include "textures/segment2/segment2_cn.1DFD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DFE0[] = { +#include "textures/segment2/segment2_cn.1DFE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1DFF0[] = { +#include "textures/segment2/segment2_cn.1DFF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E000[] = { +#include "textures/segment2/segment2_cn.1E000.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E010[] = { +#include "textures/segment2/segment2_cn.1E010.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E020[] = { +#include "textures/segment2/segment2_cn.1E020.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E030[] = { +#include "textures/segment2/segment2_cn.1E030.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E040[] = { +#include "textures/segment2/segment2_cn.1E040.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E050[] = { +#include "textures/segment2/segment2_cn.1E050.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E060[] = { +#include "textures/segment2/segment2_cn.1E060.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E070[] = { +#include "textures/segment2/segment2_cn.1E070.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E080[] = { +#include "textures/segment2/segment2_cn.1E080.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E090[] = { +#include "textures/segment2/segment2_cn.1E090.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E0A0[] = { +#include "textures/segment2/segment2_cn.1E0A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E0B0[] = { +#include "textures/segment2/segment2_cn.1E0B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E0C0[] = { +#include "textures/segment2/segment2_cn.1E0C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E0D0[] = { +#include "textures/segment2/segment2_cn.1E0D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E0E0[] = { +#include "textures/segment2/segment2_cn.1E0E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E0F0[] = { +#include "textures/segment2/segment2_cn.1E0F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E100[] = { +#include "textures/segment2/segment2_cn.1E100.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E110[] = { +#include "textures/segment2/segment2_cn.1E110.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E120[] = { +#include "textures/segment2/segment2_cn.1E120.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E130[] = { +#include "textures/segment2/segment2_cn.1E130.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E140[] = { +#include "textures/segment2/segment2_cn.1E140.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E150[] = { +#include "textures/segment2/segment2_cn.1E150.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E160[] = { +#include "textures/segment2/segment2_cn.1E160.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E170[] = { +#include "textures/segment2/segment2_cn.1E170.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E180[] = { +#include "textures/segment2/segment2_cn.1E180.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E190[] = { +#include "textures/segment2/segment2_cn.1E190.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E1A0[] = { +#include "textures/segment2/segment2_cn.1E1A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E1B0[] = { +#include "textures/segment2/segment2_cn.1E1B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E1C0[] = { +#include "textures/segment2/segment2_cn.1E1C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E1D0[] = { +#include "textures/segment2/segment2_cn.1E1D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E1E0[] = { +#include "textures/segment2/segment2_cn.1E1E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E1F0[] = { +#include "textures/segment2/segment2_cn.1E1F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E200[] = { +#include "textures/segment2/segment2_cn.1E200.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E210[] = { +#include "textures/segment2/segment2_cn.1E210.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E220[] = { +#include "textures/segment2/segment2_cn.1E220.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E230[] = { +#include "textures/segment2/segment2_cn.1E230.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E240[] = { +#include "textures/segment2/segment2_cn.1E240.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E250[] = { +#include "textures/segment2/segment2_cn.1E250.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E260[] = { +#include "textures/segment2/segment2_cn.1E260.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E270[] = { +#include "textures/segment2/segment2_cn.1E270.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E280[] = { +#include "textures/segment2/segment2_cn.1E280.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E290[] = { +#include "textures/segment2/segment2_cn.1E290.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E2A0[] = { +#include "textures/segment2/segment2_cn.1E2A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E2B0[] = { +#include "textures/segment2/segment2_cn.1E2B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E2C0[] = { +#include "textures/segment2/segment2_cn.1E2C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E2D0[] = { +#include "textures/segment2/segment2_cn.1E2D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E2E0[] = { +#include "textures/segment2/segment2_cn.1E2E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E2F0[] = { +#include "textures/segment2/segment2_cn.1E2F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E300[] = { +#include "textures/segment2/segment2_cn.1E300.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E310[] = { +#include "textures/segment2/segment2_cn.1E310.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E320[] = { +#include "textures/segment2/segment2_cn.1E320.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E330[] = { +#include "textures/segment2/segment2_cn.1E330.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E340[] = { +#include "textures/segment2/segment2_cn.1E340.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E350[] = { +#include "textures/segment2/segment2_cn.1E350.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E360[] = { +#include "textures/segment2/segment2_cn.1E360.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E370[] = { +#include "textures/segment2/segment2_cn.1E370.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E380[] = { +#include "textures/segment2/segment2_cn.1E380.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E390[] = { +#include "textures/segment2/segment2_cn.1E390.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E3A0[] = { +#include "textures/segment2/segment2_cn.1E3A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E3B0[] = { +#include "textures/segment2/segment2_cn.1E3B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E3C0[] = { +#include "textures/segment2/segment2_cn.1E3C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E3D0[] = { +#include "textures/segment2/segment2_cn.1E3D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E3E0[] = { +#include "textures/segment2/segment2_cn.1E3E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E3F0[] = { +#include "textures/segment2/segment2_cn.1E3F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E400[] = { +#include "textures/segment2/segment2_cn.1E400.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E410[] = { +#include "textures/segment2/segment2_cn.1E410.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E420[] = { +#include "textures/segment2/segment2_cn.1E420.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E430[] = { +#include "textures/segment2/segment2_cn.1E430.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E440[] = { +#include "textures/segment2/segment2_cn.1E440.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E450[] = { +#include "textures/segment2/segment2_cn.1E450.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E460[] = { +#include "textures/segment2/segment2_cn.1E460.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E470[] = { +#include "textures/segment2/segment2_cn.1E470.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E480[] = { +#include "textures/segment2/segment2_cn.1E480.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E490[] = { +#include "textures/segment2/segment2_cn.1E490.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E4A0[] = { +#include "textures/segment2/segment2_cn.1E4A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E4B0[] = { +#include "textures/segment2/segment2_cn.1E4B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E4C0[] = { +#include "textures/segment2/segment2_cn.1E4C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E4D0[] = { +#include "textures/segment2/segment2_cn.1E4D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E4E0[] = { +#include "textures/segment2/segment2_cn.1E4E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E4F0[] = { +#include "textures/segment2/segment2_cn.1E4F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E500[] = { +#include "textures/segment2/segment2_cn.1E500.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E510[] = { +#include "textures/segment2/segment2_cn.1E510.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E520[] = { +#include "textures/segment2/segment2_cn.1E520.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E530[] = { +#include "textures/segment2/segment2_cn.1E530.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E540[] = { +#include "textures/segment2/segment2_cn.1E540.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E550[] = { +#include "textures/segment2/segment2_cn.1E550.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E560[] = { +#include "textures/segment2/segment2_cn.1E560.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E570[] = { +#include "textures/segment2/segment2_cn.1E570.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E580[] = { +#include "textures/segment2/segment2_cn.1E580.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E590[] = { +#include "textures/segment2/segment2_cn.1E590.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E5A0[] = { +#include "textures/segment2/segment2_cn.1E5A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E5B0[] = { +#include "textures/segment2/segment2_cn.1E5B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E5C0[] = { +#include "textures/segment2/segment2_cn.1E5C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E5D0[] = { +#include "textures/segment2/segment2_cn.1E5D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E5E0[] = { +#include "textures/segment2/segment2_cn.1E5E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E5F0[] = { +#include "textures/segment2/segment2_cn.1E5F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E600[] = { +#include "textures/segment2/segment2_cn.1E600.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E610[] = { +#include "textures/segment2/segment2_cn.1E610.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E620[] = { +#include "textures/segment2/segment2_cn.1E620.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E630[] = { +#include "textures/segment2/segment2_cn.1E630.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E640[] = { +#include "textures/segment2/segment2_cn.1E640.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E650[] = { +#include "textures/segment2/segment2_cn.1E650.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E660[] = { +#include "textures/segment2/segment2_cn.1E660.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E670[] = { +#include "textures/segment2/segment2_cn.1E670.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E680[] = { +#include "textures/segment2/segment2_cn.1E680.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E690[] = { +#include "textures/segment2/segment2_cn.1E690.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E6A0[] = { +#include "textures/segment2/segment2_cn.1E6A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E6B0[] = { +#include "textures/segment2/segment2_cn.1E6B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E6C0[] = { +#include "textures/segment2/segment2_cn.1E6C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E6D0[] = { +#include "textures/segment2/segment2_cn.1E6D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E6E0[] = { +#include "textures/segment2/segment2_cn.1E6E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E6F0[] = { +#include "textures/segment2/segment2_cn.1E6F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E700[] = { +#include "textures/segment2/segment2_cn.1E700.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E710[] = { +#include "textures/segment2/segment2_cn.1E710.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E720[] = { +#include "textures/segment2/segment2_cn.1E720.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E730[] = { +#include "textures/segment2/segment2_cn.1E730.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E740[] = { +#include "textures/segment2/segment2_cn.1E740.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E750[] = { +#include "textures/segment2/segment2_cn.1E750.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E760[] = { +#include "textures/segment2/segment2_cn.1E760.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E770[] = { +#include "textures/segment2/segment2_cn.1E770.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E780[] = { +#include "textures/segment2/segment2_cn.1E780.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E790[] = { +#include "textures/segment2/segment2_cn.1E790.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E7A0[] = { +#include "textures/segment2/segment2_cn.1E7A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E7B0[] = { +#include "textures/segment2/segment2_cn.1E7B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E7C0[] = { +#include "textures/segment2/segment2_cn.1E7C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E7D0[] = { +#include "textures/segment2/segment2_cn.1E7D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E7E0[] = { +#include "textures/segment2/segment2_cn.1E7E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E7F0[] = { +#include "textures/segment2/segment2_cn.1E7F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E800[] = { +#include "textures/segment2/segment2_cn.1E800.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E810[] = { +#include "textures/segment2/segment2_cn.1E810.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E820[] = { +#include "textures/segment2/segment2_cn.1E820.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E830[] = { +#include "textures/segment2/segment2_cn.1E830.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E840[] = { +#include "textures/segment2/segment2_cn.1E840.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E850[] = { +#include "textures/segment2/segment2_cn.1E850.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E860[] = { +#include "textures/segment2/segment2_cn.1E860.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E870[] = { +#include "textures/segment2/segment2_cn.1E870.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E880[] = { +#include "textures/segment2/segment2_cn.1E880.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E890[] = { +#include "textures/segment2/segment2_cn.1E890.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E8A0[] = { +#include "textures/segment2/segment2_cn.1E8A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E8B0[] = { +#include "textures/segment2/segment2_cn.1E8B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E8C0[] = { +#include "textures/segment2/segment2_cn.1E8C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E8D0[] = { +#include "textures/segment2/segment2_cn.1E8D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E8E0[] = { +#include "textures/segment2/segment2_cn.1E8E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E8F0[] = { +#include "textures/segment2/segment2_cn.1E8F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E900[] = { +#include "textures/segment2/segment2_cn.1E900.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E910[] = { +#include "textures/segment2/segment2_cn.1E910.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E920[] = { +#include "textures/segment2/segment2_cn.1E920.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E930[] = { +#include "textures/segment2/segment2_cn.1E930.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E940[] = { +#include "textures/segment2/segment2_cn.1E940.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E950[] = { +#include "textures/segment2/segment2_cn.1E950.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E960[] = { +#include "textures/segment2/segment2_cn.1E960.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E970[] = { +#include "textures/segment2/segment2_cn.1E970.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E980[] = { +#include "textures/segment2/segment2_cn.1E980.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E990[] = { +#include "textures/segment2/segment2_cn.1E990.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E9A0[] = { +#include "textures/segment2/segment2_cn.1E9A0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E9B0[] = { +#include "textures/segment2/segment2_cn.1E9B0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E9C0[] = { +#include "textures/segment2/segment2_cn.1E9C0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E9D0[] = { +#include "textures/segment2/segment2_cn.1E9D0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E9E0[] = { +#include "textures/segment2/segment2_cn.1E9E0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1E9F0[] = { +#include "textures/segment2/segment2_cn.1E9F0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EA00[] = { +#include "textures/segment2/segment2_cn.1EA00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EA10[] = { +#include "textures/segment2/segment2_cn.1EA10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EA20[] = { +#include "textures/segment2/segment2_cn.1EA20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EA30[] = { +#include "textures/segment2/segment2_cn.1EA30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EA40[] = { +#include "textures/segment2/segment2_cn.1EA40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EA50[] = { +#include "textures/segment2/segment2_cn.1EA50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EA60[] = { +#include "textures/segment2/segment2_cn.1EA60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EA70[] = { +#include "textures/segment2/segment2_cn.1EA70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EA80[] = { +#include "textures/segment2/segment2_cn.1EA80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EA90[] = { +#include "textures/segment2/segment2_cn.1EA90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EAA0[] = { +#include "textures/segment2/segment2_cn.1EAA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EAB0[] = { +#include "textures/segment2/segment2_cn.1EAB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EAC0[] = { +#include "textures/segment2/segment2_cn.1EAC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EAD0[] = { +#include "textures/segment2/segment2_cn.1EAD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EAE0[] = { +#include "textures/segment2/segment2_cn.1EAE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EAF0[] = { +#include "textures/segment2/segment2_cn.1EAF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EB00[] = { +#include "textures/segment2/segment2_cn.1EB00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EB10[] = { +#include "textures/segment2/segment2_cn.1EB10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EB20[] = { +#include "textures/segment2/segment2_cn.1EB20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EB30[] = { +#include "textures/segment2/segment2_cn.1EB30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EB40[] = { +#include "textures/segment2/segment2_cn.1EB40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EB50[] = { +#include "textures/segment2/segment2_cn.1EB50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EB60[] = { +#include "textures/segment2/segment2_cn.1EB60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EB70[] = { +#include "textures/segment2/segment2_cn.1EB70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EB80[] = { +#include "textures/segment2/segment2_cn.1EB80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EB90[] = { +#include "textures/segment2/segment2_cn.1EB90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EBA0[] = { +#include "textures/segment2/segment2_cn.1EBA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EBB0[] = { +#include "textures/segment2/segment2_cn.1EBB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EBC0[] = { +#include "textures/segment2/segment2_cn.1EBC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EBD0[] = { +#include "textures/segment2/segment2_cn.1EBD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EBE0[] = { +#include "textures/segment2/segment2_cn.1EBE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EBF0[] = { +#include "textures/segment2/segment2_cn.1EBF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EC00[] = { +#include "textures/segment2/segment2_cn.1EC00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EC10[] = { +#include "textures/segment2/segment2_cn.1EC10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EC20[] = { +#include "textures/segment2/segment2_cn.1EC20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EC30[] = { +#include "textures/segment2/segment2_cn.1EC30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EC40[] = { +#include "textures/segment2/segment2_cn.1EC40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EC50[] = { +#include "textures/segment2/segment2_cn.1EC50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EC60[] = { +#include "textures/segment2/segment2_cn.1EC60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EC70[] = { +#include "textures/segment2/segment2_cn.1EC70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EC80[] = { +#include "textures/segment2/segment2_cn.1EC80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EC90[] = { +#include "textures/segment2/segment2_cn.1EC90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ECA0[] = { +#include "textures/segment2/segment2_cn.1ECA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ECB0[] = { +#include "textures/segment2/segment2_cn.1ECB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ECC0[] = { +#include "textures/segment2/segment2_cn.1ECC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ECD0[] = { +#include "textures/segment2/segment2_cn.1ECD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ECE0[] = { +#include "textures/segment2/segment2_cn.1ECE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ECF0[] = { +#include "textures/segment2/segment2_cn.1ECF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ED00[] = { +#include "textures/segment2/segment2_cn.1ED00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ED10[] = { +#include "textures/segment2/segment2_cn.1ED10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ED20[] = { +#include "textures/segment2/segment2_cn.1ED20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ED30[] = { +#include "textures/segment2/segment2_cn.1ED30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ED40[] = { +#include "textures/segment2/segment2_cn.1ED40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ED50[] = { +#include "textures/segment2/segment2_cn.1ED50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ED60[] = { +#include "textures/segment2/segment2_cn.1ED60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ED70[] = { +#include "textures/segment2/segment2_cn.1ED70.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ED80[] = { +#include "textures/segment2/segment2_cn.1ED80.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1ED90[] = { +#include "textures/segment2/segment2_cn.1ED90.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EDA0[] = { +#include "textures/segment2/segment2_cn.1EDA0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EDB0[] = { +#include "textures/segment2/segment2_cn.1EDB0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EDC0[] = { +#include "textures/segment2/segment2_cn.1EDC0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EDD0[] = { +#include "textures/segment2/segment2_cn.1EDD0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EDE0[] = { +#include "textures/segment2/segment2_cn.1EDE0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EDF0[] = { +#include "textures/segment2/segment2_cn.1EDF0.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EE00[] = { +#include "textures/segment2/segment2_cn.1EE00.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EE10[] = { +#include "textures/segment2/segment2_cn.1EE10.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EE20[] = { +#include "textures/segment2/segment2_cn.1EE20.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EE30[] = { +#include "textures/segment2/segment2_cn.1EE30.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EE40[] = { +#include "textures/segment2/segment2_cn.1EE40.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EE50[] = { +#include "textures/segment2/segment2_cn.1EE50.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EE60[] = { +#include "textures/segment2/segment2_cn.1EE60.ia1.inc.c" +}; + +ALIGNED8 static const Texture texture_font_char_cn_1EE70[] = { +#include "textures/segment2/segment2_cn.1EE70.ia1.inc.c" +}; +#endif // VERSION_CN + ALIGNED8 static const Texture texture_hud_char_camera[] = { #include "textures/segment2/segment2.07B50.rgba16.inc.c" }; @@ -1806,43 +10914,68 @@ ALIGNED8 static const Texture texture_hud_char_arrow_down[] = { // Main HUD print table 0x02008250-0x02008337 const Texture *const main_hud_lut[] = { -#ifdef VERSION_EU texture_hud_char_0, texture_hud_char_1, texture_hud_char_2, texture_hud_char_3, texture_hud_char_4, texture_hud_char_5, texture_hud_char_6, texture_hud_char_7, texture_hud_char_8, texture_hud_char_9, texture_hud_char_A, texture_hud_char_B, texture_hud_char_C, texture_hud_char_D, texture_hud_char_E, texture_hud_char_F, - texture_hud_char_G, texture_hud_char_H, texture_hud_char_I, 0x0, +#if defined(VERSION_EU) + texture_hud_char_G, texture_hud_char_H, texture_hud_char_I, 0x0, texture_hud_char_K, texture_hud_char_L, texture_hud_char_M, texture_hud_char_N, - texture_hud_char_O, texture_hud_char_P, 0x0, texture_hud_char_R, + texture_hud_char_O, texture_hud_char_P, 0x0, texture_hud_char_R, texture_hud_char_S, texture_hud_char_T, texture_hud_char_U, texture_hud_char_V, - texture_hud_char_W, 0x0, texture_hud_char_Y, texture_hud_char_Z, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, texture_hud_char_multiply, texture_hud_char_coin, - texture_hud_char_mario_head, texture_hud_char_star, 0x0, 0x0, + texture_hud_char_W, 0x0, texture_hud_char_Y, texture_hud_char_Z, + 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, texture_hud_char_multiply, texture_hud_char_coin, + texture_hud_char_mario_head, texture_hud_char_star, 0x0, 0x0, texture_hud_char_apostrophe, texture_hud_char_double_quote, texture_hud_char_umlaut, -#elif defined(VERSION_US) - texture_hud_char_0, texture_hud_char_1, texture_hud_char_2, texture_hud_char_3, - texture_hud_char_4, texture_hud_char_5, texture_hud_char_6, texture_hud_char_7, - texture_hud_char_8, texture_hud_char_9, texture_hud_char_A, texture_hud_char_B, - texture_hud_char_C, texture_hud_char_D, texture_hud_char_E, texture_hud_char_F, - texture_hud_char_G, texture_hud_char_H, texture_hud_char_I, 0x0, +#elif defined(VERSION_CN) || defined(VERSION_US) + texture_hud_char_G, texture_hud_char_H, texture_hud_char_I, 0x0, texture_hud_char_K, texture_hud_char_L, texture_hud_char_M, texture_hud_char_N, - texture_hud_char_O, texture_hud_char_P, 0x0, texture_hud_char_R, - texture_hud_char_S, texture_hud_char_T, texture_hud_char_U, 0x0, - texture_hud_char_W, 0x0, texture_hud_char_Y, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, texture_hud_char_multiply, texture_hud_char_coin, + texture_hud_char_O, texture_hud_char_P, 0x0, texture_hud_char_R, + texture_hud_char_S, texture_hud_char_T, texture_hud_char_U, 0x0, + texture_hud_char_W, 0x0, texture_hud_char_Y, 0x0, + 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, texture_hud_char_multiply, texture_hud_char_coin, texture_hud_char_mario_head, texture_hud_char_star, 0x0, 0x0, texture_hud_char_apostrophe, texture_hud_char_double_quote, +#if defined(VERSION_CN) + texture_hud_char_cn_04A00, texture_hud_char_cn_04C00, texture_hud_char_cn_04E00, texture_hud_char_cn_05000, + texture_hud_char_cn_05200, texture_hud_char_cn_05400, texture_hud_char_cn_05600, texture_hud_char_cn_05800, + texture_hud_char_cn_05A00, texture_hud_char_cn_05C00, texture_hud_char_cn_05E00, texture_hud_char_cn_06000, + texture_hud_char_cn_06200, texture_hud_char_cn_06400, texture_hud_char_cn_06600, texture_hud_char_cn_06800, + texture_hud_char_cn_06A00, texture_hud_char_cn_06C00, texture_hud_char_cn_06E00, texture_hud_char_cn_07000, + texture_hud_char_cn_07200, texture_hud_char_cn_07400, texture_hud_char_cn_07600, texture_hud_char_cn_07800, + texture_hud_char_cn_07A00, texture_hud_char_cn_07C00, texture_hud_char_cn_07E00, texture_hud_char_cn_08000, + texture_hud_char_cn_08200, texture_hud_char_cn_08400, texture_hud_char_cn_08600, texture_hud_char_cn_08800, + texture_hud_char_cn_08A00, texture_hud_char_cn_08C00, texture_hud_char_cn_08E00, texture_hud_char_cn_09000, + texture_hud_char_cn_09200, texture_hud_char_cn_09400, texture_hud_char_cn_09600, texture_hud_char_cn_09800, + texture_hud_char_cn_09A00, texture_hud_char_cn_09C00, texture_hud_char_cn_09E00, texture_hud_char_cn_0A000, + texture_hud_char_cn_0A200, texture_hud_char_cn_0A400, texture_hud_char_cn_0A600, texture_hud_char_cn_0A800, + texture_hud_char_cn_0AA00, texture_hud_char_cn_0AC00, texture_hud_char_cn_0AE00, texture_hud_char_cn_0B000, + texture_hud_char_cn_0B200, texture_hud_char_cn_0B400, texture_hud_char_cn_0B600, texture_hud_char_cn_0B800, + texture_hud_char_cn_0BA00, texture_hud_char_cn_0BC00, texture_hud_char_cn_0BE00, texture_hud_char_cn_0C000, + texture_hud_char_cn_0C200, texture_hud_char_cn_0C400, texture_hud_char_cn_0C600, texture_hud_char_cn_0C800, + texture_hud_char_cn_0CA00, texture_hud_char_cn_0CC00, texture_hud_char_cn_0CE00, texture_hud_char_cn_0D000, + texture_hud_char_cn_0D200, texture_hud_char_cn_0D400, texture_hud_char_cn_0D600, texture_hud_char_cn_0D800, + texture_hud_char_cn_0DA00, texture_hud_char_cn_0DC00, texture_hud_char_cn_0DE00, texture_hud_char_cn_0E000, + texture_hud_char_cn_0E200, texture_hud_char_cn_0E400, texture_hud_char_cn_0E600, texture_hud_char_cn_0E800, + texture_hud_char_cn_0EA00, texture_hud_char_cn_0EC00, texture_hud_char_cn_0EE00, texture_hud_char_cn_0F000, + texture_hud_char_cn_0F200, texture_hud_char_cn_0F400, texture_hud_char_cn_0F600, texture_hud_char_cn_0F800, + texture_hud_char_cn_0FA00, texture_hud_char_cn_0FC00, texture_hud_char_cn_0FE00, texture_hud_char_cn_10000, + texture_hud_char_cn_10200, texture_hud_char_cn_10400, texture_hud_char_cn_10600, texture_hud_char_cn_10800, + texture_hud_char_cn_10A00, texture_hud_char_cn_10C00, texture_hud_char_cn_10E00, texture_hud_char_cn_11000, + texture_hud_char_cn_11200, texture_hud_char_cn_11400, texture_hud_char_cn_11600, texture_hud_char_cn_11800, + texture_hud_char_cn_11A00, texture_hud_char_cn_11C00, texture_hud_char_cn_11E00, texture_hud_char_cn_12000, + texture_hud_char_cn_12200, texture_hud_char_cn_12400, texture_hud_char_cn_12600, texture_hud_char_cn_12800, + texture_hud_char_cn_12A00, texture_hud_char_cn_12C00, texture_hud_char_cn_12E00, texture_hud_char_cn_13000, + texture_hud_char_cn_13200, texture_hud_char_cn_13400, texture_hud_char_cn_13600, texture_hud_char_cn_13800, + texture_hud_char_cn_13A00, texture_hud_char_cn_13C00, texture_hud_char_cn_13E00, texture_hud_char_cn_14000, +#endif // VERSION_CN #else - texture_hud_char_0, texture_hud_char_1, texture_hud_char_2, texture_hud_char_3, - texture_hud_char_4, texture_hud_char_5, texture_hud_char_6, texture_hud_char_7, - texture_hud_char_8, texture_hud_char_9, texture_hud_char_A, texture_hud_char_B, - texture_hud_char_C, texture_hud_char_D, texture_hud_char_E, texture_hud_char_F, texture_hud_char_G, texture_hud_char_H, texture_hud_char_I, texture_hud_char_J, texture_hud_char_K, texture_hud_char_L, texture_hud_char_M, texture_hud_char_N, texture_hud_char_O, texture_hud_char_P, texture_hud_char_Q, texture_hud_char_R, @@ -1926,7 +11059,7 @@ const Texture *const main_font_lut[] = { texture_font_char_eu_interpunct, texture_font_char_eu_star_hollow, 0x0, 0x0, -#elif defined(VERSION_US) // US Font Table +#elif defined(VERSION_US) || defined(VERSION_CN) // US Font Table texture_font_char_us_0, texture_font_char_us_1, texture_font_char_us_2, texture_font_char_us_3, texture_font_char_us_4, texture_font_char_us_5, texture_font_char_us_6, texture_font_char_us_7, texture_font_char_us_8, texture_font_char_us_9, texture_font_char_us_A, texture_font_char_us_B, @@ -1943,7 +11076,11 @@ const Texture *const main_font_lut[] = { texture_font_char_us_q, texture_font_char_us_r, texture_font_char_us_s, texture_font_char_us_t, texture_font_char_us_u, texture_font_char_us_v, texture_font_char_us_w, texture_font_char_us_x, texture_font_char_us_y, texture_font_char_us_z, texture_font_char_us_apostrophe, texture_font_char_us_period, +#if defined(VERSION_CN) + texture_font_char_cn_16800, texture_font_char_cn_16840, 0x0, 0x0, +#else 0x0, 0x0, 0x0, 0x0, +#endif 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -1991,6 +11128,544 @@ const Texture *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, +#if defined(VERSION_CN) + texture_font_char_cn_16880, texture_font_char_cn_16890, texture_font_char_cn_168A0, texture_font_char_cn_168B0, + texture_font_char_cn_168C0, texture_font_char_cn_168D0, texture_font_char_cn_168E0, texture_font_char_cn_168F0, + texture_font_char_cn_16900, texture_font_char_cn_16910, texture_font_char_cn_16920, texture_font_char_cn_16930, + texture_font_char_cn_16940, texture_font_char_cn_16950, texture_font_char_cn_16960, texture_font_char_cn_16970, + texture_font_char_cn_16980, texture_font_char_cn_16990, texture_font_char_cn_169A0, texture_font_char_cn_169B0, + texture_font_char_cn_169C0, texture_font_char_cn_169D0, texture_font_char_cn_169E0, texture_font_char_cn_169F0, + texture_font_char_cn_16A00, texture_font_char_cn_16A10, texture_font_char_cn_16A20, texture_font_char_cn_16A30, + texture_font_char_cn_16A40, texture_font_char_cn_16A50, texture_font_char_cn_16A60, texture_font_char_cn_16A70, + texture_font_char_cn_16A80, texture_font_char_cn_16A90, texture_font_char_cn_16AA0, texture_font_char_cn_16AB0, + texture_font_char_cn_16AC0, texture_font_char_cn_16AD0, texture_font_char_cn_16AE0, texture_font_char_cn_16AF0, + texture_font_char_cn_16B00, texture_font_char_cn_16B10, texture_font_char_cn_16B20, texture_font_char_cn_16B30, + texture_font_char_cn_16B40, texture_font_char_cn_16B50, texture_font_char_cn_16B60, texture_font_char_cn_16B70, + texture_font_char_cn_16B80, texture_font_char_cn_16B90, texture_font_char_cn_16BA0, texture_font_char_cn_16BB0, + texture_font_char_cn_16BC0, texture_font_char_cn_16BD0, texture_font_char_cn_16BE0, texture_font_char_cn_16BF0, + texture_font_char_cn_16C00, texture_font_char_cn_16C10, texture_font_char_cn_16C20, texture_font_char_cn_16C30, + texture_font_char_cn_16C40, texture_font_char_cn_16C50, texture_font_char_cn_16C60, texture_font_char_cn_16C70, + texture_font_char_cn_16C80, texture_font_char_cn_16C90, texture_font_char_cn_16CA0, texture_font_char_cn_16CB0, + texture_font_char_cn_16CC0, texture_font_char_cn_16CD0, texture_font_char_cn_16CE0, texture_font_char_cn_16CF0, + texture_font_char_cn_16D00, texture_font_char_cn_16D10, texture_font_char_cn_16D20, texture_font_char_cn_16D30, + texture_font_char_cn_16D40, texture_font_char_cn_16D50, texture_font_char_cn_16D60, texture_font_char_cn_16D70, + texture_font_char_cn_16D80, texture_font_char_cn_16D90, texture_font_char_cn_16DA0, texture_font_char_cn_16DB0, + texture_font_char_cn_16DC0, texture_font_char_cn_16DD0, texture_font_char_cn_16DE0, texture_font_char_cn_16DF0, + texture_font_char_cn_16E00, texture_font_char_cn_16E10, texture_font_char_cn_16E20, texture_font_char_cn_16E30, + texture_font_char_cn_16E40, texture_font_char_cn_16E50, texture_font_char_cn_16E60, texture_font_char_cn_16E70, + texture_font_char_cn_16E80, texture_font_char_cn_16E90, texture_font_char_cn_16EA0, texture_font_char_cn_16EB0, + texture_font_char_cn_16EC0, texture_font_char_cn_16ED0, texture_font_char_cn_16EE0, texture_font_char_cn_16EF0, + texture_font_char_cn_16F00, texture_font_char_cn_16F10, texture_font_char_cn_16F20, texture_font_char_cn_16F30, + texture_font_char_cn_16F40, texture_font_char_cn_16F50, texture_font_char_cn_16F60, texture_font_char_cn_16F70, + texture_font_char_cn_16F80, texture_font_char_cn_16F90, texture_font_char_cn_16FA0, texture_font_char_cn_16FB0, + texture_font_char_cn_16FC0, texture_font_char_cn_16FD0, texture_font_char_cn_16FE0, texture_font_char_cn_16FF0, + texture_font_char_cn_17000, texture_font_char_cn_17010, texture_font_char_cn_17020, texture_font_char_cn_17030, + texture_font_char_cn_17040, texture_font_char_cn_17050, texture_font_char_cn_17060, texture_font_char_cn_17070, + texture_font_char_cn_17080, texture_font_char_cn_17090, texture_font_char_cn_170A0, texture_font_char_cn_170B0, + texture_font_char_cn_170C0, texture_font_char_cn_170D0, texture_font_char_cn_170E0, texture_font_char_cn_170F0, + texture_font_char_cn_17100, texture_font_char_cn_17110, texture_font_char_cn_17120, texture_font_char_cn_17130, + texture_font_char_cn_17140, texture_font_char_cn_17150, texture_font_char_cn_17160, texture_font_char_cn_17170, + texture_font_char_cn_17180, texture_font_char_cn_17190, texture_font_char_cn_171A0, texture_font_char_cn_171B0, + texture_font_char_cn_171C0, texture_font_char_cn_171D0, texture_font_char_cn_171E0, texture_font_char_cn_171F0, + texture_font_char_cn_17200, texture_font_char_cn_17210, texture_font_char_cn_17220, texture_font_char_cn_17230, + texture_font_char_cn_17240, texture_font_char_cn_17250, texture_font_char_cn_17260, texture_font_char_cn_17270, + texture_font_char_cn_17280, texture_font_char_cn_17290, texture_font_char_cn_172A0, texture_font_char_cn_172B0, + texture_font_char_cn_172C0, texture_font_char_cn_172D0, texture_font_char_cn_172E0, texture_font_char_cn_172F0, + texture_font_char_cn_17300, texture_font_char_cn_17310, texture_font_char_cn_17320, texture_font_char_cn_17330, + texture_font_char_cn_17340, texture_font_char_cn_17350, texture_font_char_cn_17360, texture_font_char_cn_17370, + texture_font_char_cn_17380, texture_font_char_cn_17390, texture_font_char_cn_173A0, texture_font_char_cn_173B0, + texture_font_char_cn_173C0, texture_font_char_cn_173D0, texture_font_char_cn_173E0, texture_font_char_cn_173F0, + texture_font_char_cn_17400, texture_font_char_cn_17410, texture_font_char_cn_17420, texture_font_char_cn_17430, + texture_font_char_cn_17440, texture_font_char_cn_17450, texture_font_char_cn_17460, texture_font_char_cn_17470, + texture_font_char_cn_17480, texture_font_char_cn_17490, texture_font_char_cn_174A0, texture_font_char_cn_174B0, + texture_font_char_cn_174C0, texture_font_char_cn_174D0, texture_font_char_cn_174E0, texture_font_char_cn_174F0, + texture_font_char_cn_17500, texture_font_char_cn_17510, texture_font_char_cn_17520, texture_font_char_cn_17530, + texture_font_char_cn_17540, texture_font_char_cn_17550, texture_font_char_cn_17560, texture_font_char_cn_17570, + texture_font_char_cn_17580, texture_font_char_cn_17590, texture_font_char_cn_175A0, texture_font_char_cn_175B0, + texture_font_char_cn_175C0, texture_font_char_cn_175D0, texture_font_char_cn_175E0, texture_font_char_cn_175F0, + texture_font_char_cn_17600, texture_font_char_cn_17610, texture_font_char_cn_17620, texture_font_char_cn_17630, + texture_font_char_cn_17640, texture_font_char_cn_17650, texture_font_char_cn_17660, texture_font_char_cn_17670, + texture_font_char_cn_17680, texture_font_char_cn_17690, texture_font_char_cn_176A0, texture_font_char_cn_176B0, + texture_font_char_cn_176C0, texture_font_char_cn_176D0, texture_font_char_cn_176E0, texture_font_char_cn_176F0, + texture_font_char_cn_17700, texture_font_char_cn_17710, texture_font_char_cn_17720, texture_font_char_cn_17730, + texture_font_char_cn_17740, texture_font_char_cn_17750, texture_font_char_cn_17760, texture_font_char_cn_17770, + texture_font_char_cn_17780, texture_font_char_cn_17790, texture_font_char_cn_177A0, texture_font_char_cn_177B0, + texture_font_char_cn_177C0, texture_font_char_cn_177D0, texture_font_char_cn_177E0, texture_font_char_cn_177F0, + texture_font_char_cn_17800, texture_font_char_cn_17810, texture_font_char_cn_17820, texture_font_char_cn_17830, + texture_font_char_cn_17840, texture_font_char_cn_17850, texture_font_char_cn_17860, texture_font_char_cn_17870, + texture_font_char_cn_17880, texture_font_char_cn_17890, texture_font_char_cn_178A0, texture_font_char_cn_178B0, + texture_font_char_cn_178C0, texture_font_char_cn_178D0, texture_font_char_cn_178E0, texture_font_char_cn_178F0, + texture_font_char_cn_17900, texture_font_char_cn_17910, texture_font_char_cn_17920, texture_font_char_cn_17930, + texture_font_char_cn_17940, texture_font_char_cn_17950, texture_font_char_cn_17960, texture_font_char_cn_17970, + texture_font_char_cn_17980, texture_font_char_cn_17990, texture_font_char_cn_179A0, texture_font_char_cn_179B0, + texture_font_char_cn_179C0, texture_font_char_cn_179D0, texture_font_char_cn_179E0, texture_font_char_cn_179F0, + texture_font_char_cn_17A00, texture_font_char_cn_17A10, texture_font_char_cn_17A20, texture_font_char_cn_17A30, + texture_font_char_cn_17A40, texture_font_char_cn_17A50, texture_font_char_cn_17A60, texture_font_char_cn_17A70, + texture_font_char_cn_17A80, texture_font_char_cn_17A90, texture_font_char_cn_17AA0, texture_font_char_cn_17AB0, + texture_font_char_cn_17AC0, texture_font_char_cn_17AD0, texture_font_char_cn_17AE0, texture_font_char_cn_17AF0, + texture_font_char_cn_17B00, texture_font_char_cn_17B10, texture_font_char_cn_17B20, texture_font_char_cn_17B30, + texture_font_char_cn_17B40, texture_font_char_cn_17B50, texture_font_char_cn_17B60, texture_font_char_cn_17B70, + texture_font_char_cn_17B80, texture_font_char_cn_17B90, texture_font_char_cn_17BA0, texture_font_char_cn_17BB0, + texture_font_char_cn_17BC0, texture_font_char_cn_17BD0, texture_font_char_cn_17BE0, texture_font_char_cn_17BF0, + texture_font_char_cn_17C00, texture_font_char_cn_17C10, texture_font_char_cn_17C20, texture_font_char_cn_17C30, + texture_font_char_cn_17C40, texture_font_char_cn_17C50, texture_font_char_cn_17C60, texture_font_char_cn_17C70, + texture_font_char_cn_17C80, texture_font_char_cn_17C90, texture_font_char_cn_17CA0, texture_font_char_cn_17CB0, + texture_font_char_cn_17CC0, texture_font_char_cn_17CD0, texture_font_char_cn_17CE0, texture_font_char_cn_17CF0, + texture_font_char_cn_17D00, texture_font_char_cn_17D10, texture_font_char_cn_17D20, texture_font_char_cn_17D30, + texture_font_char_cn_17D40, texture_font_char_cn_17D50, texture_font_char_cn_17D60, texture_font_char_cn_17D70, + texture_font_char_cn_17D80, texture_font_char_cn_17D90, texture_font_char_cn_17DA0, texture_font_char_cn_17DB0, + texture_font_char_cn_17DC0, texture_font_char_cn_17DD0, texture_font_char_cn_17DE0, texture_font_char_cn_17DF0, + texture_font_char_cn_17E00, texture_font_char_cn_17E10, texture_font_char_cn_17E20, texture_font_char_cn_17E30, + texture_font_char_cn_17E40, texture_font_char_cn_17E50, texture_font_char_cn_17E60, texture_font_char_cn_17E70, + texture_font_char_cn_17E80, texture_font_char_cn_17E90, texture_font_char_cn_17EA0, texture_font_char_cn_17EB0, + texture_font_char_cn_17EC0, texture_font_char_cn_17ED0, texture_font_char_cn_17EE0, texture_font_char_cn_17EF0, + texture_font_char_cn_17F00, texture_font_char_cn_17F10, texture_font_char_cn_17F20, texture_font_char_cn_17F30, + texture_font_char_cn_17F40, texture_font_char_cn_17F50, texture_font_char_cn_17F60, texture_font_char_cn_17F70, + texture_font_char_cn_17F80, texture_font_char_cn_17F90, texture_font_char_cn_17FA0, texture_font_char_cn_17FB0, + texture_font_char_cn_17FC0, texture_font_char_cn_17FD0, texture_font_char_cn_17FE0, texture_font_char_cn_17FF0, + texture_font_char_cn_18000, texture_font_char_cn_18010, texture_font_char_cn_18020, texture_font_char_cn_18030, + texture_font_char_cn_18040, texture_font_char_cn_18050, texture_font_char_cn_18060, texture_font_char_cn_18070, + texture_font_char_cn_18080, texture_font_char_cn_18090, texture_font_char_cn_180A0, texture_font_char_cn_180B0, + texture_font_char_cn_180C0, texture_font_char_cn_180D0, texture_font_char_cn_180E0, texture_font_char_cn_180F0, + texture_font_char_cn_18100, texture_font_char_cn_18110, texture_font_char_cn_18120, texture_font_char_cn_18130, + texture_font_char_cn_18140, texture_font_char_cn_18150, texture_font_char_cn_18160, texture_font_char_cn_18170, + texture_font_char_cn_18180, texture_font_char_cn_18190, texture_font_char_cn_181A0, texture_font_char_cn_181B0, + texture_font_char_cn_181C0, texture_font_char_cn_181D0, texture_font_char_cn_181E0, texture_font_char_cn_181F0, + texture_font_char_cn_18200, texture_font_char_cn_18210, texture_font_char_cn_18220, texture_font_char_cn_18230, + texture_font_char_cn_18240, texture_font_char_cn_18250, texture_font_char_cn_18260, texture_font_char_cn_18270, + texture_font_char_cn_18280, texture_font_char_cn_18290, texture_font_char_cn_182A0, texture_font_char_cn_182B0, + texture_font_char_cn_182C0, texture_font_char_cn_182D0, texture_font_char_cn_182E0, texture_font_char_cn_182F0, + texture_font_char_cn_18300, texture_font_char_cn_18310, texture_font_char_cn_18320, texture_font_char_cn_18330, + texture_font_char_cn_18340, texture_font_char_cn_18350, texture_font_char_cn_18360, texture_font_char_cn_18370, + texture_font_char_cn_18380, texture_font_char_cn_18390, texture_font_char_cn_183A0, texture_font_char_cn_183B0, + texture_font_char_cn_183C0, texture_font_char_cn_183D0, texture_font_char_cn_183E0, texture_font_char_cn_183F0, + texture_font_char_cn_18400, texture_font_char_cn_18410, texture_font_char_cn_18420, texture_font_char_cn_18430, + texture_font_char_cn_18440, texture_font_char_cn_18450, texture_font_char_cn_18460, texture_font_char_cn_18470, + texture_font_char_cn_18480, texture_font_char_cn_18490, texture_font_char_cn_184A0, texture_font_char_cn_184B0, + texture_font_char_cn_184C0, texture_font_char_cn_184D0, texture_font_char_cn_184E0, texture_font_char_cn_184F0, + texture_font_char_cn_18500, texture_font_char_cn_18510, texture_font_char_cn_18520, texture_font_char_cn_18530, + texture_font_char_cn_18540, texture_font_char_cn_18550, texture_font_char_cn_18560, texture_font_char_cn_18570, + texture_font_char_cn_18580, texture_font_char_cn_18590, texture_font_char_cn_185A0, texture_font_char_cn_185B0, + texture_font_char_cn_185C0, texture_font_char_cn_185D0, texture_font_char_cn_185E0, texture_font_char_cn_185F0, + texture_font_char_cn_18600, texture_font_char_cn_18610, texture_font_char_cn_18620, texture_font_char_cn_18630, + texture_font_char_cn_18640, texture_font_char_cn_18650, texture_font_char_cn_18660, texture_font_char_cn_18670, + texture_font_char_cn_18680, texture_font_char_cn_18690, texture_font_char_cn_186A0, texture_font_char_cn_186B0, + texture_font_char_cn_186C0, texture_font_char_cn_186D0, texture_font_char_cn_186E0, texture_font_char_cn_186F0, + texture_font_char_cn_18700, texture_font_char_cn_18710, texture_font_char_cn_18720, texture_font_char_cn_18730, + texture_font_char_cn_18740, texture_font_char_cn_18750, texture_font_char_cn_18760, texture_font_char_cn_18770, + texture_font_char_cn_18780, texture_font_char_cn_18790, texture_font_char_cn_187A0, texture_font_char_cn_187B0, + texture_font_char_cn_187C0, texture_font_char_cn_187D0, texture_font_char_cn_187E0, texture_font_char_cn_187F0, + texture_font_char_cn_18800, texture_font_char_cn_18810, texture_font_char_cn_18820, texture_font_char_cn_18830, + texture_font_char_cn_18840, texture_font_char_cn_18850, texture_font_char_cn_18860, texture_font_char_cn_18870, + texture_font_char_cn_18880, texture_font_char_cn_18890, texture_font_char_cn_188A0, texture_font_char_cn_188B0, + texture_font_char_cn_188C0, texture_font_char_cn_188D0, texture_font_char_cn_188E0, texture_font_char_cn_188F0, + texture_font_char_cn_18900, texture_font_char_cn_18910, texture_font_char_cn_18920, texture_font_char_cn_18930, + texture_font_char_cn_18940, texture_font_char_cn_18950, texture_font_char_cn_18960, texture_font_char_cn_18970, + texture_font_char_cn_18980, texture_font_char_cn_18990, texture_font_char_cn_189A0, texture_font_char_cn_189B0, + texture_font_char_cn_189C0, texture_font_char_cn_189D0, texture_font_char_cn_189E0, texture_font_char_cn_189F0, + texture_font_char_cn_18A00, texture_font_char_cn_18A10, texture_font_char_cn_18A20, texture_font_char_cn_18A30, + texture_font_char_cn_18A40, texture_font_char_cn_18A50, texture_font_char_cn_18A60, texture_font_char_cn_18A70, + texture_font_char_cn_18A80, texture_font_char_cn_18A90, texture_font_char_cn_18AA0, texture_font_char_cn_18AB0, + texture_font_char_cn_18AC0, texture_font_char_cn_18AD0, texture_font_char_cn_18AE0, texture_font_char_cn_18AF0, + texture_font_char_cn_18B00, texture_font_char_cn_18B10, texture_font_char_cn_18B20, texture_font_char_cn_18B30, + texture_font_char_cn_18B40, texture_font_char_cn_18B50, texture_font_char_cn_18B60, texture_font_char_cn_18B70, + texture_font_char_cn_18B80, texture_font_char_cn_18B90, texture_font_char_cn_18BA0, texture_font_char_cn_18BB0, + texture_font_char_cn_18BC0, texture_font_char_cn_18BD0, texture_font_char_cn_18BE0, texture_font_char_cn_18BF0, + texture_font_char_cn_18C00, texture_font_char_cn_18C10, texture_font_char_cn_18C20, texture_font_char_cn_18C30, + texture_font_char_cn_18C40, texture_font_char_cn_18C50, texture_font_char_cn_18C60, texture_font_char_cn_18C70, + texture_font_char_cn_18C80, texture_font_char_cn_18C90, texture_font_char_cn_18CA0, texture_font_char_cn_18CB0, + texture_font_char_cn_18CC0, texture_font_char_cn_18CD0, texture_font_char_cn_18CE0, texture_font_char_cn_18CF0, + texture_font_char_cn_18D00, texture_font_char_cn_18D10, texture_font_char_cn_18D20, texture_font_char_cn_18D30, + texture_font_char_cn_18D40, texture_font_char_cn_18D50, texture_font_char_cn_18D60, texture_font_char_cn_18D70, + texture_font_char_cn_18D80, texture_font_char_cn_18D90, texture_font_char_cn_18DA0, texture_font_char_cn_18DB0, + texture_font_char_cn_18DC0, texture_font_char_cn_18DD0, texture_font_char_cn_18DE0, texture_font_char_cn_18DF0, + texture_font_char_cn_18E00, texture_font_char_cn_18E10, texture_font_char_cn_18E20, texture_font_char_cn_18E30, + texture_font_char_cn_18E40, texture_font_char_cn_18E50, texture_font_char_cn_18E60, texture_font_char_cn_18E70, + texture_font_char_cn_18E80, texture_font_char_cn_18E90, texture_font_char_cn_18EA0, texture_font_char_cn_18EB0, + texture_font_char_cn_18EC0, texture_font_char_cn_18ED0, texture_font_char_cn_18EE0, texture_font_char_cn_18EF0, + texture_font_char_cn_18F00, texture_font_char_cn_18F10, texture_font_char_cn_18F20, texture_font_char_cn_18F30, + texture_font_char_cn_18F40, texture_font_char_cn_18F50, texture_font_char_cn_18F60, texture_font_char_cn_18F70, + texture_font_char_cn_18F80, texture_font_char_cn_18F90, texture_font_char_cn_18FA0, texture_font_char_cn_18FB0, + texture_font_char_cn_18FC0, texture_font_char_cn_18FD0, texture_font_char_cn_18FE0, texture_font_char_cn_18FF0, + texture_font_char_cn_19000, texture_font_char_cn_19010, texture_font_char_cn_19020, texture_font_char_cn_19030, + texture_font_char_cn_19040, texture_font_char_cn_19050, texture_font_char_cn_19060, texture_font_char_cn_19070, + texture_font_char_cn_19080, texture_font_char_cn_19090, texture_font_char_cn_190A0, texture_font_char_cn_190B0, + texture_font_char_cn_190C0, texture_font_char_cn_190D0, texture_font_char_cn_190E0, texture_font_char_cn_190F0, + texture_font_char_cn_19100, texture_font_char_cn_19110, texture_font_char_cn_19120, texture_font_char_cn_19130, + texture_font_char_cn_19140, texture_font_char_cn_19150, texture_font_char_cn_19160, texture_font_char_cn_19170, + texture_font_char_cn_19180, texture_font_char_cn_19190, texture_font_char_cn_191A0, texture_font_char_cn_191B0, + texture_font_char_cn_191C0, texture_font_char_cn_191D0, texture_font_char_cn_191E0, texture_font_char_cn_191F0, + texture_font_char_cn_19200, texture_font_char_cn_19210, texture_font_char_cn_19220, texture_font_char_cn_19230, + texture_font_char_cn_19240, texture_font_char_cn_19250, texture_font_char_cn_19260, texture_font_char_cn_19270, + texture_font_char_cn_19280, texture_font_char_cn_19290, texture_font_char_cn_192A0, texture_font_char_cn_192B0, + texture_font_char_cn_192C0, texture_font_char_cn_192D0, texture_font_char_cn_192E0, texture_font_char_cn_192F0, + texture_font_char_cn_19300, texture_font_char_cn_19310, texture_font_char_cn_19320, texture_font_char_cn_19330, + texture_font_char_cn_19340, texture_font_char_cn_19350, texture_font_char_cn_19360, texture_font_char_cn_19370, + texture_font_char_cn_19380, texture_font_char_cn_19390, texture_font_char_cn_193A0, texture_font_char_cn_193B0, + texture_font_char_cn_193C0, texture_font_char_cn_193D0, texture_font_char_cn_193E0, texture_font_char_cn_193F0, + texture_font_char_cn_19400, texture_font_char_cn_19410, texture_font_char_cn_19420, texture_font_char_cn_19430, + texture_font_char_cn_19440, texture_font_char_cn_19450, texture_font_char_cn_19460, texture_font_char_cn_19470, + texture_font_char_cn_19480, texture_font_char_cn_19490, texture_font_char_cn_194A0, texture_font_char_cn_194B0, + texture_font_char_cn_194C0, texture_font_char_cn_194D0, texture_font_char_cn_194E0, texture_font_char_cn_194F0, + texture_font_char_cn_19500, texture_font_char_cn_19510, texture_font_char_cn_19520, texture_font_char_cn_19530, + texture_font_char_cn_19540, texture_font_char_cn_19550, texture_font_char_cn_19560, texture_font_char_cn_19570, + texture_font_char_cn_19580, texture_font_char_cn_19590, texture_font_char_cn_195A0, texture_font_char_cn_195B0, + texture_font_char_cn_195C0, texture_font_char_cn_195D0, texture_font_char_cn_195E0, texture_font_char_cn_195F0, + texture_font_char_cn_19600, texture_font_char_cn_19610, texture_font_char_cn_19620, texture_font_char_cn_19630, + texture_font_char_cn_19640, texture_font_char_cn_19650, texture_font_char_cn_19660, texture_font_char_cn_19670, + texture_font_char_cn_19680, texture_font_char_cn_19690, texture_font_char_cn_196A0, texture_font_char_cn_196B0, + texture_font_char_cn_196C0, texture_font_char_cn_196D0, texture_font_char_cn_196E0, texture_font_char_cn_196F0, + texture_font_char_cn_19700, texture_font_char_cn_19710, texture_font_char_cn_19720, texture_font_char_cn_19730, + texture_font_char_cn_19740, texture_font_char_cn_19750, texture_font_char_cn_19760, texture_font_char_cn_19770, + texture_font_char_cn_19780, texture_font_char_cn_19790, texture_font_char_cn_197A0, texture_font_char_cn_197B0, + texture_font_char_cn_197C0, texture_font_char_cn_197D0, texture_font_char_cn_197E0, texture_font_char_cn_197F0, + texture_font_char_cn_19800, texture_font_char_cn_19810, texture_font_char_cn_19820, texture_font_char_cn_19830, + texture_font_char_cn_19840, texture_font_char_cn_19850, texture_font_char_cn_19860, texture_font_char_cn_19870, + texture_font_char_cn_19880, texture_font_char_cn_19890, texture_font_char_cn_198A0, texture_font_char_cn_198B0, + texture_font_char_cn_198C0, texture_font_char_cn_198D0, texture_font_char_cn_198E0, texture_font_char_cn_198F0, + texture_font_char_cn_19900, texture_font_char_cn_19910, texture_font_char_cn_19920, texture_font_char_cn_19930, + texture_font_char_cn_19940, texture_font_char_cn_19950, texture_font_char_cn_19960, texture_font_char_cn_19970, + texture_font_char_cn_19980, texture_font_char_cn_19990, texture_font_char_cn_199A0, texture_font_char_cn_199B0, + texture_font_char_cn_199C0, texture_font_char_cn_199D0, texture_font_char_cn_199E0, texture_font_char_cn_199F0, + texture_font_char_cn_19A00, texture_font_char_cn_19A10, texture_font_char_cn_19A20, texture_font_char_cn_19A30, + texture_font_char_cn_19A40, texture_font_char_cn_19A50, texture_font_char_cn_19A60, texture_font_char_cn_19A70, + texture_font_char_cn_19A80, texture_font_char_cn_19A90, texture_font_char_cn_19AA0, texture_font_char_cn_19AB0, + texture_font_char_cn_19AC0, texture_font_char_cn_19AD0, texture_font_char_cn_19AE0, texture_font_char_cn_19AF0, + texture_font_char_cn_19B00, texture_font_char_cn_19B10, texture_font_char_cn_19B20, texture_font_char_cn_19B30, + texture_font_char_cn_19B40, texture_font_char_cn_19B50, texture_font_char_cn_19B60, texture_font_char_cn_19B70, + texture_font_char_cn_19B80, texture_font_char_cn_19B90, texture_font_char_cn_19BA0, texture_font_char_cn_19BB0, + texture_font_char_cn_19BC0, texture_font_char_cn_19BD0, texture_font_char_cn_19BE0, texture_font_char_cn_19BF0, + texture_font_char_cn_19C00, texture_font_char_cn_19C10, texture_font_char_cn_19C20, texture_font_char_cn_19C30, + texture_font_char_cn_19C40, texture_font_char_cn_19C50, texture_font_char_cn_19C60, texture_font_char_cn_19C70, + texture_font_char_cn_19C80, texture_font_char_cn_19C90, texture_font_char_cn_19CA0, texture_font_char_cn_19CB0, + texture_font_char_cn_19CC0, texture_font_char_cn_19CD0, texture_font_char_cn_19CE0, texture_font_char_cn_19CF0, + texture_font_char_cn_19D00, texture_font_char_cn_19D10, texture_font_char_cn_19D20, texture_font_char_cn_19D30, + texture_font_char_cn_19D40, texture_font_char_cn_19D50, texture_font_char_cn_19D60, texture_font_char_cn_19D70, + texture_font_char_cn_19D80, texture_font_char_cn_19D90, texture_font_char_cn_19DA0, texture_font_char_cn_19DB0, + texture_font_char_cn_19DC0, texture_font_char_cn_19DD0, texture_font_char_cn_19DE0, texture_font_char_cn_19DF0, + texture_font_char_cn_19E00, texture_font_char_cn_19E10, texture_font_char_cn_19E20, texture_font_char_cn_19E30, + texture_font_char_cn_19E40, texture_font_char_cn_19E50, texture_font_char_cn_19E60, texture_font_char_cn_19E70, + texture_font_char_cn_19E80, texture_font_char_cn_19E90, texture_font_char_cn_19EA0, texture_font_char_cn_19EB0, + texture_font_char_cn_19EC0, texture_font_char_cn_19ED0, texture_font_char_cn_19EE0, texture_font_char_cn_19EF0, + texture_font_char_cn_19F00, texture_font_char_cn_19F10, texture_font_char_cn_19F20, texture_font_char_cn_19F30, + texture_font_char_cn_19F40, texture_font_char_cn_19F50, texture_font_char_cn_19F60, texture_font_char_cn_19F70, + texture_font_char_cn_19F80, texture_font_char_cn_19F90, texture_font_char_cn_19FA0, texture_font_char_cn_19FB0, + texture_font_char_cn_19FC0, texture_font_char_cn_19FD0, texture_font_char_cn_19FE0, texture_font_char_cn_19FF0, + texture_font_char_cn_1A000, texture_font_char_cn_1A010, texture_font_char_cn_1A020, texture_font_char_cn_1A030, + texture_font_char_cn_1A040, texture_font_char_cn_1A050, texture_font_char_cn_1A060, texture_font_char_cn_1A070, + texture_font_char_cn_1A080, texture_font_char_cn_1A090, texture_font_char_cn_1A0A0, texture_font_char_cn_1A0B0, + texture_font_char_cn_1A0C0, texture_font_char_cn_1A0D0, texture_font_char_cn_1A0E0, texture_font_char_cn_1A0F0, + texture_font_char_cn_1A100, texture_font_char_cn_1A110, texture_font_char_cn_1A120, texture_font_char_cn_1A130, + texture_font_char_cn_1A140, texture_font_char_cn_1A150, texture_font_char_cn_1A160, texture_font_char_cn_1A170, + texture_font_char_cn_1A180, texture_font_char_cn_1A190, texture_font_char_cn_1A1A0, texture_font_char_cn_1A1B0, + texture_font_char_cn_1A1C0, texture_font_char_cn_1A1D0, texture_font_char_cn_1A1E0, texture_font_char_cn_1A1F0, + texture_font_char_cn_1A200, texture_font_char_cn_1A210, texture_font_char_cn_1A220, texture_font_char_cn_1A230, + texture_font_char_cn_1A240, texture_font_char_cn_1A250, texture_font_char_cn_1A260, texture_font_char_cn_1A270, + texture_font_char_cn_1A280, texture_font_char_cn_1A290, texture_font_char_cn_1A2A0, texture_font_char_cn_1A2B0, + texture_font_char_cn_1A2C0, texture_font_char_cn_1A2D0, texture_font_char_cn_1A2E0, texture_font_char_cn_1A2F0, + texture_font_char_cn_1A300, texture_font_char_cn_1A310, texture_font_char_cn_1A320, texture_font_char_cn_1A330, + texture_font_char_cn_1A340, texture_font_char_cn_1A350, texture_font_char_cn_1A360, texture_font_char_cn_1A370, + texture_font_char_cn_1A380, texture_font_char_cn_1A390, texture_font_char_cn_1A3A0, texture_font_char_cn_1A3B0, + texture_font_char_cn_1A3C0, texture_font_char_cn_1A3D0, texture_font_char_cn_1A3E0, texture_font_char_cn_1A3F0, + texture_font_char_cn_1A400, texture_font_char_cn_1A410, texture_font_char_cn_1A420, texture_font_char_cn_1A430, + texture_font_char_cn_1A440, texture_font_char_cn_1A450, texture_font_char_cn_1A460, texture_font_char_cn_1A470, + texture_font_char_cn_1A480, texture_font_char_cn_1A490, texture_font_char_cn_1A4A0, texture_font_char_cn_1A4B0, + texture_font_char_cn_1A4C0, texture_font_char_cn_1A4D0, texture_font_char_cn_1A4E0, texture_font_char_cn_1A4F0, + texture_font_char_cn_1A500, texture_font_char_cn_1A510, texture_font_char_cn_1A520, texture_font_char_cn_1A530, + texture_font_char_cn_1A540, texture_font_char_cn_1A550, texture_font_char_cn_1A560, texture_font_char_cn_1A570, + texture_font_char_cn_1A580, texture_font_char_cn_1A590, texture_font_char_cn_1A5A0, texture_font_char_cn_1A5B0, + texture_font_char_cn_1A5C0, texture_font_char_cn_1A5D0, texture_font_char_cn_1A5E0, texture_font_char_cn_1A5F0, + texture_font_char_cn_1A600, texture_font_char_cn_1A610, texture_font_char_cn_1A620, texture_font_char_cn_1A630, + texture_font_char_cn_1A640, texture_font_char_cn_1A650, texture_font_char_cn_1A660, texture_font_char_cn_1A670, + texture_font_char_cn_1A680, texture_font_char_cn_1A690, texture_font_char_cn_1A6A0, texture_font_char_cn_1A6B0, + texture_font_char_cn_1A6C0, texture_font_char_cn_1A6D0, texture_font_char_cn_1A6E0, texture_font_char_cn_1A6F0, + texture_font_char_cn_1A700, texture_font_char_cn_1A710, texture_font_char_cn_1A720, texture_font_char_cn_1A730, + texture_font_char_cn_1A740, texture_font_char_cn_1A750, texture_font_char_cn_1A760, texture_font_char_cn_1A770, + texture_font_char_cn_1A780, texture_font_char_cn_1A790, texture_font_char_cn_1A7A0, texture_font_char_cn_1A7B0, + texture_font_char_cn_1A7C0, texture_font_char_cn_1A7D0, texture_font_char_cn_1A7E0, texture_font_char_cn_1A7F0, + texture_font_char_cn_1A800, texture_font_char_cn_1A810, texture_font_char_cn_1A820, texture_font_char_cn_1A830, + texture_font_char_cn_1A840, texture_font_char_cn_1A850, texture_font_char_cn_1A860, texture_font_char_cn_1A870, + texture_font_char_cn_1A880, texture_font_char_cn_1A890, texture_font_char_cn_1A8A0, texture_font_char_cn_1A8B0, + texture_font_char_cn_1A8C0, texture_font_char_cn_1A8D0, texture_font_char_cn_1A8E0, texture_font_char_cn_1A8F0, + texture_font_char_cn_1A900, texture_font_char_cn_1A910, texture_font_char_cn_1A920, texture_font_char_cn_1A930, + texture_font_char_cn_1A940, texture_font_char_cn_1A950, texture_font_char_cn_1A960, texture_font_char_cn_1A970, + texture_font_char_cn_1A980, texture_font_char_cn_1A990, texture_font_char_cn_1A9A0, texture_font_char_cn_1A9B0, + texture_font_char_cn_1A9C0, texture_font_char_cn_1A9D0, texture_font_char_cn_1A9E0, texture_font_char_cn_1A9F0, + texture_font_char_cn_1AA00, texture_font_char_cn_1AA10, texture_font_char_cn_1AA20, texture_font_char_cn_1AA30, + texture_font_char_cn_1AA40, texture_font_char_cn_1AA50, texture_font_char_cn_1AA60, texture_font_char_cn_1AA70, + texture_font_char_cn_1AA80, texture_font_char_cn_1AA90, texture_font_char_cn_1AAA0, texture_font_char_cn_1AAB0, + texture_font_char_cn_1AAC0, texture_font_char_cn_1AAD0, texture_font_char_cn_1AAE0, texture_font_char_cn_1AAF0, + texture_font_char_cn_1AB00, texture_font_char_cn_1AB10, texture_font_char_cn_1AB20, texture_font_char_cn_1AB30, + texture_font_char_cn_1AB40, texture_font_char_cn_1AB50, texture_font_char_cn_1AB60, texture_font_char_cn_1AB70, + texture_font_char_cn_1AB80, texture_font_char_cn_1AB90, texture_font_char_cn_1ABA0, texture_font_char_cn_1ABB0, + texture_font_char_cn_1ABC0, texture_font_char_cn_1ABD0, texture_font_char_cn_1ABE0, texture_font_char_cn_1ABF0, + texture_font_char_cn_1AC00, texture_font_char_cn_1AC10, texture_font_char_cn_1AC20, texture_font_char_cn_1AC30, + texture_font_char_cn_1AC40, texture_font_char_cn_1AC50, texture_font_char_cn_1AC60, texture_font_char_cn_1AC70, + texture_font_char_cn_1AC80, texture_font_char_cn_1AC90, texture_font_char_cn_1ACA0, texture_font_char_cn_1ACB0, + texture_font_char_cn_1ACC0, texture_font_char_cn_1ACD0, texture_font_char_cn_1ACE0, texture_font_char_cn_1ACF0, + texture_font_char_cn_1AD00, texture_font_char_cn_1AD10, texture_font_char_cn_1AD20, texture_font_char_cn_1AD30, + texture_font_char_cn_1AD40, texture_font_char_cn_1AD50, texture_font_char_cn_1AD60, texture_font_char_cn_1AD70, + texture_font_char_cn_1AD80, texture_font_char_cn_1AD90, texture_font_char_cn_1ADA0, texture_font_char_cn_1ADB0, + texture_font_char_cn_1ADC0, texture_font_char_cn_1ADD0, texture_font_char_cn_1ADE0, texture_font_char_cn_1ADF0, + texture_font_char_cn_1AE00, texture_font_char_cn_1AE10, texture_font_char_cn_1AE20, texture_font_char_cn_1AE30, + texture_font_char_cn_1AE40, texture_font_char_cn_1AE50, texture_font_char_cn_1AE60, texture_font_char_cn_1AE70, + texture_font_char_cn_1AE80, texture_font_char_cn_1AE90, texture_font_char_cn_1AEA0, texture_font_char_cn_1AEB0, + texture_font_char_cn_1AEC0, texture_font_char_cn_1AED0, texture_font_char_cn_1AEE0, texture_font_char_cn_1AEF0, + texture_font_char_cn_1AF00, texture_font_char_cn_1AF10, texture_font_char_cn_1AF20, texture_font_char_cn_1AF30, + texture_font_char_cn_1AF40, texture_font_char_cn_1AF50, texture_font_char_cn_1AF60, texture_font_char_cn_1AF70, + texture_font_char_cn_1AF80, texture_font_char_cn_1AF90, texture_font_char_cn_1AFA0, texture_font_char_cn_1AFB0, + texture_font_char_cn_1AFC0, texture_font_char_cn_1AFD0, texture_font_char_cn_1AFE0, texture_font_char_cn_1AFF0, + texture_font_char_cn_1B000, texture_font_char_cn_1B010, texture_font_char_cn_1B020, texture_font_char_cn_1B030, + texture_font_char_cn_1B040, texture_font_char_cn_1B050, texture_font_char_cn_1B060, texture_font_char_cn_1B070, + texture_font_char_cn_1B080, texture_font_char_cn_1B090, texture_font_char_cn_1B0A0, texture_font_char_cn_1B0B0, + texture_font_char_cn_1B0C0, texture_font_char_cn_1B0D0, texture_font_char_cn_1B0E0, texture_font_char_cn_1B0F0, + texture_font_char_cn_1B100, texture_font_char_cn_1B110, texture_font_char_cn_1B120, texture_font_char_cn_1B130, + texture_font_char_cn_1B140, texture_font_char_cn_1B150, texture_font_char_cn_1B160, texture_font_char_cn_1B170, + texture_font_char_cn_1B180, texture_font_char_cn_1B190, texture_font_char_cn_1B1A0, texture_font_char_cn_1B1B0, + texture_font_char_cn_1B1C0, texture_font_char_cn_1B1D0, texture_font_char_cn_1B1E0, texture_font_char_cn_1B1F0, + texture_font_char_cn_1B200, texture_font_char_cn_1B210, texture_font_char_cn_1B220, texture_font_char_cn_1B230, + texture_font_char_cn_1B240, texture_font_char_cn_1B250, texture_font_char_cn_1B260, texture_font_char_cn_1B270, + texture_font_char_cn_1B280, texture_font_char_cn_1B290, texture_font_char_cn_1B2A0, texture_font_char_cn_1B2B0, + texture_font_char_cn_1B2C0, texture_font_char_cn_1B2D0, texture_font_char_cn_1B2E0, texture_font_char_cn_1B2F0, + texture_font_char_cn_1B300, texture_font_char_cn_1B310, texture_font_char_cn_1B320, texture_font_char_cn_1B330, + texture_font_char_cn_1B340, texture_font_char_cn_1B350, texture_font_char_cn_1B360, texture_font_char_cn_1B370, + texture_font_char_cn_1B380, texture_font_char_cn_1B390, texture_font_char_cn_1B3A0, texture_font_char_cn_1B3B0, + texture_font_char_cn_1B3C0, texture_font_char_cn_1B3D0, texture_font_char_cn_1B3E0, texture_font_char_cn_1B3F0, + texture_font_char_cn_1B400, texture_font_char_cn_1B410, texture_font_char_cn_1B420, texture_font_char_cn_1B430, + texture_font_char_cn_1B440, texture_font_char_cn_1B450, texture_font_char_cn_1B460, texture_font_char_cn_1B470, + texture_font_char_cn_1B480, texture_font_char_cn_1B490, texture_font_char_cn_1B4A0, texture_font_char_cn_1B4B0, + texture_font_char_cn_1B4C0, texture_font_char_cn_1B4D0, texture_font_char_cn_1B4E0, texture_font_char_cn_1B4F0, + texture_font_char_cn_1B500, texture_font_char_cn_1B510, texture_font_char_cn_1B520, texture_font_char_cn_1B530, + texture_font_char_cn_1B540, texture_font_char_cn_1B550, texture_font_char_cn_1B560, texture_font_char_cn_1B570, + texture_font_char_cn_1B580, texture_font_char_cn_1B590, texture_font_char_cn_1B5A0, texture_font_char_cn_1B5B0, + texture_font_char_cn_1B5C0, texture_font_char_cn_1B5D0, texture_font_char_cn_1B5E0, texture_font_char_cn_1B5F0, + texture_font_char_cn_1B600, texture_font_char_cn_1B610, texture_font_char_cn_1B620, texture_font_char_cn_1B630, + texture_font_char_cn_1B640, texture_font_char_cn_1B650, texture_font_char_cn_1B660, texture_font_char_cn_1B670, + texture_font_char_cn_1B680, texture_font_char_cn_1B690, texture_font_char_cn_1B6A0, texture_font_char_cn_1B6B0, + texture_font_char_cn_1B6C0, texture_font_char_cn_1B6D0, texture_font_char_cn_1B6E0, texture_font_char_cn_1B6F0, + texture_font_char_cn_1B700, texture_font_char_cn_1B710, texture_font_char_cn_1B720, texture_font_char_cn_1B730, + texture_font_char_cn_1B740, texture_font_char_cn_1B750, texture_font_char_cn_1B760, texture_font_char_cn_1B770, + texture_font_char_cn_1B780, texture_font_char_cn_1B790, texture_font_char_cn_1B7A0, texture_font_char_cn_1B7B0, + texture_font_char_cn_1B7C0, texture_font_char_cn_1B7D0, texture_font_char_cn_1B7E0, texture_font_char_cn_1B7F0, + texture_font_char_cn_1B800, texture_font_char_cn_1B810, texture_font_char_cn_1B820, texture_font_char_cn_1B830, + texture_font_char_cn_1B840, texture_font_char_cn_1B850, texture_font_char_cn_1B860, texture_font_char_cn_1B870, + texture_font_char_cn_1B880, texture_font_char_cn_1B890, texture_font_char_cn_1B8A0, texture_font_char_cn_1B8B0, + texture_font_char_cn_1B8C0, texture_font_char_cn_1B8D0, texture_font_char_cn_1B8E0, texture_font_char_cn_1B8F0, + texture_font_char_cn_1B900, texture_font_char_cn_1B910, texture_font_char_cn_1B920, texture_font_char_cn_1B930, + texture_font_char_cn_1B940, texture_font_char_cn_1B950, texture_font_char_cn_1B960, texture_font_char_cn_1B970, + texture_font_char_cn_1B980, texture_font_char_cn_1B990, texture_font_char_cn_1B9A0, texture_font_char_cn_1B9B0, + texture_font_char_cn_1B9C0, texture_font_char_cn_1B9D0, texture_font_char_cn_1B9E0, texture_font_char_cn_1B9F0, + texture_font_char_cn_1BA00, texture_font_char_cn_1BA10, texture_font_char_cn_1BA20, texture_font_char_cn_1BA30, + texture_font_char_cn_1BA40, texture_font_char_cn_1BA50, texture_font_char_cn_1BA60, texture_font_char_cn_1BA70, + texture_font_char_cn_1BA80, texture_font_char_cn_1BA90, texture_font_char_cn_1BAA0, texture_font_char_cn_1BAB0, + texture_font_char_cn_1BAC0, texture_font_char_cn_1BAD0, texture_font_char_cn_1BAE0, texture_font_char_cn_1BAF0, + texture_font_char_cn_1BB00, texture_font_char_cn_1BB10, texture_font_char_cn_1BB20, texture_font_char_cn_1BB30, + texture_font_char_cn_1BB40, texture_font_char_cn_1BB50, texture_font_char_cn_1BB60, texture_font_char_cn_1BB70, + texture_font_char_cn_1BB80, texture_font_char_cn_1BB90, texture_font_char_cn_1BBA0, texture_font_char_cn_1BBB0, + texture_font_char_cn_1BBC0, texture_font_char_cn_1BBD0, texture_font_char_cn_1BBE0, texture_font_char_cn_1BBF0, + texture_font_char_cn_1BC00, texture_font_char_cn_1BC10, texture_font_char_cn_1BC20, texture_font_char_cn_1BC30, + texture_font_char_cn_1BC40, texture_font_char_cn_1BC50, texture_font_char_cn_1BC60, texture_font_char_cn_1BC70, + texture_font_char_cn_1BC80, texture_font_char_cn_1BC90, texture_font_char_cn_1BCA0, texture_font_char_cn_1BCB0, + texture_font_char_cn_1BCC0, texture_font_char_cn_1BCD0, texture_font_char_cn_1BCE0, texture_font_char_cn_1BCF0, + texture_font_char_cn_1BD00, texture_font_char_cn_1BD10, texture_font_char_cn_1BD20, texture_font_char_cn_1BD30, + texture_font_char_cn_1BD40, texture_font_char_cn_1BD50, texture_font_char_cn_1BD60, texture_font_char_cn_1BD70, + texture_font_char_cn_1BD80, texture_font_char_cn_1BD90, texture_font_char_cn_1BDA0, texture_font_char_cn_1BDB0, + texture_font_char_cn_1BDC0, texture_font_char_cn_1BDD0, texture_font_char_cn_1BDE0, texture_font_char_cn_1BDF0, + texture_font_char_cn_1BE00, texture_font_char_cn_1BE10, texture_font_char_cn_1BE20, texture_font_char_cn_1BE30, + texture_font_char_cn_1BE40, texture_font_char_cn_1BE50, texture_font_char_cn_1BE60, texture_font_char_cn_1BE70, + texture_font_char_cn_1BE80, texture_font_char_cn_1BE90, texture_font_char_cn_1BEA0, texture_font_char_cn_1BEB0, + texture_font_char_cn_1BEC0, texture_font_char_cn_1BED0, texture_font_char_cn_1BEE0, texture_font_char_cn_1BEF0, + texture_font_char_cn_1BF00, texture_font_char_cn_1BF10, texture_font_char_cn_1BF20, texture_font_char_cn_1BF30, + texture_font_char_cn_1BF40, texture_font_char_cn_1BF50, texture_font_char_cn_1BF60, texture_font_char_cn_1BF70, + texture_font_char_cn_1BF80, texture_font_char_cn_1BF90, texture_font_char_cn_1BFA0, texture_font_char_cn_1BFB0, + texture_font_char_cn_1BFC0, texture_font_char_cn_1BFD0, texture_font_char_cn_1BFE0, texture_font_char_cn_1BFF0, + texture_font_char_cn_1C000, texture_font_char_cn_1C010, texture_font_char_cn_1C020, texture_font_char_cn_1C030, + texture_font_char_cn_1C040, texture_font_char_cn_1C050, texture_font_char_cn_1C060, texture_font_char_cn_1C070, + texture_font_char_cn_1C080, texture_font_char_cn_1C090, texture_font_char_cn_1C0A0, texture_font_char_cn_1C0B0, + texture_font_char_cn_1C0C0, texture_font_char_cn_1C0D0, texture_font_char_cn_1C0E0, texture_font_char_cn_1C0F0, + texture_font_char_cn_1C100, texture_font_char_cn_1C110, texture_font_char_cn_1C120, texture_font_char_cn_1C130, + texture_font_char_cn_1C140, texture_font_char_cn_1C150, texture_font_char_cn_1C160, texture_font_char_cn_1C170, + texture_font_char_cn_1C180, texture_font_char_cn_1C190, texture_font_char_cn_1C1A0, texture_font_char_cn_1C1B0, + texture_font_char_cn_1C1C0, texture_font_char_cn_1C1D0, texture_font_char_cn_1C1E0, texture_font_char_cn_1C1F0, + texture_font_char_cn_1C200, texture_font_char_cn_1C210, texture_font_char_cn_1C220, texture_font_char_cn_1C230, + texture_font_char_cn_1C240, texture_font_char_cn_1C250, texture_font_char_cn_1C260, texture_font_char_cn_1C270, + texture_font_char_cn_1C280, texture_font_char_cn_1C290, texture_font_char_cn_1C2A0, texture_font_char_cn_1C2B0, + texture_font_char_cn_1C2C0, texture_font_char_cn_1C2D0, texture_font_char_cn_1C2E0, texture_font_char_cn_1C2F0, + texture_font_char_cn_1C300, texture_font_char_cn_1C310, texture_font_char_cn_1C320, texture_font_char_cn_1C330, + texture_font_char_cn_1C340, texture_font_char_cn_1C350, texture_font_char_cn_1C360, texture_font_char_cn_1C370, + texture_font_char_cn_1C380, texture_font_char_cn_1C390, texture_font_char_cn_1C3A0, texture_font_char_cn_1C3B0, + texture_font_char_cn_1C3C0, texture_font_char_cn_1C3D0, texture_font_char_cn_1C3E0, texture_font_char_cn_1C3F0, + texture_font_char_cn_1C400, texture_font_char_cn_1C410, texture_font_char_cn_1C420, texture_font_char_cn_1C430, + texture_font_char_cn_1C440, texture_font_char_cn_1C450, texture_font_char_cn_1C460, texture_font_char_cn_1C470, + texture_font_char_cn_1C480, texture_font_char_cn_1C490, texture_font_char_cn_1C4A0, texture_font_char_cn_1C4B0, + texture_font_char_cn_1C4C0, texture_font_char_cn_1C4D0, texture_font_char_cn_1C4E0, texture_font_char_cn_1C4F0, + texture_font_char_cn_1C500, texture_font_char_cn_1C510, texture_font_char_cn_1C520, texture_font_char_cn_1C530, + texture_font_char_cn_1C540, texture_font_char_cn_1C550, texture_font_char_cn_1C560, texture_font_char_cn_1C570, + texture_font_char_cn_1C580, texture_font_char_cn_1C590, texture_font_char_cn_1C5A0, texture_font_char_cn_1C5B0, + texture_font_char_cn_1C5C0, texture_font_char_cn_1C5D0, texture_font_char_cn_1C5E0, texture_font_char_cn_1C5F0, + texture_font_char_cn_1C600, texture_font_char_cn_1C610, texture_font_char_cn_1C620, texture_font_char_cn_1C630, + texture_font_char_cn_1C640, texture_font_char_cn_1C650, texture_font_char_cn_1C660, texture_font_char_cn_1C670, + texture_font_char_cn_1C680, texture_font_char_cn_1C690, texture_font_char_cn_1C6A0, texture_font_char_cn_1C6B0, + texture_font_char_cn_1C6C0, texture_font_char_cn_1C6D0, texture_font_char_cn_1C6E0, texture_font_char_cn_1C6F0, + texture_font_char_cn_1C700, texture_font_char_cn_1C710, texture_font_char_cn_1C720, texture_font_char_cn_1C730, + texture_font_char_cn_1C740, texture_font_char_cn_1C750, texture_font_char_cn_1C760, texture_font_char_cn_1C770, + texture_font_char_cn_1C780, texture_font_char_cn_1C790, texture_font_char_cn_1C7A0, texture_font_char_cn_1C7B0, + texture_font_char_cn_1C7C0, texture_font_char_cn_1C7D0, texture_font_char_cn_1C7E0, texture_font_char_cn_1C7F0, + texture_font_char_cn_1C800, texture_font_char_cn_1C810, texture_font_char_cn_1C820, texture_font_char_cn_1C830, + texture_font_char_cn_1C840, texture_font_char_cn_1C850, texture_font_char_cn_1C860, texture_font_char_cn_1C870, + texture_font_char_cn_1C880, texture_font_char_cn_1C890, texture_font_char_cn_1C8A0, texture_font_char_cn_1C8B0, + texture_font_char_cn_1C8C0, texture_font_char_cn_1C8D0, texture_font_char_cn_1C8E0, texture_font_char_cn_1C8F0, + texture_font_char_cn_1C900, texture_font_char_cn_1C910, texture_font_char_cn_1C920, texture_font_char_cn_1C930, + texture_font_char_cn_1C940, texture_font_char_cn_1C950, texture_font_char_cn_1C960, texture_font_char_cn_1C970, + texture_font_char_cn_1C980, texture_font_char_cn_1C990, texture_font_char_cn_1C9A0, texture_font_char_cn_1C9B0, + texture_font_char_cn_1C9C0, texture_font_char_cn_1C9D0, texture_font_char_cn_1C9E0, texture_font_char_cn_1C9F0, + texture_font_char_cn_1CA00, texture_font_char_cn_1CA10, texture_font_char_cn_1CA20, texture_font_char_cn_1CA30, + texture_font_char_cn_1CA40, texture_font_char_cn_1CA50, texture_font_char_cn_1CA60, texture_font_char_cn_1CA70, + texture_font_char_cn_1CA80, texture_font_char_cn_1CA90, texture_font_char_cn_1CAA0, texture_font_char_cn_1CAB0, + texture_font_char_cn_1CAC0, texture_font_char_cn_1CAD0, texture_font_char_cn_1CAE0, texture_font_char_cn_1CAF0, + texture_font_char_cn_1CB00, texture_font_char_cn_1CB10, texture_font_char_cn_1CB20, texture_font_char_cn_1CB30, + texture_font_char_cn_1CB40, texture_font_char_cn_1CB50, texture_font_char_cn_1CB60, texture_font_char_cn_1CB70, + texture_font_char_cn_1CB80, texture_font_char_cn_1CB90, texture_font_char_cn_1CBA0, texture_font_char_cn_1CBB0, + texture_font_char_cn_1CBC0, texture_font_char_cn_1CBD0, texture_font_char_cn_1CBE0, texture_font_char_cn_1CBF0, + texture_font_char_cn_1CC00, texture_font_char_cn_1CC10, texture_font_char_cn_1CC20, texture_font_char_cn_1CC30, + texture_font_char_cn_1CC40, texture_font_char_cn_1CC50, texture_font_char_cn_1CC60, texture_font_char_cn_1CC70, + texture_font_char_cn_1CC80, texture_font_char_cn_1CC90, texture_font_char_cn_1CCA0, texture_font_char_cn_1CCB0, + texture_font_char_cn_1CCC0, texture_font_char_cn_1CCD0, texture_font_char_cn_1CCE0, texture_font_char_cn_1CCF0, + texture_font_char_cn_1CD00, texture_font_char_cn_1CD10, texture_font_char_cn_1CD20, texture_font_char_cn_1CD30, + texture_font_char_cn_1CD40, texture_font_char_cn_1CD50, texture_font_char_cn_1CD60, texture_font_char_cn_1CD70, + texture_font_char_cn_1CD80, texture_font_char_cn_1CD90, texture_font_char_cn_1CDA0, texture_font_char_cn_1CDB0, + texture_font_char_cn_1CDC0, texture_font_char_cn_1CDD0, texture_font_char_cn_1CDE0, texture_font_char_cn_1CDF0, + texture_font_char_cn_1CE00, texture_font_char_cn_1CE10, texture_font_char_cn_1CE20, texture_font_char_cn_1CE30, + texture_font_char_cn_1CE40, texture_font_char_cn_1CE50, texture_font_char_cn_1CE60, texture_font_char_cn_1CE70, + texture_font_char_cn_1CE80, texture_font_char_cn_1CE90, texture_font_char_cn_1CEA0, texture_font_char_cn_1CEB0, + texture_font_char_cn_1CEC0, texture_font_char_cn_1CED0, texture_font_char_cn_1CEE0, texture_font_char_cn_1CEF0, + texture_font_char_cn_1CF00, texture_font_char_cn_1CF10, texture_font_char_cn_1CF20, texture_font_char_cn_1CF30, + texture_font_char_cn_1CF40, texture_font_char_cn_1CF50, texture_font_char_cn_1CF60, texture_font_char_cn_1CF70, + texture_font_char_cn_1CF80, texture_font_char_cn_1CF90, texture_font_char_cn_1CFA0, texture_font_char_cn_1CFB0, + texture_font_char_cn_1CFC0, texture_font_char_cn_1CFD0, texture_font_char_cn_1CFE0, texture_font_char_cn_1CFF0, + texture_font_char_cn_1D000, texture_font_char_cn_1D010, texture_font_char_cn_1D020, texture_font_char_cn_1D030, + texture_font_char_cn_1D040, texture_font_char_cn_1D050, texture_font_char_cn_1D060, texture_font_char_cn_1D070, + texture_font_char_cn_1D080, texture_font_char_cn_1D090, texture_font_char_cn_1D0A0, texture_font_char_cn_1D0B0, + texture_font_char_cn_1D0C0, texture_font_char_cn_1D0D0, texture_font_char_cn_1D0E0, texture_font_char_cn_1D0F0, + texture_font_char_cn_1D100, texture_font_char_cn_1D110, texture_font_char_cn_1D120, texture_font_char_cn_1D130, + texture_font_char_cn_1D140, texture_font_char_cn_1D150, texture_font_char_cn_1D160, texture_font_char_cn_1D170, + texture_font_char_cn_1D180, texture_font_char_cn_1D190, texture_font_char_cn_1D1A0, texture_font_char_cn_1D1B0, + texture_font_char_cn_1D1C0, texture_font_char_cn_1D1D0, texture_font_char_cn_1D1E0, texture_font_char_cn_1D1F0, + texture_font_char_cn_1D200, texture_font_char_cn_1D210, texture_font_char_cn_1D220, texture_font_char_cn_1D230, + texture_font_char_cn_1D240, texture_font_char_cn_1D250, texture_font_char_cn_1D260, texture_font_char_cn_1D270, + texture_font_char_cn_1D280, texture_font_char_cn_1D290, texture_font_char_cn_1D2A0, texture_font_char_cn_1D2B0, + texture_font_char_cn_1D2C0, texture_font_char_cn_1D2D0, texture_font_char_cn_1D2E0, texture_font_char_cn_1D2F0, + texture_font_char_cn_1D300, texture_font_char_cn_1D310, texture_font_char_cn_1D320, texture_font_char_cn_1D330, + texture_font_char_cn_1D340, texture_font_char_cn_1D350, texture_font_char_cn_1D360, texture_font_char_cn_1D370, + texture_font_char_cn_1D380, texture_font_char_cn_1D390, texture_font_char_cn_1D3A0, texture_font_char_cn_1D3B0, + texture_font_char_cn_1D3C0, texture_font_char_cn_1D3D0, texture_font_char_cn_1D3E0, texture_font_char_cn_1D3F0, + texture_font_char_cn_1D400, texture_font_char_cn_1D410, texture_font_char_cn_1D420, texture_font_char_cn_1D430, + texture_font_char_cn_1D440, texture_font_char_cn_1D450, texture_font_char_cn_1D460, texture_font_char_cn_1D470, + texture_font_char_cn_1D480, texture_font_char_cn_1D490, texture_font_char_cn_1D4A0, texture_font_char_cn_1D4B0, + texture_font_char_cn_1D4C0, texture_font_char_cn_1D4D0, texture_font_char_cn_1D4E0, texture_font_char_cn_1D4F0, + texture_font_char_cn_1D500, texture_font_char_cn_1D510, texture_font_char_cn_1D520, texture_font_char_cn_1D530, + texture_font_char_cn_1D540, texture_font_char_cn_1D550, texture_font_char_cn_1D560, texture_font_char_cn_1D570, + texture_font_char_cn_1D580, texture_font_char_cn_1D590, texture_font_char_cn_1D5A0, texture_font_char_cn_1D5B0, + texture_font_char_cn_1D5C0, texture_font_char_cn_1D5D0, texture_font_char_cn_1D5E0, texture_font_char_cn_1D5F0, + texture_font_char_cn_1D600, texture_font_char_cn_1D610, texture_font_char_cn_1D620, texture_font_char_cn_1D630, + texture_font_char_cn_1D640, texture_font_char_cn_1D650, texture_font_char_cn_1D660, texture_font_char_cn_1D670, + texture_font_char_cn_1D680, texture_font_char_cn_1D690, texture_font_char_cn_1D6A0, texture_font_char_cn_1D6B0, + texture_font_char_cn_1D6C0, texture_font_char_cn_1D6D0, texture_font_char_cn_1D6E0, texture_font_char_cn_1D6F0, + texture_font_char_cn_1D700, texture_font_char_cn_1D710, texture_font_char_cn_1D720, texture_font_char_cn_1D730, + texture_font_char_cn_1D740, texture_font_char_cn_1D750, texture_font_char_cn_1D760, texture_font_char_cn_1D770, + texture_font_char_cn_1D780, texture_font_char_cn_1D790, texture_font_char_cn_1D7A0, texture_font_char_cn_1D7B0, + texture_font_char_cn_1D7C0, texture_font_char_cn_1D7D0, texture_font_char_cn_1D7E0, texture_font_char_cn_1D7F0, + texture_font_char_cn_1D800, texture_font_char_cn_1D810, texture_font_char_cn_1D820, texture_font_char_cn_1D830, + texture_font_char_cn_1D840, texture_font_char_cn_1D850, texture_font_char_cn_1D860, texture_font_char_cn_1D870, + texture_font_char_cn_1D880, texture_font_char_cn_1D890, texture_font_char_cn_1D8A0, texture_font_char_cn_1D8B0, + texture_font_char_cn_1D8C0, texture_font_char_cn_1D8D0, texture_font_char_cn_1D8E0, texture_font_char_cn_1D8F0, + texture_font_char_cn_1D900, texture_font_char_cn_1D910, texture_font_char_cn_1D920, texture_font_char_cn_1D930, + texture_font_char_cn_1D940, texture_font_char_cn_1D950, texture_font_char_cn_1D960, texture_font_char_cn_1D970, + texture_font_char_cn_1D980, texture_font_char_cn_1D990, texture_font_char_cn_1D9A0, texture_font_char_cn_1D9B0, + texture_font_char_cn_1D9C0, texture_font_char_cn_1D9D0, texture_font_char_cn_1D9E0, texture_font_char_cn_1D9F0, + texture_font_char_cn_1DA00, texture_font_char_cn_1DA10, texture_font_char_cn_1DA20, texture_font_char_cn_1DA30, + texture_font_char_cn_1DA40, texture_font_char_cn_1DA50, texture_font_char_cn_1DA60, texture_font_char_cn_1DA70, + texture_font_char_cn_1DA80, texture_font_char_cn_1DA90, texture_font_char_cn_1DAA0, texture_font_char_cn_1DAB0, + texture_font_char_cn_1DAC0, texture_font_char_cn_1DAD0, texture_font_char_cn_1DAE0, texture_font_char_cn_1DAF0, + texture_font_char_cn_1DB00, texture_font_char_cn_1DB10, texture_font_char_cn_1DB20, texture_font_char_cn_1DB30, + texture_font_char_cn_1DB40, texture_font_char_cn_1DB50, texture_font_char_cn_1DB60, texture_font_char_cn_1DB70, + texture_font_char_cn_1DB80, texture_font_char_cn_1DB90, texture_font_char_cn_1DBA0, texture_font_char_cn_1DBB0, + texture_font_char_cn_1DBC0, texture_font_char_cn_1DBD0, texture_font_char_cn_1DBE0, texture_font_char_cn_1DBF0, + texture_font_char_cn_1DC00, texture_font_char_cn_1DC10, texture_font_char_cn_1DC20, texture_font_char_cn_1DC30, + texture_font_char_cn_1DC40, texture_font_char_cn_1DC50, texture_font_char_cn_1DC60, texture_font_char_cn_1DC70, + texture_font_char_cn_1DC80, texture_font_char_cn_1DC90, texture_font_char_cn_1DCA0, texture_font_char_cn_1DCB0, + texture_font_char_cn_1DCC0, texture_font_char_cn_1DCD0, texture_font_char_cn_1DCE0, texture_font_char_cn_1DCF0, + texture_font_char_cn_1DD00, texture_font_char_cn_1DD10, texture_font_char_cn_1DD20, texture_font_char_cn_1DD30, + texture_font_char_cn_1DD40, texture_font_char_cn_1DD50, texture_font_char_cn_1DD60, texture_font_char_cn_1DD70, + texture_font_char_cn_1DD80, texture_font_char_cn_1DD90, texture_font_char_cn_1DDA0, texture_font_char_cn_1DDB0, + texture_font_char_cn_1DDC0, texture_font_char_cn_1DDD0, texture_font_char_cn_1DDE0, texture_font_char_cn_1DDF0, + texture_font_char_cn_1DE00, texture_font_char_cn_1DE10, texture_font_char_cn_1DE20, texture_font_char_cn_1DE30, + texture_font_char_cn_1DE40, texture_font_char_cn_1DE50, texture_font_char_cn_1DE60, texture_font_char_cn_1DE70, + texture_font_char_cn_1DE80, texture_font_char_cn_1DE90, texture_font_char_cn_1DEA0, texture_font_char_cn_1DEB0, + texture_font_char_cn_1DEC0, texture_font_char_cn_1DED0, texture_font_char_cn_1DEE0, texture_font_char_cn_1DEF0, + texture_font_char_cn_1DF00, texture_font_char_cn_1DF10, texture_font_char_cn_1DF20, texture_font_char_cn_1DF30, + texture_font_char_cn_1DF40, texture_font_char_cn_1DF50, texture_font_char_cn_1DF60, texture_font_char_cn_1DF70, + texture_font_char_cn_1DF80, texture_font_char_cn_1DF90, texture_font_char_cn_1DFA0, texture_font_char_cn_1DFB0, + texture_font_char_cn_1DFC0, texture_font_char_cn_1DFD0, texture_font_char_cn_1DFE0, texture_font_char_cn_1DFF0, + texture_font_char_cn_1E000, texture_font_char_cn_1E010, texture_font_char_cn_1E020, texture_font_char_cn_1E030, + texture_font_char_cn_1E040, texture_font_char_cn_1E050, texture_font_char_cn_1E060, texture_font_char_cn_1E070, + texture_font_char_cn_1E080, texture_font_char_cn_1E090, texture_font_char_cn_1E0A0, texture_font_char_cn_1E0B0, + texture_font_char_cn_1E0C0, texture_font_char_cn_1E0D0, texture_font_char_cn_1E0E0, texture_font_char_cn_1E0F0, + texture_font_char_cn_1E100, texture_font_char_cn_1E110, texture_font_char_cn_1E120, texture_font_char_cn_1E130, + texture_font_char_cn_1E140, texture_font_char_cn_1E150, texture_font_char_cn_1E160, texture_font_char_cn_1E170, + texture_font_char_cn_1E180, texture_font_char_cn_1E190, texture_font_char_cn_1E1A0, texture_font_char_cn_1E1B0, + texture_font_char_cn_1E1C0, texture_font_char_cn_1E1D0, texture_font_char_cn_1E1E0, texture_font_char_cn_1E1F0, + texture_font_char_cn_1E200, texture_font_char_cn_1E210, texture_font_char_cn_1E220, texture_font_char_cn_1E230, + texture_font_char_cn_1E240, texture_font_char_cn_1E250, texture_font_char_cn_1E260, texture_font_char_cn_1E270, + texture_font_char_cn_1E280, texture_font_char_cn_1E290, texture_font_char_cn_1E2A0, texture_font_char_cn_1E2B0, + texture_font_char_cn_1E2C0, texture_font_char_cn_1E2D0, texture_font_char_cn_1E2E0, texture_font_char_cn_1E2F0, + texture_font_char_cn_1E300, texture_font_char_cn_1E310, texture_font_char_cn_1E320, texture_font_char_cn_1E330, + texture_font_char_cn_1E340, texture_font_char_cn_1E350, texture_font_char_cn_1E360, texture_font_char_cn_1E370, + texture_font_char_cn_1E380, texture_font_char_cn_1E390, texture_font_char_cn_1E3A0, texture_font_char_cn_1E3B0, + texture_font_char_cn_1E3C0, texture_font_char_cn_1E3D0, texture_font_char_cn_1E3E0, texture_font_char_cn_1E3F0, + texture_font_char_cn_1E400, texture_font_char_cn_1E410, texture_font_char_cn_1E420, texture_font_char_cn_1E430, + texture_font_char_cn_1E440, texture_font_char_cn_1E450, texture_font_char_cn_1E460, texture_font_char_cn_1E470, + texture_font_char_cn_1E480, texture_font_char_cn_1E490, texture_font_char_cn_1E4A0, texture_font_char_cn_1E4B0, + texture_font_char_cn_1E4C0, texture_font_char_cn_1E4D0, texture_font_char_cn_1E4E0, texture_font_char_cn_1E4F0, + texture_font_char_cn_1E500, texture_font_char_cn_1E510, texture_font_char_cn_1E520, texture_font_char_cn_1E530, + texture_font_char_cn_1E540, texture_font_char_cn_1E550, texture_font_char_cn_1E560, texture_font_char_cn_1E570, + texture_font_char_cn_1E580, texture_font_char_cn_1E590, texture_font_char_cn_1E5A0, texture_font_char_cn_1E5B0, + texture_font_char_cn_1E5C0, texture_font_char_cn_1E5D0, texture_font_char_cn_1E5E0, texture_font_char_cn_1E5F0, + texture_font_char_cn_1E600, texture_font_char_cn_1E610, texture_font_char_cn_1E620, texture_font_char_cn_1E630, + texture_font_char_cn_1E640, texture_font_char_cn_1E650, texture_font_char_cn_1E660, texture_font_char_cn_1E670, + texture_font_char_cn_1E680, texture_font_char_cn_1E690, texture_font_char_cn_1E6A0, texture_font_char_cn_1E6B0, + texture_font_char_cn_1E6C0, texture_font_char_cn_1E6D0, texture_font_char_cn_1E6E0, texture_font_char_cn_1E6F0, + texture_font_char_cn_1E700, texture_font_char_cn_1E710, texture_font_char_cn_1E720, texture_font_char_cn_1E730, + texture_font_char_cn_1E740, texture_font_char_cn_1E750, texture_font_char_cn_1E760, texture_font_char_cn_1E770, + texture_font_char_cn_1E780, texture_font_char_cn_1E790, texture_font_char_cn_1E7A0, texture_font_char_cn_1E7B0, + texture_font_char_cn_1E7C0, texture_font_char_cn_1E7D0, texture_font_char_cn_1E7E0, texture_font_char_cn_1E7F0, + texture_font_char_cn_1E800, texture_font_char_cn_1E810, texture_font_char_cn_1E820, texture_font_char_cn_1E830, + texture_font_char_cn_1E840, texture_font_char_cn_1E850, texture_font_char_cn_1E860, texture_font_char_cn_1E870, + texture_font_char_cn_1E880, texture_font_char_cn_1E890, texture_font_char_cn_1E8A0, texture_font_char_cn_1E8B0, + texture_font_char_cn_1E8C0, texture_font_char_cn_1E8D0, texture_font_char_cn_1E8E0, texture_font_char_cn_1E8F0, + texture_font_char_cn_1E900, texture_font_char_cn_1E910, texture_font_char_cn_1E920, texture_font_char_cn_1E930, + texture_font_char_cn_1E940, texture_font_char_cn_1E950, texture_font_char_cn_1E960, texture_font_char_cn_1E970, + texture_font_char_cn_1E980, texture_font_char_cn_1E990, texture_font_char_cn_1E9A0, texture_font_char_cn_1E9B0, + texture_font_char_cn_1E9C0, texture_font_char_cn_1E9D0, texture_font_char_cn_1E9E0, texture_font_char_cn_1E9F0, + texture_font_char_cn_1EA00, texture_font_char_cn_1EA10, texture_font_char_cn_1EA20, texture_font_char_cn_1EA30, + texture_font_char_cn_1EA40, texture_font_char_cn_1EA50, texture_font_char_cn_1EA60, texture_font_char_cn_1EA70, + texture_font_char_cn_1EA80, texture_font_char_cn_1EA90, texture_font_char_cn_1EAA0, texture_font_char_cn_1EAB0, + texture_font_char_cn_1EAC0, texture_font_char_cn_1EAD0, texture_font_char_cn_1EAE0, texture_font_char_cn_1EAF0, + texture_font_char_cn_1EB00, texture_font_char_cn_1EB10, texture_font_char_cn_1EB20, texture_font_char_cn_1EB30, + texture_font_char_cn_1EB40, texture_font_char_cn_1EB50, texture_font_char_cn_1EB60, texture_font_char_cn_1EB70, + texture_font_char_cn_1EB80, texture_font_char_cn_1EB90, texture_font_char_cn_1EBA0, texture_font_char_cn_1EBB0, + texture_font_char_cn_1EBC0, texture_font_char_cn_1EBD0, texture_font_char_cn_1EBE0, texture_font_char_cn_1EBF0, + texture_font_char_cn_1EC00, texture_font_char_cn_1EC10, texture_font_char_cn_1EC20, texture_font_char_cn_1EC30, + texture_font_char_cn_1EC40, texture_font_char_cn_1EC50, texture_font_char_cn_1EC60, texture_font_char_cn_1EC70, + texture_font_char_cn_1EC80, texture_font_char_cn_1EC90, texture_font_char_cn_1ECA0, texture_font_char_cn_1ECB0, + texture_font_char_cn_1ECC0, texture_font_char_cn_1ECD0, texture_font_char_cn_1ECE0, texture_font_char_cn_1ECF0, + texture_font_char_cn_1ED00, texture_font_char_cn_1ED10, texture_font_char_cn_1ED20, texture_font_char_cn_1ED30, + texture_font_char_cn_1ED40, texture_font_char_cn_1ED50, texture_font_char_cn_1ED60, texture_font_char_cn_1ED70, + texture_font_char_cn_1ED80, texture_font_char_cn_1ED90, texture_font_char_cn_1EDA0, texture_font_char_cn_1EDB0, + texture_font_char_cn_1EDC0, texture_font_char_cn_1EDD0, texture_font_char_cn_1EDE0, texture_font_char_cn_1EDF0, + texture_font_char_cn_1EE00, texture_font_char_cn_1EE10, texture_font_char_cn_1EE20, texture_font_char_cn_1EE30, + texture_font_char_cn_1EE40, texture_font_char_cn_1EE50, texture_font_char_cn_1EE60, texture_font_char_cn_1EE70, +#endif // VERSION_CN #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, @@ -2079,6 +11754,8 @@ const Texture *const main_hud_camera_lut[] = { texture_hud_char_arrow_up, texture_hud_char_arrow_down, }; +#include "text/debug_text.raw.inc.c" + // 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 @@ -2086,6 +11763,8 @@ const Texture *const main_hud_camera_lut[] = { #include "text/jp/define_text.inc.c" #elif defined(VERSION_US) #include "text/us/define_text.inc.c" +#elif defined(VERSION_CN) +#include "text/cn/define_text.inc.c" #endif UNUSED static const u64 segment2_unused_0 = 0; @@ -2194,6 +11873,11 @@ static const Vtx vertex_ia8_char[] = { {{{ 8, 0, 0}, 0, { 512, 1024}, {0xff, 0xff, 0xff, 0xff}}}, {{{ 8, 16, 0}, 0, { 512, 0}, {0xff, 0xff, 0xff, 0xff}}}, {{{ 0, 16, 0}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}}, +#elif defined(VERSION_CN) + {{{ 0, 0, 0}, 0, { 0, 256}, {0xff, 0xff, 0xff, 0xff}}}, + {{{ 8, 0, 0}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}}, + {{{ 8, 16, 0}, 0, { 512, 0}, {0xff, 0xff, 0xff, 0xff}}}, + {{{ 0, 16, 0}, 0, { 512, 256}, {0xff, 0xff, 0xff, 0xff}}}, #else {{{ 0, 0, 0}, 0, { 0, 256}, {0xff, 0xff, 0xff, 0xff}}}, {{{ 8, 0, 0}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}}, @@ -2237,7 +11921,7 @@ const Gfx dl_ia_text_end[] = { gsSPEndDisplayList(), }; -#elif defined(VERSION_US) +#elif defined(VERSION_US) || defined(VERSION_CN) const Gfx dl_ia_text_begin[] = { gsDPPipeSync(), gsSPClearGeometryMode(G_LIGHTING), diff --git a/bin/title_screen_bg.c b/bin/title_screen_bg.c index d6deb092..1aba517d 100644 --- a/bin/title_screen_bg.c +++ b/bin/title_screen_bg.c @@ -71,6 +71,50 @@ const Gfx title_screen_bg_dl_0A000190[] = { gsSPEndDisplayList(), }; +#if defined(VERSION_CN) + +// 0x0A0001C0 +ALIGNED8 static const Texture title_texture_0A0001C0[] = { +#include "textures/title_screen_bg/title_screen_bg_ique.001C0.rgba16.inc.c" +}; + +// 0x0A000E40 +ALIGNED8 static const Texture title_texture_0A000E40[] = { +#include "textures/title_screen_bg/title_screen_bg_ique.00E40.rgba16.inc.c" +}; + +// 0x0A001AC0 +ALIGNED8 static const Texture title_texture_0A001AC0[] = { +#include "textures/title_screen_bg/title_screen_bg_ique.01AC0.rgba16.inc.c" +}; + +// 0x0A002740 +ALIGNED8 static const Texture title_texture_0A002740[] = { +#include "textures/title_screen_bg/title_screen_bg_ique.02740.rgba16.inc.c" +}; + +// 0x0A0033C0 +ALIGNED8 static const Texture title_texture_0A0033C0[] = { +#include "textures/title_screen_bg/title_screen_bg_ique.033C0.rgba16.inc.c" +}; + +// 0x0A004040 +ALIGNED8 static const Texture title_texture_0A004040[] = { +#include "textures/title_screen_bg/title_screen_bg_ique.04040.rgba16.inc.c" +}; + +// 0x0A004CC0 +ALIGNED8 static const Texture title_texture_0A004CC0[] = { +#include "textures/title_screen_bg/title_screen_bg_ique.04CC0.rgba16.inc.c" +}; + +// 0x0A005940 +ALIGNED8 static const Texture title_texture_0A005940[] = { +#include "textures/title_screen_bg/title_screen_bg_ique.05940.rgba16.inc.c" +}; + +#else + // 0x0A0001C0 ALIGNED8 static const Texture title_texture_0A0001C0[] = { #include "textures/title_screen_bg/title_screen_bg.001C0.rgba16.inc.c" @@ -111,6 +155,8 @@ ALIGNED8 static const Texture title_texture_0A005940[] = { #include "textures/title_screen_bg/title_screen_bg.05940.rgba16.inc.c" }; +#endif + // 0x0A0065C0 const Texture *const mario_title_texture_table[] = { title_texture_0A0001C0, title_texture_0A000E40, title_texture_0A001AC0, title_texture_0A002740, @@ -123,7 +169,7 @@ const Texture *const game_over_texture_table[] = { UNUSED static const u64 title_screen_bg_unused_0 = 0; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) const Gfx title_screen_bg_dl_0A0065E8[] = { gsDPPipeSync(), gsDPSetCycleType(G_CYC_COPY), diff --git a/charmap.txt b/charmap.txt index 49aaee55..57d9f741 100644 --- a/charmap.txt +++ b/charmap.txt @@ -1,257 +1,269 @@ -'0' = 0x00 -'0' = 0x00 -'1' = 0x01 -'1' = 0x01 -'2' = 0x02 -'2' = 0x02 -'3' = 0x03 -'3' = 0x03 -'4' = 0x04 -'4' = 0x04 -'5' = 0x05 -'5' = 0x05 -'6' = 0x06 -'6' = 0x06 -'7' = 0x07 -'7' = 0x07 -'8' = 0x08 -'8' = 0x08 -'9' = 0x09 -'9' = 0x09 -'A' = 0x0A -'A' = 0x0A -'B' = 0x0B -'B' = 0x0B -'C' = 0x0C -'C' = 0x0C -'D' = 0x0D -'D' = 0x0D -'E' = 0x0E -'E' = 0x0E -'F' = 0x0F -'F' = 0x0F -'G' = 0x10 -'G' = 0x10 -'H' = 0x11 -'H' = 0x11 -'I' = 0x12 -'I' = 0x12 -'J' = 0x13 -'J' = 0x13 -'K' = 0x14 -'K' = 0x14 -'L' = 0x15 -'L' = 0x15 -'M' = 0x16 -'M' = 0x16 -'N' = 0x17 -'N' = 0x17 -'O' = 0x18 -'O' = 0x18 -'P' = 0x19 -'P' = 0x19 -'Q' = 0x1A -'Q' = 0x1A -'R' = 0x1B -'R' = 0x1B -'S' = 0x1C -'S' = 0x1C -'T' = 0x1D -'T' = 0x1D -'U' = 0x1E -'U' = 0x1E -'V' = 0x1F -'V' = 0x1F -'W' = 0x20 -'W' = 0x20 -'X' = 0x21 -'X' = 0x21 -'Y' = 0x22 -'Y' = 0x22 -'Z' = 0x23 -'Z' = 0x23 -'a' = 0x24 -'b' = 0x25 -'c' = 0x26 -'d' = 0x27 -'e' = 0x28 -'f' = 0x29 -'g' = 0x2A -'h' = 0x2B -'i' = 0x2C -'j' = 0x2D -'k' = 0x2E -'l' = 0x2F -'m' = 0x30 -'n' = 0x31 -'o' = 0x32 -'p' = 0x33 -'q' = 0x34 -'r' = 0x35 -'s' = 0x36 -'t' = 0x37 -'u' = 0x38 -'v' = 0x39 -'w' = 0x3A -'x' = 0x3B -'y' = 0x3C -'z' = 0x3D -'\'' = 0x3E -'.' = 0x3F +#if defined(VERSION_CN) && !defined(CHARMAP_DEBUG) +#define CN_ZERO 0x00, +#define CN_FF 0xFF, +#define CN_DIFF(a, b) REMOVE_PARENS b +#define REMOVE_PARENS(a, b) a, b +#else +#define CN_ZERO +#define CN_FF +#define CN_DIFF(a, b) a +#endif -# Mario face US/EU menu string (Note: NOT multi-text, each char has a part of the face) -'☺' = 0x40, 0x41 +'0' = CN_ZERO 0x00 +'0' = CN_ZERO 0x00 +'1' = CN_ZERO 0x01 +'1' = CN_ZERO 0x01 +'2' = CN_ZERO 0x02 +'2' = CN_ZERO 0x02 +'3' = CN_ZERO 0x03 +'3' = CN_ZERO 0x03 +'4' = CN_ZERO 0x04 +'4' = CN_ZERO 0x04 +'5' = CN_ZERO 0x05 +'5' = CN_ZERO 0x05 +'6' = CN_ZERO 0x06 +'6' = CN_ZERO 0x06 +'7' = CN_ZERO 0x07 +'7' = CN_ZERO 0x07 +'8' = CN_ZERO 0x08 +'8' = CN_ZERO 0x08 +'9' = CN_ZERO 0x09 +'9' = CN_ZERO 0x09 +'A' = CN_ZERO 0x0A +'A' = CN_DIFF(0x0A, (0x04, 0x52)) +'B' = CN_ZERO 0x0B +'B' = CN_ZERO 0x0B +'C' = CN_ZERO 0x0C +'C' = CN_ZERO 0x0C +'D' = CN_ZERO 0x0D +'D' = CN_ZERO 0x0D +'E' = CN_ZERO 0x0E +'E' = CN_ZERO 0x0E +'F' = CN_ZERO 0x0F +'F' = CN_ZERO 0x0F +'G' = CN_ZERO 0x10 +'G' = CN_ZERO 0x10 +'H' = CN_ZERO 0x11 +'H' = CN_ZERO 0x11 +'I' = CN_ZERO 0x12 +'I' = CN_ZERO 0x12 +'J' = CN_ZERO 0x13 +'J' = CN_ZERO 0x13 +'K' = CN_ZERO 0x14 +'K' = CN_ZERO 0x14 +'L' = CN_ZERO 0x15 +'L' = CN_ZERO 0x15 +'M' = CN_ZERO 0x16 +'M' = CN_ZERO 0x16 +'N' = CN_ZERO 0x17 +'N' = CN_ZERO 0x17 +'O' = CN_ZERO 0x18 +'O' = CN_ZERO 0x18 +'P' = CN_ZERO 0x19 +'P' = CN_ZERO 0x19 +'Q' = CN_ZERO 0x1A +'Q' = CN_ZERO 0x1A +'R' = CN_ZERO 0x1B +'R' = CN_DIFF(0x1B, (0x04, 0x53)) +'S' = CN_ZERO 0x1C +'S' = CN_DIFF(0x1C, (0x04, 0x50)) +'T' = CN_ZERO 0x1D +'T' = CN_DIFF(0x1D, (0x04, 0x51)) +'U' = CN_ZERO 0x1E +'U' = CN_ZERO 0x1E +'V' = CN_ZERO 0x1F +'V' = CN_ZERO 0x1F +'W' = CN_ZERO 0x20 +'W' = CN_ZERO 0x20 +'X' = CN_ZERO 0x21 +'X' = CN_ZERO 0x21 +'Y' = CN_ZERO 0x22 +'Y' = CN_ZERO 0x22 +'Z' = CN_ZERO 0x23 +'Z' = CN_ZERO 0x23 +'a' = CN_ZERO 0x24 +'b' = CN_ZERO 0x25 +'c' = CN_ZERO 0x26 +'d' = CN_ZERO 0x27 +'e' = CN_ZERO 0x28 +'f' = CN_ZERO 0x29 +'g' = CN_ZERO 0x2A +'h' = CN_ZERO 0x2B +'i' = CN_ZERO 0x2C +'j' = CN_ZERO 0x2D +'k' = CN_ZERO 0x2E +'l' = CN_ZERO 0x2F +'m' = CN_ZERO 0x30 +'n' = CN_ZERO 0x31 +'o' = CN_ZERO 0x32 +'p' = CN_ZERO 0x33 +'q' = CN_ZERO 0x34 +'r' = CN_ZERO 0x35 +'s' = CN_ZERO 0x36 +'t' = CN_ZERO 0x37 +'u' = CN_ZERO 0x38 +'v' = CN_ZERO 0x39 +'w' = CN_ZERO 0x3A +'x' = CN_ZERO 0x3B +'y' = CN_ZERO 0x3C +'z' = CN_ZERO 0x3D +'\'' = CN_ZERO 0x3E +'.' = CN_ZERO 0x3F -'あ' = 0x40 -'い' = 0x41 -'う' = 0x42 -'え' = 0x43 -'お' = 0x44 -'か' = 0x45 -'き' = 0x46 -'く' = 0x47 -'け' = 0x48 -'こ' = 0x49 -'さ' = 0x4A -'し' = 0x4B -'す' = 0x4C -'せ' = 0x4D -'そ' = 0x4E -'た' = 0x4F -'ち' = 0x50 -'つ' = 0x51 -'て' = 0x52 -'と' = 0x53 -'な' = 0x54 -'に' = 0x55 -'ぬ' = 0x56 -'ね' = 0x57 -'の' = 0x58 -'は' = 0x59 -'ひ' = 0x5A -'ふ' = 0x5B -'へ' = 0x5C -'ほ' = 0x5D -'ま' = 0x5E -'み' = 0x5F -'む' = 0x60 -'め' = 0x61 -'も' = 0x62 -'や' = 0x63 -'ゆ' = 0x64 -'よ' = 0x65 -'ら' = 0x66 -'り' = 0x67 -'る' = 0x68 -'れ' = 0x69 -'ろ' = 0x6A -'わ' = 0x6B -'を' = 0x6C -'ん' = 0x6D -'。' = 0x6E -',' = 0x6F -'、' = 0x6F -'ア' = 0x70 -'イ' = 0x71 -'ウ' = 0x72 -'エ' = 0x73 -'オ' = 0x74 -'カ' = 0x75 -'キ' = 0x76 -'ク' = 0x77 -'ケ' = 0x78 -'コ' = 0x79 -'サ' = 0x7A -'シ' = 0x7B -'ス' = 0x7C -'セ' = 0x7D -'ソ' = 0x7E -'タ' = 0x7F -'チ' = 0x80 -'ツ' = 0x81 -'テ' = 0x82 -'ト' = 0x83 -'ナ' = 0x84 -'ニ' = 0x85 -'ヌ' = 0x86 -'ネ' = 0x87 -'ノ' = 0x88 -'ハ' = 0x89 -'ヒ' = 0x8A -'フ' = 0x8B -'ヘ' = 0x8C -'ホ' = 0x8D -'マ' = 0x8E -'ミ' = 0x8F -'ム' = 0x90 -'メ' = 0x91 -'モ' = 0x92 -'ヤ' = 0x93 -'ユ' = 0x94 -'ヨ' = 0x95 -'ラ' = 0x96 -'リ' = 0x97 -'ル' = 0x98 -'レ' = 0x99 -'ロ' = 0x9A -'ワ' = 0x9B -# 0x9C is unused, only defined in jp menu char lut -'ヲ' = 0x9C -'ン' = 0x9D -' ' = 0x9E -' ' = 0x9E -'-' = 0x9F -'ー' = 0x9F -'ぇ' = 0xA0 -'っ' = 0xA1 -'ゃ' = 0xA2 -'ゅ' = 0xA3 -'ょ' = 0xA4 -'ぁ' = 0xA5 -'ぃ' = 0xA6 -'ぅ' = 0xA7 -'ぉ' = 0xA8 -'ェ' = 0xD0 -'ッ' = 0xD1 -'ャ' = 0xD2 -'ュ' = 0xD3 -'ョ' = 0xD4 -'ァ' = 0xD5 -'ィ' = 0xD6 -'ゥ' = 0xD7 -'ォ' = 0xD8 -'[%]' = 0xE0 -'(' = 0xE1 -'(' = 0xE1 -')(' = 0xE2 -')(' = 0xE2 -')' = 0xE3 -')' = 0xE3 -'+' = 0xE4 -'↔' = 0xE4 -'&' = 0xE5 -':' = 0xE6 -'゛' = 0xF0 -'゜' = 0xF1 -'!' = 0xF2 -'!' = 0xF2 -'%' = 0xF3 -'%' = 0xF3 -'?' = 0xF4 -'?' = 0xF4 -'『' = 0xF5 -'』' = 0xF6 -'~' = 0xF7 -'~' = 0xF7 -'…' = 0xF8 -'$' = 0xF9 -'★' = 0xFA -'×' = 0xFB -'・' = 0xFC -'☆' = 0xFD -'\n' = 0xFE +// Mario face US/EU menu string (Note: NOT multi-text, each char has a part of the face) +'☺' = CN_ZERO 0x40, CN_ZERO 0x41 -# hiragana or katakana with dakuten +'あ' = CN_ZERO 0x40 +'い' = CN_ZERO 0x41 +'う' = CN_ZERO 0x42 +'え' = CN_ZERO 0x43 +'お' = CN_ZERO 0x44 +'か' = CN_ZERO 0x45 +'き' = CN_ZERO 0x46 +'く' = CN_ZERO 0x47 +'け' = CN_ZERO 0x48 +'こ' = CN_ZERO 0x49 +'さ' = CN_ZERO 0x4A +'し' = CN_ZERO 0x4B +'す' = CN_ZERO 0x4C +'せ' = CN_ZERO 0x4D +'そ' = CN_ZERO 0x4E +'た' = CN_ZERO 0x4F +'ち' = CN_ZERO 0x50 +'つ' = CN_ZERO 0x51 +'て' = CN_ZERO 0x52 +'と' = CN_ZERO 0x53 +'な' = CN_ZERO 0x54 +'に' = CN_ZERO 0x55 +'ぬ' = CN_ZERO 0x56 +'ね' = CN_ZERO 0x57 +'の' = CN_ZERO 0x58 +'は' = CN_ZERO 0x59 +'ひ' = CN_ZERO 0x5A +'ふ' = CN_ZERO 0x5B +'へ' = CN_ZERO 0x5C +'ほ' = CN_ZERO 0x5D +'ま' = CN_ZERO 0x5E +'み' = CN_ZERO 0x5F +'む' = CN_ZERO 0x60 +'め' = CN_ZERO 0x61 +'も' = CN_ZERO 0x62 +'や' = CN_ZERO 0x63 +'ゆ' = CN_ZERO 0x64 +'よ' = CN_ZERO 0x65 +'ら' = CN_ZERO 0x66 +'り' = CN_ZERO 0x67 +'る' = CN_ZERO 0x68 +'れ' = CN_ZERO 0x69 +'ろ' = CN_ZERO 0x6A +'わ' = CN_ZERO 0x6B +'を' = CN_ZERO 0x6C +'ん' = CN_ZERO 0x6D +'。' = CN_DIFF(0x6E, (0x02, 0x6C)) +',' = CN_ZERO 0x6F +'、' = CN_DIFF(0x6F, (0x03, 0xE6)) +'ア' = CN_ZERO 0x70 +'イ' = CN_ZERO 0x71 +'ウ' = CN_ZERO 0x72 +'エ' = CN_ZERO 0x73 +'オ' = CN_ZERO 0x74 +'カ' = CN_ZERO 0x75 +'キ' = CN_ZERO 0x76 +'ク' = CN_ZERO 0x77 +'ケ' = CN_ZERO 0x78 +'コ' = CN_ZERO 0x79 +'サ' = CN_ZERO 0x7A +'シ' = CN_ZERO 0x7B +'ス' = CN_ZERO 0x7C +'セ' = CN_ZERO 0x7D +'ソ' = CN_ZERO 0x7E +'タ' = CN_ZERO 0x7F +'チ' = CN_ZERO 0x80 +'ツ' = CN_ZERO 0x81 +'テ' = CN_ZERO 0x82 +'ト' = CN_ZERO 0x83 +'ナ' = CN_ZERO 0x84 +'ニ' = CN_ZERO 0x85 +'ヌ' = CN_ZERO 0x86 +'ネ' = CN_ZERO 0x87 +'ノ' = CN_ZERO 0x88 +'ハ' = CN_ZERO 0x89 +'ヒ' = CN_ZERO 0x8A +'フ' = CN_ZERO 0x8B +'ヘ' = CN_ZERO 0x8C +'ホ' = CN_ZERO 0x8D +'マ' = CN_ZERO 0x8E +'ミ' = CN_ZERO 0x8F +'ム' = CN_ZERO 0x90 +'メ' = CN_ZERO 0x91 +'モ' = CN_ZERO 0x92 +'ヤ' = CN_ZERO 0x93 +'ユ' = CN_ZERO 0x94 +'ヨ' = CN_ZERO 0x95 +'ラ' = CN_ZERO 0x96 +'リ' = CN_ZERO 0x97 +'ル' = CN_ZERO 0x98 +'レ' = CN_ZERO 0x99 +'ロ' = CN_ZERO 0x9A +'ワ' = CN_ZERO 0x9B +// 0x9C is unused, only defined in jp menu char lut +'ヲ' = CN_ZERO 0x9C +'ン' = CN_ZERO 0x9D +' ' = CN_FF 0x9E +' ' = CN_FF 0x9E +'-' = CN_ZERO 0x9F +'ー' = CN_ZERO 0x9F +'ぇ' = CN_ZERO 0xA0 +'っ' = CN_ZERO 0xA1 +'ゃ' = CN_ZERO 0xA2 +'ゅ' = CN_ZERO 0xA3 +'ょ' = CN_ZERO 0xA4 +'ぁ' = CN_ZERO 0xA5 +'ぃ' = CN_ZERO 0xA6 +'ぅ' = CN_ZERO 0xA7 +'ぉ' = CN_ZERO 0xA8 +'ェ' = CN_ZERO 0xD0 +'ッ' = CN_ZERO 0xD1 +'ャ' = CN_ZERO 0xD2 +'ュ' = CN_ZERO 0xD3 +'ョ' = CN_ZERO 0xD4 +'ァ' = CN_ZERO 0xD5 +'ィ' = CN_ZERO 0xD6 +'ゥ' = CN_ZERO 0xD7 +'ォ' = CN_ZERO 0xD8 +'[%]' = CN_FF 0xE0 +'(' = CN_ZERO 0xE1 +'(' = CN_DIFF(0xE1, (0x02, 0x78)) +')(' = CN_ZERO 0xE2 +')(' = CN_ZERO 0xE2 +')' = CN_ZERO 0xE3 +')' = CN_DIFF(0xE3, (0x02, 0x7E)) +'+' = CN_ZERO 0xE4 +'↔' = CN_ZERO 0xE4 +'&' = CN_ZERO 0xE5 +':' = CN_ZERO 0xE6 +'゛' = CN_ZERO 0xF0 +'゜' = CN_ZERO 0xF1 +'!' = CN_ZERO 0xF2 +'!' = CN_DIFF(0xF2, (0x02, 0x65)) +'%' = CN_ZERO 0xF3 +'%' = CN_ZERO 0xF3 +'?' = CN_ZERO 0xF4 +'?' = CN_DIFF(0xF4, (0x01, 0x3A)) +'『' = CN_ZERO 0xF5 +'』' = CN_ZERO 0xF6 +'~' = CN_ZERO 0xF7 +'~' = CN_ZERO 0xF7 +'…' = CN_DIFF(0xF8, (0x02, 0xE6)) +'$' = CN_ZERO 0xF9 +'★' = CN_ZERO 0xFA +'×' = CN_ZERO 0xFB +'・' = CN_ZERO 0xFC +'☆' = CN_ZERO 0xFD +'\n' = CN_FF 0xFE +'\0' = CN_FF 0xFF + +// hiragana or katakana with dakuten 'が' = 0xF0, 0x45 'ぎ' = 0xF0, 0x46 'ぐ' = 0xF0, 0x47 @@ -293,7 +305,7 @@ 'ベ' = 0xF0, 0x8C 'ボ' = 0xF0, 0x8D -# hiragana or katakana with handakuten +// hiragana or katakana with handakuten 'ぱ' = 0xF1, 0x59 'ぴ' = 0xF1, 0x5A 'ぷ' = 0xF1, 0x5B @@ -305,52 +317,1115 @@ 'ペ' = 0xF1, 0x8C 'ポ' = 0xF1, 0x8D -# overwritten US symbols -# these symbols overwrite -# a previous symbol. -'^' = 0x50 -'|' = 0x51 -'<' = 0x52 -'>' = 0x53 -'[A]' = 0x54 -'[B]' = 0x55 -'[C]' = 0x56 -'[Z]' = 0x57 -'[R]' = 0x58 -'/' = 0xD0 +// overwritten symbols +// these symbols overwrite +// a previous symbol. +'▲' = CN_ZERO 0x50 +'▼' = CN_ZERO 0x51 +'◀' = CN_ZERO 0x52 +'▶' = CN_ZERO 0x53 +'[A]' = CN_ZERO 0x54 +'[B]' = CN_ZERO 0x55 +'[C]' = CN_ZERO 0x56 +'[Z]' = CN_ZERO 0x57 +'[R]' = CN_ZERO 0x58 +'/' = CN_ZERO 0xD0 -# multi-text US symbols -'the' = 0xD1 -'you' = 0xD2 +// multi-text US symbols +'the' = CN_ZERO 0xD1 +'you' = CN_ZERO 0xD2 -# EU ROM symbols -'à' = 0x60 -'â' = 0x61 -'ä' = 0x62 -'À' = 0x64 -'Â' = 0x65 -'Ä' = 0x66 -'è' = 0x70 -'ê' = 0x71 -'ë' = 0x72 -'é' = 0x73 -'È' = 0x74 -'Ê' = 0x75 -'Ë' = 0x76 -'É' = 0x77 -'ù' = 0x80 -'û' = 0x81 -'ü' = 0x82 -'Ù' = 0x84 -'Û' = 0x85 -'Ü' = 0x86 -'ô' = 0x91 -'ö' = 0x92 -'Ô' = 0x95 -'Ö' = 0x96 -'î' = 0xA1 -'ï' = 0xA2 -'ß' = 0xEC -'Ç' = 0xED -'ç' = 0xEE -'„' = 0xF0 +// EU ROM symbols +'à' = CN_ZERO 0x60 +'â' = CN_ZERO 0x61 +'ä' = CN_ZERO 0x62 +'À' = CN_ZERO 0x64 +'Â' = CN_ZERO 0x65 +'Ä' = CN_ZERO 0x66 +'è' = CN_ZERO 0x70 +'ê' = CN_ZERO 0x71 +'ë' = CN_ZERO 0x72 +'é' = CN_ZERO 0x73 +'È' = CN_ZERO 0x74 +'Ê' = CN_ZERO 0x75 +'Ë' = CN_ZERO 0x76 +'É' = CN_ZERO 0x77 +'ù' = CN_ZERO 0x80 +'û' = CN_ZERO 0x81 +'ü' = CN_ZERO 0x82 +'Ù' = CN_ZERO 0x84 +'Û' = CN_ZERO 0x85 +'Ü' = CN_ZERO 0x86 +'ô' = CN_ZERO 0x91 +'ö' = CN_ZERO 0x92 +'Ô' = CN_ZERO 0x95 +'Ö' = CN_ZERO 0x96 +'î' = CN_ZERO 0xA1 +'ï' = CN_ZERO 0xA2 +'ß' = CN_ZERO 0xEC +'Ç' = CN_ZERO 0xED +'ç' = CN_ZERO 0xEE +'„' = CN_ZERO 0xF0 + +// CN chars +'我' = 0x01, 0x00 +'的' = 0x01, 0x01 +'积' = 0x01, 0x02 +'分' = 0x01, 0x03 +'关' = 0x01, 0x04 +'卡' = 0x01, 0x05 +'退' = 0x01, 0x06 +'出' = 0x01, 0x07 +'继' = 0x01, 0x08 +'续' = 0x01, 0x09 +'使' = 0x01, 0x0A +'用' = 0x01, 0x0B +'键' = 0x01, 0x0C +'设' = 0x01, 0x0D +'定' = 0x01, 0x0E +'视' = 0x01, 0x0F +'角' = 0x01, 0x10 +'特' = 0x01, 0x11 +'写' = 0x01, 0x12 +'镜' = 0x01, 0x13 +'头' = 0x01, 0x14 +'固' = 0x01, 0x15 +'返' = 0x01, 0x16 +'回' = 0x01, 0x17 +'查' = 0x01, 0x18 +'看' = 0x01, 0x19 +'复' = 0x01, 0x1A +'制' = 0x01, 0x1B +'文' = 0x01, 0x1C +'件' = 0x01, 0x1D +'删' = 0x01, 0x1E +'除' = 0x01, 0x1F +'立' = 0x01, 0x20 +'体' = 0x01, 0x21 +'声' = 0x01, 0x22 +'单' = 0x01, 0x23 +'道' = 0x01, 0x24 +'耳' = 0x01, 0x25 +'机' = 0x01, 0x26 +'选' = 0x01, 0x27 +'择' = 0x01, 0x28 +'没' = 0x01, 0x29 +'有' = 0x01, 0x2A +'保' = 0x01, 0x2B +'存' = 0x01, 0x2C +'数' = 0x01, 0x2D +'据' = 0x01, 0x2E +'到' = 0x01, 0x2F +'何' = 0x01, 0x30 +'处' = 0x01, 0x31 +'完' = 0x01, 0x32 +'毕' = 0x01, 0x33 +'空' = 0x01, 0x34 +'储' = 0x01, 0x35 +'是' = 0x01, 0x36 +'否' = 0x01, 0x37 +'确' = 0x01, 0x38 +'吗' = 0x01, 0x39 +'已' = 0x01, 0x3B +'音' = 0x01, 0x3C +'马' = 0x01, 0x3D +'力' = 0x01, 0x3E +'欧' = 0x01, 0x3F +'最' = 0x01, 0x40 +'高' = 0x01, 0x41 +'并' = 0x01, 0x42 +'不' = 0x01, 0x43 +'必' = 0x01, 0x44 +'接' = 0x01, 0x45 +'住' = 0x01, 0x46 +'清' = 0x01, 0x47 +'炸' = 0x01, 0x48 +'弹' = 0x01, 0x49 +'王' = 0x01, 0x4A +'国' = 0x01, 0x4B +'嘭' = 0x01, 0x4C +'要' = 0x01, 0x4D +'塞' = 0x01, 0x4E +'海' = 0x01, 0x4F +'盗' = 0x01, 0x50 +'湾' = 0x01, 0x51 +'酷' = 0x01, 0x52 +'冰' = 0x01, 0x53 +'雪' = 0x01, 0x54 +'山' = 0x01, 0x55 +'大' = 0x01, 0x56 +'嘘' = 0x01, 0x57 +'鬼' = 0x01, 0x58 +'城' = 0x01, 0x59 +'堡' = 0x01, 0x5A +'迷' = 0x01, 0x5B +'失' = 0x01, 0x5C +'洞' = 0x01, 0x5D +'窟' = 0x01, 0x5E +'岩' = 0x01, 0x5F +'浆' = 0x01, 0x60 +'地' = 0x01, 0x61 +'狱' = 0x01, 0x62 +'热' = 0x01, 0x63 +'沙' = 0x01, 0x64 +'漠' = 0x01, 0x65 +'恐' = 0x01, 0x66 +'怖' = 0x01, 0x67 +'船' = 0x01, 0x68 +'坞' = 0x01, 0x69 +'人' = 0x01, 0x6A +'水' = 0x01, 0x6B +'下' = 0x01, 0x6C +'遗' = 0x01, 0x6D +'迹' = 0x01, 0x6E +'脉' = 0x01, 0x6F +'小' = 0x01, 0x70 +'摇' = 0x01, 0x71 +'摆' = 0x01, 0x72 +'古' = 0x01, 0x73 +'钟' = 0x01, 0x74 +'彩' = 0x01, 0x75 +'虹' = 0x01, 0x76 +'之' = 0x01, 0x77 +'旅' = 0x01, 0x78 +'黑' = 0x01, 0x79 +'暗' = 0x01, 0x7A +'世' = 0x01, 0x7B +'界' = 0x01, 0x7C +'霸' = 0x01, 0x7D +'火' = 0x01, 0x7E +'中' = 0x01, 0x7F +'天' = 0x01, 0x80 +'公' = 0x01, 0x81 +'主' = 0x01, 0x82 +'秘' = 0x01, 0x83 +'密' = 0x01, 0x84 +'滑' = 0x01, 0x85 +'梯' = 0x01, 0x86 +'金' = 0x01, 0x87 +'属' = 0x01, 0x88 +'帽' = 0x01, 0x89 +'瀑' = 0x01, 0x8A +'布' = 0x01, 0x8B +'石' = 0x01, 0x8C +'飞' = 0x01, 0x8D +'行' = 0x01, 0x8E +'塔' = 0x01, 0x8F +'护' = 0x01, 0x90 +'河' = 0x01, 0x91 +'里' = 0x01, 0x92 +'隐' = 0x01, 0x93 +'身' = 0x01, 0x94 +'越' = 0x01, 0x95 +'族' = 0x01, 0x96 +'馆' = 0x01, 0x97 +'藏' = 0x01, 0x98 +'星' = 0x01, 0x99 +'顶' = 0x01, 0x9A +'上' = 0x01, 0x9B +'喏' = 0x01, 0x9C +'库' = 0x01, 0x9D +'诺' = 0x01, 0x9E +'田' = 0x01, 0x9F +'径' = 0x01, 0xA0 +'锦' = 0x01, 0xA1 +'标' = 0x01, 0xA2 +'赛' = 0x01, 0xA3 +'岛' = 0x01, 0xA4 +'屿' = 0x01, 0xA5 +'枚' = 0x01, 0xA6 +'红' = 0x01, 0xA7 +'色' = 0x01, 0xA8 +'硬' = 0x01, 0xA9 +'币' = 0x01, 0xAA +'长' = 0x01, 0xAB +'翅' = 0x01, 0xAC +'膀' = 0x01, 0xAD +'汪' = 0x01, 0xAE +'守' = 0x01, 0xAF +'铁' = 0x01, 0xB0 +'门' = 0x01, 0xB1 +'疯' = 0x01, 0xB2 +'狂' = 0x01, 0xB3 +'巅' = 0x01, 0xB4 +'射' = 0x01, 0xB5 +'向' = 0x01, 0xB6 +'蓝' = 0x01, 0xB7 +'浮' = 0x01, 0xB8 +'降' = 0x01, 0xB9 +'篮' = 0x01, 0xBA +'破' = 0x01, 0xBB +'壁' = 0x01, 0xBC +'摘' = 0x01, 0xBD +'沉' = 0x01, 0xBE +'宝' = 0x01, 0xBF +'来' = 0x01, 0xC0 +'玩' = 0x01, 0xC1 +'吧' = 0x01, 0xC2 +'鳗' = 0x01, 0xC3 +'底' = 0x01, 0xC4 +'财' = 0x01, 0xC5 +'发' = 0x01, 0xC6 +'柱' = 0x01, 0xC7 +'平' = 0x01, 0xC8 +'台' = 0x01, 0xC9 +'穿' = 0x01, 0xCA +'急' = 0x01, 0xCB +'流' = 0x01, 0xCC +'企' = 0x01, 0xCD +'鹅' = 0x01, 0xCE +'该' = 0x01, 0xCF +'家' = 0x01, 0xD0 +'了' = 0x01, 0xD1 +'比' = 0x01, 0xD2 +'帮' = 0x01, 0xD3 +'助' = 0x01, 0xD4 +'寻' = 0x01, 0xD5 +'找' = 0x01, 0xD6 +'脑' = 0x01, 0xD7 +'袋' = 0x01, 0xD8 +'踢' = 0x01, 0xD9 +'墙' = 0x01, 0xDA +'跳' = 0x01, 0xDB +'猎' = 0x01, 0xDC +'记' = 0x01, 0xDD +'旋' = 0x01, 0xDE +'转' = 0x01, 0xDF +'木' = 0x01, 0xE0 +'书' = 0x01, 0xE1 +'房' = 0x01, 0xE2 +'室' = 0x01, 0xE3 +'阳' = 0x01, 0xE4 +'眼' = 0x01, 0xE5 +'睛' = 0x01, 0xE6 +'穴' = 0x01, 0xE7 +'怪' = 0x01, 0xE8 +'移' = 0x01, 0xE9 +'动' = 0x01, 0xEA +'通' = 0x01, 0xEB +'过' = 0x01, 0xEC +'毒' = 0x01, 0xED +'气' = 0x01, 0xEE +'宫' = 0x01, 0xEF +'紧' = 0x01, 0xF0 +'口' = 0x01, 0xF1 +'心' = 0x01, 0xF2 +'落' = 0x01, 0xF3 +'巨' = 0x01, 0xF4 +'融' = 0x01, 0xF5 +'化' = 0x01, 0xF6 +'斗' = 0x01, 0xF7 +'打' = 0x01, 0xF8 +'败' = 0x01, 0xF9 +'块' = 0x01, 0xFA +'拼' = 0x01, 0xFB +'图' = 0x01, 0xFC +'灼' = 0x01, 0xFD +'滚' = 0x01, 0xFE +'陷' = 0x01, 0xFF +'阱' = 0x02, 0x00 +'进' = 0x02, 0x01 +'电' = 0x02, 0x02 +'还' = 0x02, 0x03 +'给' = 0x02, 0x04 +'秃' = 0x02, 0x05 +'鹫' = 0x02, 0x06 +'字' = 0x02, 0x07 +'闪' = 0x02, 0x08 +'光' = 0x02, 0x09 +'法' = 0x02, 0x0A +'老' = 0x02, 0x0B +'珍' = 0x02, 0x0C +'于' = 0x02, 0x0D +'四' = 0x02, 0x0E +'颠' = 0x02, 0x0F +'为' = 0x02, 0x10 +'自' = 0x02, 0x11 +'由' = 0x02, 0x12 +'翔' = 0x02, 0x13 +'谜' = 0x02, 0x14 +'潜' = 0x02, 0x15 +'艇' = 0x02, 0x16 +'湍' = 0x02, 0x17 +'箱' = 0x02, 0x18 +'才' = 0x02, 0x19 +'杂' = 0x02, 0x1A +'技' = 0x02, 0x1B +'演' = 0x02, 0x1C +'员' = 0x02, 0x1D +'勇' = 0x02, 0x1E +'鳐' = 0x02, 0x1F +'鱼' = 0x02, 0x20 +'奖' = 0x02, 0x21 +'励' = 0x02, 0x22 +'子' = 0x02, 0x23 +'收' = 0x02, 0x24 +'寒' = 0x02, 0x25 +'冷' = 0x02, 0x26 +'雕' = 0x02, 0x27 +'冻' = 0x02, 0x28 +'池' = 0x02, 0x29 +'塘' = 0x02, 0x2A +'圆' = 0x02, 0x2B +'舞' = 0x02, 0x2C +'曲' = 0x02, 0x2D +'板' = 0x02, 0x2E +'与' = 0x02, 0x2F +'爱' = 0x02, 0x30 +'斯' = 0x02, 0x31 +'基' = 0x02, 0x32 +'摩' = 0x02, 0x33 +'屋' = 0x02, 0x34 +'箭' = 0x02, 0x35 +'和' = 0x02, 0x36 +'快' = 0x02, 0x37 +'速' = 0x02, 0x38 +'—' = 0x02, 0x39 +'抓' = 0x02, 0x3A +'时' = 0x02, 0x3B +'间' = 0x02, 0x3C +'镇' = 0x02, 0x3D +'攀' = 0x02, 0x3E +'登' = 0x02, 0x3F +'神' = 0x02, 0x40 +'猴' = 0x02, 0x41 +'呦' = 0x02, 0x42 +'奇' = 0x02, 0x43 +'笼' = 0x02, 0x44 +'蘑' = 0x02, 0x45 +'菇' = 0x02, 0x46 +'惊' = 0x02, 0x47 +'险' = 0x02, 0x48 +'帘' = 0x02, 0x49 +'孤' = 0x02, 0x4A +'独' = 0x02, 0x4B +'食' = 0x02, 0x4C +'花' = 0x02, 0x4D +'又' = 0x02, 0x4E +'五' = 0x02, 0x4F +'个' = 0x02, 0x50 +'蠕' = 0x02, 0x51 +'指' = 0x02, 0x52 +'针' = 0x02, 0x53 +'楼' = 0x02, 0x54 +'恰' = 0x02, 0x55 +'好' = 0x02, 0x56 +'踏' = 0x02, 0x57 +'在' = 0x02, 0x58 +'正' = 0x02, 0x59 +'点' = 0x02, 0x5A +'梭' = 0x02, 0x5B +'云' = 0x02, 0x5C +'集' = 0x02, 0x5D +'风' = 0x02, 0x5E +'荡' = 0x02, 0x5F +'狡' = 0x02, 0x60 +'猾' = 0x02, 0x61 +'三' = 0x02, 0x62 +'某' = 0x02, 0x63 +'哇' = 0x02, 0x64 +'你' = 0x02, 0x66 +'闯' = 0x02, 0x67 +'入' = 0x02, 0x68 +'战' = 0x02, 0x69 +'场' = 0x02, 0x6A +'啦' = 0x02, 0x6B +'可' = 0x02, 0x6D +'以' = 0x02, 0x6E +'这' = 0x02, 0x6F +'画' = 0x02, 0x70 +'偷' = 0x02, 0x71 +'走' = 0x02, 0x72 +'量' = 0x02, 0x73 +'先' = 0x02, 0x74 +'去' = 0x02, 0x75 +'问' = 0x02, 0x76 +'兵' = 0x02, 0x77 +'按' = 0x02, 0x79 +'开' = 0x02, 0x7A +'始' = 0x02, 0x7B +'对' = 0x02, 0x7C +'话' = 0x02, 0x7D +',' = 0x02, 0x7F +'从' = 0x02, 0x80 +'他' = 0x02, 0x81 +'伙' = 0x02, 0x82 +'伴' = 0x02, 0x83 +'那' = 0x02, 0x84 +'得' = 0x02, 0x85 +'如' = 0x02, 0x86 +'果' = 0x02, 0x87 +'需' = 0x02, 0x88 +'察' = 0x02, 0x89 +'路' = 0x02, 0x8A +'面' = 0x02, 0x8B +'它' = 0x02, 0x8C +'或' = 0x02, 0x8D +'翻' = 0x02, 0x8E +'页' = 0x02, 0x8F +'站' = 0x02, 0x90 +'其' = 0x02, 0x91 +'前' = 0x02, 0x92 +'们' = 0x02, 0x93 +'当' = 0x02, 0x94 +'瞎' = 0x02, 0x95 +'逛' = 0x02, 0x96 +'随' = 0x02, 0x97 +'能' = 0x02, 0x98 +'被' = 0x02, 0x99 +'珠' = 0x02, 0x9A +'伤' = 0x02, 0x9B +'些' = 0x02, 0x9C +'敌' = 0x02, 0x9D +'非' = 0x02, 0x9E +'常' = 0x02, 0x9F +'总' = 0x02, 0xA0 +'想' = 0x02, 0xA1 +'方' = 0x02, 0xA2 +'攻' = 0x02, 0xA3 +'击' = 0x02, 0xA4 +'片' = 0x02, 0xA5 +'草' = 0x02, 0xA6 +'原' = 0x02, 0xA7 +'就' = 0x02, 0xA8 +'变' = 0x02, 0xA9 +'纷' = 0x02, 0xAA +'座' = 0x02, 0xAB +'桥' = 0x02, 0xAC +'沿' = 0x02, 0xAD +'着' = 0x02, 0xAE +'左' = 0x02, 0xAF +'夺' = 0x02, 0xB0 +'一' = 0x02, 0xB1 +'啊' = 0x02, 0xB2 +'嘿' = 0x02, 0xB3 +'听' = 0x02, 0xB4 +'很' = 0x02, 0xB5 +'危' = 0x02, 0xB6 +'噢' = 0x02, 0xB7 +'忠' = 0x02, 0xB8 +'告' = 0x02, 0xB9 +'两' = 0x02, 0xBA +'后' = 0x02, 0xBB +'坠' = 0x02, 0xBC +'会' = 0x02, 0xBD +'强' = 0x02, 0xBE +'千' = 0x02, 0xBF +'万' = 0x02, 0xC0 +'让' = 0x02, 0xC1 +'边' = 0x02, 0xC2 +'都' = 0x02, 0xC3 +'忙' = 0x02, 0xC4 +'谢' = 0x02, 0xC5 +'现' = 0x02, 0xC6 +'只' = 0x02, 0xC7 +'哑' = 0x02, 0xC8 +'哈' = 0x02, 0xC9 +'但' = 0x02, 0xCA +'真' = 0x02, 0xCB +'刚' = 0x02, 0xCC +'余' = 0x02, 0xCD +'拿' = 0x02, 0xCE +'更' = 0x02, 0xCF +'多' = 0x02, 0xD0 +'往' = 0x02, 0xD1 +'新' = 0x02, 0xD2 +'等' = 0x02, 0xD3 +'别' = 0x02, 0xD4 +'忘' = 0x02, 0xD5 +'准' = 0x02, 0xD6 +'备' = 0x02, 0xD7 +'炮' = 0x02, 0xD8 +'所' = 0x02, 0xD9 +'介' = 0x02, 0xDA +'意' = 0x02, 0xDB +'顺' = 0x02, 0xDC +'厉' = 0x02, 0xDD +'害' = 0x02, 0xDE +'而' = 0x02, 0xDF +'且' = 0x02, 0xE0 +'迅' = 0x02, 0xE1 +'呢' = 0x02, 0xE2 +'追' = 0x02, 0xE3 +'名' = 0x02, 0xE4 +'鼎' = 0x02, 0xE5 +'赢' = 0x02, 0xE7 +'试' = 0x02, 0xE8 +'赌' = 0x02, 0xE9 +'次' = 0x02, 0xEA +'跑' = 0x02, 0xEB +'终' = 0x02, 0xEC +'怎' = 0x02, 0xED +'么' = 0x02, 0xEE +'样' = 0x02, 0xEF +'说' = 0x02, 0xF0 +'“' = 0x02, 0xF1 +'”' = 0x02, 0xF2 +'预' = 0x02, 0xF3 +'傻' = 0x02, 0xF4 +'瓜' = 0x02, 0xF5 +'全' = 0x02, 0xF6 +'程' = 0x02, 0xF7 +'候' = 0x02, 0xF8 +'再' = 0x02, 0xF9 +'呼' = 0x02, 0xFA +'愿' = 0x02, 0xFB +'服' = 0x02, 0xFC +'输' = 0x02, 0xFD +'满' = 0x02, 0xFE +'嘴' = 0x02, 0xFF +'牙' = 0x03, 0x00 +'带' = 0x03, 0x01 +'锁' = 0x03, 0x02 +'链' = 0x03, 0x03 +'靠' = 0x03, 0x04 +'近' = 0x03, 0x05 +'仔' = 0x03, 0x06 +'细' = 0x03, 0x07 +'吓' = 0x03, 0x08 +'坏' = 0x03, 0x09 +'桩' = 0x03, 0x0A +'八' = 0x03, 0x0B +'颗' = 0x03, 0x0C +'久' = 0x03, 0x0D +'见' = 0x03, 0x0E +'加' = 0x03, 0x0F +'甘' = 0x03, 0x10 +'峡' = 0x03, 0x11 +'谷' = 0x03, 0x12 +'踩' = 0x03, 0x13 +'戴' = 0x03, 0x14 +'砖' = 0x03, 0x15 +'游' = 0x03, 0x16 +'戏' = 0x03, 0x17 +'无' = 0x03, 0x18 +'绿' = 0x03, 0x19 +'透' = 0x03, 0x1A +'明' = 0x03, 0x1B +'将' = 0x03, 0x1C +'经' = 0x03, 0x1D +'错' = 0x03, 0x1E +'拳' = 0x03, 0x1F +'跃' = 0x03, 0x20 +'脚' = 0x03, 0x21 +'把' = 0x03, 0x22 +'什' = 0x03, 0x23 +'东' = 0x03, 0x24 +'西' = 0x03, 0x25 +'举' = 0x03, 0x26 +'起' = 0x03, 0x27 +'也' = 0x03, 0x28 +'扔' = 0x03, 0x29 +'龟' = 0x03, 0x2A +'壳' = 0x03, 0x2B +'乘' = 0x03, 0x2C +'任' = 0x03, 0x2D +'压' = 0x03, 0x2E +'碎' = 0x03, 0x2F +'统' = 0x03, 0x30 +'治' = 0x03, 0x31 +'者' = 0x03, 0x32 +'敢' = 0x03, 0x33 +'爬' = 0x03, 0x34 +'凭' = 0x03, 0x35 +'虽' = 0x03, 0x36 +'然' = 0x03, 0x37 +'侥' = 0x03, 0x38 +'幸' = 0x03, 0x39 +'躲' = 0x03, 0x3A +'卫' = 0x03, 0x3B +'永' = 0x03, 0x3C +'远' = 0x03, 0x3D +'逃' = 0x03, 0x3E +'手' = 0x03, 0x3F +'掌' = 0x03, 0x40 +'决' = 0x03, 0x41 +'须' = 0x03, 0x42 +'证' = 0x03, 0x43 +'己' = 0x03, 0x44 +'抱' = 0x03, 0x45 +'摔' = 0x03, 0x46 +'皇' = 0x03, 0x47 +'办' = 0x03, 0x48 +'困' = 0x03, 0x49 +'阿' = 0x03, 0x4A +'睡' = 0x03, 0x4B +'希' = 0x03, 0x4C +'望' = 0x03, 0x4D +'扰' = 0x03, 0x4E +'请' = 0x03, 0x4F +'轻' = 0x03, 0x50 +'廊' = 0x03, 0x51 +'放' = 0x03, 0x52 +'步' = 0x03, 0x53 +'亲' = 0x03, 0x54 +':' = 0x03, 0x55 +'烤' = 0x03, 0x56 +'蛋' = 0x03, 0x57 +'糕' = 0x03, 0x58 +'桃' = 0x03, 0x59 +'欢' = 0x03, 0x5A +'迎' = 0x03, 0x5B +'钥' = 0x03, 0x5C +'匙' = 0x03, 0x5D +'扇' = 0x03, 0x5E +'许' = 0x03, 0x5F +'幅' = 0x03, 0x60 +'缺' = 0x03, 0x61 +'少' = 0x03, 0x62 +'尽' = 0x03, 0x63 +'嗨' = 0x03, 0x64 +'朱' = 0x03, 0x65 +'盖' = 0x03, 0x66 +'兄' = 0x03, 0x67 +'弟' = 0x03, 0x68 +'插' = 0x03, 0x69 +'播' = 0x03, 0x6A +'报' = 0x03, 0x6B +'展' = 0x03, 0x6C +'学' = 0x03, 0x6D +'悄' = 0x03, 0x6E +'巧' = 0x03, 0x6F +'缓' = 0x03, 0x70 +'慢' = 0x03, 0x71 +'重' = 0x03, 0x72 +'摄' = 0x03, 0x73 +'像' = 0x03, 0x74 +'同' = 0x03, 0x75 +'度' = 0x03, 0x76 +'观' = 0x03, 0x77 +'影' = 0x03, 0x78 +'嘟' = 0x03, 0x79 +'警' = 0x03, 0x7A +'蓄' = 0x03, 0x7B +'买' = 0x03, 0x7C +'双' = 0x03, 0x7D +'号' = 0x03, 0x7E +'鞋' = 0x03, 0x7F +'应' = 0x03, 0x80 +'交' = 0x03, 0x81 +'胜' = 0x03, 0x82 +'利' = 0x03, 0x83 +'恭' = 0x03, 0x84 +'喜' = 0x03, 0x85 +'级' = 0x03, 0x86 +'条' = 0x03, 0x87 +'直' = 0x03, 0x88 +'线' = 0x03, 0x89 +'连' = 0x03, 0x8A +'右' = 0x03, 0x8B +'环' = 0x03, 0x8C +'传' = 0x03, 0x8D +'送' = 0x03, 0x8E +'管' = 0x03, 0x8F +'柄' = 0x03, 0x90 +'简' = 0x03, 0x91 +'读' = 0x03, 0x92 +'牌' = 0x03, 0x93 +'杆' = 0x03, 0x94 +'控' = 0x03, 0x95 +'午' = 0x03, 0x96 +'外' = 0x03, 0x97 +'您' = 0x03, 0x98 +'达' = 0x03, 0x99 +'实' = 0x03, 0x9A +'况' = 0x03, 0x9B +'丢' = 0x03, 0x9C +'作' = 0x03, 0x9D +'专' = 0x03, 0x9E +'佳' = 0x03, 0x9F +'拍' = 0x03, 0xA0 +'停' = 0x03, 0xA1 +'周' = 0x03, 0xA2 +'围' = 0x03, 0xA3 +'情' = 0x03, 0xA4 +'切' = 0x03, 0xA5 +'换' = 0x03, 0xA6 +'习' = 0x03, 0xA7 +'操' = 0x03, 0xA8 +'导' = 0x03, 0xA9 +'共' = 0x03, 0xAA +'般' = 0x03, 0xAB +'推' = 0x03, 0xAC +'荐' = 0x03, 0xAD +'改' = 0x03, 0xAE +'跟' = 0x03, 0xAF +'漏' = 0x03, 0xB0 +'哦' = 0x03, 0xB1 +'暂' = 0x03, 0xB2 +'模' = 0x03, 0xB3 +'式' = 0x03, 0xB4 +'运' = 0x03, 0xB5 +'旨' = 0x03, 0xB6 +'此' = 0x03, 0xB7 +'禁' = 0x03, 0xB8 +'止' = 0x03, 0xB9 +'参' = 0x03, 0xBA +'绝' = 0x03, 0xBB +'弃' = 0x03, 0xBC +'芒' = 0x03, 0xBD +'赏' = 0x03, 0xBE +'赐' = 0x03, 0xBF +'物' = 0x03, 0xC0 +'土' = 0x03, 0xC1 +'露' = 0x03, 0xC2 +'位' = 0x03, 0xC3 +'置' = 0x03, 0xC4 +'提' = 0x03, 0xC5 +'示' = 0x03, 0xC6 +'每' = 0x03, 0xC7 +'注' = 0x03, 0xC8 +'川' = 0x03, 0xC9 +'裂' = 0x03, 0xCA +'缝' = 0x03, 0xCB +'结' = 0x03, 0xCC +'祝' = 0x03, 0xCD +'峭' = 0x03, 0xCE +'缘' = 0x03, 0xCF +'悬' = 0x03, 0xD0 +'挂' = 0x03, 0xD1 +';' = 0x03, 0xD2 +'崖' = 0x03, 0xD3 +'拉' = 0x03, 0xD4 +'则' = 0x03, 0xD5 +'鸟' = 0x03, 0xD6 +'谁' = 0x03, 0xD7 +'吵' = 0x03, 0xD8 +'醒' = 0x03, 0xD9 +'白' = 0x03, 0xDA +'觉' = 0x03, 0xDB +'喂' = 0x03, 0xDC +'既' = 0x03, 0xDD +'短' = 0x03, 0xDE +'途' = 0x03, 0xDF +'松' = 0x03, 0xE0 +'牢' = 0x03, 0xE1 +'陆' = 0x03, 0xE2 +'握' = 0x03, 0xE3 +'种' = 0x03, 0xE4 +'首' = 0x03, 0xE5 +'二' = 0x03, 0xE7 +'蹲' = 0x03, 0xE8 +'做' = 0x03, 0xE9 +'碰' = 0x03, 0xEA +'练' = 0x03, 0xEB +'另' = 0x03, 0xEC +'获' = 0x03, 0xED +'熟' = 0x03, 0xEE +'生' = 0x03, 0xEF +'斜' = 0x03, 0xF0 +'屁' = 0x03, 0xF1 +'股' = 0x03, 0xF2 +'担' = 0x03, 0xF3 +'容' = 0x03, 0xF4 +'易' = 0x03, 0xF5 +'树' = 0x03, 0xF6 +'旗' = 0x03, 0xF7 +'拔' = 0x03, 0xF8 +'绕' = 0x03, 0xF9 +'倒' = 0x03, 0xFA +'姿' = 0x03, 0xFB +'势' = 0x03, 0xFC +'漂' = 0x03, 0xFD +'亮' = 0x03, 0xFE +'侧' = 0x03, 0xFF +'弯' = 0x04, 0x00 +'论' = 0x04, 0x01 +'滞' = 0x04, 0x02 +'触' = 0x04, 0x03 +'减' = 0x04, 0x04 +'知' = 0x04, 0x05 +'挺' = 0x04, 0x06 +'冠' = 0x04, 0x07 +'军' = 0x04, 0x08 +'纪' = 0x04, 0x09 +'录' = 0x04, 0x0A +'太' = 0x04, 0x0B +'难' = 0x04, 0x0C +'信' = 0x04, 0x0D +'棒' = 0x04, 0x0E +'孩' = 0x04, 0x0F +'她' = 0x04, 0x10 +'究' = 0x04, 0x11 +'竟' = 0x04, 0x12 +'哪' = 0x04, 0x13 +'感' = 0x04, 0x14 +'受' = 0x04, 0x15 +'激' = 0x04, 0x16 +'根' = 0x04, 0x17 +'本' = 0x04, 0x18 +'父' = 0x04, 0x19 +'母' = 0x04, 0x1A +'肯' = 0x04, 0x1B +'死' = 0x04, 0x1C +'氧' = 0x04, 0x1D +'泡' = 0x04, 0x1E +'吸' = 0x04, 0x1F +'泳' = 0x04, 0x20 +'稳' = 0x04, 0x21 +'节' = 0x04, 0x22 +'奏' = 0x04, 0x23 +'笑' = 0x04, 0x24 +'怕' = 0x04, 0x25 +'烧' = 0x04, 0x26 +'甚' = 0x04, 0x27 +'至' = 0x04, 0x28 +'唯' = 0x04, 0x29 +'惑' = 0x04, 0x2A +'因' = 0x04, 0x2B +'骗' = 0x04, 0x2C +'升' = 0x04, 0x2D +'课' = 0x04, 0x2E +'蛙' = 0x04, 0x2F +'频' = 0x04, 0x30 +'率' = 0x04, 0x31 +'合' = 0x04, 0x32 +'适' = 0x04, 0x33 +'表' = 0x04, 0x34 +'值' = 0x04, 0x35 +'低' = 0x04, 0x36 +'喘' = 0x04, 0x37 +'事' = 0x04, 0x38 +'够' = 0x04, 0x39 +'残' = 0x04, 0x3A +'忍' = 0x04, 0x3B +'喷' = 0x04, 0x3C +'焰' = 0x04, 0x3D +'成' = 0x04, 0x3E +'焦' = 0x04, 0x3F +'炭' = 0x04, 0x40 +'尾' = 0x04, 0x41 +'巴' = 0x04, 0x42 +'瞄' = 0x04, 0x43 +'命' = 0x04, 0x44 +'象' = 0x04, 0x45 +'懦' = 0x04, 0x46 +'夫' = 0x04, 0x47 +'掉' = 0x04, 0x48 +'烫' = 0x04, 0x49 +'乱' = 0x04, 0x4A +'仍' = 0x04, 0x4B +'持' = 0x04, 0x4C +'静' = 0x04, 0x4D +'撞' = 0x04, 0x4E +'反' = 0x04, 0x4F +'较' = 0x04, 0x54 +'显' = 0x04, 0x55 +'烟' = 0x04, 0x56 +'眩' = 0x04, 0x57 +'晕' = 0x04, 0x58 +'鲜' = 0x04, 0x59 +'圈' = 0x04, 0x5A +'避' = 0x04, 0x5B +'免' = 0x04, 0x5C +'吹' = 0x04, 0x5D +'朋' = 0x04, 0x5E +'友' = 0x04, 0x5F +'照' = 0x04, 0x60 +'序' = 0x04, 0x61 +'建' = 0x04, 0x62 +'筑' = 0x04, 0x63 +'背' = 0x04, 0x64 +'干' = 0x04, 0x65 +'解' = 0x04, 0x66 +'救' = 0x04, 0x67 +'封' = 0x04, 0x68 +'监' = 0x04, 0x69 +'恢' = 0x04, 0x6A +'诉' = 0x04, 0x6B +'超' = 0x04, 0x6C +'猜' = 0x04, 0x6D +'令' = 0x04, 0x6E +'相' = 0x04, 0x6F +'黄' = 0x04, 0x70 +'消' = 0x04, 0x71 +'惜' = 0x04, 0x72 +'嘻' = 0x04, 0x73 +'幽' = 0x04, 0x74 +'默' = 0x04, 0x75 +'咿' = 0x04, 0x76 +'答' = 0x04, 0x77 +'案' = 0x04, 0x78 +'市' = 0x04, 0x79 +'深' = 0x04, 0x7A +'访' = 0x04, 0x7B +'队' = 0x04, 0x7C +'早' = 0x04, 0x7D +'瞧' = 0x04, 0x7E +'迟' = 0x04, 0x7F +'晚' = 0x04, 0x80 +'赶' = 0x04, 0x81 +'及' = 0x04, 0x82 +'礼' = 0x04, 0x83 +'约' = 0x04, 0x84 +'墓' = 0x04, 0x85 +'章' = 0x04, 0x86 +'缭' = 0x04, 0x87 +'圣' = 0x04, 0x88 +'诞' = 0x04, 0x89 +'钻' = 0x04, 0x8A +'囱' = 0x04, 0x8B +'工' = 0x04, 0x8C +'充' = 0x04, 0x8D +'啧' = 0x04, 0x8E +'浓' = 0x04, 0x8F +'雾' = 0x04, 0x90 +'湖' = 0x04, 0x91 +'烦' = 0x04, 0x92 +'儿' = 0x04, 0x93 +'吐' = 0x04, 0x94 +'坡' = 0x04, 0x95 +'内' = 0x04, 0x96 +'讲' = 0x04, 0x97 +'窄' = 0x04, 0x98 +'胆' = 0x04, 0x99 +'呵' = 0x04, 0x9A +'哼' = 0x04, 0x9B +'安' = 0x04, 0x9C +'恙' = 0x04, 0x9D +'拦' = 0x04, 0x9E +'欠' = 0x04, 0x9F +'咳' = 0x04, 0xA0 +'苦' = 0x04, 0xA1 +'羞' = 0x04, 0xA2 +'端' = 0x04, 0xA3 +'灯' = 0x04, 0xA4 +'烁' = 0x04, 0xA5 +'敏' = 0x04, 0xA6 +'捷' = 0x04, 0xA7 +'便' = 0x04, 0xA8 +'活' = 0x04, 0xA9 +'离' = 0x04, 0xAA +'轰' = 0x04, 0xAB +'恶' = 0x04, 0xAC +'剧' = 0x04, 0xAD +'丧' = 0x04, 0xAE +'历' = 0x04, 0xAF +'拖' = 0x04, 0xB0 +'脸' = 0x04, 0xB1 +'肩' = 0x04, 0xB2 +'架' = 0x04, 0xB3 +'壮' = 0x04, 0xB4 +'美' = 0x04, 0xB5 +'温' = 0x04, 0xB6 +'暖' = 0x04, 0xB7 +'补' = 0x04, 0xB8 +'检' = 0x04, 0xB9 +'摸' = 0x04, 0xBA +'殊' = 0x04, 0xBB +'愤' = 0x04, 0xBC +'造' = 0x04, 0xBD +'铺' = 0x04, 0xBE +'却' = 0x04, 0xBF +'散' = 0x04, 0xC0 +'臭' = 0x04, 0xC1 +'垫' = 0x04, 0xC2 +'砾' = 0x04, 0xC3 +'嗯' = 0x04, 0xC4 +'投' = 0x04, 0xC5 +'教' = 0x04, 0xC6 +'训' = 0x04, 0xC7 +'遵' = 0x04, 0xC8 +'言' = 0x04, 0xC9 +'菜' = 0x04, 0xCA +'印' = 0x04, 0xCB +'侵' = 0x04, 0xCC +'卵' = 0x04, 0xCD +'今' = 0x04, 0xCE +'粗' = 0x04, 0xCF +'乎' = 0x04, 0xD0 +'料' = 0x04, 0xD1 +'拥' = 0x04, 0xD2 +'付' = 0x04, 0xD3 +'代' = 0x04, 0xD4 +'价' = 0x04, 0xD5 +'状' = 0x04, 0xD6 +'态' = 0x04, 0xD7 +'层' = 0x04, 0xD8 +'束' = 0x04, 0xD9 +'局' = 0x04, 0xDA +'阅' = 0x04, 0xDB +'朝' = 0x04, 0xDC +'驶' = 0x04, 0xDD +'闭' = 0x04, 0xDE +'泊' = 0x04, 0xDF +'废' = 0x04, 0xE0 +'矿' = 0x04, 0xE1 +'龙' = 0x04, 0xE2 +'敲' = 0x04, 0xE3 +'餐' = 0x04, 0xE4 +'尊' = 0x04, 0xE5 +'敬' = 0x04, 0xE6 +'违' = 0x04, 0xE7 +'规' = 0x04, 0xE8 +'障' = 0x04, 0xE9 +'碍' = 0x04, 0xEA +'旦' = 0x04, 0xEB +'漫' = 0x04, 0xEC +'驾' = 0x04, 0xED +'遥' = 0x04, 0xEE +'耍' = 0x04, 0xEF +'赖' = 0x04, 0xF0 +'抄' = 0x04, 0xF1 +'懂' = 0x04, 0xF2 +'理' = 0x04, 0xF3 +'取' = 0x04, 0xF4 +'资' = 0x04, 0xF5 +'格' = 0x04, 0xF6 +'竞' = 0x04, 0xF7 +'争' = 0x04, 0xF8 +'兴' = 0x04, 0xF9 +'创' = 0x04, 0xFA +'借' = 0x04, 0xFB +'第' = 0x04, 0xFC +'称' = 0x04, 0xFD +'品' = 0x04, 0xFE +'尝' = 0x04, 0xFF +'六' = 0x05, 0x00 +'几' = 0x05, 0x01 +'部' = 0x05, 0x02 +'油' = 0x05, 0x03 +'启' = 0x05, 0x04 +'区' = 0x05, 0x05 +'域' = 0x05, 0x06 +'断' = 0x05, 0x07 +'乐' = 0x05, 0x08 +'缠' = 0x05, 0x09 +'哥' = 0x05, 0x0A +'揭' = 0x05, 0x0B +'亏' = 0x05, 0x0C +'挑' = 0x05, 0x0D +'形' = 0x05, 0x0E +'-' = 0x05, 0x0F +'淹' = 0x05, 0x10 +'糟' = 0x05, 0x11 +'蹋' = 0x05, 0x12 +'呜' = 0x05, 0x13 +'晶' = 0x05, 0x14 +'湿' = 0x05, 0x15 +'叔' = 0x05, 0x16 +'蚂' = 0x05, 0x17 +'蚁' = 0x05, 0x18 +'蚤' = 0x05, 0x19 +'惹' = 0x05, 0x1A +'吞' = 0x05, 0x1B +'闷' = 0x05, 0x1C +'渊' = 0x05, 0x1D +'冒' = 0x05, 0x1E +'息' = 0x05, 0x1F +'十' = 0x05, 0x20 +'组' = 0x05, 0x21 +'群' = 0x05, 0x22 +'思' = 0x05, 0x23 +'议' = 0x05, 0x24 +'归' = 0x05, 0x25 +'恨' = 0x05, 0x26 +'期' = 0x05, 0x27 +'待' = 0x05, 0x28 +'精' = 0x05, 0x29 +'昏' = 0x05, 0x2A +'承' = 0x05, 0x2B +'责' = 0x05, 0x2C +'私' = 0x05, 0x2D +'遇' = 0x05, 0x2E +'灾' = 0x05, 0x2F diff --git a/charmap_menu.txt b/charmap_menu.txt index 7642e737..71c1a684 100644 --- a/charmap_menu.txt +++ b/charmap_menu.txt @@ -1,5 +1,5 @@ -# Menu HUD chars, only used in JP -# Char values used by text_menu_strings.h.in +// Menu HUD chars, only used in JP +// Char values used by text_menu_strings.h.in 'フ' = 0x00 'ァ' = 0x01 'イ' = 0x02 diff --git a/data/behavior_data.c b/data/behavior_data.c index e9234e53..04f95a1c 100644 --- a/data/behavior_data.c +++ b/data/behavior_data.c @@ -114,7 +114,7 @@ // Often used to end behavior scripts that do not contain an infinite loop. #define BREAK() \ BC_B(0x0A) - + // Exits the behavior script, unused. #define BREAK_UNUSED() \ BC_B(0x0B) @@ -175,15 +175,15 @@ #define ADD_INT_RAND_RSHIFT(field, min, rshift) \ BC_BBH(0x17, field, min), \ BC_H(rshift) - + // No operation. Unused. #define CMD_NOP_1(field) \ BC_BB(0x18, field) - + // No operation. Unused. #define CMD_NOP_2(field) \ BC_BB(0x19, field) - + // No operation. Unused. #define CMD_NOP_3(field) \ BC_BB(0x1A, field) @@ -418,7 +418,7 @@ const BehaviorScript bhvPoleGrabbing[] = { END_LOOP(), }; -const BehaviorScript bhvThiHugeIslandTop[] = { +const BehaviorScript bhvTHIHugeIslandTop[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(thi_seg7_collision_top_trap), @@ -427,7 +427,7 @@ const BehaviorScript bhvThiHugeIslandTop[] = { END_LOOP(), }; -const BehaviorScript bhvThiTinyIslandTop[] = { +const BehaviorScript bhvTHITinyIslandTop[] = { BEGIN(OBJ_LIST_DEFAULT), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BEGIN_LOOP(), @@ -724,13 +724,13 @@ const BehaviorScript bhvBulletBillCannon[] = { END_LOOP(), }; -const BehaviorScript bhvWfBreakableWallRight[] = { +const BehaviorScript bhvWFBreakableWallRight[] = { BEGIN(OBJ_LIST_SURFACE), LOAD_COLLISION_DATA(wf_seg7_collision_breakable_wall), - GOTO(bhvWfBreakableWallLeft + 1 + 2), + GOTO(bhvWFBreakableWallLeft + 1 + 2), }; -const BehaviorScript bhvWfBreakableWallLeft[] = { +const BehaviorScript bhvWFBreakableWallLeft[] = { BEGIN(OBJ_LIST_SURFACE), LOAD_COLLISION_DATA(wf_seg7_collision_breakable_wall_2), // WF breakable walls - common: @@ -773,7 +773,7 @@ const BehaviorScript bhvRotatingCounterClockwise[] = { BREAK(), }; -const BehaviorScript bhvWfRotatingWoodenPlatform[] = { +const BehaviorScript bhvWFRotatingWoodenPlatform[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(wf_seg7_collision_clocklike_rotation), @@ -853,7 +853,7 @@ const BehaviorScript bhvWhitePuffExplosion[] = { const BehaviorScript bhvSpawnedStar[] = { BEGIN(OBJ_LIST_LEVEL), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), - SET_INT(oBehParams2ndByte, 1), + SET_INT(oBhvParams2ndByte, 1), GOTO(bhvSpawnedStarNoLevelExit + 1 + 1), }; @@ -868,20 +868,20 @@ const BehaviorScript bhvSpawnedStarNoLevelExit[] = { END_LOOP(), }; -const BehaviorScript bhvMrIBlueCoin[] = { +const BehaviorScript bhvSpawnedBlueCoin[] = { BEGIN(OBJ_LIST_LEVEL), SET_INT(oInteractType, INTERACT_COIN), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), SET_INT(oIntangibleTimer, 0), - SET_FLOAT(oCoinUnk110, 20), + SET_FLOAT(oCoinBaseVelY, 20), SET_INT(oAnimState, -1), SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), - CALL_NATIVE(bhv_coin_init), + CALL_NATIVE(bhv_spawned_coin_init), SET_INT(oDamageOrCoinValue, 5), SET_HITBOX(/*Radius*/ 120, /*Height*/ 64), BEGIN_LOOP(), - CALL_NATIVE(bhv_coin_loop), + CALL_NATIVE(bhv_spawned_coin_loop), ADD_INT(oAnimState, 1), END_LOOP(), }; @@ -920,7 +920,7 @@ const BehaviorScript bhvCoinFormation[] = { const BehaviorScript bhvOneCoin[] = { BEGIN(OBJ_LIST_LEVEL), - SET_INT(oBehParams2ndByte, 1), + SET_INT(oBhvParams2ndByte, 1), GOTO(bhvYellowCoin + 1), }; @@ -967,10 +967,10 @@ const BehaviorScript bhvSingleCoinGetsSpawned[] = { BEGIN(OBJ_LIST_LEVEL), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), - CALL_NATIVE(bhv_coin_init), + CALL_NATIVE(bhv_spawned_coin_init), SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), BEGIN_LOOP(), - CALL_NATIVE(bhv_coin_loop), + CALL_NATIVE(bhv_spawned_coin_loop), ADD_INT(oAnimState, 1), END_LOOP(), }; @@ -1096,7 +1096,7 @@ const BehaviorScript bhvGrindel[] = { END_LOOP(), }; -const BehaviorScript bhvThwomp2[] = { +const BehaviorScript bhvThwomp[] = { BEGIN(OBJ_LIST_SURFACE), LOAD_COLLISION_DATA(thwomp_seg5_collision_0500B92C), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), @@ -1111,7 +1111,7 @@ const BehaviorScript bhvThwomp2[] = { END_LOOP(), }; -const BehaviorScript bhvThwomp[] = { +const BehaviorScript bhvThwomp2[] = { BEGIN(OBJ_LIST_SURFACE), LOAD_COLLISION_DATA(thwomp_seg5_collision_0500B7D0), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), @@ -1136,7 +1136,7 @@ const BehaviorScript bhvTumblingBridgePlatform[] = { END_LOOP(), }; -const BehaviorScript bhvWfTumblingBridge[] = { +const BehaviorScript bhvTumblingBridge[] = { BEGIN(OBJ_LIST_SPAWNER), OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), @@ -1145,21 +1145,21 @@ const BehaviorScript bhvWfTumblingBridge[] = { END_LOOP(), }; -const BehaviorScript bhvBbhTumblingBridge[] = { +const BehaviorScript bhvBBHTumblingBridge[] = { BEGIN(OBJ_LIST_SPAWNER), OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), - SET_INT(oBehParams2ndByte, 1), + SET_INT(oBhvParams2ndByte, TUMBLING_BRIDGE_BP_BBH), BEGIN_LOOP(), CALL_NATIVE(bhv_tumbling_bridge_loop), END_LOOP(), }; -const BehaviorScript bhvLllTumblingBridge[] = { +const BehaviorScript bhvLLLTumblingBridge[] = { BEGIN(OBJ_LIST_SPAWNER), OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), - SET_INT(oBehParams2ndByte, 2), + SET_INT(oBhvParams2ndByte, TUMBLING_BRIDGE_BP_LLL), BEGIN_LOOP(), CALL_NATIVE(bhv_tumbling_bridge_loop), END_LOOP(), @@ -1193,7 +1193,7 @@ const BehaviorScript bhvAnotherElavator[] = { END_LOOP(), }; -const BehaviorScript bhvRrElevatorPlatform[] = { +const BehaviorScript bhvRRElevatorPlatform[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(rr_seg7_collision_elevator_platform), @@ -1205,7 +1205,7 @@ const BehaviorScript bhvRrElevatorPlatform[] = { END_LOOP(), }; -const BehaviorScript bhvHmcElevatorPlatform[] = { +const BehaviorScript bhvHMCElevatorPlatform[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(hmc_seg7_collision_elevator), @@ -1375,7 +1375,7 @@ const BehaviorScript bhvUkikiCage[] = { END_LOOP(), }; -const BehaviorScript bhvBitfsSinkingPlatforms[] = { +const BehaviorScript bhvBitFSSinkingPlatforms[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(bitfs_seg7_collision_sinking_platform), @@ -1386,19 +1386,19 @@ const BehaviorScript bhvBitfsSinkingPlatforms[] = { END_LOOP(), }; -const BehaviorScript bhvBitfsSinkingCagePlatform[] = { +const BehaviorScript bhvBitFSSinkingCagePlatform[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(bitfs_seg7_collision_sinking_cage_platform), SET_HOME(), - SPAWN_CHILD(/*Model*/ MODEL_BITFS_BLUE_POLE, /*Behavior*/ bhvDddMovingPole), + SPAWN_CHILD(/*Model*/ MODEL_BITFS_BLUE_POLE, /*Behavior*/ bhvDDDMovingPole), BEGIN_LOOP(), CALL_NATIVE(bhv_bitfs_sinking_cage_platform_loop), CALL_NATIVE(load_object_collision_model), END_LOOP(), }; -const BehaviorScript bhvDddMovingPole[] = { +const BehaviorScript bhvDDDMovingPole[] = { BEGIN(OBJ_LIST_POLELIKE), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_INT(oInteractType, INTERACT_POLE), @@ -1410,7 +1410,7 @@ const BehaviorScript bhvDddMovingPole[] = { END_LOOP(), }; -const BehaviorScript bhvBitfsTiltingInvertedPyramid[] = { +const BehaviorScript bhvBitFSTiltingInvertedPyramid[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(bitfs_seg7_collision_inverted_pyramid), @@ -1457,7 +1457,7 @@ const BehaviorScript bhvBetaMovingFlames[] = { END_LOOP(), }; -const BehaviorScript bhvRrRotatingBridgePlatform[] = { +const BehaviorScript bhvRRRotatingBridgePlatform[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(rr_seg7_collision_rotating_platform_with_fire), @@ -1607,7 +1607,7 @@ const BehaviorScript bhvTowerPlatformGroup[] = { END_LOOP(), }; -const BehaviorScript bhvWfSlidingTowerPlatform[] = { +const BehaviorScript bhvWFSlidingTowerPlatform[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(wf_seg7_collision_platform), @@ -1617,7 +1617,7 @@ const BehaviorScript bhvWfSlidingTowerPlatform[] = { END_LOOP(), }; -const BehaviorScript bhvWfElevatorTowerPlatform[] = { +const BehaviorScript bhvWFElevatorTowerPlatform[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(wf_seg7_collision_platform), @@ -1627,7 +1627,7 @@ const BehaviorScript bhvWfElevatorTowerPlatform[] = { END_LOOP(), }; -const BehaviorScript bhvWfSolidTowerPlatform[] = { +const BehaviorScript bhvWFSolidTowerPlatform[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(wf_seg7_collision_platform), @@ -1704,7 +1704,7 @@ const BehaviorScript bhvPiranhaPlantWakingBubbles[] = { const BehaviorScript bhvFloorSwitchAnimatesObject[] = { BEGIN(OBJ_LIST_SURFACE), - SET_INT(oBehParams2ndByte, 1), + SET_INT(oBhvParams2ndByte, 1), GOTO(bhvFloorSwitchHardcodedModel + 1), }; @@ -1726,7 +1726,7 @@ const BehaviorScript bhvFloorSwitchHardcodedModel[] = { const BehaviorScript bhvFloorSwitchHiddenObjects[] = { BEGIN(OBJ_LIST_SURFACE), - SET_INT(oBehParams2ndByte, 2), + SET_INT(oBhvParams2ndByte, 2), GOTO(bhvFloorSwitchHardcodedModel + 1), }; @@ -1791,7 +1791,7 @@ const BehaviorScript bhvHeaveHoThrowMario[] = { END_LOOP(), }; -const BehaviorScript bhvCcmTouchedStarSpawn[] = { +const BehaviorScript bhvCCMTouchedStarSpawn[] = { BEGIN(OBJ_LIST_LEVEL), OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HITBOX(/*Radius*/ 500, /*Height*/ 500), @@ -2185,7 +2185,7 @@ const BehaviorScript bhvWaterLevelPillar[] = { END_LOOP(), }; -const BehaviorScript bhvDddWarp[] = { +const BehaviorScript bhvDDDWarp[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_FLOAT(oCollisionDistance, 30000), @@ -2246,7 +2246,7 @@ const BehaviorScript bhvStub1D0C[] = { DEACTIVATE(), }; -const BehaviorScript bhvLllRotatingHexagonalPlatform[] = { +const BehaviorScript bhvLLLRotatingHexagonalPlatform[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(lll_seg7_collision_hexagonal_platform), @@ -2258,7 +2258,7 @@ const BehaviorScript bhvLllRotatingHexagonalPlatform[] = { END_LOOP(), }; -const BehaviorScript bhvLllSinkingRockBlock[] = { +const BehaviorScript bhvLLLSinkingRockBlock[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(lll_seg7_collision_floating_block), @@ -2275,7 +2275,7 @@ const BehaviorScript bhvStub1D70[] = { BREAK(), }; -const BehaviorScript bhvLllMovingOctagonalMeshPlatform[] = { +const BehaviorScript bhvLLLMovingOctagonalMeshPlatform[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), ADD_FLOAT(oPosY, -50), @@ -2290,7 +2290,7 @@ const BehaviorScript bhvSnowBall[] = { BREAK(), }; -const BehaviorScript bhvLllRotatingBlockWithFireBars[] = { +const BehaviorScript bhvLLLRotatingBlockWithFireBars[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(lll_seg7_collision_rotating_fire_bars), @@ -2300,7 +2300,7 @@ const BehaviorScript bhvLllRotatingBlockWithFireBars[] = { END_LOOP(), }; -const BehaviorScript bhvLllRotatingHexFlame[] = { +const BehaviorScript bhvLLLRotatingHexFlame[] = { BEGIN(OBJ_LIST_LEVEL), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_INTERACT_TYPE(INTERACT_FLAME), @@ -2313,7 +2313,7 @@ const BehaviorScript bhvLllRotatingHexFlame[] = { END_LOOP(), }; -const BehaviorScript bhvLllWoodPiece[] = { +const BehaviorScript bhvLLLWoodPiece[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(lll_seg7_collision_wood_piece), @@ -2324,7 +2324,7 @@ const BehaviorScript bhvLllWoodPiece[] = { END_LOOP(), }; -const BehaviorScript bhvLllFloatingWoodBridge[] = { +const BehaviorScript bhvLLLFloatingWoodBridge[] = { BEGIN(OBJ_LIST_DEFAULT), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_MODEL(MODEL_NONE), @@ -2343,7 +2343,7 @@ const BehaviorScript bhvVolcanoFlames[] = { END_LOOP(), }; -const BehaviorScript bhvLllRotatingHexagonalRing[] = { +const BehaviorScript bhvLLLRotatingHexagonalRing[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(lll_seg7_collision_rotating_platform), @@ -2353,7 +2353,7 @@ const BehaviorScript bhvLllRotatingHexagonalRing[] = { END_LOOP(), }; -const BehaviorScript bhvLllSinkingRectangularPlatform[] = { +const BehaviorScript bhvLLLSinkingRectangularPlatform[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(lll_seg7_collision_slow_tilting_platform), @@ -2365,7 +2365,7 @@ const BehaviorScript bhvLllSinkingRectangularPlatform[] = { END_LOOP(), }; -const BehaviorScript bhvLllSinkingSquarePlatforms[] = { +const BehaviorScript bhvLLLSinkingSquarePlatforms[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(lll_seg7_collision_sinking_pyramids), @@ -2378,7 +2378,7 @@ const BehaviorScript bhvLllSinkingSquarePlatforms[] = { END_LOOP(), }; -const BehaviorScript bhvLllTiltingInvertedPyramid[] = { +const BehaviorScript bhvLLLTiltingInvertedPyramid[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(lll_seg7_collision_inverted_pyramid), @@ -2448,7 +2448,7 @@ const BehaviorScript bhvPiranhaPlant[] = { END_LOOP(), }; -const BehaviorScript bhvLllHexagonalMesh[] = { +const BehaviorScript bhvLLLHexagonalMesh[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(lll_hexagonal_mesh_seg3_collision_0301CECC), @@ -2457,7 +2457,7 @@ const BehaviorScript bhvLllHexagonalMesh[] = { END_LOOP(), }; -const BehaviorScript bhvLllBowserPuzzlePiece[] = { +const BehaviorScript bhvLLLBowserPuzzlePiece[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(lll_seg7_collision_puzzle_piece), @@ -2469,7 +2469,7 @@ const BehaviorScript bhvLllBowserPuzzlePiece[] = { END_LOOP(), }; -const BehaviorScript bhvLllBowserPuzzle[] = { +const BehaviorScript bhvLLLBowserPuzzle[] = { BEGIN(OBJ_LIST_SPAWNER), DISABLE_RENDERING(), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), @@ -2523,13 +2523,13 @@ const BehaviorScript bhvSmallPenguin[] = { const BehaviorScript bhvManyBlueFishSpawner[] = { BEGIN(OBJ_LIST_DEFAULT), - SET_INT(oBehParams2ndByte, 0), + SET_INT(oBhvParams2ndByte, FISH_SPAWNER_BP_MANY_BLUE), GOTO(bhvFishSpawner + 1), }; const BehaviorScript bhvFewBlueFishSpawner[] = { BEGIN(OBJ_LIST_DEFAULT), - SET_INT(oBehParams2ndByte, 1), + SET_INT(oBhvParams2ndByte, FISH_SPAWNER_BP_FEW_BLUE), GOTO(bhvFishSpawner + 1), }; @@ -2552,7 +2552,7 @@ const BehaviorScript bhvFish[] = { END_LOOP(), }; -const BehaviorScript bhvWdwExpressElevator[] = { +const BehaviorScript bhvWDWExpressElevator[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(wdw_seg7_collision_express_elevator_platform), @@ -2563,7 +2563,7 @@ const BehaviorScript bhvWdwExpressElevator[] = { END_LOOP(), }; -const BehaviorScript bhvWdwExpressElevatorPlatform[] = { +const BehaviorScript bhvWDWExpressElevatorPlatform[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(wdw_seg7_collision_express_elevator_platform), @@ -2691,7 +2691,7 @@ const BehaviorScript bhvSushiSharkCollisionChild[] = { END_LOOP(), }; -const BehaviorScript bhvJrbSlidingBox[] = { +const BehaviorScript bhvJRBSlidingBox[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(jrb_seg7_collision_floating_box), @@ -2815,7 +2815,7 @@ const BehaviorScript bhvWhitePuffSmoke2[] = { const BehaviorScript bhvPurpleSwitchHiddenBoxes[] = { BEGIN(OBJ_LIST_SURFACE), - SET_INT(oBehParams2ndByte, 2), + SET_INT(oBhvParams2ndByte, 2), GOTO(bhvFloorSwitchHardcodedModel + 1), }; @@ -2948,14 +2948,14 @@ const BehaviorScript bhvBooWithCage[] = { const BehaviorScript bhvBalconyBigBoo[] = { BEGIN(OBJ_LIST_GENACTOR), - SET_INT(oBehParams2ndByte, 2), + SET_INT(oBhvParams2ndByte, BIG_BOO_BP_BALCONY), SET_INT(oBigBooNumMinionBoosKilled, 10), GOTO(bhvGhostHuntBigBoo + 1), }; const BehaviorScript bhvMerryGoRoundBigBoo[] = { BEGIN(OBJ_LIST_GENACTOR), - SET_INT(oBehParams2ndByte, 1), + SET_INT(oBhvParams2ndByte, BIG_BOO_BP_MERRY_GO_ROUND), // Set number of minion boos killed to 10, which is greater than 5 so that the boo always loads without needing to kill any boos. SET_INT(oBigBooNumMinionBoosKilled, 10), GOTO(bhvGhostHuntBigBoo + 1), @@ -2983,13 +2983,13 @@ const BehaviorScript bhvCourtyardBooTriplet[] = { const BehaviorScript bhvBoo[] = { BEGIN(OBJ_LIST_GENACTOR), - SET_INT(oBehParams2ndByte, 1), + SET_INT(oBhvParams2ndByte, BOO_BP_GENERIC), GOTO(bhvGhostHuntBoo + 1), }; const BehaviorScript bhvMerryGoRoundBoo[] = { BEGIN(OBJ_LIST_GENACTOR), - SET_INT(oBehParams2ndByte, 2), + SET_INT(oBhvParams2ndByte, BOO_BP_MERRY_GO_ROUND), GOTO(bhvGhostHuntBoo + 1), }; @@ -3037,7 +3037,7 @@ const BehaviorScript bhvBooStaircase[] = { END_LOOP(), }; -const BehaviorScript bhvBbhTiltingTrapPlatform[] = { +const BehaviorScript bhvBBHTiltingTrapPlatform[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(bbh_seg7_collision_tilt_floor_platform), @@ -3067,7 +3067,7 @@ const BehaviorScript bhvMeshElevator[] = { LOAD_COLLISION_DATA(bbh_seg7_collision_mesh_elevator), SET_HOME(), SET_INT(oRoom, 12), - SET_INT(oBehParams2ndByte, 4), + SET_INT(oBhvParams2ndByte, 4), CALL_NATIVE(bhv_elevator_init), BEGIN_LOOP(), CALL_NATIVE(bhv_elevator_loop), @@ -3253,7 +3253,7 @@ const BehaviorScript bhvScuttlebugSpawn[] = { const BehaviorScript bhvWhompKingBoss[] = { BEGIN(OBJ_LIST_SURFACE), - SET_INT(oBehParams2ndByte, 1), + SET_INT(oBhvParams2ndByte, WHOMP_BP_KING), SET_INT(oHealth, 3), GOTO(bhvSmallWhomp + 1 + 1), }; @@ -3764,7 +3764,7 @@ const BehaviorScript bhvBobombBuddy[] = { DROP_TO_FLOOR(), SET_HITBOX(/*Radius*/ 100, /*Height*/ 60), ANIMATE(0), - SET_INT(oBobombBuddyRole, 0), + SET_INT(oBobombBuddyRole, BOBOMB_BUDDY_ROLE_ADVICE), SET_HOME(), CALL_NATIVE(bhv_bobomb_buddy_init), BEGIN_LOOP(), @@ -3782,7 +3782,7 @@ const BehaviorScript bhvBobombBuddyOpensCannon[] = { DROP_TO_FLOOR(), SET_HITBOX(/*Radius*/ 100, /*Height*/ 60), ANIMATE(0), - SET_INT(oBobombBuddyRole, 1), + SET_INT(oBobombBuddyRole, BOBOMB_BUDDY_ROLE_CANNON), SET_HOME(), CALL_NATIVE(bhv_bobomb_buddy_init), BEGIN_LOOP(), @@ -4091,7 +4091,7 @@ const BehaviorScript bhvSmallChillBully[] = { LOAD_ANIMATIONS(oAnimations, chilly_chief_seg6_anims_06003994), DROP_TO_FLOOR(), SET_HOME(), - SET_INT(oBullySubtype, 0x0010), + SET_INT(oBullySubtype, BULLY_STYPE_CHILL), CALL_NATIVE(bhv_small_bully_init), BEGIN_LOOP(), SET_INT(oIntangibleTimer, 0), @@ -4105,7 +4105,7 @@ const BehaviorScript bhvBigChillBully[] = { LOAD_ANIMATIONS(oAnimations, chilly_chief_seg6_anims_06003994), DROP_TO_FLOOR(), SET_HOME(), - SET_INT(oBullySubtype, 0x0010), + SET_INT(oBullySubtype, BULLY_STYPE_CHILL), CALL_NATIVE(bhv_big_bully_init), BEGIN_LOOP(), SET_INT(oIntangibleTimer, 0), @@ -4223,7 +4223,7 @@ const BehaviorScript bhvStarKeyCollectionPuffSpawner[] = { END_LOOP(), }; -const BehaviorScript bhvLllDrawbridgeSpawner[] = { +const BehaviorScript bhvLLLDrawbridgeSpawner[] = { BEGIN(OBJ_LIST_DEFAULT), HIDE(), BEGIN_LOOP(), @@ -4231,7 +4231,7 @@ const BehaviorScript bhvLllDrawbridgeSpawner[] = { END_LOOP(), }; -const BehaviorScript bhvLllDrawbridge[] = { +const BehaviorScript bhvLLLDrawbridge[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(lll_seg7_collision_drawbridge), @@ -4263,7 +4263,7 @@ const BehaviorScript bhvLargeBomp[] = { END_LOOP(), }; -const BehaviorScript bhvWfSlidingPlatform[] = { +const BehaviorScript bhvWFSlidingPlatform[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, (OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(wf_seg7_collision_sliding_brick_platform), @@ -4334,7 +4334,7 @@ const BehaviorScript bhvBowlingBall[] = { END_LOOP(), }; -const BehaviorScript bhvTtmBowlingBallSpawner[] = { +const BehaviorScript bhvTTMBowlingBallSpawner[] = { BEGIN(OBJ_LIST_GENACTOR), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_INT(oBBallSpawnerPeriodMinus1, 63), @@ -4344,7 +4344,7 @@ const BehaviorScript bhvTtmBowlingBallSpawner[] = { END_LOOP(), }; -const BehaviorScript bhvBobBowlingBallSpawner[] = { +const BehaviorScript bhvBoBBowlingBallSpawner[] = { BEGIN(OBJ_LIST_GENACTOR), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_INT(oBBallSpawnerPeriodMinus1, 127), @@ -4354,7 +4354,7 @@ const BehaviorScript bhvBobBowlingBallSpawner[] = { END_LOOP(), }; -const BehaviorScript bhvThiBowlingBallSpawner[] = { +const BehaviorScript bhvTHIBowlingBallSpawner[] = { BEGIN(OBJ_LIST_GENACTOR), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BEGIN_LOOP(), @@ -4362,7 +4362,7 @@ const BehaviorScript bhvThiBowlingBallSpawner[] = { END_LOOP(), }; -const BehaviorScript bhvRrCruiserWing[] = { +const BehaviorScript bhvRRCruiserWing[] = { BEGIN(OBJ_LIST_DEFAULT), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), CALL_NATIVE(bhv_rr_cruiser_wing_init), @@ -4382,7 +4382,7 @@ const BehaviorScript bhvSpindel[] = { END_LOOP(), }; -const BehaviorScript bhvSslMovingPyramidWall[] = { +const BehaviorScript bhvSSLMovingPyramidWall[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_ANGLE_TO_MOVE_ANGLE | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(ssl_seg7_collision_0702808C), @@ -4671,7 +4671,7 @@ const BehaviorScript bhvHiddenStarTrigger[] = { END_LOOP(), }; -const BehaviorScript bhvTtmRollingLog[] = { +const BehaviorScript bhvTTMRollingLog[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(ttm_seg7_collision_pitoune_2), @@ -4684,7 +4684,7 @@ const BehaviorScript bhvTtmRollingLog[] = { END_LOOP(), }; -const BehaviorScript bhvLllVolcanoFallingTrap[] = { +const BehaviorScript bhvLLLVolcanoFallingTrap[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(lll_seg7_collision_falling_wall), @@ -4695,7 +4695,7 @@ const BehaviorScript bhvLllVolcanoFallingTrap[] = { END_LOOP(), }; -const BehaviorScript bhvLllRollingLog[] = { +const BehaviorScript bhvLLLRollingLog[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(lll_seg7_collision_pitoune), @@ -4708,7 +4708,7 @@ const BehaviorScript bhvLllRollingLog[] = { END_LOOP(), }; -const BehaviorScript bhv1upWalking[] = { +const BehaviorScript bhv1UpWalking[] = { BEGIN(OBJ_LIST_LEVEL), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), @@ -4720,7 +4720,7 @@ const BehaviorScript bhv1upWalking[] = { END_LOOP(), }; -const BehaviorScript bhv1upRunningAway[] = { +const BehaviorScript bhv1UpRunningAway[] = { BEGIN(OBJ_LIST_LEVEL), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), @@ -4732,7 +4732,7 @@ const BehaviorScript bhv1upRunningAway[] = { END_LOOP(), }; -const BehaviorScript bhv1upSliding[] = { +const BehaviorScript bhv1UpSliding[] = { BEGIN(OBJ_LIST_LEVEL), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), @@ -4758,7 +4758,7 @@ const BehaviorScript bhv1Up[] = { END_LOOP(), }; -const BehaviorScript bhv1upJumpOnApproach[] = { +const BehaviorScript bhv1UpJumpOnApproach[] = { BEGIN(OBJ_LIST_LEVEL), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), @@ -4771,7 +4771,7 @@ const BehaviorScript bhv1upJumpOnApproach[] = { END_LOOP(), }; -const BehaviorScript bhvHidden1up[] = { +const BehaviorScript bhvHidden1Up[] = { BEGIN(OBJ_LIST_LEVEL), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), @@ -4784,7 +4784,7 @@ const BehaviorScript bhvHidden1up[] = { END_LOOP(), }; -const BehaviorScript bhvHidden1upTrigger[] = { +const BehaviorScript bhvHidden1UpTrigger[] = { BEGIN(OBJ_LIST_LEVEL), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_HITBOX(/*Radius*/ 100, /*Height*/ 100), @@ -4794,7 +4794,7 @@ const BehaviorScript bhvHidden1upTrigger[] = { END_LOOP(), }; -const BehaviorScript bhvHidden1upInPole[] = { +const BehaviorScript bhvHidden1UpInPole[] = { BEGIN(OBJ_LIST_LEVEL), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), @@ -4807,7 +4807,7 @@ const BehaviorScript bhvHidden1upInPole[] = { END_LOOP(), }; -const BehaviorScript bhvHidden1upInPoleTrigger[] = { +const BehaviorScript bhvHidden1UpInPoleTrigger[] = { BEGIN(OBJ_LIST_LEVEL), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_HITBOX(/*Radius*/ 100, /*Height*/ 100), @@ -4817,7 +4817,7 @@ const BehaviorScript bhvHidden1upInPoleTrigger[] = { END_LOOP(), }; -const BehaviorScript bhvHidden1upInPoleSpawner[] = { +const BehaviorScript bhvHidden1UpInPoleSpawner[] = { BEGIN(OBJ_LIST_LEVEL), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BEGIN_LOOP(), @@ -4877,7 +4877,7 @@ const BehaviorScript bhvSnowMoundSpawn[] = { END_LOOP(), }; -const BehaviorScript bhvWdwSquareFloatingPlatform[] = { +const BehaviorScript bhvWDWSquareFloatingPlatform[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(wdw_seg7_collision_square_floating_platform), @@ -4889,7 +4889,7 @@ const BehaviorScript bhvWdwSquareFloatingPlatform[] = { END_LOOP(), }; -const BehaviorScript bhvWdwRectangularFloatingPlatform[] = { +const BehaviorScript bhvWDWRectangularFloatingPlatform[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(wdw_seg7_collision_rect_floating_platform), @@ -4901,7 +4901,7 @@ const BehaviorScript bhvWdwRectangularFloatingPlatform[] = { END_LOOP(), }; -const BehaviorScript bhvJrbFloatingPlatform[] = { +const BehaviorScript bhvJRBFloatingPlatform[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(jrb_seg7_collision_floating_platform), @@ -4976,7 +4976,7 @@ const BehaviorScript bhvPillarBase[] = { END_LOOP(), }; -const BehaviorScript bhvJrbFloatingBox[] = { +const BehaviorScript bhvJRBFloatingBox[] = { BEGIN(OBJ_LIST_SURFACE), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(jrb_seg7_collision_floating_box), @@ -5006,7 +5006,7 @@ const BehaviorScript bhvTreasureChestsShip[] = { END_LOOP(), }; -const BehaviorScript bhvTreasureChestsJrb[] = { +const BehaviorScript bhvTreasureChestsJRB[] = { BEGIN(OBJ_LIST_DEFAULT), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), DROP_TO_FLOOR(), @@ -5016,13 +5016,13 @@ const BehaviorScript bhvTreasureChestsJrb[] = { END_LOOP(), }; -const BehaviorScript bhvTreasureChests[] = { +const BehaviorScript bhvTreasureChestsDDD[] = { BEGIN(OBJ_LIST_DEFAULT), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), DROP_TO_FLOOR(), - CALL_NATIVE(bhv_treasure_chest_init), + CALL_NATIVE(bhv_treasure_chest_ddd_init), BEGIN_LOOP(), - CALL_NATIVE(bhv_treasure_chest_loop), + CALL_NATIVE(bhv_treasure_chest_ddd_loop), END_LOOP(), }; diff --git a/diff_settings.py b/diff_settings.py index 933ccb37..dd8b5108 100644 --- a/diff_settings.py +++ b/diff_settings.py @@ -10,6 +10,8 @@ def add_custom_arguments(parser): help="Set version to EU.") group.add_argument('-s', dest='lang', action='store_const', const='sh', help="Set version to SH.") + group.add_argument('-c', dest='lang', action='store_const', const='cn', + help="Set version to CN.") def apply(config, args): lang = args.lang or 'us' diff --git a/enhancements/README.md b/enhancements/README.md index 241d82f3..50405715 100644 --- a/enhancements/README.md +++ b/enhancements/README.md @@ -8,10 +8,10 @@ To apply a patch, run `tools/apply_patch.sh [patch]` where `[patch]` is the name to the source code. Likewise, to undo the changes from a patch you applied, run -`tools/revert_patch.sh` with the name of the .patch file you wish to undo. +`tools/revert_patch.sh` with the name of the .patch file you wish to undo. To create your own enhancement patch, switch to the `master` Git -branch, make your changes to the code (but do not commit), then run `tools/create_patch.sh`. Your changes will be stored in the .patch file you specify. +branch, make your changes to the code (but do not commit), then run `tools/create_patch.sh`. Your changes will be stored in the .patch file you specify. The following enhancements are included in this directory: diff --git a/enhancements/crash.patch b/enhancements/crash.patch index 87c5c8f9..671bbb2e 100644 --- a/enhancements/crash.patch +++ b/enhancements/crash.patch @@ -158,7 +158,7 @@ index 00000000..033bf952 + jr $k0 // run the original handler + nop diff --git a/lib/asm/__osExceptionPreamble.s b/lib/asm/__osExceptionPreamble.s -index c3b97993..c552a485 100644 +index 4e841ea0..ab0c7d13 100644 --- a/lib/asm/__osExceptionPreamble.s +++ b/lib/asm/__osExceptionPreamble.s @@ -11,8 +11,8 @@ @@ -173,17 +173,17 @@ index c3b97993..c552a485 100644 nop diff --git a/sm64.ld b/sm64.ld -index 7d9b5b4a..c7bb81b9 100755 +index da9bc4dd..25ac57e8 100755 --- a/sm64.ld +++ b/sm64.ld @@ -117,6 +117,7 @@ SECTIONS - BUILD_DIR/src/game/rendering_graph_node.o(.text); - BUILD_DIR/src/game/profiler.o(.text); - BUILD_DIR/asm/decompress.o(.text); -+ BUILD_DIR/asm/crash.o(.text); - BUILD_DIR/src/game/camera.o(.text); - BUILD_DIR/src/game/debug_course.o(.text); - BUILD_DIR/src/game/object_list_processor.o(.text); + BUILD_DIR/src/game/rendering_graph_node.o(.text); + BUILD_DIR/src/game/profiler.o(.text); + BUILD_DIR/asm/decompress.o(.text); ++ BUILD_DIR/asm/crash.o(.text); + BUILD_DIR/src/game/camera.o(.text); + BUILD_DIR/src/game/debug_course.o(.text); + BUILD_DIR/src/game/object_list_processor.o(.text); diff --git a/src/game/crash.c b/src/game/crash.c new file mode 100644 index 00000000..716adfbd diff --git a/enhancements/ique_support.patch b/enhancements/ique_support.patch deleted file mode 100644 index 8487c48e..00000000 --- a/enhancements/ique_support.patch +++ /dev/null @@ -1,312 +0,0 @@ -diff --git a/include/PR/console_type.h b/include/PR/console_type.h -new file mode 100644 -index 00000000..e60550ab ---- /dev/null -+++ b/include/PR/console_type.h -@@ -0,0 +1,7 @@ -+enum ConsoleType { -+ CONSOLE_N64, -+ CONSOLE_IQUE -+}; -+ -+extern enum ConsoleType gConsoleType; -+extern enum ConsoleType get_console_type(void); -diff --git a/lib/asm/skGetId.s b/lib/asm/skGetId.s -new file mode 100644 -index 00000000..58e7d4f9 ---- /dev/null -+++ b/lib/asm/skGetId.s -@@ -0,0 +1,18 @@ -+// Code by stuckpixel -+ -+.set noreorder -+.set gp=64 -+ -+#include "macros.inc" -+ -+glabel skGetId -+ li $v0, 0 -+ li $t0, 0xA4300014 -+ lw $t1, 0x00($t0) -+ nop -+ jr $ra -+ nop -+ nop -+ nop -+ nop -+ nop -diff --git a/lib/src/__osViSwapContext.c b/lib/src/__osViSwapContext.c -index 990cb11f..22756e91 100644 ---- a/lib/src/__osViSwapContext.c -+++ b/lib/src/__osViSwapContext.c -@@ -54,7 +54,9 @@ void __osViSwapContext() { - HW_REG(VI_INTR_REG, u32) = s0->fldRegs[field].vIntr; - HW_REG(VI_X_SCALE_REG, u32) = s1->unk20; - HW_REG(VI_Y_SCALE_REG, u32) = s1->unk2c; -- HW_REG(VI_CONTROL_REG, u32) = s1->features; -+ /* Make sure bit 13 is cleared. Otherwise, graphics will be corrupted on -+ * iQue Player. This has no effect on N64. */ -+ HW_REG(VI_CONTROL_REG, u32) = s1->features & ~(1 << 13); - __osViNext = __osViCurr; - __osViCurr = s1; - *__osViNext = *__osViCurr; -diff --git a/lib/src/consoleType.c b/lib/src/consoleType.c -new file mode 100644 -index 00000000..ef08d1ef ---- /dev/null -+++ b/lib/src/consoleType.c -@@ -0,0 +1,12 @@ -+#include "libultra_internal.h" -+#include -+ -+enum ConsoleType gConsoleType; -+ -+void skGetId(u32 *out); -+ -+enum ConsoleType get_console_type(void) { -+ u32 id = 0; -+ skGetId(&id); -+ return (id == 0) ? CONSOLE_N64 : CONSOLE_IQUE; -+} -diff --git a/lib/src/osEepromProbe.c b/lib/src/osEepromProbe.c -index d550b846..bbaf2bcc 100644 ---- a/lib/src/osEepromProbe.c -+++ b/lib/src/osEepromProbe.c -@@ -1,4 +1,5 @@ - #include "libultra_internal.h" -+#include - - // TODO: merge with osEepromWrite - typedef struct { -@@ -13,11 +14,23 @@ s32 osEepromProbe(OSMesgQueue *mq) { - unkStruct sp18; - - __osSiGetAccess(); -- status = __osEepStatus(mq, &sp18); -- if (status == 0 && (sp18.unk00 & 0x8000) != 0) { -- status = 1; -- } else { -- status = 0; -+ if (gConsoleType == CONSOLE_N64) { -+ status = __osEepStatus(mq, &sp18); -+ if (status == 0 && (sp18.unk00 & 0x8000) != 0) { -+ status = 1; -+ } else { -+ status = 0; -+ } -+ } else if (gConsoleType == CONSOLE_IQUE) { -+ s32 __osBbEepromSize = * (s32*) 0x80000360; -+ -+ if (__osBbEepromSize == 0x200) { -+ status = 1; -+ } -+ -+ if (__osBbEepromSize == 0x800) { -+ status = 2; -+ } - } - __osSiRelAccess(); - return status; -diff --git a/lib/src/osEepromRead.c b/lib/src/osEepromRead.c -index ea784b2c..116dae2d 100644 ---- a/lib/src/osEepromRead.c -+++ b/lib/src/osEepromRead.c -@@ -1,4 +1,5 @@ - #include "libultra_internal.h" -+#include - - extern u8 _osLastSentSiCmd; - -@@ -42,33 +43,44 @@ s32 osEepromRead(OSMesgQueue *mq, u8 address, u8 *buffer) { - return -1; - } - __osSiGetAccess(); -- sp34 = __osEepStatus(mq, &sp28); -- if (sp34 != 0 || sp28.unk00 != 0x8000) { -+ if (gConsoleType == CONSOLE_N64) { -+ sp34 = __osEepStatus(mq, &sp28); -+ if (sp34 != 0 || sp28.unk00 != 0x8000) { - -- return 8; -- } -- while (sp28.unk02 & 0x80) { -- __osEepStatus(mq, &sp28); -- } -- __osPackEepReadData(address); -- sp34 = __osSiRawStartDma(OS_WRITE, &D_80365E00); -- osRecvMesg(mq, NULL, OS_MESG_BLOCK); -- for (sp30 = 0; sp30 < 0x10; sp30++) { -- (D_80365E00)[sp30] = 255; -- } -- D_80365E3C = 0; -- sp34 = __osSiRawStartDma(OS_READ, D_80365E00); -- _osLastSentSiCmd = 4; -- osRecvMesg(mq, NULL, OS_MESG_BLOCK); -- for (sp30 = 0; sp30 < 4; sp30++) { -- sp2c++; -- } -- sp20 = *(unkStruct2 *) sp2c; -- sp34 = (sp20.unk01 & 0xc0) >> 4; -- if (sp34 == 0) { -- for (sp30 = 0; sp30 < 8; sp30++) { -- *buffer++ = ((u8 *) &sp20.unk04)[sp30]; -+ return 8; -+ } -+ while (sp28.unk02 & 0x80) { -+ __osEepStatus(mq, &sp28); -+ } -+ __osPackEepReadData(address); -+ sp34 = __osSiRawStartDma(OS_WRITE, &D_80365E00); -+ osRecvMesg(mq, NULL, OS_MESG_BLOCK); -+ for (sp30 = 0; sp30 < 0x10; sp30++) { -+ (D_80365E00)[sp30] = 255; - } -+ D_80365E3C = 0; -+ sp34 = __osSiRawStartDma(OS_READ, D_80365E00); -+ _osLastSentSiCmd = 4; -+ osRecvMesg(mq, NULL, OS_MESG_BLOCK); -+ for (sp30 = 0; sp30 < 4; sp30++) { -+ sp2c++; -+ } -+ sp20 = *(unkStruct2 *) sp2c; -+ sp34 = (sp20.unk01 & 0xc0) >> 4; -+ if (sp34 == 0) { -+ for (sp30 = 0; sp30 < 8; sp30++) { -+ *buffer++ = ((u8 *) &sp20.unk04)[sp30]; -+ } -+ } -+ } else if (gConsoleType == CONSOLE_IQUE) { -+ u8 *__osBbEepromAddress = * (u8**) 0x8000035C; -+ s32 i; -+ -+ for (i = 0; i < 8; i++) { -+ buffer[i] = __osBbEepromAddress[(address << 3) + i]; -+ } -+ -+ sp34 = 0; - } - __osSiRelAccess(); - return sp34; -diff --git a/lib/src/osEepromWrite.c b/lib/src/osEepromWrite.c -index 1a86477b..a94f8721 100644 ---- a/lib/src/osEepromWrite.c -+++ b/lib/src/osEepromWrite.c -@@ -1,5 +1,6 @@ - #include "libultra_internal.h" - #include "osContInternal.h" -+#include - - #ifndef AVOID_UB - ALIGNED8 u32 D_80365E00[15]; -@@ -52,36 +53,47 @@ s32 osEepromWrite(OSMesgQueue *mq, u8 address, u8 *buffer) { - } - - __osSiGetAccess(); -- sp34 = __osEepStatus(mq, &sp1c); -+ if (gConsoleType == CONSOLE_N64) { -+ sp34 = __osEepStatus(mq, &sp1c); - -- if (sp34 != 0 || sp1c.unk00 != 0x8000) { -- return 8; -- } -+ if (sp34 != 0 || sp1c.unk00 != 0x8000) { -+ return 8; -+ } - -- while (sp1c.unk02 & 0x80) { -- __osEepStatus(mq, &sp1c); -- } -+ while (sp1c.unk02 & 0x80) { -+ __osEepStatus(mq, &sp1c); -+ } - -- __osPackEepWriteData(address, buffer); -+ __osPackEepWriteData(address, buffer); - -- sp34 = __osSiRawStartDma(OS_WRITE, &D_80365E00); -- osRecvMesg(mq, NULL, OS_MESG_BLOCK); -+ sp34 = __osSiRawStartDma(OS_WRITE, &D_80365E00); -+ osRecvMesg(mq, NULL, OS_MESG_BLOCK); - -- for (sp30 = 0; sp30 < 0x10; sp30++) { -- (D_80365E00)[sp30] = 255; -- } -+ for (sp30 = 0; sp30 < 0x10; sp30++) { -+ (D_80365E00)[sp30] = 255; -+ } - -- D_80365E3C = 0; -- sp34 = __osSiRawStartDma(OS_READ, D_80365E00); -- _osLastSentSiCmd = 5; -- osRecvMesg(mq, NULL, OS_MESG_BLOCK); -+ D_80365E3C = 0; -+ sp34 = __osSiRawStartDma(OS_READ, D_80365E00); -+ _osLastSentSiCmd = 5; -+ osRecvMesg(mq, NULL, OS_MESG_BLOCK); - -- for (sp30 = 0; sp30 < 4; sp30++) { -- sp2c++; -- } -+ for (sp30 = 0; sp30 < 4; sp30++) { -+ sp2c++; -+ } -+ -+ sp20 = *(unkStruct2 *) sp2c; -+ sp34 = (sp20.unk01 & 0xc0) >> 4; -+ } else if (gConsoleType == CONSOLE_IQUE) { -+ u8 *__osBbEepromAddress = * (u8**) 0x8000035C; -+ s32 i; - -- sp20 = *(unkStruct2 *) sp2c; -- sp34 = (sp20.unk01 & 0xc0) >> 4; -+ for (i = 0; i < 8; i++) { -+ __osBbEepromAddress[(address << 3) + i] = buffer[i]; -+ } -+ -+ sp34 = 0; -+ } - __osSiRelAccess(); - return sp34; - } -diff --git a/lib/src/osInitialize.c b/lib/src/osInitialize.c -index ba73024b..6deaf407 100644 ---- a/lib/src/osInitialize.c -+++ b/lib/src/osInitialize.c -@@ -1,6 +1,7 @@ - #include "libultra_internal.h" - #include "hardware.h" - #include -+#include - - #define PIF_ADDR_START (void *) 0x1FC007FC - -@@ -51,6 +52,7 @@ void osInitialize(void) { - UNUSED u32 eu_sp30; - #endif - UNUSED u32 sp2c; -+ gConsoleType = get_console_type(); - D_80365CD0 = TRUE; - __osSetSR(__osGetSR() | 0x20000000); - __osSetFpcCsr(0x01000800); -diff --git a/sm64.ld b/sm64.ld -index 7d9b5b4a..be853a3b 100755 ---- a/sm64.ld -+++ b/sm64.ld -@@ -306,6 +306,8 @@ SECTIONS - #if ENABLE_RUMBLE - BUILD_DIR/libultra.a:unk_shindou_file_3.o(.text); - #endif -+ BUILD_DIR/libultra.a:consoleType.o(.text) -+ BUILD_DIR/libultra.a:skGetId.o(.text) - BUILD_DIR/lib/rsp.o(.text); - #else - BUILD_DIR/src/game*.o(.text); -@@ -428,6 +430,8 @@ SECTIONS - #if ENABLE_RUMBLE - BUILD_DIR/libultra.a:unk_shindou_file_3.o(.text); - #endif -+ BUILD_DIR/libultra.a:consoleType.o(.text) -+ BUILD_DIR/libultra.a:skGetId.o(.text) - BUILD_DIR/lib/rsp.o(.text); - #endif - diff --git a/enhancements/mem_error_screen.patch b/enhancements/mem_error_screen.patch index 3941e328..9fbbc8a9 100644 --- a/enhancements/mem_error_screen.patch +++ b/enhancements/mem_error_screen.patch @@ -37,7 +37,7 @@ index 749179b1..2f6f7a3c 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") + - #if defined(VERSION_JP) || defined(VERSION_SH) + #if defined(VERSION_JP) || defined(VERSION_SH) || defined(VERSION_CN) /** diff --git a/levels/entry.c b/levels/entry.c @@ -66,26 +66,26 @@ index 30a87806..6bf7b79a 100644 #include "levels/intro/header.h" +const GeoLayout intro_geo_error_screen[] = { -+ GEO_NODE_SCREEN_AREA(0, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), -+ GEO_OPEN_NODE(), -+ GEO_ZBUFFER(0), -+ GEO_OPEN_NODE(), -+ GEO_NODE_ORTHO(100), -+ GEO_OPEN_NODE(), -+ GEO_BACKGROUND_COLOR(0x0001), -+ GEO_CLOSE_NODE(), -+ GEO_CLOSE_NODE(), -+ GEO_ZBUFFER(0), -+ GEO_OPEN_NODE(), -+ GEO_ASM(0, geo18_display_error_message), -+ GEO_CLOSE_NODE(), -+ GEO_CLOSE_NODE(), -+ GEO_END(), ++ GEO_NODE_SCREEN_AREA(0, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), ++ GEO_OPEN_NODE(), ++ GEO_ZBUFFER(0), ++ GEO_OPEN_NODE(), ++ GEO_NODE_ORTHO(100), ++ GEO_OPEN_NODE(), ++ GEO_BACKGROUND_COLOR(0x0001), ++ GEO_CLOSE_NODE(), ++ GEO_CLOSE_NODE(), ++ GEO_ZBUFFER(0), ++ GEO_OPEN_NODE(), ++ GEO_ASM(0, geo18_display_error_message), ++ GEO_CLOSE_NODE(), ++ GEO_CLOSE_NODE(), ++ GEO_END(), +}; + // 0x0E0002D0 const GeoLayout intro_geo_0002D0[] = { - GEO_NODE_SCREEN_AREA(0, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_NODE_SCREEN_AREA(0, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), diff --git a/levels/intro/header.h b/levels/intro/header.h index 99277e86..04797cd7 100644 --- a/levels/intro/header.h diff --git a/extract_assets.py b/extract_assets.py index bde5ef21..b09d26c9 100755 --- a/extract_assets.py +++ b/extract_assets.py @@ -76,7 +76,7 @@ def main(): clean_assets(local_asset_file) sys.exit(0) - all_langs = ["jp", "us", "eu", "sh"] + all_langs = ["jp", "us", "eu", "sh", "cn"] if not langs or not all(a in all_langs for a in langs): langs_str = " ".join("[" + lang + "]" for lang in all_langs) print("Usage: " + sys.argv[0] + " " + langs_str) @@ -156,7 +156,11 @@ def main(): # Make sure tools exist subprocess.check_call( - ["make", "-s", "-C", "tools/", "n64graphics", "skyconv", "mio0", "aifc_decode"] + ["make", "-s", "-C", "tools/sm64tools/", "n64graphics", "mio0"] + ) + + subprocess.check_call( + ["make", "-s", "-C", "tools/", "skyconv", "aifc_decode"] ) # Go through the assets in roughly alphabetical order (but assets in the same @@ -175,13 +179,14 @@ def main(): "baserom." + lang + ".z64", ] def append_args(key): - size, locs = asset_map["@sound " + key + " " + lang] + sound_ver = "sh" if lang == "cn" else lang + size, locs = asset_map["@sound " + key + " " + sound_ver] offset = locs[lang][0] args.append(str(offset)) args.append(str(size)) append_args("ctl") append_args("tbl") - if lang == "sh": + if lang in ("sh", "cn"): args.append("--shindou-headers") append_args("ctl header") append_args("tbl header") @@ -195,7 +200,7 @@ def main(): if mio0 is not None: image = subprocess.run( [ - "./tools/mio0", + "./tools/sm64tools/mio0", "-d", "-o", str(mio0), @@ -222,7 +227,8 @@ def main(): if asset.startswith("textures/skyboxes/"): imagetype = "sky" else: - imagetype = "cake" + ("-eu" if "eu" in asset else "") + imagetype = "cake" + ("-cn" if "cn" in asset else "-eu" if "eu" in asset else "") + print(imagetype, png_file.name, asset) subprocess.run( [ "./tools/skyconv", @@ -239,7 +245,7 @@ def main(): fmt = asset.split(".")[-2] subprocess.run( [ - "./tools/n64graphics", + "./tools/sm64tools/n64graphics", "-e", png_file.name, "-g", diff --git a/first-diff.py b/first-diff.py index c4483b53..9d8a65e8 100755 --- a/first-diff.py +++ b/first-diff.py @@ -41,11 +41,18 @@ versionGroup.add_argument( const="sh", dest="version", ) +versionGroup.add_argument( + "-c", + "--cn", + help="use iQue (Chinese) version", + action="store_const", + const="cn", + dest="version", +) parser.add_argument( "-m", "--make", help="run make before finding difference(s)", action="store_true" ) parser.add_argument( - "-c", "--count", type=int, default=1, diff --git a/include/PR/abi.h b/include/PR/abi.h index b73cb726..0f689956 100644 --- a/include/PR/abi.h +++ b/include/PR/abi.h @@ -42,7 +42,7 @@ #define A_INTERLEAVE 13 #define A_SETLOOP 15 -#ifndef VERSION_SH +#if !defined(VERSION_SH) && !defined(VERSION_CN) #define A_ENVMIXER 3 #define A_LOADBUFF 4 @@ -642,7 +642,7 @@ typedef short ENVMIX_STATE[40]; _a->words.w1 = (uintptr_t)(tr); \ } -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) #undef aLoadBuffer #undef aSaveBuffer #undef aMix diff --git a/include/PR/ique.h b/include/PR/ique.h new file mode 100644 index 00000000..b6a3ef6e --- /dev/null +++ b/include/PR/ique.h @@ -0,0 +1,37 @@ +#ifndef IQUE_H +#define IQUE_H + +#include "rcp.h" + +#define MI_SK_EXCEPTION_REG (MI_BASE_REG+0x14) +#define MI_SK_WATCHDOG_TIMER (MI_BASE_REG+0x18) + +// Hardware interrupts +// 0x40 = NAND DMA, 0x80 = MD, 0x100 = RDB, 0x200 = AES, +// 0x400 = PI_ERR, 0x800 = USB0, 0x1000 = USB1, 0x2000 = NAND +#define MI_HW_INTR_REG (MI_BASE_REG+0x38) +#define MI_HW_INTR_MASK_REG (MI_BASE_REG+0x3C) + +#define PI_CARD_ADDR_REG (PI_BASE_REG+0x48) +#define PI_EX_RD_LEN_REG (PI_BASE_REG+0x58) +#define PI_EX_WR_LEN_REG (PI_BASE_REG+0x5C) +#define PI_MISC_REG (PI_BASE_REG+0x60) + +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +extern u8 *__osBbEepromAddress; +extern u32 __osBbEepromSize; +extern u32 __osBbFlashAddress; +extern u32 __osBbFlashSize; +extern u32 __osBbSramAddress; +extern u32 __osBbSramSize; +extern u32 *__osBbPakAddress[]; +extern u32 __osBbPakSize; +extern u32 __osBbIsBb; +extern u32 __osBbHackFlags; + +void skKeepAlive(void); + +#endif + +#endif diff --git a/include/PR/libaudio.h b/include/PR/libaudio.h index cb7a5b19..0a8797d7 100644 --- a/include/PR/libaudio.h +++ b/include/PR/libaudio.h @@ -7,7 +7,7 @@ typedef struct { u8 *offset; s32 len; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) s8 medium; s8 magic; // tbl: 0x04, otherwise: 0x03 @@ -32,11 +32,11 @@ typedef struct typedef struct { -#ifndef VERSION_SH +#if !defined(VERSION_SH) && !defined(VERSION_CN) s16 revision; #endif s16 seqCount; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) s16 unk2; u8 *data; #if !IS_64_BIT diff --git a/include/PR/os.h b/include/PR/os.h index 3126f481..d10160cb 100644 --- a/include/PR/os.h +++ b/include/PR/os.h @@ -59,37 +59,6 @@ typedef struct { s32 (*dma)(s32, u32, void *, u32); s32 (*edma)(OSPiHandle *, s32, u32, void *, u32); } OSDevMgr; - -/* - * Structure for file system - */ - - - -typedef struct { - int status; - OSMesgQueue *queue; - int channel; - u8 id[32]; - u8 label[32]; - int version; - int dir_size; - int inode_table; /* block location */ - int minode_table; /* mirrioring inode_table */ - int dir_table; /* block location */ - int inode_start_page; /* page # */ - u8 banks; - u8 activebank; -} OSPfs; - - -typedef struct { - u32 file_size; /* bytes */ - u32 game_code; - u16 company_code; - char ext_name[4]; - char game_name[16]; -} OSPfsState; /* * Structure for Profiler @@ -116,39 +85,6 @@ typedef struct { #define OS_STATE_RUNNING 4 #define OS_STATE_WAITING 8 -/* Events */ -#ifdef _FINALROM -#define OS_NUM_EVENTS 15 -#else -#define OS_NUM_EVENTS 23 -#endif - -#define OS_EVENT_SW1 0 /* CPU SW1 interrupt */ -#define OS_EVENT_SW2 1 /* CPU SW2 interrupt */ -#define OS_EVENT_CART 2 /* Cartridge interrupt: used by rmon */ -#define OS_EVENT_COUNTER 3 /* Counter int: used by VI/Timer Mgr */ -#define OS_EVENT_SP 4 /* SP task done interrupt */ -#define OS_EVENT_SI 5 /* SI (controller) interrupt */ -#define OS_EVENT_AI 6 /* AI interrupt */ -#define OS_EVENT_VI 7 /* VI interrupt: used by VI/Timer Mgr */ -#define OS_EVENT_PI 8 /* PI interrupt: used by PI Manager */ -#define OS_EVENT_DP 9 /* DP full sync interrupt */ -#define OS_EVENT_CPU_BREAK 10 /* CPU breakpoint: used by rmon */ -#define OS_EVENT_SP_BREAK 11 /* SP breakpoint: used by rmon */ -#define OS_EVENT_FAULT 12 /* CPU fault event: used by rmon */ -#define OS_EVENT_THREADSTATUS 13 /* CPU thread status: used by rmon */ -#define OS_EVENT_PRENMI 14 /* Pre NMI interrupt */ -#ifndef _FINALROM -#define OS_EVENT_RDB_READ_DONE 15 /* RDB read ok event: used by rmon */ -#define OS_EVENT_RDB_LOG_DONE 16 /* read of log data complete */ -#define OS_EVENT_RDB_DATA_DONE 17 /* read of hostio data complete */ -#define OS_EVENT_RDB_REQ_RAMROM 18 /* host needs ramrom access */ -#define OS_EVENT_RDB_FREE_RAMROM 19 /* host is done with ramrom access */ -#define OS_EVENT_RDB_DBG_DONE 20 -#define OS_EVENT_RDB_FLUSH_PROF 21 -#define OS_EVENT_RDB_ACK_PROF 22 -#endif - /* Flags for debugging purpose */ #define OS_FLAG_CPU_BREAK 1 /* Break exception has occurred */ @@ -186,12 +122,6 @@ typedef struct { #define OS_PRIORITY_APPMAX 127 #define OS_PRIORITY_IDLE 0 /* Must be 0 */ - -/* Flags to turn blocking on/off when sending/receiving message */ - -#define OS_MESG_NOBLOCK 0 -#define OS_MESG_BLOCK 1 - /* Flags to indicate direction of data transfer */ #define OS_READ 0 /* device -> RDRAM */ @@ -406,42 +336,6 @@ typedef struct { #define R_CBUTTONS CONT_F #define D_CBUTTONS CONT_D -/* File System size */ -#define OS_PFS_VERSION 0x0200 -#define OS_PFS_VERSION_HI (OS_PFS_VERSION >> 8) -#define OS_PFS_VERSION_LO (OS_PFS_VERSION & 255) - -#define PFS_FILE_NAME_LEN 16 -#define PFS_FILE_EXT_LEN 4 -#define BLOCKSIZE 32 /* bytes */ -#define PFS_ONE_PAGE 8 /* blocks */ -#define PFS_MAX_BANKS 62 - -/* File System flag */ - -#define PFS_READ 0 -#define PFS_WRITE 1 -#define PFS_CREATE 2 - -/* File System status */ -#define PFS_INITIALIZED 0x1 -#define PFS_CORRUPTED 0x2 /* File system was corrupted */ - -/* File System error number */ - -#define PFS_ERR_NOPACK 1 /* no memory card is plugged or */ -#define PFS_ERR_NEW_PACK 2 /* ram pack has been changed to a */ - /* different one */ -#define PFS_ERR_INCONSISTENT 3 /* need to run Pfschecker */ -#define PFS_ERR_CONTRFAIL CONT_OVERRUN_ERROR -#define PFS_ERR_INVALID 5 /* invalid parameter or file not exist*/ -#define PFS_ERR_BAD_DATA 6 /* the data read from pack are bad*/ -#define PFS_DATA_FULL 7 /* no free pages on ram pack */ -#define PFS_DIR_FULL 8 /* no free directories on ram pack*/ -#define PFS_ERR_EXIST 9 /* file exists */ -#define PFS_ERR_ID_FATAL 10 /* dead ram pack */ -#define PFS_ERR_DEVICE 11 /* wrong device type*/ - /* definition for EEPROM */ #define EEPROM_MAXBLOCKS 64 @@ -739,6 +633,12 @@ extern s32 osMotorInit(OSMesgQueue *, OSPfs *, int); extern s32 osMotorStop(OSPfs *); extern s32 osMotorStart(OSPfs *); +#ifdef VERSION_CN +#define MOTOR_START 1 +#define MOTOR_STOP 0 +extern s32 __osMotorAccess(OSPfs *, s32); +#endif + /* Enhanced PI interface */ extern OSPiHandle *osCartRomInit(void); diff --git a/include/PR/os_cont.h b/include/PR/os_cont.h index 15ee60f3..3b51e3ec 100644 --- a/include/PR/os_cont.h +++ b/include/PR/os_cont.h @@ -53,22 +53,22 @@ extern "C" { typedef struct { u16 type; /* Controller Type */ u8 status; /* Controller status */ - u8 errnum; + u8 errnum; }OSContStatus; typedef struct { u16 button; s8 stick_x; /* -80 <= stick_x <= 80 */ s8 stick_y; /* -80 <= stick_y <= 80 */ - u8 errnum; + u8 errnum; } OSContPad; typedef struct { void *address; /* Ram pad Address: 11 bits */ u8 databuffer[32]; /* address of the data buffer */ - u8 addressCrc; /* CRC code for address */ + u8 addressCrc; /* CRC code for address */ u8 dataCrc; /* CRC code for data */ - u8 errnum; + u8 errnum; } OSContRamIo; diff --git a/include/PR/os_libc.h b/include/PR/os_libc.h index 94111c0b..7dec0e45 100644 --- a/include/PR/os_libc.h +++ b/include/PR/os_libc.h @@ -7,4 +7,12 @@ extern void bcopy(const void *, void *, size_t); extern void bzero(void *, size_t); +/* Printf */ + +extern int sprintf(char *s, const char *fmt, ...); +extern void osSyncPrintf(const char *fmt, ...); +extern void osAsyncPrintf(const char *fmt, ...); +extern int osSyncGetChars(char *buf); +extern int osAsyncGetChars(char *buf); + #endif /* !_OS_LIBC_H_ */ diff --git a/include/PR/os_message.h b/include/PR/os_message.h index 71e76986..458d06c1 100644 --- a/include/PR/os_message.h +++ b/include/PR/os_message.h @@ -76,7 +76,10 @@ typedef struct OSMesgQueue_s { */ /* Events */ -#ifdef _FINALROM + +#ifdef BBPLAYER +#define OS_NUM_EVENTS 31 +#elif defined(_FINALROM) #define OS_NUM_EVENTS 15 #else #define OS_NUM_EVENTS 23 @@ -107,6 +110,16 @@ typedef struct OSMesgQueue_s { #define OS_EVENT_RDB_FLUSH_PROF 21 #define OS_EVENT_RDB_ACK_PROF 22 #endif +#ifdef BBPLAYER +#define OS_EVENT_FLASH 23 /* NAND flash operation complete */ +#define OS_EVENT_AES 24 /* AES */ +#define OS_EVENT_IDE 25 /* IDE? */ +#define OS_EVENT_PI_ERR 26 /* PI Error? */ +#define OS_EVENT_USB0 27 /* USB Controller 0 */ +#define OS_EVENT_USB1 28 /* USB Controller 1 */ +#define OS_EVENT_UNK_29 29 /* TODO does this exist at all */ +#define OS_EVENT_MD 30 /* Related to card */ +#endif /* Flags to turn blocking on/off when sending/receiving message */ diff --git a/include/PR/os_motor.h b/include/PR/os_motor.h new file mode 100644 index 00000000..eb8c7d6c --- /dev/null +++ b/include/PR/os_motor.h @@ -0,0 +1,75 @@ + +/*---------------------------------------------------------------------* + Copyright (C) 1998 Nintendo. + + $RCSfile: os_motor.h,v $ + $Revision: 1.1 $ + $Date: 1998/10/09 08:01:15 $ + *---------------------------------------------------------------------*/ + +#ifndef _OS_MOTOR_H_ +#define _OS_MOTOR_H_ + +#ifdef _LANGUAGE_C_PLUS_PLUS +extern "C" { +#endif + +#include +#include "os_message.h" +#include "os_pfs.h" + + +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/************************************************************************** + * + * Type definitions + * + */ + + +#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ + +/************************************************************************** + * + * Global definitions + * + */ + + +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/************************************************************************** + * + * Macro definitions + * + */ + + +/************************************************************************** + * + * Extern variables + * + */ + + +/************************************************************************** + * + * Function prototypes + * + */ + +/* Rumble PAK interface */ + +extern s32 osMotorInit(OSMesgQueue *, OSPfs *, int); +extern s32 osMotorStop(OSPfs *); +extern s32 osMotorStart(OSPfs *); + + +#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ + +#ifdef _LANGUAGE_C_PLUS_PLUS +} +#endif + +#endif /* !_OS_MOTOR_H_ */ diff --git a/include/PR/os_pfs.h b/include/PR/os_pfs.h new file mode 100644 index 00000000..43a39db1 --- /dev/null +++ b/include/PR/os_pfs.h @@ -0,0 +1,123 @@ +/*==================================================================== + * os_pfs.h + * + * Copyright 1995, Silicon Graphics, Inc. + * All Rights Reserved. + * + * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, + * Inc.; the contents of this file may not be disclosed to third + * parties, copied or duplicated in any form, in whole or in part, + * without the prior written permission of Silicon Graphics, Inc. + * + * RESTRICTED RIGHTS LEGEND: + * Use, duplication or disclosure by the Government is subject to + * restrictions as set forth in subdivision (c)(1)(ii) of the Rights + * in Technical Data and Computer Software clause at DFARS + * 252.227-7013, and/or in similar or successor clauses in the FAR, + * DOD or NASA FAR Supplement. Unpublished - rights reserved under the + * Copyright Laws of the United States. + *====================================================================*/ + +/*---------------------------------------------------------------------* + Copyright (C) 1998 Nintendo. (Originated by SGI) + + $RCSfile: os_pfs.h,v $ + $Revision: 1.1 $ + $Date: 1998/10/09 08:01:16 $ + *---------------------------------------------------------------------*/ + +#ifndef _OS_PFS_H_ +#define _OS_PFS_H_ + +#ifdef _LANGUAGE_C_PLUS_PLUS +extern "C" { +#endif + +#include +#include "os_message.h" + +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/************************************************************************** + * + * Type definitions + * + */ + +/* + * Structure for file system + */ + +typedef struct { + int status; + OSMesgQueue *queue; + int channel; + u8 id[32]; + u8 label[32]; + int version; + int dir_size; + int inode_table; /* block location */ + int minode_table; /* mirrioring inode_table */ + int dir_table; /* block location */ + int inode_start_page; /* page # */ + u8 banks; + u8 activebank; +} OSPfs; + + +typedef struct { + u32 file_size; /* bytes */ + u32 game_code; + u16 company_code; + char ext_name[4]; + char game_name[16]; +} OSPfsState; + +#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ + +/************************************************************************** + * + * Global definitions + * + */ + +/* File System size */ +#define OS_PFS_VERSION 0x0200 +#define OS_PFS_VERSION_HI (OS_PFS_VERSION >> 8) +#define OS_PFS_VERSION_LO (OS_PFS_VERSION & 255) + +#define PFS_FILE_NAME_LEN 16 +#define PFS_FILE_EXT_LEN 4 +#define BLOCKSIZE 32 /* bytes */ +#define PFS_ONE_PAGE 8 /* blocks */ +#define PFS_MAX_BANKS 62 + +/* File System flag */ + +#define PFS_READ 0 +#define PFS_WRITE 1 +#define PFS_CREATE 2 + +/* File System status */ +#define PFS_INITIALIZED 0x1 +#define PFS_CORRUPTED 0x2 /* File system was corrupted */ + +/* File System error number */ + +#define PFS_ERR_NOPACK 1 /* no memory card is plugged or */ +#define PFS_ERR_NEW_PACK 2 /* ram pack has been changed to a */ +#define PFS_ERR_INCONSISTENT 3 /* need to run Pfschecker */ +#define PFS_ERR_CONTRFAIL CONT_OVERRUN_ERROR +#define PFS_ERR_INVALID 5 /* invalid parameter or file not exist*/ +#define PFS_ERR_BAD_DATA 6 /* the data read from pack are bad*/ +#define PFS_DATA_FULL 7 /* no free pages on ram pack */ +#define PFS_DIR_FULL 8 /* no free directories on ram pack*/ +#define PFS_ERR_EXIST 9 /* file exists*/ +#define PFS_ERR_ID_FATAL 10 /* dead ram pack */ +#define PFS_ERR_DEVICE 11 /* wrong device type*/ + +#ifdef _LANGUAGE_C_PLUS_PLUS +} +#endif + +#endif diff --git a/include/PR/os_pi.h b/include/PR/os_pi.h index 8da37e25..86b961e2 100644 --- a/include/PR/os_pi.h +++ b/include/PR/os_pi.h @@ -61,7 +61,7 @@ typedef struct { /*0x08*/ void *dramAddr; /*0x0C*/ uintptr_t devAddr; /*0x10*/ size_t size; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) OSPiHandle *piHandle; // from the official definition #endif } OSIoMesg; diff --git a/include/PR/os_thread.h b/include/PR/os_thread.h index 76e528b5..c07a5745 100644 --- a/include/PR/os_thread.h +++ b/include/PR/os_thread.h @@ -16,6 +16,8 @@ #define OS_STATE_RUNNING 4 #define OS_STATE_WAITING 8 +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + /* Types */ typedef s32 OSPri; @@ -73,3 +75,5 @@ void osStartThread(OSThread *thread); void osStopThread(OSThread *thread); #endif + +#endif diff --git a/include/PR/os_time.h b/include/PR/os_time.h index ecb05d62..878d13fd 100644 --- a/include/PR/os_time.h +++ b/include/PR/os_time.h @@ -13,7 +13,7 @@ typedef struct OSTimer_str u64 interval; u64 remaining; OSMesgQueue *mq; - OSMesg *msg; + OSMesg msg; } OSTimer; typedef u64 OSTime; diff --git a/include/PR/os_vi.h b/include/PR/os_vi.h index 98fb4ed3..d27c5c55 100644 --- a/include/PR/os_vi.h +++ b/include/PR/os_vi.h @@ -4,6 +4,16 @@ #include #include +//TODO: figure out what this is +#define VI_STATE_01 0x01 +#define VI_STATE_XSCALE_UPDATED 0x02 +#define VI_STATE_YSCALE_UPDATED 0x04 +#define VI_STATE_08 0x08 //related to control regs changing +#define VI_STATE_10 0x10 //swap buffer +#define VI_STATE_BLACK 0x20 //probably related to a black screen +#define VI_STATE_REPEATLINE 0x40 //repeat line? +#define VI_STATE_FADE 0x80 //fade + /* Ultra64 Video Interface */ @@ -27,8 +37,7 @@ /* Types */ -typedef struct -{ +typedef struct { u32 ctrl; u32 width; u32 burst; @@ -40,8 +49,7 @@ typedef struct u32 vCurrent; } OSViCommonRegs; -typedef struct -{ +typedef struct { u32 origin; u32 yScale; u32 vStart; @@ -49,15 +57,13 @@ typedef struct u32 vIntr; } OSViFieldRegs; -typedef struct -{ +typedef struct { u8 type; OSViCommonRegs comRegs; OSViFieldRegs fldRegs[2]; } OSViMode; -typedef struct -{ +typedef struct { /* 0x00 */ u16 unk00; //some kind of flags. swap buffer sets to 0x10 /* 0x02 */ u16 retraceCount; /* 0x04 */ void* buffer; diff --git a/include/PR/rcp.h b/include/PR/rcp.h index 68ce9682..022943e3 100644 --- a/include/PR/rcp.h +++ b/include/PR/rcp.h @@ -161,6 +161,7 @@ The Indy development board use cartridge domain 1: #define DEVICE_TYPE_BULK 1 /* ROM bulk */ #define DEVICE_TYPE_64DD 2 /* 64 Disk Drive */ #define DEVICE_TYPE_SRAM 3 /* SRAM */ +#define DEVICE_TYPE_INIT 7 /* initial value */ /************************************************************************* * SP Memory diff --git a/include/PR/rdb.h b/include/PR/rdb.h new file mode 100644 index 00000000..ea8c1006 --- /dev/null +++ b/include/PR/rdb.h @@ -0,0 +1,94 @@ + +/************************************************************************** + * + * $Revision: 1.6 $ + * $Date: 1997/02/11 08:29:31 $ + * $Source: /disk6/Master/cvsmdev2/PR/include/rdb.h,v $ + * + **************************************************************************/ + +#ifndef _RDB_H +#define _RDB_H + +/* U64 side address */ +#define RDB_BASE_REG 0xc0000000 +#define RDB_WRITE_INTR_REG (RDB_BASE_REG + 0x8) +#define RDB_READ_INTR_REG (RDB_BASE_REG + 0xc) +#define RDB_BASE_VIRTUAL_ADDR 0x80000000 + +/* packet type Have six bits, so can have up to 63 types */ +#define RDB_TYPE_INVALID 0 +#define RDB_TYPE_GtoH_PRINT 1 +#define RDB_TYPE_GtoH_FAULT 2 +#define RDB_TYPE_GtoH_LOG_CT 3 +#define RDB_TYPE_GtoH_LOG 4 +#define RDB_TYPE_GtoH_READY_FOR_DATA 5 +#define RDB_TYPE_GtoH_DATA_CT 6 +#define RDB_TYPE_GtoH_DATA 7 +#define RDB_TYPE_GtoH_DEBUG 8 +#define RDB_TYPE_GtoH_RAMROM 9 +#define RDB_TYPE_GtoH_DEBUG_DONE 10 +#define RDB_TYPE_GtoH_DEBUG_READY 11 +#define RDB_TYPE_GtoH_KDEBUG 12 +#define RDB_TYPE_GtoH_PROF_DATA 22 + + +#define RDB_TYPE_HtoG_LOG_DONE 13 +#define RDB_TYPE_HtoG_DEBUG 14 +#define RDB_TYPE_HtoG_DEBUG_CT 15 +#define RDB_TYPE_HtoG_DATA 16 +#define RDB_TYPE_HtoG_DATA_DONE 17 +#define RDB_TYPE_HtoG_REQ_RAMROM 18 +#define RDB_TYPE_HtoG_FREE_RAMROM 19 +#define RDB_TYPE_HtoG_KDEBUG 20 +#define RDB_TYPE_HtoG_PROF_SIGNAL 21 + + +#define RDB_PROF_ACK_SIG 1 +#define RDB_PROF_FLUSH_SIG 2 +#define PROF_BLOCK_SIZE 2048 + +#define RDB_LOG_MAX_BLOCK_SIZE 0x8000 +#define RDB_DATA_MAX_BLOCK_SIZE 0x8000 + + +/* GIO side address */ +#define GIO_RDB_BASE_REG 0xbf480000 +#define GIO_RDB_WRITE_INTR_REG (GIO_RDB_BASE_REG + 0x8) +#define GIO_RDB_READ_INTR_REG (GIO_RDB_BASE_REG + 0xc) + +/* minor device number */ +#define GIO_RDB_PRINT_MINOR 1 +#define GIO_RDB_DEBUG_MINOR 2 + +/* interrupt bit */ +#define GIO_RDB_WRITE_INTR_BIT 0x80000000 +#define GIO_RDB_READ_INTR_BIT 0x40000000 + +/* debug command */ +#define DEBUG_COMMAND_NULL 0 +#define DEBUG_COMMAND_MEMORY 1 +#define DEBUG_COMMAND_REGISTER 2 +#define DEBUG_COMMAND_INVALID 255 + +/* debug state */ +#define DEBUG_STATE_NULL 0 +#define DEBUG_STATE_RECEIVE 1 +#define DEBUG_STATE_INVALID 255 + +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/* Structure for debug port */ +typedef struct { + unsigned type : 2; /* 0: invalid, 1: print, 2: debug */ + unsigned pad : 4; // CHANGED FROM THE ORIGINAL LIBULTRA HEADER + unsigned length : 2; /* 1, 2, or 3 */ + unsigned char buf[3]; /* character buffer */ +} rdbPacket; + +extern unsigned int __osRdbWriteOK; +extern unsigned int __osRdbSendMessage; + +#endif /* _LANGUAGE_C */ + +#endif /* !_RDB_H */ diff --git a/include/PR/sptask.h b/include/PR/sptask.h index ec443ef4..46dd0e2c 100644 --- a/include/PR/sptask.h +++ b/include/PR/sptask.h @@ -18,7 +18,7 @@ /* Flags */ #define M_TASK_FLAG0 1 #define M_TASK_FLAG1 2 -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) #define M_TASK_FLAG2 4 #endif diff --git a/include/PR/ultratypes.h b/include/PR/ultratypes.h index 8a00490a..425b7a9e 100644 --- a/include/PR/ultratypes.h +++ b/include/PR/ultratypes.h @@ -1,6 +1,8 @@ #ifndef _ULTRA64_TYPES_H_ #define _ULTRA64_TYPES_H_ +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + #ifndef NULL #define NULL (void *)0 #endif @@ -42,3 +44,5 @@ typedef ptrdiff_t ssize_t; #endif #endif + +#endif diff --git a/include/behavior_data.h b/include/behavior_data.h index 66c410b7..538ec93b 100644 --- a/include/behavior_data.h +++ b/include/behavior_data.h @@ -3,6 +3,11 @@ #include "types.h" +#define BPARAM1(param) (((param) & 0xFF) << 24) +#define BPARAM2(param) (((param) & 0xFF) << 16) +#define BPARAM3(param) (((param) & 0xFF) << 8) +#define BPARAM4(param) (((param) & 0xFF) << 0) + extern const BehaviorScript bhvStarDoor[]; extern const BehaviorScript bhvMrI[]; extern const BehaviorScript bhvMrIBody[]; @@ -10,8 +15,8 @@ extern const BehaviorScript bhvMrIParticle[]; extern const BehaviorScript bhvPurpleParticle[]; extern const BehaviorScript bhvGiantPole[]; extern const BehaviorScript bhvPoleGrabbing[]; -extern const BehaviorScript bhvThiHugeIslandTop[]; -extern const BehaviorScript bhvThiTinyIslandTop[]; +extern const BehaviorScript bhvTHIHugeIslandTop[]; +extern const BehaviorScript bhvTHITinyIslandTop[]; extern const BehaviorScript bhvCapSwitchBase[]; extern const BehaviorScript bhvCapSwitch[]; extern const BehaviorScript bhvKingBobomb[]; @@ -37,12 +42,12 @@ extern const BehaviorScript bhvUnused05A8[]; extern const BehaviorScript bhvRotatingPlatform[]; extern const BehaviorScript bhvTower[]; extern const BehaviorScript bhvBulletBillCannon[]; -extern const BehaviorScript bhvWfBreakableWallRight[]; -extern const BehaviorScript bhvWfBreakableWallLeft[]; +extern const BehaviorScript bhvWFBreakableWallRight[]; +extern const BehaviorScript bhvWFBreakableWallLeft[]; extern const BehaviorScript bhvKickableBoard[]; extern const BehaviorScript bhvTowerDoor[]; extern const BehaviorScript bhvRotatingCounterClockwise[]; -extern const BehaviorScript bhvWfRotatingWoodenPlatform[]; +extern const BehaviorScript bhvWFRotatingWoodenPlatform[]; extern const BehaviorScript bhvKoopaShellUnderwater[]; extern const BehaviorScript bhvExitPodiumWarp[]; extern const BehaviorScript bhvFadingWarp[]; @@ -51,7 +56,7 @@ extern const BehaviorScript bhvWarpPipe[]; extern const BehaviorScript bhvWhitePuffExplosion[]; extern const BehaviorScript bhvSpawnedStar[]; extern const BehaviorScript bhvSpawnedStarNoLevelExit[]; -extern const BehaviorScript bhvMrIBlueCoin[]; +extern const BehaviorScript bhvSpawnedBlueCoin[]; extern const BehaviorScript bhvCoinInsideBoo[]; extern const BehaviorScript bhvCoinFormationSpawn[]; extern const BehaviorScript bhvCoinFormation[]; @@ -72,16 +77,16 @@ extern const BehaviorScript bhvTriangleParticleSpawner[]; extern const BehaviorScript bhvDoorWarp[]; extern const BehaviorScript bhvDoor[]; extern const BehaviorScript bhvGrindel[]; -extern const BehaviorScript bhvThwomp2[]; extern const BehaviorScript bhvThwomp[]; +extern const BehaviorScript bhvThwomp2[]; extern const BehaviorScript bhvTumblingBridgePlatform[]; -extern const BehaviorScript bhvWfTumblingBridge[]; -extern const BehaviorScript bhvBbhTumblingBridge[]; -extern const BehaviorScript bhvLllTumblingBridge[]; +extern const BehaviorScript bhvTumblingBridge[]; +extern const BehaviorScript bhvBBHTumblingBridge[]; +extern const BehaviorScript bhvLLLTumblingBridge[]; extern const BehaviorScript bhvFlame[]; extern const BehaviorScript bhvAnotherElavator[]; -extern const BehaviorScript bhvRrElevatorPlatform[]; -extern const BehaviorScript bhvHmcElevatorPlatform[]; +extern const BehaviorScript bhvRRElevatorPlatform[]; +extern const BehaviorScript bhvHMCElevatorPlatform[]; extern const BehaviorScript bhvWaterMist[]; extern const BehaviorScript bhvBreathParticleSpawner[]; extern const BehaviorScript bhvBreakBoxTriangle[]; @@ -99,15 +104,15 @@ extern const BehaviorScript bhvUkiki[]; extern const BehaviorScript bhvUkikiCageChild[]; extern const BehaviorScript bhvUkikiCageStar[]; extern const BehaviorScript bhvUkikiCage[]; -extern const BehaviorScript bhvBitfsSinkingPlatforms[]; -extern const BehaviorScript bhvBitfsSinkingCagePlatform[]; -extern const BehaviorScript bhvDddMovingPole[]; -extern const BehaviorScript bhvBitfsTiltingInvertedPyramid[]; +extern const BehaviorScript bhvBitFSSinkingPlatforms[]; +extern const BehaviorScript bhvBitFSSinkingCagePlatform[]; +extern const BehaviorScript bhvDDDMovingPole[]; +extern const BehaviorScript bhvBitFSTiltingInvertedPyramid[]; extern const BehaviorScript bhvSquishablePlatform[]; extern const BehaviorScript bhvCutOutObject[]; extern const BehaviorScript bhvBetaMovingFlamesSpawn[]; extern const BehaviorScript bhvBetaMovingFlames[]; -extern const BehaviorScript bhvRrRotatingBridgePlatform[]; +extern const BehaviorScript bhvRRRotatingBridgePlatform[]; extern const BehaviorScript bhvFlamethrower[]; extern const BehaviorScript bhvFlamethrowerFlame[]; extern const BehaviorScript bhvBouncingFireball[]; @@ -120,9 +125,9 @@ extern const BehaviorScript bhvBlackSmokeUpward[]; extern const BehaviorScript bhvBetaFishSplashSpawner[]; extern const BehaviorScript bhvSpindrift[]; extern const BehaviorScript bhvTowerPlatformGroup[]; -extern const BehaviorScript bhvWfSlidingTowerPlatform[]; -extern const BehaviorScript bhvWfElevatorTowerPlatform[]; -extern const BehaviorScript bhvWfSolidTowerPlatform[]; +extern const BehaviorScript bhvWFSlidingTowerPlatform[]; +extern const BehaviorScript bhvWFElevatorTowerPlatform[]; +extern const BehaviorScript bhvWFSolidTowerPlatform[]; extern const BehaviorScript bhvLeafParticleSpawner[]; extern const BehaviorScript bhvTreeSnow[]; extern const BehaviorScript bhvTreeLeaf[]; @@ -139,7 +144,7 @@ extern const BehaviorScript bhvBreakableBox[]; extern const BehaviorScript bhvPushableMetalBox[]; extern const BehaviorScript bhvHeaveHo[]; extern const BehaviorScript bhvHeaveHoThrowMario[]; -extern const BehaviorScript bhvCcmTouchedStarSpawn[]; +extern const BehaviorScript bhvCCMTouchedStarSpawn[]; extern const BehaviorScript bhvUnusedPoundablePlatform[]; extern const BehaviorScript bhvBetaTrampolineTop[]; extern const BehaviorScript bhvBetaTrampolineSpring[]; @@ -175,34 +180,34 @@ extern const BehaviorScript bhvBowserKeyUnlockDoor[]; extern const BehaviorScript bhvBowserKeyCourseExit[]; extern const BehaviorScript bhvInvisibleObjectsUnderBridge[]; extern const BehaviorScript bhvWaterLevelPillar[]; -extern const BehaviorScript bhvDddWarp[]; +extern const BehaviorScript bhvDDDWarp[]; extern const BehaviorScript bhvMoatGrills[]; extern const BehaviorScript bhvClockMinuteHand[]; extern const BehaviorScript bhvClockHourHand[]; extern const BehaviorScript bhvMacroUkiki[]; extern const BehaviorScript bhvStub1D0C[]; -extern const BehaviorScript bhvLllRotatingHexagonalPlatform[]; -extern const BehaviorScript bhvLllSinkingRockBlock[]; +extern const BehaviorScript bhvLLLRotatingHexagonalPlatform[]; +extern const BehaviorScript bhvLLLSinkingRockBlock[]; extern const BehaviorScript bhvStub1D70[]; -extern const BehaviorScript bhvLllMovingOctagonalMeshPlatform[]; +extern const BehaviorScript bhvLLLMovingOctagonalMeshPlatform[]; extern const BehaviorScript bhvSnowBall[]; -extern const BehaviorScript bhvLllRotatingBlockWithFireBars[]; -extern const BehaviorScript bhvLllRotatingHexFlame[]; -extern const BehaviorScript bhvLllWoodPiece[]; -extern const BehaviorScript bhvLllFloatingWoodBridge[]; +extern const BehaviorScript bhvLLLRotatingBlockWithFireBars[]; +extern const BehaviorScript bhvLLLRotatingHexFlame[]; +extern const BehaviorScript bhvLLLWoodPiece[]; +extern const BehaviorScript bhvLLLFloatingWoodBridge[]; extern const BehaviorScript bhvVolcanoFlames[]; -extern const BehaviorScript bhvLllRotatingHexagonalRing[]; -extern const BehaviorScript bhvLllSinkingRectangularPlatform[]; -extern const BehaviorScript bhvLllSinkingSquarePlatforms[]; -extern const BehaviorScript bhvLllTiltingInvertedPyramid[]; +extern const BehaviorScript bhvLLLRotatingHexagonalRing[]; +extern const BehaviorScript bhvLLLSinkingRectangularPlatform[]; +extern const BehaviorScript bhvLLLSinkingSquarePlatforms[]; +extern const BehaviorScript bhvLLLTiltingInvertedPyramid[]; extern const BehaviorScript bhvUnused1F30[]; extern const BehaviorScript bhvKoopaShell[]; extern const BehaviorScript bhvKoopaShellFlame[]; extern const BehaviorScript bhvToxBox[]; extern const BehaviorScript bhvPiranhaPlant[]; -extern const BehaviorScript bhvLllHexagonalMesh[]; -extern const BehaviorScript bhvLllBowserPuzzlePiece[]; -extern const BehaviorScript bhvLllBowserPuzzle[]; +extern const BehaviorScript bhvLLLHexagonalMesh[]; +extern const BehaviorScript bhvLLLBowserPuzzlePiece[]; +extern const BehaviorScript bhvLLLBowserPuzzle[]; extern const BehaviorScript bhvTuxiesMother[]; extern const BehaviorScript bhvPenguinBaby[]; extern const BehaviorScript bhvUnused20E0[]; @@ -212,8 +217,8 @@ extern const BehaviorScript bhvFewBlueFishSpawner[]; extern const BehaviorScript bhvFishSpawner[]; extern const BehaviorScript bhvFishCommon[]; extern const BehaviorScript bhvFish[]; -extern const BehaviorScript bhvWdwExpressElevator[]; -extern const BehaviorScript bhvWdwExpressElevatorPlatform[]; +extern const BehaviorScript bhvWDWExpressElevator[]; +extern const BehaviorScript bhvWDWExpressElevatorPlatform[]; extern const BehaviorScript bhvChirpChirp[]; extern const BehaviorScript bhvChirpChirpUnused[]; extern const BehaviorScript bhvBub[]; @@ -227,7 +232,7 @@ extern const BehaviorScript bhvBowserSubDoor[]; extern const BehaviorScript bhvBowsersSub[]; extern const BehaviorScript bhvSushiShark[]; extern const BehaviorScript bhvSushiSharkCollisionChild[]; -extern const BehaviorScript bhvJrbSlidingBox[]; +extern const BehaviorScript bhvJRBSlidingBox[]; extern const BehaviorScript bhvShipPart3[]; extern const BehaviorScript bhvInSunkenShip3[]; extern const BehaviorScript bhvSunkenShipPart[]; @@ -262,7 +267,7 @@ extern const BehaviorScript bhvMerryGoRoundBoo[]; extern const BehaviorScript bhvGhostHuntBoo[]; extern const BehaviorScript bhvHiddenStaircaseStep[]; extern const BehaviorScript bhvBooStaircase[]; -extern const BehaviorScript bhvBbhTiltingTrapPlatform[]; +extern const BehaviorScript bhvBBHTiltingTrapPlatform[]; extern const BehaviorScript bhvHauntedBookshelf[]; extern const BehaviorScript bhvMeshElevator[]; extern const BehaviorScript bhvMerryGoRound[]; @@ -371,22 +376,22 @@ extern const BehaviorScript bhvBowserBombSmoke[]; extern const BehaviorScript bhvCelebrationStar[]; extern const BehaviorScript bhvCelebrationStarSparkle[]; extern const BehaviorScript bhvStarKeyCollectionPuffSpawner[]; -extern const BehaviorScript bhvLllDrawbridgeSpawner[]; -extern const BehaviorScript bhvLllDrawbridge[]; +extern const BehaviorScript bhvLLLDrawbridgeSpawner[]; +extern const BehaviorScript bhvLLLDrawbridge[]; extern const BehaviorScript bhvSmallBomp[]; extern const BehaviorScript bhvLargeBomp[]; -extern const BehaviorScript bhvWfSlidingPlatform[]; +extern const BehaviorScript bhvWFSlidingPlatform[]; extern const BehaviorScript bhvMoneybag[]; extern const BehaviorScript bhvMoneybagHidden[]; extern const BehaviorScript bhvPitBowlingBall[]; extern const BehaviorScript bhvFreeBowlingBall[]; extern const BehaviorScript bhvBowlingBall[]; -extern const BehaviorScript bhvTtmBowlingBallSpawner[]; -extern const BehaviorScript bhvBobBowlingBallSpawner[]; -extern const BehaviorScript bhvThiBowlingBallSpawner[]; -extern const BehaviorScript bhvRrCruiserWing[]; +extern const BehaviorScript bhvTTMBowlingBallSpawner[]; +extern const BehaviorScript bhvBoBBowlingBallSpawner[]; +extern const BehaviorScript bhvTHIBowlingBallSpawner[]; +extern const BehaviorScript bhvRRCruiserWing[]; extern const BehaviorScript bhvSpindel[]; -extern const BehaviorScript bhvSslMovingPyramidWall[]; +extern const BehaviorScript bhvSSLMovingPyramidWall[]; extern const BehaviorScript bhvPyramidElevator[]; extern const BehaviorScript bhvPyramidElevatorTrajectoryMarkerBall[]; extern const BehaviorScript bhvPyramidTop[]; @@ -416,38 +421,38 @@ extern const BehaviorScript bhvRedCoin[]; extern const BehaviorScript bhvBowserCourseRedCoinStar[]; extern const BehaviorScript bhvHiddenStar[]; extern const BehaviorScript bhvHiddenStarTrigger[]; -extern const BehaviorScript bhvTtmRollingLog[]; -extern const BehaviorScript bhvLllVolcanoFallingTrap[]; -extern const BehaviorScript bhvLllRollingLog[]; -extern const BehaviorScript bhv1upWalking[]; -extern const BehaviorScript bhv1upRunningAway[]; -extern const BehaviorScript bhv1upSliding[]; +extern const BehaviorScript bhvTTMRollingLog[]; +extern const BehaviorScript bhvLLLVolcanoFallingTrap[]; +extern const BehaviorScript bhvLLLRollingLog[]; +extern const BehaviorScript bhv1UpWalking[]; +extern const BehaviorScript bhv1UpRunningAway[]; +extern const BehaviorScript bhv1UpSliding[]; extern const BehaviorScript bhv1Up[]; -extern const BehaviorScript bhv1upJumpOnApproach[]; -extern const BehaviorScript bhvHidden1up[]; -extern const BehaviorScript bhvHidden1upTrigger[]; -extern const BehaviorScript bhvHidden1upInPole[]; -extern const BehaviorScript bhvHidden1upInPoleTrigger[]; -extern const BehaviorScript bhvHidden1upInPoleSpawner[]; +extern const BehaviorScript bhv1UpJumpOnApproach[]; +extern const BehaviorScript bhvHidden1Up[]; +extern const BehaviorScript bhvHidden1UpTrigger[]; +extern const BehaviorScript bhvHidden1UpInPole[]; +extern const BehaviorScript bhvHidden1UpInPoleTrigger[]; +extern const BehaviorScript bhvHidden1UpInPoleSpawner[]; extern const BehaviorScript bhvControllablePlatform[]; extern const BehaviorScript bhvControllablePlatformSub[]; extern const BehaviorScript bhvBreakableBoxSmall[]; extern const BehaviorScript bhvSlidingSnowMound[]; extern const BehaviorScript bhvSnowMoundSpawn[]; -extern const BehaviorScript bhvWdwSquareFloatingPlatform[]; -extern const BehaviorScript bhvWdwRectangularFloatingPlatform[]; -extern const BehaviorScript bhvJrbFloatingPlatform[]; +extern const BehaviorScript bhvWDWSquareFloatingPlatform[]; +extern const BehaviorScript bhvWDWRectangularFloatingPlatform[]; +extern const BehaviorScript bhvJRBFloatingPlatform[]; extern const BehaviorScript bhvArrowLift[]; extern const BehaviorScript bhvOrangeNumber[]; extern const BehaviorScript bhvMantaRay[]; extern const BehaviorScript bhvFallingPillar[]; extern const BehaviorScript bhvFallingPillarHitbox[]; extern const BehaviorScript bhvPillarBase[]; -extern const BehaviorScript bhvJrbFloatingBox[]; +extern const BehaviorScript bhvJRBFloatingBox[]; extern const BehaviorScript bhvDecorativePendulum[]; extern const BehaviorScript bhvTreasureChestsShip[]; -extern const BehaviorScript bhvTreasureChestsJrb[]; -extern const BehaviorScript bhvTreasureChests[]; +extern const BehaviorScript bhvTreasureChestsJRB[]; +extern const BehaviorScript bhvTreasureChestsDDD[]; extern const BehaviorScript bhvTreasureChestBottom[]; extern const BehaviorScript bhvTreasureChestTop[]; extern const BehaviorScript bhvMips[]; diff --git a/include/config.h b/include/config.h index 044b0694..053b737a 100644 --- a/include/config.h +++ b/include/config.h @@ -10,34 +10,39 @@ // Bug Fixes // --| Post-JP Version Nintendo Bug Fixes /// Fixes bug where obtaining over 999 coins sets the number of lives to 999 (or -25) -#define BUGFIX_MAX_LIVES (0 || VERSION_US || VERSION_EU || VERSION_SH) +#define BUGFIX_MAX_LIVES (0 || VERSION_US || VERSION_EU || VERSION_SH || VERSION_CN) /// Fixes bug where the Boss music won't fade out after defeating King Bob-omb -#define BUGFIX_KING_BOB_OMB_FADE_MUSIC (0 || VERSION_US || VERSION_EU || VERSION_SH) -/// Fixes bug in Bob-Omb Battlefield where entering a warp stops the Koopa race music -#define BUGFIX_KOOPA_RACE_MUSIC (0 || VERSION_US || VERSION_EU || VERSION_SH) +#define BUGFIX_KING_BOB_OMB_FADE_MUSIC (0 || VERSION_US || VERSION_EU || VERSION_SH || VERSION_CN) +/// Fixes bug in Bob-omb Battlefield where entering a warp stops the Koopa race music +#define BUGFIX_KOOPA_RACE_MUSIC (0 || VERSION_US || VERSION_EU || VERSION_SH || VERSION_CN) /// Fixes bug where Piranha Plants do not reset their action state when the /// player exits their activation radius. -#define BUGFIX_PIRANHA_PLANT_STATE_RESET (0 || VERSION_US || VERSION_EU || VERSION_SH) +#define BUGFIX_PIRANHA_PLANT_STATE_RESET (0 || VERSION_US || VERSION_EU || VERSION_SH || VERSION_CN) /// Fixes bug where sleeping Piranha Plants damage players that bump into them -#define BUGFIX_PIRANHA_PLANT_SLEEP_DAMAGE (0 || VERSION_US || VERSION_SH) +#define BUGFIX_PIRANHA_PLANT_SLEEP_DAMAGE (0 || VERSION_US || VERSION_SH || VERSION_CN) /// Fixes bug where it shows a star when you grab a key in bowser battle stages -#define BUGFIX_STAR_BOWSER_KEY (0 || VERSION_US || VERSION_EU || VERSION_SH) +#define BUGFIX_STAR_BOWSER_KEY (0 || VERSION_US || VERSION_EU || VERSION_SH || VERSION_CN) /// Fixes bug that enables Mario in time stop even if is not ready to speak -#define BUGFIX_DIALOG_TIME_STOP (0 || VERSION_US || VERSION_EU || VERSION_SH) +#define BUGFIX_DIALOG_TIME_STOP (0 || VERSION_US || VERSION_EU || VERSION_SH || VERSION_CN) /// Fixes bug that causes Mario to still collide with Bowser in BitS after his defeat -#define BUGFIX_BOWSER_COLLIDE_BITS_DEAD (0 || VERSION_US || VERSION_EU || VERSION_SH) +#define BUGFIX_BOWSER_COLLIDE_BITS_DEAD (0 || VERSION_US || VERSION_EU || VERSION_SH || VERSION_CN) /// Fixes bug where Bowser wouldn't reset his speed when fallen off (and adds missing checks) -#define BUGFIX_BOWSER_FALLEN_OFF_STAGE (0 || VERSION_US || VERSION_EU || VERSION_SH) +#define BUGFIX_BOWSER_FALLEN_OFF_STAGE (0 || VERSION_US || VERSION_EU || VERSION_SH || VERSION_CN) /// Fixes bug where Bowser would look weird while fading out -#define BUGFIX_BOWSER_FADING_OUT (0 || VERSION_US || VERSION_EU || VERSION_SH) +#define BUGFIX_BOWSER_FADING_OUT (0 || VERSION_US || VERSION_EU || VERSION_SH || VERSION_CN) // Support Rumble Pak -#define ENABLE_RUMBLE (0 || VERSION_SH) +#define ENABLE_RUMBLE (0 || VERSION_SH || VERSION_CN) // Screen Size Defines #define SCREEN_WIDTH 320 #define SCREEN_HEIGHT 240 +// Stack Size Defines +#define IDLE_STACKSIZE 0x800 +#define STACKSIZE 0x2000 +#define UNUSED_STACKSIZE 0x1400 + // Border Height Define for NTSC Versions #ifdef TARGET_N64 #ifndef VERSION_EU diff --git a/include/dialog_ids.h b/include/dialog_ids.h index 2d9a2410..10e087ba 100644 --- a/include/dialog_ids.h +++ b/include/dialog_ids.h @@ -1,7 +1,7 @@ #ifndef DIALOG_IDS_H #define DIALOG_IDS_H -enum DialogId { +enum DialogID { DIALOG_NONE = -1, DIALOG_000, DIALOG_001, diff --git a/include/geo_commands.h b/include/geo_commands.h index 432ec1fd..c611619b 100644 --- a/include/geo_commands.h +++ b/include/geo_commands.h @@ -308,7 +308,7 @@ CMD_HH(ty, tz), \ CMD_PTR(displayList) #define GEO_BILLBOARD() \ - GEO_BILLBOARD_WITH_PARAMS(0, 0, 0, 0) + GEO_BILLBOARD_WITH_PARAMS(0, 0, 0, 0) /** * 0x15: Create plain display list scene graph node @@ -357,7 +357,7 @@ CMD_BBH(0x19, 0x00, background), \ CMD_PTR(function) #define GEO_BACKGROUND_COLOR(background) \ - GEO_BACKGROUND(background, NULL) + GEO_BACKGROUND(background, NULL) /** * 0x1A: No operation diff --git a/include/level_commands.h b/include/level_commands.h index f2490fe1..24ab99b4 100644 --- a/include/level_commands.h +++ b/include/level_commands.h @@ -214,19 +214,19 @@ CMD_PTR(unk4), \ CMD_W(unk8) -#define OBJECT_WITH_ACTS(model, posX, posY, posZ, angleX, angleY, angleZ, behParam, beh, acts) \ +#define OBJECT_WITH_ACTS(model, posX, posY, posZ, angleX, angleY, angleZ, bhvParam, bhv, acts) \ CMD_BBBB(0x24, 0x18, acts, model), \ CMD_HHHHHH(posX, posY, posZ, angleX, angleY, angleZ), \ - CMD_W(behParam), \ - CMD_PTR(beh) + CMD_W(bhvParam), \ + CMD_PTR(bhv) -#define OBJECT(model, posX, posY, posZ, angleX, angleY, angleZ, behParam, beh) \ - OBJECT_WITH_ACTS(model, posX, posY, posZ, angleX, angleY, angleZ, behParam, beh, 0x1F) +#define OBJECT(model, posX, posY, posZ, angleX, angleY, angleZ, bhvParam, bhv) \ + OBJECT_WITH_ACTS(model, posX, posY, posZ, angleX, angleY, angleZ, bhvParam, bhv, 0x1F) -#define MARIO(unk3, behArg, beh) \ - CMD_BBBB(0x25, 0x0C, 0x00, unk3), \ - CMD_W(behArg), \ - CMD_PTR(beh) +#define MARIO(model, bhvArg, bhv) \ + CMD_BBBB(0x25, 0x0C, 0x00, model), \ + CMD_W(bhvArg), \ + CMD_PTR(bhv) #define WARP_NODE(id, destLevel, destArea, destNode, flags) \ CMD_BBBB(0x26, 0x08, id, destLevel), \ @@ -268,8 +268,8 @@ CMD_BBH(0x2F, 0x08, 0x0000), \ CMD_PTR(surfaceRooms) -#define SHOW_DIALOG(index, dialogId) \ - CMD_BBBB(0x30, 0x04, index, dialogId) +#define SHOW_DIALOG(index, dialogID) \ + CMD_BBBB(0x30, 0x04, index, dialogID) #define TERRAIN_TYPE(terrainType) \ CMD_BBH(0x31, 0x04, terrainType) diff --git a/include/level_misc_macros.h b/include/level_misc_macros.h index 91ccd784..70b8cb68 100644 --- a/include/level_misc_macros.h +++ b/include/level_misc_macros.h @@ -1,11 +1,11 @@ #ifndef LEVEL_MISC_MACROS_H #define LEVEL_MISC_MACROS_H -#define MACRO_OBJECT_WITH_BEH_PARAM(preset, yaw, posX, posY, posZ, behParam) \ - ((s16)((yaw * 0x10 / 45) << 9) | (preset + 0x1F)), posX, posY, posZ, behParam +#define MACRO_OBJECT_WITH_BHV_PARAM(preset, yaw, posX, posY, posZ, bhvParam) \ + ((s16)((yaw * 0x10 / 45) << 9) | (preset + 0x1F)), posX, posY, posZ, bhvParam #define MACRO_OBJECT(preset, yaw, posX, posY, posZ) \ - MACRO_OBJECT_WITH_BEH_PARAM(preset, yaw, posX, posY, posZ, 0) + MACRO_OBJECT_WITH_BHV_PARAM(preset, yaw, posX, posY, posZ, 0) #define MACRO_OBJECT_END() \ 0x001E diff --git a/include/libc/stdarg.h b/include/libc/stdarg.h index aa7e3393..26906110 100644 --- a/include/libc/stdarg.h +++ b/include/libc/stdarg.h @@ -2,11 +2,256 @@ #define STDARG_H // When not building with IDO, use the builtin vaarg macros for portability. -#ifndef __sgi +#if !defined(__sgi) && (__GNUC__ > 2) #define va_list __builtin_va_list #define va_start __builtin_va_start #define va_arg __builtin_va_arg #define va_end __builtin_va_end + +#elif (__GNUC__ == 2) + +typedef void *__gnuc_va_list; +typedef __gnuc_va_list va_list; + +#ifndef _VA_MIPS_H_ENUM +#define _VA_MIPS_H_ENUM +enum { + __no_type_class = -1, + __void_type_class, + __integer_type_class, + __char_type_class, + __enumeral_type_class, + __boolean_type_class, + __pointer_type_class, + __reference_type_class, + __offset_type_class, + __real_type_class, + __complex_type_class, + __function_type_class, + __method_type_class, + __record_type_class, + __union_type_class, + __array_type_class, + __string_type_class, + __set_type_class, + __file_type_class, + __lang_type_class +}; +#endif + +/* In GCC version 2, we want an ellipsis at the end of the declaration + of the argument list. GCC version 1 can't parse it. */ + +#if __GNUC__ > 1 +#define __va_ellipsis ... +#else +#define __va_ellipsis +#endif + +#ifdef __mips64 +#define __va_rounded_size(__TYPE) \ + (((sizeof (__TYPE) + 8 - 1) / 8) * 8) +#else +#define __va_rounded_size(__TYPE) \ + (((sizeof (__TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)) +#endif + +#ifdef __mips64 +#define __va_reg_size 8 +#else +#define __va_reg_size 4 +#endif + +/* Get definitions for _MIPS_SIM_ABI64 etc. */ +#ifdef _MIPS_SIM +//#include +#endif + +#ifdef STDARG_H +#if defined (__mips_eabi) +#if ! defined (__mips_soft_float) && ! defined (__mips_single_float) +#ifdef __mips64 +#define va_start(__AP, __LASTARG) \ + (__AP.__gp_regs = ((char *) __builtin_next_arg (__LASTARG) \ + - (__builtin_args_info (2) < 8 \ + ? (8 - __builtin_args_info (2)) * __va_reg_size \ + : 0)), \ + __AP.__fp_left = 8 - __builtin_args_info (3), \ + __AP.__fp_regs = __AP.__gp_regs - __AP.__fp_left * __va_reg_size) +#else /* ! defined (__mips64) */ +#define va_start(__AP, __LASTARG) \ + (__AP.__gp_regs = ((char *) __builtin_next_arg (__LASTARG) \ + - (__builtin_args_info (2) < 8 \ + ? (8 - __builtin_args_info (2)) * __va_reg_size \ + : 0)), \ + __AP.__fp_left = (8 - __builtin_args_info (3)) / 2, \ + __AP.__fp_regs = __AP.__gp_regs - __AP.__fp_left * 8, \ + __AP.__fp_regs = (char *) ((int) __AP.__fp_regs & -8)) +#endif /* ! defined (__mips64) */ +#else /* ! (! defined (__mips_soft_float) && ! defined (__mips_single_float) ) */ +#define va_start(__AP, __LASTARG) \ + (__AP = ((__gnuc_va_list) __builtin_next_arg (__LASTARG) \ + - (__builtin_args_info (2) >= 8 ? 0 \ + : (8 - __builtin_args_info (2)) * __va_reg_size))) +#endif /* ! (! defined (__mips_soft_float) && ! defined (__mips_single_float) ) */ +#else /* ! defined (__mips_eabi) */ +#define va_start(__AP, __LASTARG) \ + (__AP = (__gnuc_va_list) __builtin_next_arg (__LASTARG)) +#endif /* ! (defined (__mips_eabi) && ! defined (__mips_soft_float) && ! defined (__mips_single_float)) */ +#else /* ! _STDARG_H */ +#define va_alist __builtin_va_alist +#ifdef __mips64 +/* This assumes that `long long int' is always a 64 bit type. */ +#define va_dcl long long int __builtin_va_alist; __va_ellipsis +#else +#define va_dcl int __builtin_va_alist; __va_ellipsis +#endif +#if defined (__mips_eabi) +#if ! defined (__mips_soft_float) && ! defined (__mips_single_float) +#ifdef __mips64 +#define va_start(__AP) \ + (__AP.__gp_regs = ((char *) __builtin_next_arg () \ + - (__builtin_args_info (2) < 8 \ + ? (8 - __builtin_args_info (2)) * __va_reg_size \ + : __va_reg_size)), \ + __AP.__fp_left = 8 - __builtin_args_info (3), \ + __AP.__fp_regs = __AP.__gp_regs - __AP.__fp_left * __va_reg_size) +#else /* ! defined (__mips64) */ +#define va_start(__AP) \ + (__AP.__gp_regs = ((char *) __builtin_next_arg () \ + - (__builtin_args_info (2) < 8 \ + ? (8 - __builtin_args_info (2)) * __va_reg_size \ + : __va_reg_size)), \ + __AP.__fp_left = (8 - __builtin_args_info (3)) / 2, \ + __AP.__fp_regs = __AP.__gp_regs - __AP.__fp_left * 8, \ + __AP.__fp_regs = (char *) ((int) __AP.__fp_regs & -8)) +#endif /* ! defined (__mips64) */ +#else /* ! (! defined (__mips_soft_float) && ! defined (__mips_single_float)) */ +#define va_start(__AP) \ + (__AP = ((__gnuc_va_list) __builtin_next_arg () \ + - (__builtin_args_info (2) >= 8 ? __va_reg_size \ + : (8 - __builtin_args_info (2)) * __va_reg_size))) +#endif /* ! (! defined (__mips_soft_float) && ! defined (__mips_single_float)) */ +/* Need alternate code for _MIPS_SIM_ABI64. */ +#elif defined(_MIPS_SIM) && (_MIPS_SIM == _MIPS_SIM_ABI64 || _MIPS_SIM == _MIPS_SIM_NABI32) +#define va_start(__AP) \ + (__AP = (__gnuc_va_list) __builtin_next_arg () \ + + (__builtin_args_info (2) >= 8 ? -8 : 0)) +#else +#define va_start(__AP) __AP = (char *) &__builtin_va_alist +#endif +#endif /* ! _STDARG_H */ + +#ifndef va_end +void va_end (__gnuc_va_list); /* Defined in libgcc.a */ +#endif +#define va_end(__AP) ((void)0) + +#if defined (__mips_eabi) + +#if ! defined (__mips_soft_float) && ! defined (__mips_single_float) +#ifdef __mips64 +#define __va_next_addr(__AP, __type) \ + ((__builtin_classify_type (*(__type *) 0) == __real_type_class \ + && __AP.__fp_left > 0) \ + ? (--__AP.__fp_left, (__AP.__fp_regs += 8) - 8) \ + : (__AP.__gp_regs += __va_reg_size) - __va_reg_size) +#else +#define __va_next_addr(__AP, __type) \ + ((__builtin_classify_type (*(__type *) 0) == __real_type_class \ + && __AP.__fp_left > 0) \ + ? (--__AP.__fp_left, (__AP.__fp_regs += 8) - 8) \ + : (((__builtin_classify_type (* (__type *) 0) < __record_type_class \ + && __alignof__ (__type) > 4) \ + ? __AP.__gp_regs = (char *) (((int) __AP.__gp_regs + 8 - 1) & -8) \ + : (char *) 0), \ + (__builtin_classify_type (* (__type *) 0) >= __record_type_class \ + ? (__AP.__gp_regs += __va_reg_size) - __va_reg_size \ + : ((__AP.__gp_regs += __va_rounded_size (__type)) \ + - __va_rounded_size (__type))))) +#endif +#else /* ! (! defined (__mips_soft_float) && ! defined (__mips_single_float)) */ +#ifdef __mips64 +#define __va_next_addr(__AP, __type) \ + ((__AP += __va_reg_size) - __va_reg_size) +#else +#define __va_next_addr(__AP, __type) \ + (((__builtin_classify_type (* (__type *) 0) < __record_type_class \ + && __alignof__ (__type) > 4) \ + ? __AP = (char *) (((__PTRDIFF_TYPE__) __AP + 8 - 1) & -8) \ + : (char *) 0), \ + (__builtin_classify_type (* (__type *) 0) >= __record_type_class \ + ? (__AP += __va_reg_size) - __va_reg_size \ + : ((__AP += __va_rounded_size (__type)) \ + - __va_rounded_size (__type)))) +#endif +#endif /* ! (! defined (__mips_soft_float) && ! defined (__mips_single_float)) */ + +#ifdef __MIPSEB__ +#define va_arg(__AP, __type) \ + ((__va_rounded_size (__type) <= __va_reg_size) \ + ? *(__type *) (void *) (__va_next_addr (__AP, __type) \ + + __va_reg_size \ + - sizeof (__type)) \ + : (__builtin_classify_type (*(__type *) 0) >= __record_type_class \ + ? **(__type **) (void *) (__va_next_addr (__AP, __type) \ + + __va_reg_size \ + - sizeof (char *)) \ + : *(__type *) (void *) __va_next_addr (__AP, __type))) +#else +#define va_arg(__AP, __type) \ + ((__va_rounded_size (__type) <= __va_reg_size) \ + ? *(__type *) (void *) __va_next_addr (__AP, __type) \ + : (__builtin_classify_type (* (__type *) 0) >= __record_type_class \ + ? **(__type **) (void *) __va_next_addr (__AP, __type) \ + : *(__type *) (void *) __va_next_addr (__AP, __type))) +#endif + +#else /* ! defined (__mips_eabi) */ + +/* We cast to void * and then to TYPE * because this avoids + a warning about increasing the alignment requirement. */ +/* The __mips64 cases are reversed from the 32 bit cases, because the standard + 32 bit calling convention left-aligns all parameters smaller than a word, + whereas the __mips64 calling convention does not (and hence they are + right aligned). */ +#ifdef __mips64 +#ifdef __MIPSEB__ +#define va_arg(__AP, __type) \ + ((__type *) (void *) (__AP = (char *) \ + ((((__PTRDIFF_TYPE__)__AP + 8 - 1) & -8) \ + + __va_rounded_size (__type))))[-1] +#else +#define va_arg(__AP, __type) \ + ((__AP = (char *) ((((__PTRDIFF_TYPE__)__AP + 8 - 1) & -8) \ + + __va_rounded_size (__type))), \ + *(__type *) (void *) (__AP - __va_rounded_size (__type))) +#endif + +#else /* not __mips64 */ + +#ifdef __MIPSEB__ +/* For big-endian machines. */ +#define va_arg(__AP, __type) \ + ((__AP = (char *) ((__alignof__ (__type) > 4 \ + ? ((__PTRDIFF_TYPE__)__AP + 8 - 1) & -8 \ + : ((__PTRDIFF_TYPE__)__AP + 4 - 1) & -4) \ + + __va_rounded_size (__type))), \ + *(__type *) (void *) (__AP - __va_rounded_size (__type))) +#else +/* For little-endian machines. */ +#define va_arg(__AP, __type) \ + ((__type *) (void *) (__AP = (char *) ((__alignof__(__type) > 4 \ + ? ((__PTRDIFF_TYPE__)__AP + 8 - 1) & -8 \ + : ((__PTRDIFF_TYPE__)__AP + 4 - 1) & -4) \ + + __va_rounded_size(__type))))[-1] +#endif +#endif +#endif /* ! defined (__mips_eabi) */ + +/* Copy __gnuc_va_list into another variable of this type. */ +#define __va_copy(dest, src) (dest) = (src) + #else typedef char *va_list; diff --git a/include/macro_preset_names.h b/include/macro_preset_names.h deleted file mode 100644 index 2700a8e8..00000000 --- a/include/macro_preset_names.h +++ /dev/null @@ -1,373 +0,0 @@ -#ifndef MACRO_PRESET_NAMES_H -#define MACRO_PRESET_NAMES_H - -enum MacroPresets { - macro_yellow_coin, - macro_yellow_coin_2, - macro_moving_blue_coin, - macro_sliding_blue_coin, - macro_red_coin, - macro_empty_5, - macro_coin_line_horizontal, - macro_coin_ring_horizontal, - macro_coin_arrow, - macro_coin_line_horizontal_flying, - macro_coin_line_vertical, - macro_coin_ring_horizontal_flying, - macro_coin_ring_vertical, - macro_coin_arrow_flying, - macro_hidden_star_trigger, - macro_empty_15, - macro_empty_16, - macro_empty_17, - macro_empty_18, - macro_empty_19, - macro_fake_star, - macro_wooden_signpost, - macro_cannon_closed, - macro_bobomb_buddy_opens_cannon, - macro_butterfly, - macro_bouncing_fireball_copy, - macro_fish_group_3, - macro_fish_group, - macro_unknown_28, - macro_hidden_1up_in_pole, - macro_huge_goomba, - macro_tiny_goomba, - macro_goomba_triplet_spawner, - macro_goomba_quintuplet_spawner, - macro_sign_on_wall, - macro_chuckya, - macro_cannon_open, - macro_goomba, - macro_homing_amp, - macro_circling_amp, - macro_unknown_40, - macro_unknown_41, - macro_free_bowling_ball, - macro_snufit, - macro_recovery_heart, - macro_1up_sliding, - macro_1up, - macro_1up_jump_on_approach, - macro_hidden_1up, - macro_hidden_1up_trigger, - macro_1up_2, - macro_1up_3, - macro_empty_52, - macro_blue_coin_switch, - macro_hidden_blue_coin, - macro_wing_cap_switch, - macro_metal_cap_switch, - macro_vanish_cap_switch, - macro_yellow_cap_switch, - macro_unknown_59, - macro_box_wing_cap, - macro_box_metal_cap, - macro_box_vanish_cap, - macro_box_koopa_shell, - macro_box_one_coin, - macro_box_three_coins, - macro_box_ten_coins, - macro_box_1up, - macro_box_star_1, - macro_breakable_box_no_coins, - macro_breakable_box_three_coins, - macro_pushable_metal_box, - macro_breakable_box_small, - macro_floor_switch_hidden_objects, - macro_hidden_box, - macro_hidden_object_2, - macro_hidden_object_3, - macro_breakable_box_giant, - macro_koopa_shell_underwater, - macro_box_1up_running_away, - macro_empty_80, - macro_bullet_bill_cannon, - macro_heave_ho, - macro_empty_83, - macro_thwomp, - macro_fire_spitter, - macro_fire_fly_guy, - macro_jumping_box, - macro_butterfly_triplet, - macro_butterfly_triplet_2, - macro_empty_90, - macro_empty_91, - macro_empty_92, - macro_bully, - macro_bully_2, - macro_empty_95, - macro_unknown_96, - macro_bouncing_fireball, - macro_flamethrower, - macro_empty_99, - macro_empty_100, - macro_empty_101, - macro_empty_102, - macro_empty_103, - macro_empty_104, - macro_empty_105, - macro_wooden_post, - macro_water_bomb_spawner, - macro_enemy_lakitu, - macro_bob_koopa_the_quick, - macro_koopa_race_endpoint, - macro_bobomb, - macro_water_bomb_cannon_copy, - macro_bobomb_buddy_opens_cannon_copy, - macro_water_bomb_cannon, - macro_bobomb_still, - macro_empty_116, - macro_empty_117, - macro_empty_118, - macro_empty_119, - macro_empty_120, - macro_empty_121, - macro_empty_122, - macro_unknown_123, - macro_empty_124, - macro_unagi, - macro_sushi, - macro_empty_127, - macro_empty_128, - macro_empty_129, - macro_empty_130, - macro_empty_131, - macro_empty_132, - macro_empty_133, - macro_empty_134, - macro_empty_135, - macro_empty_136, - macro_unknown_137, - macro_tornado, - macro_pokey, - macro_pokey_copy, - macro_tox_box, - macro_empty_142, - macro_empty_143, - macro_empty_144, - macro_empty_145, - macro_empty_146, - macro_empty_147, - macro_empty_148, - macro_empty_149, - macro_empty_150, - macro_monty_mole_2, - macro_monty_mole, - macro_monty_mole_hole, - macro_fly_guy, - macro_empty_155, - macro_wiggler, - macro_empty_157, - macro_empty_158, - macro_empty_159, - macro_empty_160, - macro_empty_161, - macro_empty_162, - macro_empty_163, - macro_empty_164, - macro_spindrift, - macro_mr_blizzard, - macro_mr_blizzard_copy, - macro_empty_168, - macro_small_penguin, - macro_tuxies_mother, - macro_tuxies_mother_copy, - macro_mr_blizzard_2, - macro_empty_173, - macro_empty_174, - macro_empty_175, - macro_empty_176, - macro_empty_177, - macro_empty_178, - macro_empty_179, - macro_empty_180, - macro_empty_181, - macro_empty_182, - macro_empty_183, - macro_empty_184, - macro_empty_185, - macro_empty_186, - macro_empty_187, - macro_empty_188, - macro_haunted_chair_copy, - macro_haunted_chair, - macro_haunted_chair_copy2, - macro_boo, - macro_boo_copy, - macro_boo_group, - macro_boo_with_cage, - macro_beta_key, - macro_empty_197, - macro_empty_198, - macro_empty_199, - macro_empty_200, - macro_empty_201, - macro_empty_202, - macro_empty_203, - macro_empty_204, - macro_empty_205, - macro_empty_206, - macro_empty_207, - macro_empty_208, - macro_empty_209, - macro_empty_210, - macro_empty_211, - macro_empty_212, - macro_empty_213, - macro_empty_214, - macro_empty_215, - macro_empty_216, - macro_empty_217, - macro_empty_218, - macro_empty_219, - macro_empty_220, - macro_empty_221, - macro_empty_222, - macro_empty_223, - macro_empty_224, - macro_empty_225, - macro_empty_226, - macro_empty_227, - macro_empty_228, - macro_empty_229, - macro_empty_230, - macro_empty_231, - macro_empty_232, - macro_empty_233, - macro_chirp_chirp, - macro_seaweed_bundle, - macro_beta_chest, - macro_water_mine, - macro_fish_group_4, - macro_fish_group_2, - macro_jet_stream_ring_spawner, - macro_jet_stream_ring_spawner_copy, - macro_skeeter, - macro_clam_shell, - macro_empty_244, - macro_empty_245, - macro_empty_246, - macro_empty_247, - macro_empty_248, - macro_empty_249, - macro_empty_250, - macro_ukiki, - macro_ukiki_2, - macro_piranha_plant, - macro_empty_254, - macro_whomp, - macro_chain_chomp, - macro_empty_257, - macro_koopa, - macro_koopa_shellless, - macro_wooden_post_copy, - macro_fire_piranha_plant, - macro_fire_piranha_plant_2, - macro_thi_koopa_the_quick, - macro_empty_264, - macro_empty_265, - macro_empty_266, - macro_empty_267, - macro_empty_268, - macro_empty_269, - macro_empty_270, - macro_empty_271, - macro_empty_272, - macro_empty_273, - macro_empty_274, - macro_empty_275, - macro_empty_276, - macro_empty_277, - macro_empty_278, - macro_empty_279, - macro_empty_280, - macro_moneybag, - macro_empty_282, - macro_empty_283, - macro_empty_284, - macro_empty_285, - macro_empty_286, - macro_empty_287, - macro_empty_288, - macro_swoop, - macro_swoop_2, - macro_mr_i, - macro_scuttlebug_spawner, - macro_scuttlebug, - macro_empty_294, - macro_empty_295, - macro_empty_296, - macro_empty_297, - macro_empty_298, - macro_empty_299, - macro_empty_300, - macro_empty_301, - macro_empty_302, - macro_unknown_303, - macro_empty_304, - macro_empty_305, - macro_empty_306, - macro_empty_307, - macro_empty_308, - macro_empty_309, - macro_empty_310, - macro_empty_311, - macro_empty_312, - macro_ttc_rotating_cube, - macro_ttc_rotating_prism, - macro_ttc_pendulum, - macro_ttc_large_treadmill, - macro_ttc_small_treadmill, - macro_ttc_push_block, - macro_ttc_rotating_hexagon, - macro_ttc_rotating_triangle, - macro_ttc_pit_block, - macro_ttc_pit_block_2, - macro_ttc_elevator_platform, - macro_ttc_clock_hand, - macro_ttc_spinner, - macro_ttc_small_gear, - macro_ttc_large_gear, - macro_ttc_large_treadmill_2, - macro_ttc_small_treadmill_2, - macro_empty_330, - macro_empty_331, - macro_empty_332, - macro_empty_333, - macro_empty_334, - macro_empty_335, - macro_empty_336, - macro_empty_337, - macro_empty_338, - macro_box_star_2, - macro_box_star_3, - macro_box_star_4, - macro_box_star_5, - macro_box_star_6, - macro_empty_344, - macro_empty_345, - macro_empty_346, - macro_empty_347, - macro_empty_348, - macro_empty_349, - macro_bits_sliding_platform, - macro_bits_twin_sliding_platforms, - macro_bits_unknown_352, - macro_bits_octagonal_platform, - macro_bits_staircase, - macro_empty_355, - macro_empty_356, - macro_bits_ferris_wheel_axle, - macro_bits_arrow_platform, - macro_bits_seesaw_platform, - macro_bits_tilting_w_platform, - macro_empty_361, - macro_empty_362, - macro_empty_363, - macro_empty_364, - macro_empty_365 -}; - -#endif // MACRO_PRESET_NAMES_H diff --git a/include/macro_presets.h b/include/macro_presets.h index 38b1eb69..c5f6639e 100644 --- a/include/macro_presets.h +++ b/include/macro_presets.h @@ -1,383 +1,375 @@ #ifndef MACRO_PRESETS_H #define MACRO_PRESETS_H -#include "macro_preset_names.h" -#include "behavior_data.h" -#include "model_ids.h" +enum MacroPresets { + macro_yellow_coin_1, + macro_yellow_coin_2, + macro_moving_blue_coin, + macro_sliding_blue_coin, + macro_red_coin, + macro_empty_5, + macro_coin_line_horizontal, + macro_coin_ring_horizontal, + macro_coin_arrow, + macro_coin_line_horizontal_flying, + macro_coin_line_vertical_flying, + macro_coin_ring_horizontal_flying, + macro_coin_ring_vertical_flying, + macro_coin_arrow_flying, + macro_hidden_star_trigger, + macro_empty_15, + macro_empty_16, + macro_empty_17, + macro_empty_18, + macro_empty_19, + macro_fake_star, + macro_wooden_signpost, + macro_cannon_closed, + macro_bobomb_buddy_opens_cannon_1, + macro_butterfly, + macro_bouncing_fireball_1, + macro_fish_spawner_many_blue, + macro_fish_spawner_few_blue, + macro_unknown_28, + macro_hidden_1up_in_pole, + macro_huge_goomba, + macro_tiny_goomba, + macro_goomba_triplet_spawner, + macro_goomba_quintuplet_spawner, + macro_sign_on_wall, + macro_chuckya, + macro_cannon_open, + macro_goomba, + macro_homing_amp, + macro_circling_amp, + macro_unknown_40, + macro_unknown_41, + macro_free_bowling_ball, + macro_snufit, + macro_recovery_heart, + macro_1up_sliding, + macro_1up, + macro_1up_jump_on_approach, + macro_hidden_1up, + macro_hidden_1up_trigger, + macro_1up_beat_bitdw_bowser, + macro_1up_beat_bitfs_bowser, + macro_empty_52, + macro_blue_coin_switch, + macro_hidden_blue_coin, + macro_wing_cap_switch, + macro_metal_cap_switch, + macro_vanish_cap_switch, + macro_yellow_cap_switch, + macro_unknown_59, + macro_box_wing_cap, + macro_box_metal_cap, + macro_box_vanish_cap, + macro_box_koopa_shell, + macro_box_one_coin, + macro_box_three_coins, + macro_box_ten_coins, + macro_box_1up, + macro_box_star_act_1, + macro_breakable_box_no_coins, + macro_breakable_box_three_coins, + macro_pushable_metal_box, + macro_breakable_box_small, + macro_floor_switch_hidden_objects, + macro_hidden_breakable_box, + macro_hidden_unbreakable_box_1, + macro_hidden_unbreakable_box_2, + macro_breakable_box_giant, + macro_koopa_shell_underwater, + macro_box_1up_running_away, + macro_empty_80, + macro_bullet_bill_cannon, + macro_heave_ho, + macro_empty_83, + macro_thwomp, + macro_fire_spitter, + macro_fire_fly_guy, + macro_jumping_box, + macro_butterfly_triplet, + macro_butterfly_triplet_no_bombs, + macro_empty_90, + macro_empty_91, + macro_empty_92, + macro_small_bully, + macro_big_bully, + macro_empty_95, + macro_unknown_96, + macro_bouncing_fireball_2, + macro_flamethrower, + macro_empty_99, + macro_empty_100, + macro_empty_101, + macro_empty_102, + macro_empty_103, + macro_empty_104, + macro_empty_105, + macro_wooden_post_1, + macro_water_bomb_spawner, + macro_enemy_lakitu, + macro_bob_koopa_the_quick, + macro_koopa_race_endpoint, + macro_bobomb, + macro_water_bomb_cannon_1, + macro_bobomb_buddy_opens_cannon_2, + macro_water_bomb_cannon_2, + macro_bobomb_stationary, + macro_empty_116, + macro_empty_117, + macro_empty_118, + macro_empty_119, + macro_empty_120, + macro_empty_121, + macro_empty_122, + macro_unknown_123, + macro_empty_124, + macro_unagi, + macro_sushi, + macro_empty_127, + macro_empty_128, + macro_empty_129, + macro_empty_130, + macro_empty_131, + macro_empty_132, + macro_empty_133, + macro_empty_134, + macro_empty_135, + macro_empty_136, + macro_unknown_137, + macro_tornado, + macro_pokey_1, + macro_pokey_2, + macro_tox_box, + macro_empty_142, + macro_empty_143, + macro_empty_144, + macro_empty_145, + macro_empty_146, + macro_empty_147, + macro_empty_148, + macro_empty_149, + macro_empty_150, + macro_monty_mole_no_rock, + macro_monty_mole, + macro_monty_mole_hole, + macro_fly_guy, + macro_empty_155, + macro_wiggler, + macro_empty_157, + macro_empty_158, + macro_empty_159, + macro_empty_160, + macro_empty_161, + macro_empty_162, + macro_empty_163, + macro_empty_164, + macro_spindrift, + macro_mr_blizzard_1, + macro_mr_blizzard_2, + macro_empty_168, + macro_small_penguin, + macro_tuxies_mother_1, + macro_tuxies_mother_2, + macro_mr_blizzard_jumping, + macro_empty_173, + macro_empty_174, + macro_empty_175, + macro_empty_176, + macro_empty_177, + macro_empty_178, + macro_empty_179, + macro_empty_180, + macro_empty_181, + macro_empty_182, + macro_empty_183, + macro_empty_184, + macro_empty_185, + macro_empty_186, + macro_empty_187, + macro_empty_188, + macro_haunted_chair_1, + macro_haunted_chair_2, + macro_haunted_chair_3, + macro_boo_1, + macro_boo_2, + macro_boo_group, + macro_boo_with_cage, + macro_beta_key, + macro_empty_197, + macro_empty_198, + macro_empty_199, + macro_empty_200, + macro_empty_201, + macro_empty_202, + macro_empty_203, + macro_empty_204, + macro_empty_205, + macro_empty_206, + macro_empty_207, + macro_empty_208, + macro_empty_209, + macro_empty_210, + macro_empty_211, + macro_empty_212, + macro_empty_213, + macro_empty_214, + macro_empty_215, + macro_empty_216, + macro_empty_217, + macro_empty_218, + macro_empty_219, + macro_empty_220, + macro_empty_221, + macro_empty_222, + macro_empty_223, + macro_empty_224, + macro_empty_225, + macro_empty_226, + macro_empty_227, + macro_empty_228, + macro_empty_229, + macro_empty_230, + macro_empty_231, + macro_empty_232, + macro_empty_233, + macro_chirp_chirp, + macro_seaweed_bundle, + macro_beta_chest, + macro_water_mine, + macro_fish_spawner_many_cyan, + macro_fish_spawner_few_cyan, + macro_jet_stream_ring_spawner_1, + macro_jet_stream_ring_spawner_2, + macro_skeeter, + macro_clam_shell, + macro_empty_244, + macro_empty_245, + macro_empty_246, + macro_empty_247, + macro_empty_248, + macro_empty_249, + macro_empty_250, + macro_cage_ukiki, + macro_cap_ukiki, + macro_piranha_plant, + macro_empty_254, + macro_whomp, + macro_chain_chomp, + macro_empty_257, + macro_koopa, + macro_koopa_shellless, + macro_wooden_post_2, + macro_fire_piranha_plant_1, + macro_fire_piranha_plant_2, + macro_koopa_tiny, + macro_empty_264, + macro_empty_265, + macro_empty_266, + macro_empty_267, + macro_empty_268, + macro_empty_269, + macro_empty_270, + macro_empty_271, + macro_empty_272, + macro_empty_273, + macro_empty_274, + macro_empty_275, + macro_empty_276, + macro_empty_277, + macro_empty_278, + macro_empty_279, + macro_empty_280, + macro_moneybag, + macro_empty_282, + macro_empty_283, + macro_empty_284, + macro_empty_285, + macro_empty_286, + macro_empty_287, + macro_empty_288, + macro_swoop_1, + macro_swoop_2, + macro_mr_i, + macro_scuttlebug_spawner, + macro_scuttlebug, + macro_empty_294, + macro_empty_295, + macro_empty_296, + macro_empty_297, + macro_empty_298, + macro_empty_299, + macro_empty_300, + macro_empty_301, + macro_empty_302, + macro_unknown_303, + macro_empty_304, + macro_empty_305, + macro_empty_306, + macro_empty_307, + macro_empty_308, + macro_empty_309, + macro_empty_310, + macro_empty_311, + macro_empty_312, + macro_ttc_rotating_cube, + macro_ttc_rotating_prism, + macro_ttc_pendulum, + macro_ttc_large_treadmill_1, + macro_ttc_small_treadmill_1, + macro_ttc_push_block, + macro_ttc_rotating_hexagon, + macro_ttc_rotating_triangle, + macro_ttc_pit_block_1, + macro_ttc_pit_block_2, + macro_ttc_elevator_platform, + macro_ttc_clock_hand, + macro_ttc_spinner, + macro_ttc_small_gear, + macro_ttc_large_gear, + macro_ttc_large_treadmill_2, + macro_ttc_small_treadmill_2, + macro_empty_330, + macro_empty_331, + macro_empty_332, + macro_empty_333, + macro_empty_334, + macro_empty_335, + macro_empty_336, + macro_empty_337, + macro_empty_338, + macro_box_star_act_2, + macro_box_star_act_3, + macro_box_star_act_4, + macro_box_star_act_5, + macro_box_star_act_6, + macro_empty_344, + macro_empty_345, + macro_empty_346, + macro_empty_347, + macro_empty_348, + macro_empty_349, + macro_bits_sliding_platform, + macro_bits_twin_sliding_platforms, + macro_bits_unknown_352, + macro_bits_octagonal_platform, + macro_bits_staircase, + macro_empty_355, + macro_empty_356, + macro_bits_ferris_wheel_axle, + macro_bits_arrow_platform, + macro_bits_seesaw_platform, + macro_bits_tilting_w_platform, + macro_empty_361, + macro_empty_362, + macro_empty_363, + macro_empty_364, + macro_empty_365, -struct MacroPreset { - /*0x00*/ const BehaviorScript *behavior; - /*0x04*/ s16 model; - /*0x06*/ s16 param; -}; - -struct MacroPreset MacroObjectPresets[] = { - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvOneCoin, MODEL_YELLOW_COIN, 0}, - {bhvMovingBlueCoin, MODEL_BLUE_COIN, 0}, - {bhvBlueCoinSliding, MODEL_BLUE_COIN, 0}, // unused - {bhvRedCoin, MODEL_RED_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvCoinFormation, MODEL_NONE, 0}, - {bhvCoinFormation, MODEL_NONE, COIN_FORMATION_FLAG_RING}, - {bhvCoinFormation, MODEL_NONE, COIN_FORMATION_FLAG_ARROW}, - {bhvCoinFormation, MODEL_NONE, COIN_FORMATION_FLAG_FLYING}, - {bhvCoinFormation, MODEL_NONE, COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_VERTICAL}, - {bhvCoinFormation, MODEL_NONE, COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING}, - {bhvCoinFormation, MODEL_NONE, COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_RING | COIN_FORMATION_FLAG_VERTICAL}, - {bhvCoinFormation, MODEL_NONE, COIN_FORMATION_FLAG_FLYING | COIN_FORMATION_FLAG_ARROW}, // unused - {bhvHiddenStarTrigger, MODEL_NONE, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvUnusedFakeStar, MODEL_STAR, 0}, // unused - {bhvMessagePanel, MODEL_WOODEN_SIGNPOST, 0}, - {bhvCannonClosed, MODEL_DL_CANNON_LID, 0}, - {bhvBobombBuddyOpensCannon, MODEL_BOBOMB_BUDDY, 0}, - {bhvButterfly, MODEL_BUTTERFLY, 0}, // unused - {bhvBouncingFireball, MODEL_NONE, 0}, // unused - {bhvFishSpawner, MODEL_NONE, 0}, // unused - {bhvFishSpawner, MODEL_NONE, 1}, - {bhvBetaFishSplashSpawner, MODEL_NONE, 0}, - {bhvHidden1upInPoleSpawner, MODEL_NONE, 0}, - {bhvGoomba, MODEL_GOOMBA, 1}, - {bhvGoomba, MODEL_GOOMBA, 2}, - {bhvGoombaTripletSpawner, MODEL_NONE, 0}, - {bhvGoombaTripletSpawner, MODEL_NONE, 8}, // unused - {bhvSignOnWall, MODEL_NONE, 0}, - {bhvChuckya, MODEL_CHUCKYA, 0}, - {bhvCannon, MODEL_CANNON_BASE, 0}, - {bhvGoomba, MODEL_GOOMBA, 0}, - {bhvHomingAmp, MODEL_AMP, 0}, - {bhvCirclingAmp, MODEL_AMP, 0}, - {bhvCarrySomething1, MODEL_UNKNOWN_7D, 0}, // unused - {bhvBetaTrampolineTop, MODEL_TRAMPOLINE, 0}, // unused - {bhvFreeBowlingBall, MODEL_BOWLING_BALL, 0}, // unused - {bhvSnufit, MODEL_SNUFIT, 0}, - {bhvRecoveryHeart, MODEL_HEART, 0}, - {bhv1upSliding, MODEL_1UP, 0}, - {bhv1Up, MODEL_1UP, 0}, - {bhv1upJumpOnApproach, MODEL_1UP, 0}, // unused - {bhvHidden1up, MODEL_1UP, 0}, - {bhvHidden1upTrigger, MODEL_NONE, 0}, - {bhv1Up, MODEL_1UP, 1}, - {bhv1Up, MODEL_1UP, 2}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvBlueCoinSwitch, MODEL_BLUE_COIN_SWITCH, 0}, - {bhvHiddenBlueCoin, MODEL_BLUE_COIN, 0}, - {bhvCapSwitch, MODEL_CAP_SWITCH, 0}, // unused - {bhvCapSwitch, MODEL_CAP_SWITCH, 1}, // unused - {bhvCapSwitch, MODEL_CAP_SWITCH, 2}, // unused - {bhvCapSwitch, MODEL_CAP_SWITCH, 3}, // unused - {bhvWaterLevelDiamond, MODEL_BREAKABLE_BOX, 0}, // unused - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, 0}, - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, 1}, - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, 2}, - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, 3}, - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, 4}, // unused - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, 5}, - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, 6}, - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, 7}, - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, 8}, - {bhvBreakableBox, MODEL_BREAKABLE_BOX, 0}, - {bhvBreakableBox, MODEL_BREAKABLE_BOX, 1}, - {bhvPushableMetalBox, MODEL_METAL_BOX, 0}, - {bhvBreakableBoxSmall, MODEL_BREAKABLE_BOX_SMALL, 0}, - {bhvFloorSwitchHiddenObjects, MODEL_PURPLE_SWITCH, 0}, - {bhvHiddenObject, MODEL_BREAKABLE_BOX, 0}, - {bhvHiddenObject, MODEL_BREAKABLE_BOX, 1}, // unused - {bhvHiddenObject, MODEL_BREAKABLE_BOX, 2}, // unused - {bhvBreakableBox, MODEL_BREAKABLE_BOX, 3}, - {bhvKoopaShellUnderwater, MODEL_KOOPA_SHELL, 0}, - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, 9}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvBulletBill, MODEL_BULLET_BILL, 0}, // unused - {bhvHeaveHo, MODEL_HEAVE_HO, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvThwomp2, MODEL_THWOMP, 0}, // unused - {bhvFireSpitter, MODEL_BOWLING_BALL, 0}, - {bhvFlyGuy, MODEL_FLYGUY, 1}, - {bhvJumpingBox, MODEL_BREAKABLE_BOX, 0}, - {bhvTripletButterfly, MODEL_BUTTERFLY, 0}, - {bhvTripletButterfly, MODEL_BUTTERFLY, 4}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvSmallBully, MODEL_BULLY, 0}, - {bhvSmallBully, MODEL_BULLY_BOSS, 0}, // unused - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvStub1D0C, MODEL_UNKNOWN_58, 0}, // unused - {bhvBouncingFireball, MODEL_NONE, 0}, - {bhvFlamethrower, MODEL_NONE, 4}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvWoodenPost, MODEL_WOODEN_POST, 0}, - {bhvWaterBombSpawner, MODEL_NONE, 0}, - {bhvEnemyLakitu, MODEL_ENEMY_LAKITU, 0}, - {bhvKoopa, MODEL_KOOPA_WITH_SHELL, 2}, // unused - {bhvKoopaRaceEndpoint, MODEL_NONE, 0}, // unused - {bhvBobomb, MODEL_BLACK_BOBOMB, 0}, - {bhvWaterBombCannon, MODEL_CANNON_BASE, 0}, // unused - {bhvBobombBuddyOpensCannon, MODEL_BOBOMB_BUDDY, 0}, // unused - {bhvWaterBombCannon, MODEL_CANNON_BASE, 0}, - {bhvBobomb, MODEL_BLACK_BOBOMB, 1}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvUnusedFakeStar, MODEL_UNKNOWN_54, 0}, // unused - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvUnagi, MODEL_UNAGI, 0}, // unused - {bhvSushiShark, MODEL_SUSHI, 0}, // unused - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvStaticObject, MODEL_KLEPTO, 0}, // unused - {bhvTweester, MODEL_TWEESTER, 0}, // unused - {bhvPokey, MODEL_NONE, 0}, - {bhvPokey, MODEL_NONE, 0}, // unused - {bhvToxBox, MODEL_SSL_TOX_BOX, 0}, // unused - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvMontyMole, MODEL_MONTY_MOLE, 0}, // unused - {bhvMontyMole, MODEL_MONTY_MOLE, 1}, - {bhvMontyMoleHole, MODEL_DL_MONTY_MOLE_HOLE, 0}, - {bhvFlyGuy, MODEL_FLYGUY, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvWigglerHead, MODEL_WIGGLER_HEAD, 0}, // unused - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvSpindrift, MODEL_SPINDRIFT, 0}, - {bhvMrBlizzard, MODEL_MR_BLIZZARD_HIDDEN, 0}, - {bhvMrBlizzard, MODEL_MR_BLIZZARD_HIDDEN, 0}, // unused - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvSmallPenguin, MODEL_PENGUIN, 0}, // unused - {bhvTuxiesMother, MODEL_PENGUIN, 0}, // unused - {bhvTuxiesMother, MODEL_PENGUIN, 0}, // unused - {bhvMrBlizzard, MODEL_MR_BLIZZARD_HIDDEN, 1}, // unused - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvHauntedChair, MODEL_HAUNTED_CHAIR, 0}, // unused - {bhvHauntedChair, MODEL_HAUNTED_CHAIR, 0}, - {bhvHauntedChair, MODEL_HAUNTED_CHAIR, 0}, // unused - {bhvGhostHuntBoo, MODEL_BOO, 0}, // unused - {bhvGhostHuntBoo, MODEL_BOO, 0}, // unused - {bhvCourtyardBooTriplet, MODEL_BOO, 0}, // unused - {bhvBooWithCage, MODEL_BOO, 0}, // unused - {bhvAlphaBooKey, MODEL_BETA_BOO_KEY, 0}, // unused - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvChirpChirp, MODEL_NONE, 0}, - {bhvSeaweedBundle, MODEL_NONE, 0}, - {bhvBetaChestBottom, MODEL_TREASURE_CHEST_BASE, 0}, // unused - {bhvBowserBomb, MODEL_WATER_MINE, 0}, // unused - {bhvFishSpawner, MODEL_NONE, 2}, // unused - {bhvFishSpawner, MODEL_NONE, 3}, - {bhvJetStreamRingSpawner, MODEL_WATER_RING, 0}, // unused - {bhvJetStreamRingSpawner, MODEL_WATER_RING, 0}, // unused - {bhvSkeeter, MODEL_SKEETER, 0}, - {bhvClamShell, MODEL_CLAM_SHELL, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvMacroUkiki, MODEL_UKIKI, 0}, // unused - {bhvMacroUkiki, MODEL_UKIKI, 1}, // unused - {bhvPiranhaPlant, MODEL_PIRANHA_PLANT, 0}, // unused - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvSmallWhomp, MODEL_WHOMP, 0}, - {bhvChainChomp, MODEL_CHAIN_CHOMP, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvKoopa, MODEL_KOOPA_WITH_SHELL, 1}, - {bhvKoopa, MODEL_KOOPA_WITHOUT_SHELL, 0}, // unused - {bhvWoodenPost, MODEL_WOODEN_POST, 0}, // unused - {bhvFirePiranhaPlant, MODEL_PIRANHA_PLANT, 0}, - {bhvFirePiranhaPlant, MODEL_PIRANHA_PLANT, 1}, // unused - {bhvKoopa, MODEL_KOOPA_WITH_SHELL, 4}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvMoneybagHidden, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvSwoop, MODEL_SWOOP, 0}, - {bhvSwoop, MODEL_SWOOP, 1}, - {bhvMrI, MODEL_NONE, 0}, - {bhvScuttlebugSpawn, MODEL_NONE, 0}, - {bhvScuttlebug, MODEL_SCUTTLEBUG, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_UNKNOWN_54, 0}, // unused - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvTTCRotatingSolid, MODEL_TTC_ROTATING_CUBE, 0}, - {bhvTTCRotatingSolid, MODEL_TTC_ROTATING_PRISM, 1}, - {bhvTTCPendulum, MODEL_TTC_PENDULUM, 0}, - {bhvTTCTreadmill, MODEL_TTC_LARGE_TREADMILL, 0}, - {bhvTTCTreadmill, MODEL_TTC_SMALL_TREADMILL, 1}, - {bhvTTCMovingBar, MODEL_TTC_PUSH_BLOCK, 0}, - {bhvTTCCog, MODEL_TTC_ROTATING_HEXAGON, 0}, - {bhvTTCCog, MODEL_TTC_ROTATING_TRIANGLE, 2}, - {bhvTTCPitBlock, MODEL_TTC_PIT_BLOCK, 0}, - {bhvTTCPitBlock, MODEL_TTC_PIT_BLOCK_UNUSED, 1}, // unused - {bhvTTCElevator, MODEL_TTC_ELEVATOR_PLATFORM, 0}, - {bhvTTC2DRotator, MODEL_TTC_CLOCK_HAND, 0}, - {bhvTTCSpinner, MODEL_TTC_SPINNER, 0}, - {bhvTTC2DRotator, MODEL_TTC_SMALL_GEAR, 1}, - {bhvTTC2DRotator, MODEL_TTC_LARGE_GEAR, 1}, - {bhvTTCTreadmill, MODEL_TTC_LARGE_TREADMILL, 2}, - {bhvTTCTreadmill, MODEL_TTC_SMALL_TREADMILL, 3}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, 10}, - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, 11}, - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, 12}, - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, 13}, // unused - {bhvExclamationBox, MODEL_EXCLAMATION_BOX, 14}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvSlidingPlatform2, MODEL_BITS_SLIDING_PLATFORM, 0}, // unused - {bhvSlidingPlatform2, MODEL_BITS_TWIN_SLIDING_PLATFORMS, 0}, // unused - {bhvAnotherTiltingPlatform, MODEL_BITDW_SLIDING_PLATFORM, 0}, // unused - {bhvOctagonalPlatformRotating, MODEL_BITS_OCTAGONAL_PLATFORM, 0}, // unused - {bhvAnimatesOnFloorSwitchPress, MODEL_BITS_STAIRCASE, 0}, // unused - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvFerrisWheelAxle, MODEL_BITS_FERRIS_WHEEL_AXLE, 0}, // unused - {bhvActivatedBackAndForthPlatform, MODEL_BITS_ARROW_PLATFORM, 0}, // unused - {bhvSeesawPlatform, MODEL_BITS_SEESAW_PLATFORM, 0}, // unused - {bhvSeesawPlatform, MODEL_BITS_TILTING_W_PLATFORM, 0}, // unused - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0}, - {bhvYellowCoin, MODEL_YELLOW_COIN, 0} + macro_count }; #endif // MACRO_PRESETS_H diff --git a/include/macro_presets.inc.c b/include/macro_presets.inc.c new file mode 100644 index 00000000..53c31b57 --- /dev/null +++ b/include/macro_presets.inc.c @@ -0,0 +1,379 @@ +#include "macro_presets.h" + +struct MacroPreset { + /* 0x00 */ const BehaviorScript *behavior; + /* 0x04 */ s16 model; + /* 0x06 */ s16 param; +}; + +static struct MacroPreset sMacroObjectPresets[] = { + /* macro_yellow_coin_1 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_yellow_coin_2 */ { bhvOneCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_moving_blue_coin */ { bhvMovingBlueCoin, MODEL_BLUE_COIN, 0 }, + /* macro_sliding_blue_coin */ { bhvBlueCoinSliding, MODEL_BLUE_COIN, 0 }, // unused + /* macro_red_coin */ { bhvRedCoin, MODEL_RED_COIN, 0 }, + /* macro_empty_5 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_coin_line_horizontal */ { bhvCoinFormation, MODEL_NONE, COIN_FORMATION_BP_LINE_HORIZONTAL }, + /* macro_coin_ring_horizontal */ { bhvCoinFormation, MODEL_NONE, COIN_FORMATION_BP_RING_HORIZONTAL }, + /* macro_coin_arrow */ { bhvCoinFormation, MODEL_NONE, COIN_FORMATION_BP_ARROW }, + /* macro_coin_line_horizontal_flying */ { bhvCoinFormation, MODEL_NONE, COIN_FORMATION_BP_LINE_HORIZONTAL | COIN_FORMATION_BP_FLAG_FLYING }, + /* macro_coin_line_vertical_flying */ { bhvCoinFormation, MODEL_NONE, COIN_FORMATION_BP_LINE_VERTICAL | COIN_FORMATION_BP_FLAG_FLYING }, + /* macro_coin_ring_horizontal_flying */ { bhvCoinFormation, MODEL_NONE, COIN_FORMATION_BP_RING_HORIZONTAL | COIN_FORMATION_BP_FLAG_FLYING }, + /* macro_coin_ring_vertical_flying */ { bhvCoinFormation, MODEL_NONE, COIN_FORMATION_BP_RING_VERTICAL | COIN_FORMATION_BP_FLAG_FLYING }, + /* macro_coin_arrow_flying */ { bhvCoinFormation, MODEL_NONE, COIN_FORMATION_BP_ARROW | COIN_FORMATION_BP_FLAG_FLYING }, // unused + /* macro_hidden_star_trigger */ { bhvHiddenStarTrigger, MODEL_NONE, 0 }, + /* macro_empty_15 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_16 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_17 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_18 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_19 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_fake_star */ { bhvUnusedFakeStar, MODEL_STAR, 0 }, // unused + /* macro_wooden_signpost */ { bhvMessagePanel, MODEL_WOODEN_SIGNPOST, 0 }, + /* macro_cannon_closed */ { bhvCannonClosed, MODEL_DL_CANNON_LID, 0 }, + /* macro_bobomb_buddy_opens_cannon_1 */ { bhvBobombBuddyOpensCannon, MODEL_BOBOMB_BUDDY, 0 }, + /* macro_butterfly */ { bhvButterfly, MODEL_BUTTERFLY, 0 }, // unused + /* macro_bouncing_fireball_1 */ { bhvBouncingFireball, MODEL_NONE, 0 }, // unused + /* macro_fish_spawner_many_blue */ { bhvFishSpawner, MODEL_NONE, FISH_SPAWNER_BP_MANY_BLUE }, // unused + /* macro_fish_spawner_few_blue */ { bhvFishSpawner, MODEL_NONE, FISH_SPAWNER_BP_FEW_BLUE }, + /* macro_unknown_28 */ { bhvBetaFishSplashSpawner, MODEL_NONE, 0 }, + /* macro_hidden_1up_in_pole */ { bhvHidden1UpInPoleSpawner, MODEL_NONE, 0 }, + /* macro_huge_goomba */ { bhvGoomba, MODEL_GOOMBA, GOOMBA_SIZE_HUGE }, + /* macro_tiny_goomba */ { bhvGoomba, MODEL_GOOMBA, GOOMBA_SIZE_TINY }, + /* macro_goomba_triplet_spawner */ { bhvGoombaTripletSpawner, MODEL_NONE, GOOMBA_TRIPLET_SPAWNER_BP_EXTRA_GOOMBAS(0) | GOOMBA_SIZE_REGULAR }, + /* macro_goomba_quintuplet_spawner */ { bhvGoombaTripletSpawner, MODEL_NONE, GOOMBA_TRIPLET_SPAWNER_BP_EXTRA_GOOMBAS(2) | GOOMBA_SIZE_REGULAR }, // unused + /* macro_sign_on_wall */ { bhvSignOnWall, MODEL_NONE, 0 }, + /* macro_chuckya */ { bhvChuckya, MODEL_CHUCKYA, 0 }, + /* macro_cannon_open */ { bhvCannon, MODEL_CANNON_BASE, 0 }, + /* macro_goomba */ { bhvGoomba, MODEL_GOOMBA, 0 }, + /* macro_homing_amp */ { bhvHomingAmp, MODEL_AMP, 0 }, + /* macro_circling_amp */ { bhvCirclingAmp, MODEL_AMP, AMP_BP_ROT_RADIUS_200 }, + /* macro_unknown_40 */ { bhvCarrySomething1, MODEL_UNKNOWN_7D, 0 }, // unused + /* macro_unknown_41 */ { bhvBetaTrampolineTop, MODEL_TRAMPOLINE, 0 }, // unused + /* macro_free_bowling_ball */ { bhvFreeBowlingBall, MODEL_BOWLING_BALL, 0 }, // unused + /* macro_snufit */ { bhvSnufit, MODEL_SNUFIT, 0 }, + /* macro_recovery_heart */ { bhvRecoveryHeart, MODEL_HEART, 0 }, + /* macro_1up_sliding */ { bhv1UpSliding, MODEL_1UP, 0 }, + /* macro_1up */ { bhv1Up, MODEL_1UP, 0 }, + /* macro_1up_jump_on_approach */ { bhv1UpJumpOnApproach, MODEL_1UP, 0 }, // unused + /* macro_hidden_1up */ { bhvHidden1Up, MODEL_1UP, 0 }, + /* macro_hidden_1up_trigger */ { bhvHidden1UpTrigger, MODEL_NONE, 0 }, + /* macro_1up_beat_bitdw_bowser */ { bhv1Up, MODEL_1UP, ONE_UP_BP_BEAT_BITDW_BOWSER }, + /* macro_1up_beat_bitfs_bowser */ { bhv1Up, MODEL_1UP, ONE_UP_BP_BEAT_BITFS_BOWSER }, + /* macro_empty_52 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_blue_coin_switch */ { bhvBlueCoinSwitch, MODEL_BLUE_COIN_SWITCH, 0 }, + /* macro_hidden_blue_coin */ { bhvHiddenBlueCoin, MODEL_BLUE_COIN, 0 }, + /* macro_wing_cap_switch */ { bhvCapSwitch, MODEL_CAP_SWITCH, CAP_SWITCH_BP_RED }, // unused + /* macro_metal_cap_switch */ { bhvCapSwitch, MODEL_CAP_SWITCH, CAP_SWITCH_BP_GREEN }, // unused + /* macro_vanish_cap_switch */ { bhvCapSwitch, MODEL_CAP_SWITCH, CAP_SWITCH_BP_BLUE }, // unused + /* macro_yellow_cap_switch */ { bhvCapSwitch, MODEL_CAP_SWITCH, CAP_SWITCH_BP_YELLOW }, // unused + /* macro_unknown_59 */ { bhvWaterLevelDiamond, MODEL_BREAKABLE_BOX, 0 }, // unused + /* macro_box_wing_cap */ { bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_WING_CAP }, + /* macro_box_metal_cap */ { bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_METAL_CAP }, + /* macro_box_vanish_cap */ { bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_VANISH_CAP }, + /* macro_box_koopa_shell */ { bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_KOOPA_SHELL }, + /* macro_box_one_coin */ { bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_ONE_COIN }, // unused + /* macro_box_three_coins */ { bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_THREE_COINS }, + /* macro_box_ten_coins */ { bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_TEN_COINS }, + /* macro_box_1up */ { bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_1UP_WALKING }, + /* macro_box_star_act_1 */ { bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_STAR_ACT_1 }, + /* macro_breakable_box_no_coins */ { bhvBreakableBox, MODEL_BREAKABLE_BOX, BREAKABLE_BOX_BP_NO_COINS }, + /* macro_breakable_box_three_coins */ { bhvBreakableBox, MODEL_BREAKABLE_BOX, BREAKABLE_BOX_BP_3_COINS }, + /* macro_pushable_metal_box */ { bhvPushableMetalBox, MODEL_METAL_BOX, 0 }, + /* macro_breakable_box_small */ { bhvBreakableBoxSmall, MODEL_BREAKABLE_BOX_SMALL, 0 }, + /* macro_floor_switch_hidden_objects */ { bhvFloorSwitchHiddenObjects, MODEL_PURPLE_SWITCH, 0 }, + /* macro_hidden_breakable_box */ { bhvHiddenObject, MODEL_BREAKABLE_BOX, HIDDEN_OBJECT_BP_BREAKABLE_BOX }, + /* macro_hidden_unbreakable_box_1 */ { bhvHiddenObject, MODEL_BREAKABLE_BOX, HIDDEN_OBJECT_BP_UNBREAKABLE_BOX_UNUSED_1 }, // unused + /* macro_hidden_unbreakable_box_2 */ { bhvHiddenObject, MODEL_BREAKABLE_BOX, HIDDEN_OBJECT_BP_UNBREAKABLE_BOX_UNUSED_2 }, // unused + /* macro_breakable_box_giant */ { bhvBreakableBox, MODEL_BREAKABLE_BOX, BREAKABLE_BOX_BP_GIANT }, + /* macro_koopa_shell_underwater */ { bhvKoopaShellUnderwater, MODEL_KOOPA_SHELL, 0 }, + /* macro_box_1up_running_away */ { bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_1UP_RUNNING_AWAY }, + /* macro_empty_80 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_bullet_bill_cannon */ { bhvBulletBill, MODEL_BULLET_BILL, 0 }, // unused + /* macro_heave_ho */ { bhvHeaveHo, MODEL_HEAVE_HO, 0 }, + /* macro_empty_83 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_thwomp */ { bhvThwomp, MODEL_THWOMP, 0 }, // unused + /* macro_fire_spitter */ { bhvFireSpitter, MODEL_BOWLING_BALL, 0 }, + /* macro_fire_fly_guy */ { bhvFlyGuy, MODEL_FLYGUY, FLY_GUY_BP_FIRE }, + /* macro_jumping_box */ { bhvJumpingBox, MODEL_BREAKABLE_BOX, 0 }, + /* macro_butterfly_triplet */ { bhvTripletButterfly, MODEL_BUTTERFLY, 0 }, + /* macro_butterfly_triplet_no_bombs */ { bhvTripletButterfly, MODEL_BUTTERFLY, TRIPLET_BUTTERFLY_BP_NO_BOMBS }, + /* macro_empty_90 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_91 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_92 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_small_bully */ { bhvSmallBully, MODEL_BULLY, 0 }, + /* macro_big_bully */ { bhvSmallBully, MODEL_BULLY_BOSS, 0 }, // unused + /* macro_empty_95 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_unknown_96 */ { bhvStub1D0C, MODEL_UNKNOWN_58, 0 }, // unused + /* macro_bouncing_fireball_2 */ { bhvBouncingFireball, MODEL_NONE, 0 }, + /* macro_flamethrower */ { bhvFlamethrower, MODEL_NONE, 4 }, + /* macro_empty_99 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_100 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_101 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_102 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_103 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_104 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_105 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_wooden_post_1 */ { bhvWoodenPost, MODEL_WOODEN_POST, 0 }, + /* macro_water_bomb_spawner */ { bhvWaterBombSpawner, MODEL_NONE, 0 }, + /* macro_enemy_lakitu */ { bhvEnemyLakitu, MODEL_ENEMY_LAKITU, 0 }, + /* macro_bob_koopa_the_quick */ { bhvKoopa, MODEL_KOOPA_WITH_SHELL, KOOPA_BP_KOOPA_THE_QUICK_BOB }, // unused + /* macro_koopa_race_endpoint */ { bhvKoopaRaceEndpoint, MODEL_NONE, 0 }, // unused + /* macro_bobomb */ { bhvBobomb, MODEL_BLACK_BOBOMB, BOBOMB_BP_STYPE_GENERIC }, + /* macro_water_bomb_cannon_1 */ { bhvWaterBombCannon, MODEL_CANNON_BASE, 0 }, // unused + /* macro_bobomb_buddy_opens_cannon_2 */ { bhvBobombBuddyOpensCannon, MODEL_BOBOMB_BUDDY, 0 }, // unused + /* macro_water_bomb_cannon_2 */ { bhvWaterBombCannon, MODEL_CANNON_BASE, 0 }, + /* macro_bobomb_stationary */ { bhvBobomb, MODEL_BLACK_BOBOMB, BOBOMB_BP_STYPE_STATIONARY }, + /* macro_empty_116 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_117 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_118 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_119 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_120 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_121 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_122 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_unknown_123 */ { bhvUnusedFakeStar, MODEL_UNKNOWN_54, 0 }, // unused + /* macro_empty_124 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_unagi */ { bhvUnagi, MODEL_UNAGI, 0 }, // unused + /* macro_sushi */ { bhvSushiShark, MODEL_SUSHI, 0 }, // unused + /* macro_empty_127 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_128 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_129 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_130 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_131 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_132 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_133 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_134 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_135 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_136 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_unknown_137 */ { bhvStaticObject, MODEL_KLEPTO, 0 }, // unused + /* macro_tornado */ { bhvTweester, MODEL_TWEESTER, 0 }, // unused + /* macro_pokey_1 */ { bhvPokey, MODEL_NONE, 0 }, + /* macro_pokey_2 */ { bhvPokey, MODEL_NONE, 0 }, // unused + /* macro_tox_box */ { bhvToxBox, MODEL_SSL_TOX_BOX, TOX_BOX_BP_MOVEMENT_PATTERN_1 }, // unused + /* macro_empty_142 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_143 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_144 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_145 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_146 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_147 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_148 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_149 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_150 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_monty_mole_no_rock */ { bhvMontyMole, MODEL_MONTY_MOLE, MONTY_MOLE_BP_NO_ROCK }, // unused + /* macro_monty_mole */ { bhvMontyMole, MODEL_MONTY_MOLE, MONTY_MOLE_BP_GENERIC }, + /* macro_monty_mole_hole */ { bhvMontyMoleHole, MODEL_DL_MONTY_MOLE_HOLE, 0 }, + /* macro_fly_guy */ { bhvFlyGuy, MODEL_FLYGUY, FLY_GUY_BP_GENERIC }, + /* macro_empty_155 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_wiggler */ { bhvWigglerHead, MODEL_WIGGLER_HEAD, 0 }, // unused + /* macro_empty_157 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_158 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_159 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_160 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_161 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_162 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_163 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_164 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_spindrift */ { bhvSpindrift, MODEL_SPINDRIFT, 0 }, + /* macro_mr_blizzard_1 */ { bhvMrBlizzard, MODEL_MR_BLIZZARD_HIDDEN, MR_BLIZZARD_STYPE_GENERIC }, + /* macro_mr_blizzard_2 */ { bhvMrBlizzard, MODEL_MR_BLIZZARD_HIDDEN, MR_BLIZZARD_STYPE_GENERIC }, // unused + /* macro_empty_168 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_small_penguin */ { bhvSmallPenguin, MODEL_PENGUIN, 0 }, // unused + /* macro_tuxies_mother_1 */ { bhvTuxiesMother, MODEL_PENGUIN, 0 }, // unused + /* macro_tuxies_mother_2 */ { bhvTuxiesMother, MODEL_PENGUIN, 0 }, // unused + /* macro_mr_blizzard_jumping */ { bhvMrBlizzard, MODEL_MR_BLIZZARD_HIDDEN, MR_BLIZZARD_STYPE_JUMPING }, // unused + /* macro_empty_173 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_174 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_175 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_176 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_177 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_178 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_179 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_180 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_181 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_182 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_183 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_184 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_185 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_186 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_187 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_188 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_haunted_chair_1 */ { bhvHauntedChair, MODEL_HAUNTED_CHAIR, 0 }, // unused + /* macro_haunted_chair_2 */ { bhvHauntedChair, MODEL_HAUNTED_CHAIR, 0 }, + /* macro_haunted_chair_3 */ { bhvHauntedChair, MODEL_HAUNTED_CHAIR, 0 }, // unused + /* macro_boo_1 */ { bhvGhostHuntBoo, MODEL_BOO, BOO_BP_GHOST_HUNT }, // unused + /* macro_boo_2 */ { bhvGhostHuntBoo, MODEL_BOO, BOO_BP_GHOST_HUNT }, // unused + /* macro_boo_group */ { bhvCourtyardBooTriplet, MODEL_BOO, 0 }, // unused + /* macro_boo_with_cage */ { bhvBooWithCage, MODEL_BOO, 0 }, // unused + /* macro_beta_key */ { bhvAlphaBooKey, MODEL_BETA_BOO_KEY, 0 }, // unused + /* macro_empty_197 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_198 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_199 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_200 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_201 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_202 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_203 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_204 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_205 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_206 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_207 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_208 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_209 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_210 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_211 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_212 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_213 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_214 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_215 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_216 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_217 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_218 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_219 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_220 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_221 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_222 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_223 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_224 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_225 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_226 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_227 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_228 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_229 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_230 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_231 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_232 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_233 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_chirp_chirp */ { bhvChirpChirp, MODEL_NONE, 0 }, + /* macro_seaweed_bundle */ { bhvSeaweedBundle, MODEL_NONE, 0 }, + /* macro_beta_chest */ { bhvBetaChestBottom, MODEL_TREASURE_CHEST_BASE, 0 }, // unused + /* macro_water_mine */ { bhvBowserBomb, MODEL_WATER_MINE, 0 }, // unused + /* macro_fish_spawner_many_cyan */ { bhvFishSpawner, MODEL_NONE, FISH_SPAWNER_BP_MANY_CYAN }, // unused + /* macro_fish_spawner_few_cyan */ { bhvFishSpawner, MODEL_NONE, FISH_SPAWNER_BP_FEW_CYAN }, + /* macro_jet_stream_ring_spawner_1 */ { bhvJetStreamRingSpawner, MODEL_WATER_RING, 0 }, // unused + /* macro_jet_stream_ring_spawner_2 */ { bhvJetStreamRingSpawner, MODEL_WATER_RING, 0 }, // unused + /* macro_skeeter */ { bhvSkeeter, MODEL_SKEETER, 0 }, + /* macro_clam_shell */ { bhvClamShell, MODEL_CLAM_SHELL, 0 }, + /* macro_empty_244 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_245 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_246 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_247 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_248 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_249 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_250 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_cage_ukiki */ { bhvMacroUkiki, MODEL_UKIKI, UKIKI_BP_CAGE }, // unused + /* macro_cap_ukiki */ { bhvMacroUkiki, MODEL_UKIKI, UKIKI_BP_CAP }, // unused + /* macro_piranha_plant */ { bhvPiranhaPlant, MODEL_PIRANHA_PLANT, 0 }, // unused + /* macro_empty_254 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_whomp */ { bhvSmallWhomp, MODEL_WHOMP, 0 }, + /* macro_chain_chomp */ { bhvChainChomp, MODEL_CHAIN_CHOMP, 0 }, + /* macro_empty_257 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_koopa */ { bhvKoopa, MODEL_KOOPA_WITH_SHELL, KOOPA_BP_NORMAL }, + /* macro_koopa_shellless */ { bhvKoopa, MODEL_KOOPA_WITHOUT_SHELL, KOOPA_BP_UNSHELLED }, // unused + /* macro_wooden_post_2 */ { bhvWoodenPost, MODEL_WOODEN_POST, 0 }, // unused + /* macro_fire_piranha_plant_1 */ { bhvFirePiranhaPlant, MODEL_PIRANHA_PLANT, 0 }, + /* macro_fire_piranha_plant_2 */ { bhvFirePiranhaPlant, MODEL_PIRANHA_PLANT, 1 }, // unused + /* macro_koopa_tiny */ { bhvKoopa, MODEL_KOOPA_WITH_SHELL, KOOPA_BP_TINY }, + /* macro_empty_264 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_265 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_266 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_267 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_268 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_269 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_270 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_271 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_272 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_273 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_274 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_275 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_276 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_277 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_278 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_279 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_280 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_moneybag */ { bhvMoneybagHidden, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_282 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_283 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_284 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_285 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_286 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_287 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_288 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_swoop_1 */ { bhvSwoop, MODEL_SWOOP, 0 }, + /* macro_swoop_2 */ { bhvSwoop, MODEL_SWOOP, 1 }, + /* macro_mr_i */ { bhvMrI, MODEL_NONE, 0 }, + /* macro_scuttlebug_spawner */ { bhvScuttlebugSpawn, MODEL_NONE, 0 }, + /* macro_scuttlebug */ { bhvScuttlebug, MODEL_SCUTTLEBUG, 0 }, + /* macro_empty_294 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_295 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_296 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_297 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_298 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_299 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_300 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_301 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_302 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_unknown_303 */ { bhvYellowCoin, MODEL_UNKNOWN_54, 0 }, // unused + /* macro_empty_304 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_305 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_306 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_307 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_308 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_309 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_310 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_311 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_312 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_ttc_rotating_cube */ { bhvTTCRotatingSolid, MODEL_TTC_ROTATING_CUBE, TTC_ROTATING_SOLID_BP_CUBE }, + /* macro_ttc_rotating_prism */ { bhvTTCRotatingSolid, MODEL_TTC_ROTATING_PRISM, TTC_ROTATING_SOLID_BP_TRIANGULAR_PRISM }, + /* macro_ttc_pendulum */ { bhvTTCPendulum, MODEL_TTC_PENDULUM, 0 }, + /* macro_ttc_large_treadmill_1 */ { bhvTTCTreadmill, MODEL_TTC_LARGE_TREADMILL, TTC_TREADMILL_BP_LARGE_1 }, + /* macro_ttc_small_treadmill_1 */ { bhvTTCTreadmill, MODEL_TTC_SMALL_TREADMILL, TTC_TREADMILL_BP_SMALL_1 }, + /* macro_ttc_push_block */ { bhvTTCMovingBar, MODEL_TTC_PUSH_BLOCK, 0 }, + /* macro_ttc_rotating_hexagon */ { bhvTTCCog, MODEL_TTC_ROTATING_HEXAGON, TTC_COG_BP_SHAPE_HEXAGON | TTC_COG_BP_DIR_CCW }, + /* macro_ttc_rotating_triangle */ { bhvTTCCog, MODEL_TTC_ROTATING_TRIANGLE, TTC_COG_BP_SHAPE_TRIANGLE | TTC_COG_BP_DIR_CCW }, + /* macro_ttc_pit_block_1 */ { bhvTTCPitBlock, MODEL_TTC_PIT_BLOCK, 0 }, + /* macro_ttc_pit_block_2 */ { bhvTTCPitBlock, MODEL_TTC_PIT_BLOCK_UNUSED, 1 }, // unused + /* macro_ttc_elevator_platform */ { bhvTTCElevator, MODEL_TTC_ELEVATOR_PLATFORM, 0 }, + /* macro_ttc_clock_hand */ { bhvTTC2DRotator, MODEL_TTC_CLOCK_HAND, 0 }, + /* macro_ttc_spinner */ { bhvTTCSpinner, MODEL_TTC_SPINNER, 0 }, + /* macro_ttc_small_gear */ { bhvTTC2DRotator, MODEL_TTC_SMALL_GEAR, 1 }, + /* macro_ttc_large_gear */ { bhvTTC2DRotator, MODEL_TTC_LARGE_GEAR, 1 }, + /* macro_ttc_large_treadmill_2 */ { bhvTTCTreadmill, MODEL_TTC_LARGE_TREADMILL, TTC_TREADMILL_BP_LARGE_2 }, + /* macro_ttc_small_treadmill_2 */ { bhvTTCTreadmill, MODEL_TTC_SMALL_TREADMILL, TTC_TREADMILL_BP_SMALL_2 }, + /* macro_empty_330 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_331 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_332 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_333 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_334 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_335 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_336 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_337 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_338 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_box_star_act_2 */ { bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_STAR_ACT_2 }, + /* macro_box_star_act_3 */ { bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_STAR_ACT_3 }, + /* macro_box_star_act_4 */ { bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_STAR_ACT_4 }, + /* macro_box_star_act_5 */ { bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_STAR_ACT_5 }, // unused + /* macro_box_star_act_6 */ { bhvExclamationBox, MODEL_EXCLAMATION_BOX, EXCLAMATION_BOX_BP_STAR_ACT_6 }, + /* macro_empty_344 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_345 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_346 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_347 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_348 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_349 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_bits_sliding_platform */ { bhvSlidingPlatform2, MODEL_BITS_SLIDING_PLATFORM, 0 }, // unused + /* macro_bits_twin_sliding_platforms */ { bhvSlidingPlatform2, MODEL_BITS_TWIN_SLIDING_PLATFORMS, 0 }, // unused + /* macro_bits_unknown_352 */ { bhvAnotherTiltingPlatform, MODEL_BITDW_SLIDING_PLATFORM, 0 }, // unused + /* macro_bits_octagonal_platform */ { bhvOctagonalPlatformRotating, MODEL_BITS_OCTAGONAL_PLATFORM, 0 }, // unused + /* macro_bits_staircase */ { bhvAnimatesOnFloorSwitchPress, MODEL_BITS_STAIRCASE, 0 }, // unused + /* macro_empty_355 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_356 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_bits_ferris_wheel_axle */ { bhvFerrisWheelAxle, MODEL_BITS_FERRIS_WHEEL_AXLE, 0 }, // unused + /* macro_bits_arrow_platform */ { bhvActivatedBackAndForthPlatform, MODEL_BITS_ARROW_PLATFORM, 0 }, // unused + /* macro_bits_seesaw_platform */ { bhvSeesawPlatform, MODEL_BITS_SEESAW_PLATFORM, 0 }, // unused + /* macro_bits_tilting_w_platform */ { bhvSeesawPlatform, MODEL_BITS_TILTING_W_PLATFORM, 0 }, // unused + /* macro_empty_361 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_362 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_363 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_364 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, + /* macro_empty_365 */ { bhvYellowCoin, MODEL_YELLOW_COIN, 0 }, +}; + +STATIC_ASSERT(ARRAY_COUNT(sMacroObjectPresets) == macro_count, + "change this array if you are adding macro objects"); diff --git a/include/macros.h b/include/macros.h index 3c171faf..57d59218 100644 --- a/include/macros.h +++ b/include/macros.h @@ -25,6 +25,12 @@ #define UNUSED #endif +#ifdef VERSION_CN +#define UNUSED_CN UNUSED +#else +#define UNUSED_CN +#endif + // Avoid undefined behaviour for non-returning functions #ifdef __GNUC__ #define NORETURN __attribute__((noreturn)) @@ -69,4 +75,17 @@ #define VIRTUAL_TO_PHYSICAL2(addr) ((void *)(addr)) #endif +// Stubbed CN debug prints +#ifdef VERSION_CN +#define CN_DEBUG_PRINTF(args) osSyncPrintf args +#else +#define CN_DEBUG_PRINTF(args) +#endif + +#ifdef VERSION_CN +#define FORCE_BSS __attribute__((nocommon)) __attribute__((section (".bss_cn"))) +#else +#define FORCE_BSS +#endif + #endif // MACROS_H diff --git a/include/macros.inc b/include/macros.inc index 3cb002a3..bcbe5f17 100644 --- a/include/macros.inc +++ b/include/macros.inc @@ -1,8 +1,10 @@ -// Assembly Macros +#ifndef VERSION_CN +.set gp=64 +#endif -.set K0BASE, 0x80000000 -.set K1BASE, 0xA0000000 -.set K2BASE, 0xC0000000 +.equ K0BASE, 0x80000000 +.equ K1BASE, 0xA0000000 +.equ K2BASE, 0xC0000000 .macro glabel label .global \label diff --git a/include/model_ids.h b/include/model_ids.h index c51b0b23..aebf9ab2 100644 --- a/include/model_ids.h +++ b/include/model_ids.h @@ -14,11 +14,6 @@ #define ALL_ACTS_MACRO ACT_1 | ACT_2 | ACT_3 | ACT_4 | ACT_5 #define ALL_ACTS ACT_1 | ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6 -#define COIN_FORMATION_FLAG_VERTICAL (1 << 0) -#define COIN_FORMATION_FLAG_RING (1 << 1) -#define COIN_FORMATION_FLAG_ARROW (1 << 2) -#define COIN_FORMATION_FLAG_FLYING (1 << 4) - #define MODEL_NONE 0x00 /* Global models that are loaded for every level */ diff --git a/include/object_constants.h b/include/object_constants.h index 16dfe90c..2ed0eb69 100644 --- a/include/object_constants.h +++ b/include/object_constants.h @@ -18,7 +18,6 @@ #define ACTIVE_FLAG_UNK9 (1 << 9) // 0x0200 #define ACTIVE_FLAG_UNK10 (1 << 10) // 0x0400 - /* respawnInfoType */ #define RESPAWN_INFO_TYPE_NULL 0 #define RESPAWN_INFO_TYPE_32 1 @@ -86,10 +85,10 @@ #endif #define OBJ_MOVE_MASK_ON_GROUND (OBJ_MOVE_LANDED | OBJ_MOVE_ON_GROUND) -#define OBJ_MOVE_MASK_IN_WATER (\ - OBJ_MOVE_ENTERED_WATER |\ - OBJ_MOVE_AT_WATER_SURFACE |\ - OBJ_MOVE_UNDERWATER_OFF_GROUND |\ +#define OBJ_MOVE_MASK_IN_WATER ( \ + OBJ_MOVE_ENTERED_WATER | \ + OBJ_MOVE_AT_WATER_SURFACE | \ + OBJ_MOVE_UNDERWATER_OFF_GROUND | \ OBJ_MOVE_UNDERWATER_ON_GROUND) /* oActiveParticleFlags */ @@ -122,6 +121,15 @@ #define OBJ_ACT_VERTICAL_KNOCKBACK 101 #define OBJ_ACT_SQUISHED 102 +/* Star Index */ +#define STAR_INDEX_ACT_1 0 +#define STAR_INDEX_ACT_2 1 +#define STAR_INDEX_ACT_3 2 +#define STAR_INDEX_ACT_4 3 +#define STAR_INDEX_ACT_5 4 +#define STAR_INDEX_ACT_6 5 +#define STAR_INDEX_100_COINS 6 + /* gTTCSpeedSetting */ #define TTC_SPEED_SLOW 0 #define TTC_SPEED_FAST 1 @@ -129,18 +137,41 @@ #define TTC_SPEED_STOPPED 3 /* Bob-omb */ - /* oBehParams2ndByte */ + /* oBhvParams2ndByte */ #define BOBOMB_BP_STYPE_GENERIC 0 #define BOBOMB_BP_STYPE_STATIONARY 1 /* oAction */ - #define BOBOMB_ACT_PATROL 0 - #define BOBOMB_ACT_LAUNCHED 1 - #define BOBOMB_ACT_CHASE_MARIO 2 - #define BOBOMB_ACT_EXPLODE 3 + #define BOBOMB_ACT_PATROL 0 + #define BOBOMB_ACT_LAUNCHED 1 + #define BOBOMB_ACT_CHASE_MARIO 2 + #define BOBOMB_ACT_EXPLODE 3 #define BOBOMB_ACT_LAVA_DEATH 100 #define BOBOMB_ACT_DEATH_PLANE_DEATH 101 +/* Coin Formation */ + /* oAction */ + #define COIN_FORMATION_ACT_SPAWN_COINS 0 + #define COIN_FORMATION_ACT_IDLE 1 + #define COIN_FORMATION_ACT_RESPAWN_COINS 2 + + /* oBhvParams2ndByte */ + #define COIN_FORMATION_BP_FLAG_HORIZONTAL (0 << 0) + #define COIN_FORMATION_BP_FLAG_VERTICAL (1 << 0) + #define COIN_FORMATION_BP_FLAG_RING (1 << 1) + #define COIN_FORMATION_BP_FLAG_ARROW (1 << 2) + #define COIN_FORMATION_BP_FLAG_FLYING (1 << 4) + #define COIN_FORMATION_BP_FLAG_MASK (COIN_FORMATION_BP_FLAG_HORIZONTAL | \ + COIN_FORMATION_BP_FLAG_VERTICAL | \ + COIN_FORMATION_BP_FLAG_RING | \ + COIN_FORMATION_BP_FLAG_ARROW) + + #define COIN_FORMATION_BP_LINE_HORIZONTAL (COIN_FORMATION_BP_FLAG_HORIZONTAL) + #define COIN_FORMATION_BP_LINE_VERTICAL (COIN_FORMATION_BP_FLAG_VERTICAL) + #define COIN_FORMATION_BP_RING_HORIZONTAL (COIN_FORMATION_BP_FLAG_HORIZONTAL | COIN_FORMATION_BP_FLAG_RING) + #define COIN_FORMATION_BP_RING_VERTICAL (COIN_FORMATION_BP_FLAG_VERTICAL | COIN_FORMATION_BP_FLAG_RING) + #define COIN_FORMATION_BP_ARROW (COIN_FORMATION_BP_FLAG_ARROW) + /* Hidden Blue Coin */ /* oAction */ #define HIDDEN_BLUE_COIN_ACT_INACTIVE 0 @@ -160,13 +191,13 @@ /* Moving Yellow Coin */ /* oAction */ - #define MOV_YCOIN_ACT_IDLE 0 - #define MOV_YCOIN_ACT_BLINKING 1 + #define MOV_YCOIN_ACT_IDLE 0 + #define MOV_YCOIN_ACT_BLINKING 1 #define MOV_YCOIN_ACT_LAVA_DEATH 100 #define MOV_YCOIN_ACT_DEATH_PLANE_DEATH 101 /* Bob-omb Buddy */ - /* oBehParams2ndByte */ + /* oBhvParams2ndByte */ #define BOBOMB_BUDDY_BP_STYPE_GENERIC 0 #define BOBOMB_BUDDY_BP_STYPE_BOB_GRASS_KBB 1 #define BOBOMB_BUDDY_BP_STYPE_BOB_CANNON_KBB 2 @@ -248,7 +279,7 @@ #define BOWSER_ANIM_FLIP 25 #define BOWSER_ANIM_STAND_UP_FROM_FLIP 26 - /* oBehParams2ndByte */ + /* oBhvParams2ndByte */ #define BOWSER_BP_BITDW 0 #define BOWSER_BP_BITFS 1 #define BOWSER_BP_BITS 2 @@ -292,13 +323,13 @@ #define BOWSER_SUB_ACT_HIT_MINE_START 0 #define BOWSER_SUB_ACT_HIT_MINE_FALL 1 #define BOWSER_SUB_ACT_HIT_MINE_STOP 2 - + #define BOWSER_SUB_ACT_JUMP_ON_STAGE_IDLE 0 #define BOWSER_SUB_ACT_JUMP_ON_STAGE_START 1 #define BOWSER_SUB_ACT_JUMP_ON_STAGE_LAND 2 #define BOWSER_SUB_ACT_JUMP_ON_STAGE_STOP 3 -/* Bowser Bits Platform*/ +/* Bowser BitS Platform */ /* oAction */ #define BOWSER_BITS_PLAT_ACT_START 0 #define BOWSER_BITS_PLAT_ACT_CHECK 1 @@ -308,9 +339,9 @@ /* oAction */ #define FISH_SPAWNER_ACT_SPAWN 0 #define FISH_SPAWNER_ACT_IDLE 1 - #define FISH_SPAWNER_ACT_RESPAWN 2 + #define FISH_SPAWNER_ACT_RESPAWN 2 - /* oBehParams2ndByte */ + /* oBhvParams2ndByte */ #define FISH_SPAWNER_BP_MANY_BLUE 0 #define FISH_SPAWNER_BP_FEW_BLUE 1 #define FISH_SPAWNER_BP_MANY_CYAN 2 @@ -322,7 +353,7 @@ #define FISH_ACT_ROAM 1 #define FISH_ACT_FLEE 2 -/* Blue_Fish */ +/* Blue Fish */ /* oAction */ #define BLUE_FISH_ACT_DIVE 0 #define BLUE_FISH_ACT_TURN 1 @@ -350,7 +381,7 @@ #define HOMING_AMP_ACT_ATTACK_COOLDOWN 4 /* Amp */ - /* oBehParams2ndByte */ + /* oBhvParams2ndByte */ #define AMP_BP_ROT_RADIUS_200 0 #define AMP_BP_ROT_RADIUS_300 1 #define AMP_BP_ROT_RADIUS_400 2 @@ -377,27 +408,27 @@ #define HOOT_ACT_CARRY 1 #define HOOT_ACT_TIRED 2 -/* Bully (all variants) */ - /* oBehParams2ndByte */ +/* Bully (All variants) */ + /* oBhvParams2ndByte */ #define BULLY_BP_SIZE_SMALL 0 #define BULLY_BP_SIZE_BIG 1 /* oAction */ - #define BULLY_ACT_PATROL 0 - #define BULLY_ACT_CHASE_MARIO 1 - #define BULLY_ACT_KNOCKBACK 2 - #define BULLY_ACT_BACK_UP 3 - #define BULLY_ACT_INACTIVE 4 - #define BULLY_ACT_ACTIVATE_AND_FALL 5 + #define BULLY_ACT_PATROL 0 + #define BULLY_ACT_CHASE_MARIO 1 + #define BULLY_ACT_KNOCKBACK 2 + #define BULLY_ACT_BACK_UP 3 + #define BULLY_ACT_INACTIVE 4 + #define BULLY_ACT_ACTIVATE_AND_FALL 5 #define BULLY_ACT_LAVA_DEATH 100 #define BULLY_ACT_DEATH_PLANE_DEATH 101 /* oBullySubtype */ - #define BULLY_STYPE_GENERIC 0 - #define BULLY_STYPE_MINION 1 + #define BULLY_STYPE_GENERIC 0 + #define BULLY_STYPE_MINION 1 #define BULLY_STYPE_CHILL 16 -/* Water Ring (all variants) */ +/* Water Ring (All variants) */ /* oAction */ #define WATER_RING_ACT_NOT_COLLECTED 0 #define WATER_RING_ACT_COLLECTED 1 @@ -417,7 +448,7 @@ #define LLL_DRAWBRIDGE_ACT_LOWER 0 #define LLL_DRAWBRIDGE_ACT_RAISE 1 -/* Bomp (both variants) */ +/* Bomp (Both variants) */ /* oAction */ #define BOMP_ACT_WAIT 0 #define BOMP_ACT_POKE_OUT 1 @@ -425,7 +456,7 @@ #define BOMP_ACT_RETRACT 3 /* WF Sliding Brick Platform */ - /* oBehParams2ndByte */ + /* oBhvParams2ndByte */ #define WF_SLID_BRICK_PTFM_BP_MOV_VEL_10 1 #define WF_SLID_BRICK_PTFM_BP_MOV_VEL_15 2 #define WF_SLID_BRICK_PTFM_BP_MOV_VEL_20 3 @@ -462,8 +493,8 @@ #define BBALL_ACT_INITIALIZE 0 #define BBALL_ACT_ROLL 1 -/* Bowling Ball + Bowling Ball Spawner (all variants) */ - /* oBehParams2ndByte */ +/* Bowling Ball + Bowling Ball Spawner (All variants) */ + /* oBhvParams2ndByte */ #define BBALL_BP_STYPE_BOB_UPPER 0 #define BBALL_BP_STYPE_TTM 1 #define BBALL_BP_STYPE_BOB_LOWER 2 @@ -495,10 +526,21 @@ #define BOO_DEATH_STATUS_DEAD 2 /* attackStatus */ - #define BOO_NOT_ATTACKED 0 - #define BOO_ATTACKED 1 + #define BOO_NOT_ATTACKED 0 + #define BOO_ATTACKED 1 #define BOO_BOUNCED_ON -1 + /* oBhvParams2ndByte */ + #define BOO_BP_GHOST_HUNT 0 + #define BOO_BP_GENERIC 1 + #define BOO_BP_MERRY_GO_ROUND 2 + +/* Big Boo */ + /* oBhvParams2ndByte */ + #define BIG_BOO_BP_GHOST_HUNT 0 + #define BIG_BOO_BP_MERRY_GO_ROUND 1 + #define BIG_BOO_BP_BALCONY 2 + /* Beta Boo Key */ /* oAction */ #define BETA_BOO_KEY_ACT_IN_BOO 0 @@ -521,7 +563,7 @@ /* BBH Merry-Go-Round */ /* gMarioCurrentRoom */ #define BBH_NEAR_MERRY_GO_ROUND_ROOM 10 - #define BBH_DYNAMIC_SURFACE_ROOM 0 + #define BBH_DYNAMIC_SURFACE_ROOM 0 #define BBH_OUTSIDE_ROOM 13 /* Coffin Spawner */ @@ -533,7 +575,7 @@ #define COFFIN_ACT_IDLE 0 #define COFFIN_ACT_STAND_UP 1 - /* oBehParams2ndByte */ + /* oBhvParams2ndByte */ #define COFFIN_BP_STATIC 0 /* WDW Arrow Lift */ @@ -548,12 +590,12 @@ /* Yoshi */ /* oAction */ - #define YOSHI_ACT_IDLE 0 - #define YOSHI_ACT_WALK 1 - #define YOSHI_ACT_TALK 2 - #define YOSHI_ACT_WALK_JUMP_OFF_ROOF 3 - #define YOSHI_ACT_FINISH_JUMPING_AND_DESPAWN 4 - #define YOSHI_ACT_GIVE_PRESENT 5 + #define YOSHI_ACT_IDLE 0 + #define YOSHI_ACT_WALK 1 + #define YOSHI_ACT_TALK 2 + #define YOSHI_ACT_WALK_JUMP_OFF_ROOF 3 + #define YOSHI_ACT_FINISH_JUMPING_AND_DESPAWN 4 + #define YOSHI_ACT_GIVE_PRESENT 5 #define YOSHI_ACT_CREDITS 10 /* Koopa */ @@ -590,7 +632,7 @@ #define KOOPA_THE_QUICK_BOB_INDEX 0 #define KOOPA_THE_QUICK_THI_INDEX 1 - /* oBehParams2ndByte */ + /* oBhvParams2ndByte */ #define KOOPA_BP_UNSHELLED 0 #define KOOPA_BP_NORMAL 1 #define KOOPA_BP_KOOPA_THE_QUICK_BASE 2 @@ -609,35 +651,40 @@ #define SWOOP_ACT_IDLE 0 #define SWOOP_ACT_MOVE 1 -/* Fly guy */ +/* Fly Guy */ /* oAction */ #define FLY_GUY_ACT_IDLE 0 #define FLY_GUY_ACT_APPROACH_MARIO 1 #define FLY_GUY_ACT_LUNGE 2 #define FLY_GUY_ACT_SHOOT_FIRE 3 -/* Goomba triplet spawner */ - /* oBehParams2ndByte */ - #define GOOMBA_TRIPLET_SPAWNER_BP_SIZE_MASK 0x00000003 - #define GOOMBA_TRIPLET_SPAWNER_BP_EXTRA_GOOMBAS_MASK 0x000000FC - - /* oAction */ - #define GOOMBA_TRIPLET_SPAWNER_ACT_UNLOADED 0 - #define GOOMBA_TRIPLET_SPAWNER_ACT_LOADED 1 + /* oBhvParams2ndByte */ + #define FLY_GUY_BP_GENERIC 0 + #define FLY_GUY_BP_FIRE 1 /* Goomba */ - /* oBehParams2ndByte */ - #define GOOMBA_BP_SIZE_MASK 0x00000003 - #define GOOMBA_SIZE_REGULAR 0 - #define GOOMBA_SIZE_HUGE 1 - #define GOOMBA_SIZE_TINY 2 - #define GOOMBA_BP_TRIPLET_FLAG_MASK 0x000000FC /* oAction */ #define GOOMBA_ACT_WALK 0 #define GOOMBA_ACT_ATTACKED_MARIO 1 #define GOOMBA_ACT_JUMP 2 -/* Chain chomp */ + /* oBhvParams2ndByte */ + #define GOOMBA_SIZE_REGULAR 0 + #define GOOMBA_SIZE_HUGE 1 + #define GOOMBA_SIZE_TINY 2 + #define GOOMBA_BP_SIZE_MASK (GOOMBA_SIZE_REGULAR | GOOMBA_SIZE_HUGE | GOOMBA_SIZE_TINY) + #define GOOMBA_BP_TRIPLET_RESPAWN_FLAG_MASK (0x000000FF & ~GOOMBA_BP_SIZE_MASK) + +/* Goomba Triplet Spawner */ + /* oAction */ + #define GOOMBA_TRIPLET_SPAWNER_ACT_UNLOADED 0 + #define GOOMBA_TRIPLET_SPAWNER_ACT_LOADED 1 + + /* oBhvParams2ndByte */ + #define GOOMBA_TRIPLET_SPAWNER_BP_EXTRA_GOOMBAS_MASK (0x000000FF & ~GOOMBA_BP_SIZE_MASK) + #define GOOMBA_TRIPLET_SPAWNER_BP_EXTRA_GOOMBAS(num) ((num) << 2) + +/* Chain Chomp */ /* oAction */ #define CHAIN_CHOMP_ACT_UNINITIALIZED 0 #define CHAIN_CHOMP_ACT_MOVE 1 @@ -655,12 +702,12 @@ #define CHAIN_CHOMP_RELEASED_JUMP_AWAY 4 #define CHAIN_CHOMP_RELEASED_END_CUTSCENE 5 -/* Chain chomp chain part */ - /* oBehParams2ndByte */ +/* Chain Chomp Chain Part */ + /* oBhvParams2ndByte */ #define CHAIN_CHOMP_CHAIN_PART_BP_PIVOT 0 -/* Wooden post */ - /* oBehParams */ +/* Wooden Post */ + /* oBhvParams */ #define WOODEN_POST_BP_NO_COINS_MASK 0x0000FF00 /* Wiggler */ @@ -684,7 +731,7 @@ #define SPINY_ACT_THROWN_BY_LAKITU 2 #define SPINY_ACT_ATTACKED_MARIO 3 -/* Evil lakitu */ +/* Evil Lakitu */ /* oAction */ #define ENEMY_LAKITU_ACT_UNINITIALIZED 0 #define ENEMY_LAKITU_ACT_MAIN 1 @@ -701,17 +748,17 @@ #define CLOUD_ACT_UNLOAD 2 #define CLOUD_ACT_FWOOSH_HIDDEN 3 - /* oBehParams2ndByte */ + /* oBhvParams2ndByte */ #define CLOUD_BP_FWOOSH 0 #define CLOUD_BP_LAKITU_CLOUD 1 -/* Camera lakitu */ +/* Camera Lakitu */ /* oAction */ #define CAMERA_LAKITU_INTRO_ACT_TRIGGER_CUTSCENE 0 #define CAMERA_LAKITU_INTRO_ACT_SPAWN_CLOUD 1 #define CAMERA_LAKITU_INTRO_ACT_UNK2 2 - /* oBehParams2ndByte */ + /* oBhvParams2ndByte */ #define CAMERA_LAKITU_BP_FOLLOW_CAMERA 0 #define CAMERA_LAKITU_BP_INTRO 1 @@ -720,7 +767,7 @@ #define MANTA_ACT_SPAWN_RINGS 0 #define MANTA_ACT_NO_RINGS 1 -/* Monty mole */ +/* Monty Mole */ /* oAction */ #define MONTY_MOLE_ACT_SELECT_HOLE 0 #define MONTY_MOLE_ACT_RISE_FROM_HOLE 1 @@ -731,10 +778,11 @@ #define MONTY_MOLE_ACT_HIDE 6 #define MONTY_MOLE_ACT_JUMP_OUT_OF_HOLE 7 - /* oBehParams2ndByte */ + /* oBhvParams2ndByte */ #define MONTY_MOLE_BP_NO_ROCK 0 + #define MONTY_MOLE_BP_GENERIC 1 -/* Monty mole rock */ +/* Monty Mole Rock */ /* oAction */ #define MONTY_MOLE_ROCK_ACT_HELD 0 #define MONTY_MOLE_ROCK_ACT_MOVE 1 @@ -776,21 +824,21 @@ #define UKIKI_TEXT_DO_NOT_LET_GO 6 #define UKIKI_TEXT_STEAL_CAP 7 - /* oBehParams2ndByte */ - #define UKIKI_CAGE 0 - #define UKIKI_CAP 1 + /* oBhvParams2ndByte */ + #define UKIKI_BP_CAGE 0 + #define UKIKI_BP_CAP 1 /* Animations */ - #define UKIKI_ANIM_RUN 0 - #define UKIKI_ANIM_UNUSED_WALK 1 - #define UKIKI_ANIM_UNUSED_APOSE 2 - #define UKIKI_ANIM_UNUSED_DEATH 3 - #define UKIKI_ANIM_SCREECH 4 - #define UKIKI_ANIM_JUMP_CLAP 5 - #define UKIKI_ANIM_UNUSED_HOP 6 - #define UKIKI_ANIM_LAND 7 - #define UKIKI_ANIM_JUMP 8 - #define UKIKI_ANIM_ITCH 9 + #define UKIKI_ANIM_RUN 0 + #define UKIKI_ANIM_UNUSED_WALK 1 + #define UKIKI_ANIM_UNUSED_APOSE 2 + #define UKIKI_ANIM_UNUSED_DEATH 3 + #define UKIKI_ANIM_SCREECH 4 + #define UKIKI_ANIM_JUMP_CLAP 5 + #define UKIKI_ANIM_UNUSED_HOP 6 + #define UKIKI_ANIM_LAND 7 + #define UKIKI_ANIM_JUMP 8 + #define UKIKI_ANIM_ITCH 9 #define UKIKI_ANIM_HANDSTAND 10 #define UKIKI_ANIM_TURN 11 #define UKIKI_ANIM_HELD 12 @@ -830,12 +878,13 @@ /* oPiranhaPlantSleepMusicState */ #define PIRANHA_PLANT_SLEEP_MUSIC_PLAYING 0 -/* Piranha Plant bubble */ +/* Piranha Plant Bubble */ + /* oAction */ #define PIRANHA_PLANT_BUBBLE_ACT_IDLE 0 #define PIRANHA_PLANT_BUBBLE_ACT_GROW_SHRINK_LOOP 1 #define PIRANHA_PLANT_BUBBLE_ACT_BURST 2 -/* Platform on track */ +/* Platform on Track */ /* oAction */ #define PLATFORM_ON_TRACK_ACT_INIT 0 #define PLATFORM_ON_TRACK_ACT_WAIT_FOR_MARIO 1 @@ -843,11 +892,11 @@ #define PLATFORM_ON_TRACK_ACT_PAUSE_BRIEFLY 3 #define PLATFORM_ON_TRACK_ACT_FALL 4 - /* oBehParams >> 16 */ - #define PLATFORM_ON_TRACK_BP_MASK_PATH 0xF - #define PLATFORM_ON_TRACK_BP_MASK_TYPE (0x7 << 4) - #define PLATFORM_ON_TRACK_BP_RETURN_TO_START (1 << 8) - #define PLATFORM_ON_TRACK_BP_DONT_DISAPPEAR (1 << 9) + /* oBhvParams >> 16 */ + #define PLATFORM_ON_TRACK_BP_MASK_PATH 0x000F + #define PLATFORM_ON_TRACK_BP_MASK_TYPE 0x0070 + #define PLATFORM_ON_TRACK_BP_RETURN_TO_START (1 << 8) + #define PLATFORM_ON_TRACK_BP_DONT_DISAPPEAR (1 << 9) #define PLATFORM_ON_TRACK_BP_DONT_TURN_YAW (1 << 10) #define PLATFORM_ON_TRACK_BP_DONT_TURN_ROLL (1 << 11) @@ -856,35 +905,38 @@ #define PLATFORM_ON_TRACK_TYPE_CHECKERED 2 #define PLATFORM_ON_TRACK_TYPE_GRATE 3 -/* Purple switch */ - #define PURPLE_SWITCH_IDLE 0 - #define PURPLE_SWITCH_PRESSED 1 - #define PURPLE_SWITCH_TICKING 2 - #define PURPLE_SWITCH_UNPRESSED 3 - #define PURPLE_SWITCH_WAIT_FOR_MARIO_TO_GET_OFF 4 +/* Purple Switch */ + /* oAction */ + #define PURPLE_SWITCH_ACT_IDLE 0 + #define PURPLE_SWITCH_ACT_PRESSED 1 + #define PURPLE_SWITCH_ACT_TICKING 2 + #define PURPLE_SWITCH_ACT_UNPRESSED 3 + #define PURPLE_SWITCH_ACT_WAIT_FOR_MARIO_TO_GET_OFF 4 -/* Pyramid elevator */ - #define PYRAMID_ELEVATOR_IDLE 0 - #define PYRAMID_ELEVATOR_START_MOVING 1 - #define PYRAMID_ELEVATOR_CONSTANT_VELOCITY 2 - #define PYRAMID_ELEVATOR_AT_BOTTOM 3 +/* Pyramid Elevator */ + /* oAction */ + #define PYRAMID_ELEVATOR_ACT_IDLE 0 + #define PYRAMID_ELEVATOR_ACT_START_MOVING 1 + #define PYRAMID_ELEVATOR_ACT_CONSTANT_VELOCITY 2 + #define PYRAMID_ELEVATOR_ACT_AT_BOTTOM 3 -/* Pyramid top */ +/* Pyramid Top */ + /* oAction */ #define PYRAMID_TOP_ACT_CHECK_IF_SOLVED 0 #define PYRAMID_TOP_ACT_SPINNING 1 #define PYRAMID_TOP_ACT_EXPLODE 2 -/* Pyramid wall */ +/* Pyramid Wall */ /* oAction */ #define PYRAMID_WALL_ACT_MOVING_DOWN 0 #define PYRAMID_WALL_ACT_MOVING_UP 1 - /* oBehParams2ndByte */ + /* oBhvParams2ndByte */ #define PYRAMID_WALL_BP_POSITION_HIGH 0 #define PYRAMID_WALL_BP_POSITION_MIDDLE 1 #define PYRAMID_WALL_BP_POSITION_LOW 2 -/* Penguins (general) */ +/* Penguins (General) */ /* Walking sounds */ #define PENGUIN_WALK_BABY 0 #define PENGUIN_WALK_BIG 1 @@ -893,7 +945,7 @@ #define PENGUIN_ANIM_WALK 0 #define PENGUIN_ANIM_IDLE 3 -/* Racing penguin */ +/* Racing Penguin */ /* oAction */ #define RACING_PENGUIN_ACT_WAIT_FOR_MARIO 0 #define RACING_PENGUIN_ACT_SHOW_INIT_TEXT 1 @@ -902,80 +954,98 @@ #define RACING_PENGUIN_ACT_FINISH_RACE 4 #define RACING_PENGUIN_ACT_SHOW_FINAL_TEXT 5 -/* SL walking penguin */ + /* oBhvParams2ndByte */ + #define RACING_PENGUIN_BP_THIN 0 + #define RACING_PENGUIN_BP_FAT 1 + +/* 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 */ +/* 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 */ +/* Water Bomb */ /* oAction */ #define WATER_BOMB_ACT_SHOT_FROM_CANNON 0 #define WATER_BOMB_ACT_INIT 1 #define WATER_BOMB_ACT_DROP 2 #define WATER_BOMB_ACT_EXPLODE 3 -/* TTC rotating solid */ - /* oBehParams2ndByte */ +/* TTC Rotating Solid */ + /* oBhvParams2ndByte */ #define TTC_ROTATING_SOLID_BP_CUBE 0 #define TTC_ROTATING_SOLID_BP_TRIANGULAR_PRISM 1 -/* TTC moving bar */ +/* TTC Treadmill */ + /* oBhvParams2ndByte */ + #define TTC_TREADMILL_BP_FLAG_LARGE (0 << 0) + #define TTC_TREADMILL_BP_FLAG_SMALL (1 << 0) + #define TTC_TREADMILL_BP_FLAG_MASK (TTC_TREADMILL_BP_FLAG_LARGE | TTC_TREADMILL_BP_FLAG_SMALL) + #define TTC_TREADMILL_BP_LARGE_1 ((0 << 1) | TTC_TREADMILL_BP_FLAG_LARGE) + #define TTC_TREADMILL_BP_SMALL_1 ((0 << 1) | TTC_TREADMILL_BP_FLAG_SMALL) + #define TTC_TREADMILL_BP_LARGE_2 ((1 << 1) | TTC_TREADMILL_BP_FLAG_LARGE) + #define TTC_TREADMILL_BP_SMALL_2 ((1 << 1) | TTC_TREADMILL_BP_FLAG_SMALL) + +/* TTC Moving Bar */ /* oAction */ #define TTC_MOVING_BAR_ACT_WAIT 0 #define TTC_MOVING_BAR_ACT_PULL_BACK 1 #define TTC_MOVING_BAR_ACT_EXTEND 2 #define TTC_MOVING_BAR_ACT_RETRACT 3 -/* TTC cog */ - /* oBehParams2ndByte */ - #define TTC_COG_BP_SHAPE_MASK 0x00000002 +/* TTC Cog */ + /* oBhvParams2ndByte */ #define TTC_COG_BP_SHAPE_HEXAGON (0 << 1) #define TTC_COG_BP_SHAPE_TRIANGLE (1 << 1) - #define TTC_COG_BP_DIR_MASK 0x00000001 + #define TTC_COG_BP_SHAPE_MASK (TTC_COG_BP_SHAPE_HEXAGON | TTC_COG_BP_SHAPE_TRIANGLE) #define TTC_COG_BP_DIR_CCW (0 << 0) // TODO: Check these #define TTC_COG_BP_DIR_CW (1 << 0) + #define TTC_COG_BP_DIR_MASK (TTC_COG_BP_DIR_CCW | TTC_COG_BP_DIR_CW) /* TTC 2D Rotator */ - /* oBehParams2ndByte */ + /* oBhvParams2ndByte */ #define TTC_2D_ROTATOR_BP_HAND 0 #define TTC_2D_ROTATOR_BP_2D_COG 1 /* Activated Back-and-Forth Platform */ - /* ((u16)(o->oBehParams >> 16) & 0x0300) >> 8 aka platform type */ #define ACTIVATED_BF_PLAT_TYPE_BITS_ARROW_PLAT 0 #define ACTIVATED_BF_PLAT_TYPE_BITFS_MESH_PLAT 1 #define ACTIVATED_BF_PLAT_TYPE_BITFS_ELEVATOR 2 + /* oBhvParams >> 16 */ + #define ACTIVATED_BF_PLAT_BP_MASK_TYPE ((ACTIVATED_BF_PLAT_TYPE_BITS_ARROW_PLAT | \ + ACTIVATED_BF_PLAT_TYPE_BITFS_MESH_PLAT | \ + ACTIVATED_BF_PLAT_TYPE_BITFS_ELEVATOR) << 8) + /* Dorrie */ /* oAction */ #define DORRIE_ACT_MOVE 0 #define DORRIE_ACT_LOWER_HEAD 1 #define DORRIE_ACT_RAISE_HEAD 2 -/* Mad piano */ +/* Mad Piano */ /* oAction */ #define MAD_PIANO_ACT_WAIT 0 #define MAD_PIANO_ACT_ATTACK 1 -/* Fire piranha plant */ +/* Fire Piranha Plant */ /* oAction */ #define FIRE_PIRANHA_PLANT_ACT_HIDE 0 #define FIRE_PIRANHA_PLANT_ACT_GROW 1 -/* Fire spitter */ +/* Fire Spitter */ /* oAction */ #define FIRE_SPITTER_ACT_IDLE 0 #define FIRE_SPITTER_ACT_SPIT_FIRE 1 -/* Eyerok boss */ +/* Eyerok Boss */ /* oAction */ #define EYEROK_BOSS_ACT_SLEEP 0 #define EYEROK_BOSS_ACT_WAKE_UP 1 @@ -983,18 +1053,18 @@ #define EYEROK_BOSS_ACT_FIGHT 3 #define EYEROK_BOSS_ACT_DIE 4 -/* Eyerok hand */ +/* Eyerok Hand */ /* oAction */ - #define EYEROK_HAND_ACT_SLEEP 0 - #define EYEROK_HAND_ACT_IDLE 1 - #define EYEROK_HAND_ACT_OPEN 2 - #define EYEROK_HAND_ACT_SHOW_EYE 3 - #define EYEROK_HAND_ACT_CLOSE 4 - #define EYEROK_HAND_ACT_RETREAT 5 - #define EYEROK_HAND_ACT_TARGET_MARIO 6 - #define EYEROK_HAND_ACT_SMASH 7 - #define EYEROK_HAND_ACT_FIST_PUSH 8 - #define EYEROK_HAND_ACT_FIST_SWEEP 9 + #define EYEROK_HAND_ACT_SLEEP 0 + #define EYEROK_HAND_ACT_IDLE 1 + #define EYEROK_HAND_ACT_OPEN 2 + #define EYEROK_HAND_ACT_SHOW_EYE 3 + #define EYEROK_HAND_ACT_CLOSE 4 + #define EYEROK_HAND_ACT_RETREAT 5 + #define EYEROK_HAND_ACT_TARGET_MARIO 6 + #define EYEROK_HAND_ACT_SMASH 7 + #define EYEROK_HAND_ACT_FIST_PUSH 8 + #define EYEROK_HAND_ACT_FIST_SWEEP 9 #define EYEROK_HAND_ACT_BEGIN_DOUBLE_POUND 10 // raising for double smash #define EYEROK_HAND_ACT_DOUBLE_POUND 11 // double smashing #define EYEROK_HAND_ACT_ATTACKED 12 @@ -1023,7 +1093,7 @@ #define BIRD_ACT_INACTIVE 0 #define BIRD_ACT_FLY 1 - /* oBehParams2ndByte */ + /* oBhvParams2ndByte */ #define BIRD_BP_SPAWNED 0 #define BIRD_BP_SPAWNER 1 @@ -1049,23 +1119,28 @@ #define TWEESTER_SUB_ACT_CHASE 0 -/* Triplet butterfly */ +/* Triplet Butterfly */ /* oAction */ #define TRIPLET_BUTTERFLY_ACT_INIT 0 #define TRIPLET_BUTTERFLY_ACT_WANDER 1 #define TRIPLET_BUTTERFLY_ACT_ACTIVATE 2 #define TRIPLET_BUTTERFLY_ACT_EXPLODE 3 - /* oBehParams2ndByte */ - #define TRIPLET_BUTTERFLY_BP_BUTTERFLY_NUM 0x00000003 - #define TRIPLET_BUTTERFLY_BP_NO_BOMBS 0x00000004 + /* oBhvParams2ndByte */ + #define TRIPLET_BUTTERFLY_BP_SPAWN_TYPE_SPAWNER (0 << 0) + #define TRIPLET_BUTTERFLY_BP_SPAWN_TYPE_SPAWNED_1 (1 << 0) + #define TRIPLET_BUTTERFLY_BP_SPAWN_TYPE_SPAWNED_2 (1 << 1) + #define TRIPLET_BUTTERFLY_BP_SPAWN_TYPE_MASK (TRIPLET_BUTTERFLY_BP_SPAWN_TYPE_SPAWNER | \ + TRIPLET_BUTTERFLY_BP_SPAWN_TYPE_SPAWNED_1 | \ + TRIPLET_BUTTERFLY_BP_SPAWN_TYPE_SPAWNED_2) + #define TRIPLET_BUTTERFLY_BP_NO_BOMBS (1 << 2) /* oTripletButterflyType */ #define TRIPLET_BUTTERFLY_TYPE_NORMAL -1 - #define TRIPLET_BUTTERFLY_TYPE_EXPLODES 0 - #define TRIPLET_BUTTERFLY_TYPE_SPAWN_1UP 1 + #define TRIPLET_BUTTERFLY_TYPE_EXPLODES 0 + #define TRIPLET_BUTTERFLY_TYPE_SPAWN_1UP 1 -/* Water level diamond */ +/* Water Level Diamond */ /* oAction */ // Loading #define WATER_LEVEL_DIAMOND_ACT_INIT 0 @@ -1089,6 +1164,10 @@ #define MIPS_STAR_STATUS_SHOULD_SPAWN_STAR 1 #define MIPS_STAR_STATUS_ALREADY_SPAWNED_STAR 2 + /* oBhvParams2ndByte */ + #define MIPS_BP_15_STARS 0 + #define MIPS_BP_50_STARS 1 + /* Falling Pillar */ /* oAction */ #define FALLING_PILLAR_ACT_IDLE 0 @@ -1112,8 +1191,119 @@ #define MR_BLIZZARD_ACT_DEATH 6 #define MR_BLIZZARD_ACT_JUMP 7 - /* oBehParams2ndByte */ - #define MR_BLIZZARD_STYPE_NO_CAP 0 + /* oBhvParams2ndByte */ + #define MR_BLIZZARD_STYPE_GENERIC 0 #define MR_BLIZZARD_STYPE_JUMPING 1 + #define MR_BLIZZARD_STYPE_CAP 2 + +/* Whomp */ + /* oBhvParams2ndByte */ + #define WHOMP_BP_SMALL 0 + #define WHOMP_BP_KING 1 + +/* 1-Up Mushroom */ + /* oBhvParams2ndByte */ + #define ONE_UP_BP_GENERIC 0 + #define ONE_UP_BP_BEAT_BITDW_BOWSER 1 + #define ONE_UP_BP_BEAT_BITFS_BOWSER 2 + +/* Breakable Box */ + /* oBhvParams2ndByte */ + #define BREAKABLE_BOX_BP_NO_COINS 0 + #define BREAKABLE_BOX_BP_3_COINS 1 + #define BREAKABLE_BOX_BP_5_COINS 2 + #define BREAKABLE_BOX_BP_GIANT 3 + +/* Hidden Object */ + /* oAction */ + #define HIDDEN_OBJECT_ACT_INACTIVE 0 + #define HIDDEN_OBJECT_ACT_ACTIVE 1 + #define HIDDEN_OBJECT_ACT_BROKEN 2 + + /* oBhvParams2ndByte */ + #define HIDDEN_OBJECT_BP_BREAKABLE_BOX 0 + #define HIDDEN_OBJECT_BP_WDW_PLATFORM 1 + #define HIDDEN_OBJECT_BP_UNBREAKABLE_BOX_UNUSED_1 1 + #define HIDDEN_OBJECT_BP_UNBREAKABLE_BOX_UNUSED_2 2 + +/* Exclamation Box */ + /* oAnimState */ + #define EXCLAMATION_BOX_ANIM_STATE_WING_CAP 0 + #define EXCLAMATION_BOX_ANIM_STATE_METAL_CAP 1 + #define EXCLAMATION_BOX_ANIM_STATE_VANISH_CAP 2 + #define EXCLAMATION_BOX_ANIM_STATE_DEFAULT 3 + + /* oBhvParams2ndByte */ + #define EXCLAMATION_BOX_BP_WING_CAP 0 + #define EXCLAMATION_BOX_BP_METAL_CAP 1 + #define EXCLAMATION_BOX_BP_VANISH_CAP 2 + #define EXCLAMATION_BOX_BP_SPECIAL_CAP_END 2 + #define EXCLAMATION_BOX_BP_KOOPA_SHELL 3 + #define EXCLAMATION_BOX_BP_ONE_COIN 4 + #define EXCLAMATION_BOX_BP_THREE_COINS 5 + #define EXCLAMATION_BOX_BP_TEN_COINS 6 + #define EXCLAMATION_BOX_BP_1UP_WALKING 7 + #define EXCLAMATION_BOX_BP_STAR_ACT_1 8 + #define EXCLAMATION_BOX_BP_1UP_RUNNING_AWAY 9 + #define EXCLAMATION_BOX_BP_STAR_ACT_2 10 + #define EXCLAMATION_BOX_BP_STAR_ACT_3 11 + #define EXCLAMATION_BOX_BP_STAR_ACT_4 12 + #define EXCLAMATION_BOX_BP_STAR_ACT_5 13 + #define EXCLAMATION_BOX_BP_STAR_ACT_6 14 + #define EXCLAMATION_BOX_BP_END 99 + +/* Cap Switch */ + /* oBhvParams2ndByte */ + #define CAP_SWITCH_BP_RED 0 + #define CAP_SWITCH_BP_GREEN 1 + #define CAP_SWITCH_BP_BLUE 2 + #define CAP_SWITCH_BP_YELLOW 3 + +/* Openable Grill */ + /* oBhvParams2ndByte */ + #define OPENABLE_GRILL_BP_BOB 0 + #define OPENABLE_GRILL_BP_HMC 1 + +/* WF Rotating Wooden Platform */ + /* oAction */ + #define WF_ROTATING_WOODEN_PLATFORM_ACT_IDLE 0 + #define WF_ROTATING_WOODEN_PLATFORM_ACT_ROTATING 1 + +/* Rotating Platform */ + /* oBhvParams2ndByte */ + #define ROTATING_PLATFORM_BP_WF 0 + #define ROTATING_PLATFORM_BP_WDW 1 + +/* Tumbling Bridge */ + /* oBhvParams2ndByte */ + #define TUMBLING_BRIDGE_BP_WF 0 + #define TUMBLING_BRIDGE_BP_BBH 1 + #define TUMBLING_BRIDGE_BP_LLL 2 + #define TUMBLING_BRIDGE_BP_BITFS 3 + +/* Grindel or Thwomp */ + /* oAction */ + #define GRINDEL_THWOMP_ACT_RAISE 0 + #define GRINDEL_THWOMP_ACT_IDLE_AT_TOP 1 + #define GRINDEL_THWOMP_ACT_LOWER 2 + #define GRINDEL_THWOMP_ACT_LAND 3 + #define GRINDEL_THWOMP_ACT_IDLE_AT_BOTTOM 4 + +/* Tox Box */ + /* oAction */ + #define TOX_BOX_ACT_INIT 0 + #define TOX_BOX_ACT_ROLL_LAND 1 + #define TOX_BOX_ACT_IDLE 2 + #define TOX_BOX_ACT_UNUSED_IDLE 3 + #define TOX_BOX_ACT_ROLL_FORWARD 4 + #define TOX_BOX_ACT_ROLL_BACKWARD 5 + #define TOX_BOX_ACT_ROLL_RIGHT 6 + #define TOX_BOX_ACT_ROLL_LEFT 7 + #define TOX_BOX_ACT_TABLE_END -1 + + /* oBhvParams2ndByte */ + #define TOX_BOX_BP_MOVEMENT_PATTERN_1 0 + #define TOX_BOX_BP_MOVEMENT_PATTERN_2 1 + #define TOX_BOX_BP_MOVEMENT_PATTERN_3 2 #endif // OBJECT_CONSTANTS_H diff --git a/include/object_fields.h b/include/object_fields.h index 8159f4aa..3eba0042 100644 --- a/include/object_fields.h +++ b/include/object_fields.h @@ -101,7 +101,7 @@ #define /*0x138*/ oParentRelativePosX OBJECT_FIELD_F32(O_PARENT_RELATIVE_POS_INDEX + 0) #define /*0x13C*/ oParentRelativePosY OBJECT_FIELD_F32(O_PARENT_RELATIVE_POS_INDEX + 1) #define /*0x140*/ oParentRelativePosZ OBJECT_FIELD_F32(O_PARENT_RELATIVE_POS_INDEX + 2) -#define /*0x144*/ oBehParams2ndByte OBJECT_FIELD_S32(0x2F) +#define /*0x144*/ oBhvParams2ndByte OBJECT_FIELD_S32(0x2F) // 0x148 unused, possibly a third param byte. #define /*0x14C*/ oAction OBJECT_FIELD_S32(0x31) #define /*0x150*/ oSubAction OBJECT_FIELD_S32(0x32) @@ -118,7 +118,7 @@ #define /*0x17C*/ oOpacity OBJECT_FIELD_S32(0x3D) #define /*0x180*/ oDamageOrCoinValue OBJECT_FIELD_S32(0x3E) #define /*0x184*/ oHealth OBJECT_FIELD_S32(0x3F) -#define /*0x188*/ oBehParams OBJECT_FIELD_S32(0x40) +#define /*0x188*/ oBhvParams OBJECT_FIELD_S32(0x40) #define /*0x18C*/ oPrevAction OBJECT_FIELD_S32(0x41) #define /*0x190*/ oInteractionSubtype OBJECT_FIELD_U32(0x42) #define /*0x194*/ oCollisionDistance OBJECT_FIELD_F32(0x43) @@ -126,7 +126,7 @@ #define /*0x19C*/ oDrawingDistance OBJECT_FIELD_F32(0x45) #define /*0x1A0*/ oRoom OBJECT_FIELD_S32(0x46) // 0x1A4 is unused, possibly related to 0x1A8 in removed macro purposes. -#define /*0x1A8*/ oUnk1A8 OBJECT_FIELD_U32(0x48) +#define /*0x1A8*/ oUnusedBhvParams OBJECT_FIELD_U32(0x48) // 0x1AC-0x1B2 (0x48-0x4A) are object specific and defined below the common fields. #define /*0x1B4*/ oWallAngle OBJECT_FIELD_S32(0x4B) #define /*0x1B8*/ oFloorType OBJECT_FIELD_S16(0x4C, 0) @@ -165,8 +165,8 @@ #define /*0x110*/ oMarioSteepJumpYaw OBJECT_FIELD_S32(0x22) #define /*0x110*/ oMarioWalkingPitch OBJECT_FIELD_S32(0x22) -/* 1-Up Hidden */ -#define /*0x0F4*/ o1UpHiddenUnkF4 OBJECT_FIELD_S32(0x1B) +/* Hidden 1-Up */ +#define /*0x0F4*/ oHidden1UpNumTouchedTriggers OBJECT_FIELD_S32(0x1B) /* Activated Back and Forth Platform */ #define /*0x0F4*/ oActivatedBackAndForthPlatformMaxOffset OBJECT_FIELD_F32(0x1B) @@ -278,7 +278,7 @@ #define /*0x0F4*/ oBowserStatus OBJECT_FIELD_S32(0x1B) #define /*0x0F8*/ oBowserTimer OBJECT_FIELD_S32(0x1C) #define /*0x0FC*/ oBowserDistToCenter OBJECT_FIELD_F32(0x1D) -#define /*0x106*/ oBowserBitsJustJump OBJECT_FIELD_S16(0x1F, 1) +#define /*0x106*/ oBowserBitSJustJump OBJECT_FIELD_S16(0x1F, 1) #define /*0x108*/ oBowserRandSplitFloor OBJECT_FIELD_S16(0x20, 0) #define /*0x10A*/ oBowserHeldAnglePitch OBJECT_FIELD_S16(0x20, 1) #define /*0x10D*/ oBowserHeldAngleVelYaw OBJECT_FIELD_S16(0x21, 0) @@ -398,11 +398,11 @@ #define /*0x1AC*/ oCloudFwooshMovementRadius OBJECT_FIELD_S16(0x49, 0) /* Coin */ -#define /*0x0F4*/ oCoinUnkF4 OBJECT_FIELD_S32(0x1B) -#define /*0x0F8*/ oCoinUnkF8 OBJECT_FIELD_S32(0x1C) -#define /*0x110*/ oCoinUnk110 OBJECT_FIELD_F32(0x22) +#define /*0x0F4*/ oCoinCollectedFlags OBJECT_FIELD_S32(0x1B) +#define /*0x0F8*/ oCoinOnGround OBJECT_FIELD_S32(0x1C) +#define /*0x110*/ oCoinBaseVelY OBJECT_FIELD_F32(0x22) #ifndef VERSION_JP -#define /*0x1B0*/ oCoinUnk1B0 OBJECT_FIELD_S32(0x4A) +#define /*0x1B0*/ oCoinNumBounceSoundPlayed OBJECT_FIELD_S32(0x4A) #endif /* Collision Particle */ @@ -569,7 +569,7 @@ #define /*0x0F4*/ oHeaveHoUnkF4 OBJECT_FIELD_F32(0x1B) /* Hidden Object */ -#define /*0x0F4*/ oHiddenObjectUnkF4 OBJECT_FIELD_OBJ(0x1B) +#define /*0x0F4*/ oHiddenObjectPurpleSwitch OBJECT_FIELD_OBJ(0x1B) /* Hoot */ #define /*0x0F4*/ oHootAvailability OBJECT_FIELD_S32(0x1B) @@ -724,8 +724,8 @@ #define /*0x0FC*/ oRespawnerBehaviorToRespawn OBJECT_FIELD_CVPTR(0x1D) /* Openable Grill */ -#define /*0x088*/ oOpenableGrillUnk88 OBJECT_FIELD_S32(0x00) -#define /*0x0F4*/ oOpenableGrillUnkF4 OBJECT_FIELD_OBJ(0x1B) +#define /*0x088*/ oOpenableGrillUnk88 OBJECT_FIELD_S32(0x00) +#define /*0x0F4*/ oOpenableGrillPurpleSwitch OBJECT_FIELD_OBJ(0x1B) /* Intro Cutscene Peach */ #define /*0x108*/ oIntroPeachYawFromFocus OBJECT_FIELD_F32(0x20) @@ -770,12 +770,12 @@ #define /*0x0F8*/ oPitouneUnkF8 OBJECT_FIELD_F32(0x1C) #define /*0x0FC*/ oPitouneUnkFC OBJECT_FIELD_F32(0x1D) -/* Falling Rising Bitfs Platform */ -#define /*0x0F4*/ oBitfsPlatformTimer OBJECT_FIELD_S32(0x1B) +/* Falling Rising BitFS Platform */ +#define /*0x0F4*/ oBitFSPlatformTimer OBJECT_FIELD_S32(0x1B) -/* Falling Bowser Bits Platform */ -#define /*0x0F8*/ oBitsPlatformBowser OBJECT_FIELD_OBJ(0x1C) -#define /*0x0FC*/ oBitsPlatformTimer OBJECT_FIELD_S32(0x1D) +/* Falling Bowser BitS Platform */ +#define /*0x0F8*/ oBitSPlatformBowser OBJECT_FIELD_OBJ(0x1C) +#define /*0x0FC*/ oBitSPlatformTimer OBJECT_FIELD_S32(0x1D) /* WF Platform */ #define /*0x10C*/ oPlatformUnk10C OBJECT_FIELD_F32(0x21) @@ -831,10 +831,10 @@ /* Rolling Log */ #define /*0x0F4*/ oRollingLogUnkF4 OBJECT_FIELD_F32(0x1B) -/* Lll Rotating Hex Flame */ -#define /*0x0F4*/ oLllRotatingHexFlameUnkF4 OBJECT_FIELD_F32(0x1B) -#define /*0x0F8*/ oLllRotatingHexFlameUnkF8 OBJECT_FIELD_F32(0x1C) -#define /*0x0FC*/ oLllRotatingHexFlameUnkFC OBJECT_FIELD_F32(0x1D) +/* LLL Rotating Hex Flame */ +#define /*0x0F4*/ oLLLRotatingHexFlameUnkF4 OBJECT_FIELD_F32(0x1B) +#define /*0x0F8*/ oLLLRotatingHexFlameUnkF8 OBJECT_FIELD_F32(0x1C) +#define /*0x0FC*/ oLLLRotatingHexFlameUnkFC OBJECT_FIELD_F32(0x1D) /* Scuttlebug */ #define /*0x0F4*/ oScuttlebugUnkF4 OBJECT_FIELD_S32(0x1B) @@ -863,10 +863,10 @@ #define /*0x100*/ oSkeeterWaitTime OBJECT_FIELD_S32(0x1E) #define /*0x1AC*/ oSkeeterUnk1AC OBJECT_FIELD_S16(0x49, 0) -/* Jrb Sliding Box */ -#define /*0x0F4*/ oJrbSlidingBoxUnkF4 OBJECT_FIELD_OBJ(0x1B) -#define /*0x0F8*/ oJrbSlidingBoxUnkF8 OBJECT_FIELD_S32(0x1C) -#define /*0x0FC*/ oJrbSlidingBoxUnkFC OBJECT_FIELD_F32(0x1D) +/* JRB Sliding Box */ +#define /*0x0F4*/ oJRBSlidingBoxUnkF4 OBJECT_FIELD_OBJ(0x1B) +#define /*0x0F8*/ oJRBSlidingBoxUnkF8 OBJECT_FIELD_S32(0x1C) +#define /*0x0FC*/ oJRBSlidingBoxUnkFC OBJECT_FIELD_F32(0x1D) /* WF Sliding Brick Platform */ #define /*0x0F4*/ oWFSlidBrickPtfmMovVel OBJECT_FIELD_F32(0x1B) @@ -952,8 +952,8 @@ #define /*0x0F8*/ oSwoopTargetPitch OBJECT_FIELD_S32(0x1C) #define /*0x0FC*/ oSwoopTargetYaw OBJECT_FIELD_S32(0x1D) -/* Thwomp */ -#define /*0x0F4*/ oThwompRandomTimer OBJECT_FIELD_S32(0x1B) +/* Grindel or Thwomp */ +#define /*0x0F4*/ oGrindelThwompRandomTimer OBJECT_FIELD_S32(0x1B) /* Tilting Platform */ #define /*0x0F4*/ oTiltingPyramidNormalX OBJECT_FIELD_F32(0x1B) @@ -962,13 +962,13 @@ #define /*0x10C*/ oTiltingPyramidMarioOnPlatform OBJECT_FIELD_S32(0x21) /* Toad Message */ -#define /*0x108*/ oToadMessageDialogId OBJECT_FIELD_U32(0x20) +#define /*0x108*/ oToadMessageDialogID OBJECT_FIELD_U32(0x20) #define /*0x10C*/ oToadMessageRecentlyTalked OBJECT_FIELD_S32(0x21) #define /*0x110*/ oToadMessageState OBJECT_FIELD_S32(0x22) /* Tox Box */ -#define /*0x1AC*/ oToxBoxMovementPattern OBJECT_FIELD_VPTR(0x49) -#define /*0x1B0*/ oToxBoxMovementStep OBJECT_FIELD_S32(0x4A) +#define /*0x1AC*/ oToxBoxActionTable OBJECT_FIELD_VPTR(0x49) +#define /*0x1B0*/ oToxBoxActionStep OBJECT_FIELD_S32(0x4A) /* TTC Rotating Solid */ #define /*0x0F4*/ oTTCRotatingSolidNumTurns OBJECT_FIELD_S32(0x1B) @@ -1033,7 +1033,7 @@ #define /*0x0F8*/ oTreasureChestUnkF8 OBJECT_FIELD_S32(0x1C) #define /*0x0FC*/ oTreasureChestUnkFC OBJECT_FIELD_S32(0x1D) -/* Tree Snow Or Leaf */ +/* Tree Snow or Leaf */ #define /*0x0F4*/ oTreeSnowOrLeafUnkF4 OBJECT_FIELD_S32(0x1B) #define /*0x0F8*/ oTreeSnowOrLeafUnkF8 OBJECT_FIELD_S32(0x1C) #define /*0x0FC*/ oTreeSnowOrLeafUnkFC OBJECT_FIELD_S32(0x1D) @@ -1146,8 +1146,8 @@ #define /*0x1AC*/ oWigglerUnused OBJECT_FIELD_S16(0x49, 0) #define /*0x1AE*/ oWigglerTextStatus OBJECT_FIELD_S16(0x49, 1) -/* Lll Wood Piece */ -#define /*0x0F4*/ oLllWoodPieceOscillationTimer OBJECT_FIELD_S32(0x1B) +/* LLL Wood Piece */ +#define /*0x0F4*/ oLLLWoodPieceOscillationTimer OBJECT_FIELD_S32(0x1B) /* Wooden Post */ #define /*0x0F4*/ oWoodenPostTotalMarioAngle OBJECT_FIELD_S32(0x1B) diff --git a/include/segment_symbols.h b/include/segment_symbols.h index 22b37131..73cdd7e1 100644 --- a/include/segment_symbols.h +++ b/include/segment_symbols.h @@ -40,8 +40,15 @@ DECLARE_SEGMENT(engine) DECLARE_SEGMENT(behavior) DECLARE_SEGMENT(scripts) DECLARE_SEGMENT(goddard) + extern u8 _goddardSegmentStart[]; +#ifdef USE_EXT_RAM +extern u8 _engineSegmentStart[]; +extern u8 _framebuffersSegmentNoloadStart[]; +extern u8 _framebuffersSegmentNoloadEnd[]; +#endif + DECLARE_LEVEL_SEGMENT(menu) DECLARE_LEVEL_SEGMENT(intro) DECLARE_LEVEL_SEGMENT(ending) diff --git a/include/segments.h b/include/segments.h index a97d6ee8..65f1fc46 100644 --- a/include/segments.h +++ b/include/segments.h @@ -13,30 +13,29 @@ * linker script syntax. */ +#define SEG_START 0x8005C000 + +#define SEG_FRAMEBUFFERS_SIZE (2 * SCREEN_WIDTH * SCREEN_HEIGHT * 3) +#define SEG_GODDARD_POOL_OFFSET 0x52000 // Offset from right side of pool +#define SEG_GODDARD (SEG_POOL_END - SEG_GODDARD_POOL_OFFSET) + #ifndef USE_EXT_RAM /* Default: Runs out of memory quickly when importing custom assets. */ -#define SEG_POOL_START 0x8005C000 -#define SEG_POOL_END SEG_BUFFERS +#define RDRAM_END 0x80400000 -#define SEG_GODDARD 0x8016F000 +#define SEG_POOL_START SEG_START +#define SEG_POOL_SIZE 0x165000 +#define SEG_POOL_END (SEG_POOL_START + SEG_POOL_SIZE) -#define SEG_BUFFERS 0x801C1000 - -#if defined(VERSION_SH) || ENABLE_RUMBLE -#define SEG_MAIN 0x80249000 -#elif defined(VERSION_EU) -#define SEG_MAIN 0x80241800 // TODO: Investigate why it's different? -#else -#define SEG_MAIN 0x80246000 -#endif +#define SEG_BUFFERS SEG_POOL_END #ifdef VERSION_EU -#define SEG_ENGINE 0x8036FF00 +#define SEG_ENGINE 0x8036FF00 #else -#define SEG_ENGINE 0x80378800 +#define SEG_ENGINE 0x80378800 #endif -#define SEG_FRAMEBUFFERS 0x8038F800 +#define SEG_FRAMEBUFFERS (RDRAM_END - SEG_FRAMEBUFFERS_SIZE) #else /* Use Expansion Pak space for pool. */ @@ -45,14 +44,19 @@ * importing large custom content. */ -#define SEG_BUFFERS 0x8005C000 // 0x0085000 in size -#define SEG_MAIN 0x800E1000 // 0x0132800 in size -#define SEG_ENGINE 0x80213800 // 0x0017000 in size -#define SEG_FRAMEBUFFERS 0x8022A800 // 0x0070800 in size -#define SEG_POOL_START 0x8029B000 // 0x0165000 in size -#define SEG_POOL_END 0x80800000 -#define SEG_POOL_END_4MB 0x80400000 // For the error message screen enhancement. -#define SEG_GODDARD SEG_POOL_START + 0x113000 +#ifdef VERSION_CN +#define RDRAM_END 0x807C0000 // iQue has stuff like EEPROM mapped at 807C0000 onwards. TODO: Code this using osMemSize +#else +#define RDRAM_END 0x80800000 +#endif + +#define SEG_BUFFERS SEG_START +#define SEG_ENGINE ((u32) &_engineSegmentStart) +#define SEG_FRAMEBUFFERS ((u32) &_framebuffersSegmentNoloadStart) +#define SEG_POOL_START ((u32) &_framebuffersSegmentNoloadEnd) +#define SEG_POOL_END RDRAM_END +#define SEG_POOL_END_4MB 0x80400000 // For the error message screen enhancement. + #endif #endif // SEGMENTS_H diff --git a/include/seq_macros.inc b/include/seq_macros.inc index d73d9923..84bde56b 100644 --- a/include/seq_macros.inc +++ b/include/seq_macros.inc @@ -155,7 +155,7 @@ .byte 0xff .endm -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) .macro seq_unreservenotes .byte 0xf0 @@ -462,7 +462,7 @@ var_long \a .endm -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) .macro chan_setnotepriority a .byte 0xe9 diff --git a/include/sounds.h b/include/sounds.h index 71709c90..dd199980 100644 --- a/include/sounds.h +++ b/include/sounds.h @@ -98,7 +98,7 @@ /** * The table below defines all sounds that exist in the game, and which flags * they are used with. If a sound is used with multiple sets of flags (e.g. - * different priorities), they are gives distinguishing suffixes. + * different priorities), they are given distinguishing suffixes. * A _2 suffix means the sound is the same despite a different sound ID. */ diff --git a/include/special_preset_names.h b/include/special_preset_names.h deleted file mode 100644 index 229d2878..00000000 --- a/include/special_preset_names.h +++ /dev/null @@ -1,93 +0,0 @@ -#ifndef SPECIAL_PRESET_NAMES_H -#define SPECIAL_PRESET_NAMES_H - -enum SpecialPresets { - special_null_start, - special_yellow_coin, - special_yellow_coin_2, - special_unknown_3, - special_boo, - special_unknown_5, - special_lll_moving_octagonal_mesh_platform, - special_snow_ball, - special_lll_drawbridge_spawner, - special_empty_9, - special_lll_rotating_block_with_fire_bars, - special_lll_floating_wood_bridge, - special_tumbling_platform, - special_lll_rotating_hexagonal_ring, - special_lll_sinking_rectangular_platform, - special_lll_sinking_square_platforms, - special_lll_tilting_square_platform, - special_lll_bowser_puzzle, - special_mr_i, - special_small_bully, - special_big_bully, - special_empty_21, - special_empty_22, - special_empty_23, - special_empty_24, - special_empty_25, - special_moving_blue_coin, - special_jrb_chest, - special_water_ring, - special_mine, - special_empty_30, - special_empty_31, - special_butterfly, - special_bowser, - special_wf_rotating_wooden_platform, - special_small_bomp, - special_wf_sliding_platform, - special_tower_platform_group, - special_rotating_counter_clockwise, - special_wf_tumbling_bridge, - special_large_bomp, - - special_level_geo_03 = 0x65, - special_level_geo_04, - special_level_geo_05, - special_level_geo_06, - special_level_geo_07, - special_level_geo_08, - special_level_geo_09, - special_level_geo_0A, - special_level_geo_0B, - special_level_geo_0C, - special_level_geo_0D, - special_level_geo_0E, - special_level_geo_0F, - special_level_geo_10, - special_level_geo_11, - special_level_geo_12, - special_level_geo_13, - special_level_geo_14, - special_level_geo_15, - special_level_geo_16, - special_bubble_tree, - special_spiky_tree, - special_snow_tree, - special_unknown_tree, - special_palm_tree, - special_wooden_door, - special_haunted_door = special_wooden_door, - special_unknown_door, - special_metal_door, - special_hmc_door, - special_unknown2_door, - special_wooden_door_warp, - special_unknown1_door_warp, - special_metal_door_warp, - special_unknown2_door_warp, - special_unknown3_door_warp, - special_castle_door_warp, - special_castle_door, - special_0stars_door, - special_1star_door, - special_3star_door, - special_key_door, - - special_null_end = 0xFF -}; - -#endif // SPECIAL_PRESET_NAMES_H diff --git a/include/special_presets.h b/include/special_presets.h index 9e2e1853..bbf7551c 100644 --- a/include/special_presets.h +++ b/include/special_presets.h @@ -1,111 +1,93 @@ #ifndef SPECIAL_PRESETS_H #define SPECIAL_PRESETS_H -#include "special_preset_names.h" -#include "behavior_data.h" -#include "model_ids.h" +enum SpecialPresets { + special_null_start, + special_yellow_coin, + special_yellow_coin_2, + special_unknown_3, + special_boo, + special_unknown_5, + special_lll_moving_octagonal_mesh_platform, + special_snow_ball, + special_lll_drawbridge_spawner, + special_empty_9, + special_lll_rotating_block_with_fire_bars, + special_lll_floating_wood_bridge, + special_tumbling_platform, + special_lll_rotating_hexagonal_ring, + special_lll_sinking_rectangular_platform, + special_lll_sinking_square_platforms, + special_lll_tilting_square_platform, + special_lll_bowser_puzzle, + special_mr_i, + special_small_bully, + special_big_bully, + special_empty_21, + special_empty_22, + special_empty_23, + special_empty_24, + special_empty_25, + special_moving_blue_coin, + special_jrb_chest, + special_water_ring, + special_mine, + special_empty_30, + special_empty_31, + special_butterfly, + special_bowser, + special_wf_rotating_wooden_platform, + special_small_bomp, + special_wf_sliding_platform, + special_tower_platform_group, + special_rotating_counter_clockwise, + special_wf_tumbling_bridge, + special_large_bomp, -// Special Preset types -#define SPTYPE_NO_YROT_OR_PARAMS 0 // object is 8-bytes long, no y-rotation or any behavior params -#define SPTYPE_YROT_NO_PARAMS 1 // object is 10-bytes long, has y-rotation but no params -#define SPTYPE_PARAMS_AND_YROT 2 // object is 12-bytes long, has y-rotation and params -#define SPTYPE_UNKNOWN 3 // object is 14-bytes long, has 3 extra shorts that get converted to floats. -#define SPTYPE_DEF_PARAM_AND_YROT 4 // object is 10-bytes long, has y-rotation and uses the default param + special_level_geo_03 = 0x65, + special_level_geo_04, + special_level_geo_05, + special_level_geo_06, + special_level_geo_07, + special_level_geo_08, + special_level_geo_09, + special_level_geo_0A, + special_level_geo_0B, + special_level_geo_0C, + special_level_geo_0D, + special_level_geo_0E, + special_level_geo_0F, + special_level_geo_10, + special_level_geo_11, + special_level_geo_12, + special_level_geo_13, + special_level_geo_14, + special_level_geo_15, + special_level_geo_16, + special_bubble_tree, + special_spiky_tree, + special_snow_tree, + special_unknown_tree, + special_palm_tree, + special_wooden_door, + special_haunted_door = special_wooden_door, + special_unknown_door, + special_metal_door, + special_hmc_door, + special_unknown2_door, + special_wooden_door_warp, + special_unknown1_door_warp, + special_metal_door_warp, + special_unknown2_door_warp, + special_unknown3_door_warp, + special_castle_door_warp, + special_castle_door, + special_0stars_door, + special_1star_door, + special_3star_door, + special_key_door, -struct SpecialPreset { - /*00*/ u8 preset_id; - /*01*/ u8 type; // Determines whether object is 8, 10, 12 or 14 bytes long. - /*02*/ u8 defParam; // Default parameter, only used when type is SPTYPE_DEF_PARAM_AND_YROT - /*03*/ u8 model; - /*04*/ const BehaviorScript *behavior; -}; - -// Some Models ID's are missing their names because they are probably unused - -static struct SpecialPreset SpecialObjectPresets[] = { - {0x00, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_NONE, NULL}, - {0x01, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_YELLOW_COIN, bhvYellowCoin}, - {0x02, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_YELLOW_COIN, bhvYellowCoin}, - {0x03, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_UNKNOWN_B8, bhvStaticObject}, - {0x04, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_BOO, bhvCourtyardBooTriplet}, - {0x05, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_UNKNOWN_AC, bhvCastleFloorTrap}, - {0x06, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_LLL_MOVING_OCTAGONAL_MESH_PLATFORM, bhvLllMovingOctagonalMeshPlatform}, - {0x07, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_CCM_SNOWMAN_HEAD, bhvSnowBall}, - {0x08, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_LLL_DRAWBRIDGE_PART, bhvLllDrawbridgeSpawner}, - {0x09, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_NONE, bhvStaticObject}, - {0x0A, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_LLL_ROTATING_BLOCK_FIRE_BARS, bhvLllRotatingBlockWithFireBars}, - {0x0B, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_NONE, bhvLllFloatingWoodBridge}, - {0x0C, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_NONE, bhvLllTumblingBridge}, - {0x0D, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_LLL_ROTATING_HEXAGONAL_RING , bhvLllRotatingHexagonalRing}, - {0x0E, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_LLL_SINKING_RECTANGULAR_PLATFORM, bhvLllSinkingRectangularPlatform}, - {0x0F, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_LLL_SINKING_SQUARE_PLATFORMS, bhvLllSinkingSquarePlatforms}, - {0x10, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_LLL_TILTING_SQUARE_PLATFORM, bhvLllTiltingInvertedPyramid}, - {0x11, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_NONE, bhvLllBowserPuzzle}, - {0x12, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_NONE, bhvMrI}, - {0x13, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_BULLY, bhvSmallBully}, - {0x14, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_BULLY_BOSS, bhvBigBully}, - {0x15, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_NONE, bhvStaticObject}, - {0x16, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_NONE, bhvStaticObject}, - {0x17, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_NONE, bhvStaticObject}, - {0x18, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_NONE, bhvStaticObject}, - {0x19, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_NONE, bhvStaticObject}, - {0x1A, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_YELLOW_COIN, bhvMovingBlueCoin}, - {0x1B, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_TREASURE_CHEST_BASE, bhvBetaChestBottom}, - {0x1C, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_WATER_RING, bhvJetStreamRingSpawner}, - {0x1D, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_WATER_MINE, bhvBowserBomb}, - {0x1E, SPTYPE_UNKNOWN , 0x00, MODEL_NONE, bhvStaticObject}, - {0x1F, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_NONE, bhvStaticObject}, - {0x20, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_BUTTERFLY, bhvButterfly}, - {0x21, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_BOWSER, bhvBowser}, - {0x22, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_WF_ROTATING_WOODEN_PLATFORM, bhvWfRotatingWoodenPlatform}, - {0x23, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_WF_SMALL_BOMP, bhvSmallBomp}, - {0x24, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_WF_SLIDING_PLATFORM, bhvWfSlidingPlatform}, - {0x25, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_NONE, bhvTowerPlatformGroup}, - {0x26, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_NONE, bhvRotatingCounterClockwise}, - {0x27, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_WF_TUMBLING_BRIDGE, bhvWfTumblingBridge}, - {0x28, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_WF_LARGE_BOMP, bhvLargeBomp}, - {0x65, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_LEVEL_GEOMETRY_03, bhvStaticObject}, - {0x66, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_LEVEL_GEOMETRY_04, bhvStaticObject}, - {0x67, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_LEVEL_GEOMETRY_05, bhvStaticObject}, - {0x68, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_LEVEL_GEOMETRY_06, bhvStaticObject}, - {0x69, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_LEVEL_GEOMETRY_07, bhvStaticObject}, - {0x6A, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_LEVEL_GEOMETRY_08, bhvStaticObject}, - {0x6B, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_LEVEL_GEOMETRY_09, bhvStaticObject}, - {0x6C, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_LEVEL_GEOMETRY_0A, bhvStaticObject}, - {0x6D, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_LEVEL_GEOMETRY_0B, bhvStaticObject}, - {0x6E, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_LEVEL_GEOMETRY_0C, bhvStaticObject}, - {0x6F, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_LEVEL_GEOMETRY_0D, bhvStaticObject}, - {0x70, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_LEVEL_GEOMETRY_0E, bhvStaticObject}, - {0x71, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_LEVEL_GEOMETRY_0F, bhvStaticObject}, - {0x72, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_LEVEL_GEOMETRY_10, bhvStaticObject}, - {0x73, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_LEVEL_GEOMETRY_11, bhvStaticObject}, - {0x74, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_LEVEL_GEOMETRY_12, bhvStaticObject}, - {0x75, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_LEVEL_GEOMETRY_13, bhvStaticObject}, - {0x76, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_LEVEL_GEOMETRY_14, bhvStaticObject}, - {0x77, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_LEVEL_GEOMETRY_15, bhvStaticObject}, - {0x78, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_LEVEL_GEOMETRY_16, bhvStaticObject}, - {0x79, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_BOB_BUBBLY_TREE, bhvTree}, - {0x7A, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_COURTYARD_SPIKY_TREE, bhvTree}, - {0x7B, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_CCM_SNOW_TREE, bhvTree}, - {0x7C, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_UNKNOWN_TREE_1A, bhvTree}, - {0x7D, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_SSL_PALM_TREE, bhvTree}, - {0x89, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_CASTLE_CASTLE_DOOR_UNUSED, bhvDoor}, - {0x7E, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_CASTLE_WOODEN_DOOR_UNUSED, bhvDoor}, - {0x7F, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_UNKNOWN_DOOR_1E, bhvDoor}, - {0x80, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_HMC_METAL_DOOR, bhvDoor}, - {0x81, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_HMC_HAZY_MAZE_DOOR, bhvDoor}, - {0x82, SPTYPE_YROT_NO_PARAMS , 0x00, MODEL_UNKNOWN_DOOR_21, bhvDoor}, - {0x8A, SPTYPE_DEF_PARAM_AND_YROT, 0x00, MODEL_CASTLE_DOOR_0_STARS, bhvDoor}, - {0x8B, SPTYPE_DEF_PARAM_AND_YROT, 0x01, MODEL_CASTLE_DOOR_1_STAR, bhvDoor}, - {0x8C, SPTYPE_DEF_PARAM_AND_YROT, 0x03, MODEL_CASTLE_DOOR_3_STARS, bhvDoor}, - {0x8D, SPTYPE_DEF_PARAM_AND_YROT, 0x00, MODEL_CASTLE_KEY_DOOR, bhvDoor}, - {0x88, SPTYPE_PARAMS_AND_YROT , 0x00, MODEL_CASTLE_CASTLE_DOOR, bhvDoorWarp}, - {0x83, SPTYPE_PARAMS_AND_YROT , 0x00, MODEL_CASTLE_WOODEN_DOOR, bhvDoorWarp}, - {0x84, SPTYPE_PARAMS_AND_YROT , 0x00, MODEL_UNKNOWN_DOOR_28, bhvDoorWarp}, - {0x85, SPTYPE_PARAMS_AND_YROT , 0x00, MODEL_CASTLE_METAL_DOOR, bhvDoorWarp}, - {0x86, SPTYPE_PARAMS_AND_YROT , 0x00, MODEL_UNKNOWN_DOOR_2A, bhvDoorWarp}, - {0x87, SPTYPE_PARAMS_AND_YROT , 0x00, MODEL_UNKNOWN_DOOR_2B, bhvDoorWarp}, - {0xFF, SPTYPE_NO_YROT_OR_PARAMS , 0x00, MODEL_NONE, NULL} + special_null_end = 0xFF }; #endif // SPECIAL_PRESETS_H diff --git a/include/special_presets.inc.c b/include/special_presets.inc.c new file mode 100644 index 00000000..b9a0220d --- /dev/null +++ b/include/special_presets.inc.c @@ -0,0 +1,104 @@ +#include "special_presets.h" + +// Special Preset types +#define SPTYPE_NO_YROT_OR_PARAMS 0 // object is 8-bytes long, no y-rotation or any behavior params +#define SPTYPE_YROT_NO_PARAMS 1 // object is 10-bytes long, has y-rotation but no params +#define SPTYPE_PARAMS_AND_YROT 2 // object is 12-bytes long, has y-rotation and params +#define SPTYPE_UNKNOWN 3 // object is 14-bytes long, has 3 extra shorts that get converted to floats. +#define SPTYPE_DEF_PARAM_AND_YROT 4 // object is 10-bytes long, has y-rotation and uses the default param + +struct SpecialPreset { + /* 0x00 */ u8 presetID; + /* 0x01 */ u8 type; // Determines whether object is 8, 10, 12 or 14 bytes long. + /* 0x02 */ u8 defParam; // Default parameter, only used when type is SPTYPE_DEF_PARAM_AND_YROT + /* 0x03 */ u8 model; + /* 0x04 */ const BehaviorScript *behavior; +}; + +// Some Models ID's are missing their names because they are probably unused + +static struct SpecialPreset sSpecialObjectPresets[] = { + { special_null_start, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_NONE, NULL }, + { special_yellow_coin, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_YELLOW_COIN, bhvYellowCoin }, + { special_yellow_coin_2, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_YELLOW_COIN, bhvYellowCoin }, + { special_unknown_3, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_UNKNOWN_B8, bhvStaticObject }, + { special_boo, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_BOO, bhvCourtyardBooTriplet }, + { special_unknown_5, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_UNKNOWN_AC, bhvCastleFloorTrap }, + { special_lll_moving_octagonal_mesh_platform, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_LLL_MOVING_OCTAGONAL_MESH_PLATFORM, bhvLLLMovingOctagonalMeshPlatform }, + { special_snow_ball, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_CCM_SNOWMAN_HEAD, bhvSnowBall }, + { special_lll_drawbridge_spawner, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_LLL_DRAWBRIDGE_PART, bhvLLLDrawbridgeSpawner }, + { special_empty_9, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_NONE, bhvStaticObject }, + { special_lll_rotating_block_with_fire_bars, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_LLL_ROTATING_BLOCK_FIRE_BARS, bhvLLLRotatingBlockWithFireBars }, + { special_lll_floating_wood_bridge, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_NONE, bhvLLLFloatingWoodBridge }, + { special_tumbling_platform, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_NONE, bhvLLLTumblingBridge }, + { special_lll_rotating_hexagonal_ring, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_LLL_ROTATING_HEXAGONAL_RING , bhvLLLRotatingHexagonalRing }, + { special_lll_sinking_rectangular_platform, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_LLL_SINKING_RECTANGULAR_PLATFORM, bhvLLLSinkingRectangularPlatform }, + { special_lll_sinking_square_platforms, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_LLL_SINKING_SQUARE_PLATFORMS, bhvLLLSinkingSquarePlatforms }, + { special_lll_tilting_square_platform, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_LLL_TILTING_SQUARE_PLATFORM, bhvLLLTiltingInvertedPyramid }, + { special_lll_bowser_puzzle, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_NONE, bhvLLLBowserPuzzle }, + { special_mr_i, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_NONE, bhvMrI }, + { special_small_bully, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_BULLY, bhvSmallBully }, + { special_big_bully, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_BULLY_BOSS, bhvBigBully }, + { special_empty_21, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_NONE, bhvStaticObject }, + { special_empty_22, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_NONE, bhvStaticObject }, + { special_empty_23, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_NONE, bhvStaticObject }, + { special_empty_24, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_NONE, bhvStaticObject }, + { special_empty_25, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_NONE, bhvStaticObject }, + { special_moving_blue_coin, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_YELLOW_COIN, bhvMovingBlueCoin }, + { special_jrb_chest, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_TREASURE_CHEST_BASE, bhvBetaChestBottom }, + { special_water_ring, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_WATER_RING, bhvJetStreamRingSpawner }, + { special_mine, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_WATER_MINE, bhvBowserBomb }, + { special_empty_30, SPTYPE_UNKNOWN, 0x00, MODEL_NONE, bhvStaticObject }, + { special_empty_31, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_NONE, bhvStaticObject }, + { special_butterfly, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_BUTTERFLY, bhvButterfly }, + { special_bowser, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_BOWSER, bhvBowser }, + { special_wf_rotating_wooden_platform, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_WF_ROTATING_WOODEN_PLATFORM, bhvWFRotatingWoodenPlatform }, + { special_small_bomp, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_WF_SMALL_BOMP, bhvSmallBomp }, + { special_wf_sliding_platform, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_WF_SLIDING_PLATFORM, bhvWFSlidingPlatform }, + { special_tower_platform_group, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_NONE, bhvTowerPlatformGroup }, + { special_rotating_counter_clockwise, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_NONE, bhvRotatingCounterClockwise }, + { special_wf_tumbling_bridge, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_WF_TUMBLING_BRIDGE, bhvTumblingBridge }, + { special_large_bomp, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_WF_LARGE_BOMP, bhvLargeBomp }, + { special_level_geo_03, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_LEVEL_GEOMETRY_03, bhvStaticObject }, + { special_level_geo_04, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_LEVEL_GEOMETRY_04, bhvStaticObject }, + { special_level_geo_05, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_LEVEL_GEOMETRY_05, bhvStaticObject }, + { special_level_geo_06, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_LEVEL_GEOMETRY_06, bhvStaticObject }, + { special_level_geo_07, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_LEVEL_GEOMETRY_07, bhvStaticObject }, + { special_level_geo_08, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_LEVEL_GEOMETRY_08, bhvStaticObject }, + { special_level_geo_09, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_LEVEL_GEOMETRY_09, bhvStaticObject }, + { special_level_geo_0A, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_LEVEL_GEOMETRY_0A, bhvStaticObject }, + { special_level_geo_0B, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_LEVEL_GEOMETRY_0B, bhvStaticObject }, + { special_level_geo_0C, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_LEVEL_GEOMETRY_0C, bhvStaticObject }, + { special_level_geo_0D, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_LEVEL_GEOMETRY_0D, bhvStaticObject }, + { special_level_geo_0E, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_LEVEL_GEOMETRY_0E, bhvStaticObject }, + { special_level_geo_0F, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_LEVEL_GEOMETRY_0F, bhvStaticObject }, + { special_level_geo_10, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_LEVEL_GEOMETRY_10, bhvStaticObject }, + { special_level_geo_11, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_LEVEL_GEOMETRY_11, bhvStaticObject }, + { special_level_geo_12, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_LEVEL_GEOMETRY_12, bhvStaticObject }, + { special_level_geo_13, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_LEVEL_GEOMETRY_13, bhvStaticObject }, + { special_level_geo_14, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_LEVEL_GEOMETRY_14, bhvStaticObject }, + { special_level_geo_15, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_LEVEL_GEOMETRY_15, bhvStaticObject }, + { special_level_geo_16, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_LEVEL_GEOMETRY_16, bhvStaticObject }, + { special_bubble_tree, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_BOB_BUBBLY_TREE, bhvTree }, + { special_spiky_tree, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_COURTYARD_SPIKY_TREE, bhvTree }, + { special_snow_tree, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_CCM_SNOW_TREE, bhvTree }, + { special_unknown_tree, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_UNKNOWN_TREE_1A, bhvTree }, + { special_palm_tree, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_SSL_PALM_TREE, bhvTree }, + { special_castle_door, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_CASTLE_CASTLE_DOOR_UNUSED, bhvDoor }, + { special_wooden_door, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_CASTLE_WOODEN_DOOR_UNUSED, bhvDoor }, + { special_unknown_door, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_UNKNOWN_DOOR_1E, bhvDoor }, + { special_metal_door, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_HMC_METAL_DOOR, bhvDoor }, + { special_hmc_door, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_HMC_HAZY_MAZE_DOOR, bhvDoor }, + { special_unknown2_door, SPTYPE_YROT_NO_PARAMS, 0x00, MODEL_UNKNOWN_DOOR_21, bhvDoor }, + { special_0stars_door, SPTYPE_DEF_PARAM_AND_YROT, 0x00, MODEL_CASTLE_DOOR_0_STARS, bhvDoor }, + { special_1star_door, SPTYPE_DEF_PARAM_AND_YROT, 0x01, MODEL_CASTLE_DOOR_1_STAR, bhvDoor }, + { special_3star_door, SPTYPE_DEF_PARAM_AND_YROT, 0x03, MODEL_CASTLE_DOOR_3_STARS, bhvDoor }, + { special_key_door, SPTYPE_DEF_PARAM_AND_YROT, 0x00, MODEL_CASTLE_KEY_DOOR, bhvDoor }, + { special_castle_door_warp, SPTYPE_PARAMS_AND_YROT, 0x00, MODEL_CASTLE_CASTLE_DOOR, bhvDoorWarp }, + { special_wooden_door_warp, SPTYPE_PARAMS_AND_YROT, 0x00, MODEL_CASTLE_WOODEN_DOOR, bhvDoorWarp }, + { special_unknown1_door_warp, SPTYPE_PARAMS_AND_YROT, 0x00, MODEL_UNKNOWN_DOOR_28, bhvDoorWarp }, + { special_metal_door_warp, SPTYPE_PARAMS_AND_YROT, 0x00, MODEL_CASTLE_METAL_DOOR, bhvDoorWarp }, + { special_unknown2_door_warp, SPTYPE_PARAMS_AND_YROT, 0x00, MODEL_UNKNOWN_DOOR_2A, bhvDoorWarp }, + { special_unknown3_door_warp, SPTYPE_PARAMS_AND_YROT, 0x00, MODEL_UNKNOWN_DOOR_2B, bhvDoorWarp }, + { special_null_end, SPTYPE_NO_YROT_OR_PARAMS, 0x00, MODEL_NONE, NULL }, +}; diff --git a/include/surface_terrains.h b/include/surface_terrains.h index f555d5b1..8f1e1f41 100644 --- a/include/surface_terrains.h +++ b/include/surface_terrains.h @@ -102,9 +102,9 @@ #define SURFACE_PAINTING_WOBBLE_CD 0x00CD // Painting wobble (THI Huge - Left) #define SURFACE_PAINTING_WOBBLE_CE 0x00CE // Painting wobble (THI Huge - Middle) #define SURFACE_PAINTING_WOBBLE_CF 0x00CF // Painting wobble (THI Huge - Right) -#define SURFACE_PAINTING_WOBBLE_D0 0x00D0 // Painting wobble (HMC & COTMC - Left), makes the painting wobble if touched -#define SURFACE_PAINTING_WOBBLE_D1 0x00D1 // Painting wobble (Unused, HMC & COTMC - Middle) -#define SURFACE_PAINTING_WOBBLE_D2 0x00D2 // Painting wobble (Unused, HMC & COTMC - Right) +#define SURFACE_PAINTING_WOBBLE_D0 0x00D0 // Painting wobble (HMC & CotMC - Left), makes the painting wobble if touched +#define SURFACE_PAINTING_WOBBLE_D1 0x00D1 // Painting wobble (Unused, HMC & CotMC - Middle) +#define SURFACE_PAINTING_WOBBLE_D2 0x00D2 // Painting wobble (Unused, HMC & CotMC - Right) #define SURFACE_PAINTING_WARP_D3 0x00D3 // Painting warp (BoB Left) #define SURFACE_PAINTING_WARP_D4 0x00D4 // Painting warp (BoB Middle) #define SURFACE_PAINTING_WARP_D5 0x00D5 // Painting warp (BoB Right) diff --git a/include/text_menu_strings.h.in b/include/text_menu_strings.h.in index c9f93af3..f564e7b2 100644 --- a/include/text_menu_strings.h.in +++ b/include/text_menu_strings.h.in @@ -2,17 +2,19 @@ #define TEXT_MENU_STRINGS_H // These strings use a different table defined in menu_hud_lut -// Unlike text_strings.h.in, the charmap is different and +// Unlike text_strings.h.in, the charmap is different and // uses char values from charmap_menu.txt /** * File Select JP HUD Text */ +#if defined(VERSION_JP) || defined(VERSION_SH) #define TEXT_JPHUD_MARIO _("マリオ") #define TEXT_JPHUD_SELECT_FILE _("ファイルセレクト") #define TEXT_JPHUD_CHECK_FILE _("どのスコアをみる?") #define TEXT_JPHUD_COPY_FILE _("ファイルコピーする") #define TEXT_JPHUD_ERASE_FILE _("ファイルけす") #define TEXT_JPHUD_SOUND_SELECT _("サウンドセレクト") +#endif #endif // TEXT_MENU_STRINGS_H diff --git a/include/text_strings.h.in b/include/text_strings.h.in index 749179b1..a1f1ae3e 100644 --- a/include/text_strings.h.in +++ b/include/text_strings.h.in @@ -6,30 +6,48 @@ /** * Global Symbols */ -#define TEXT_ZERO _("0") +#define TEXT_EMPTY_STRING _("") +#define TEXT_ZERO _%("0") #define TEXT_COIN _("$") #define TEXT_STAR _("★") #define TEXT_COIN_X _("$×") #define TEXT_STAR_X _("★×") #define TEXT_VARIABLE_X _("×") + +#ifdef VERSION_CN +#define TEXT_STAR_DIFF _("★ ") +#define TEXT_UNFILLED_STAR _("☆ ") +#else +#define TEXT_STAR_DIFF TEXT_STAR #define TEXT_UNFILLED_STAR _("☆") +#endif /** * Global Text */ // File Select -#define TEXT_NEW _("NEW") // New File Text #define TEXT_4DASHES _("----") // Used in Score File Menu +#ifdef VERSION_CN +#define TEXT_NEW 0x7E, 0x7F, 0x82, 0x83, 0xFE, 0x80, 0x81, 0x84, 0x85, 0xFF +#else +#define TEXT_NEW _("NEW") // New File Text +#endif // Ingame Menu +#ifdef VERSION_CN +#define TEXT_PAUSE 0x86, 0x87, 0x8A, 0x8B, 0x8E, 0x8F, 0xFE, 0x88, 0x89, 0x8C, 0x8D, 0x90, 0x91, 0xFF +#define TEXT_HUD_CONGRATULATIONS 0x3A, 0x3B, 0x3E, 0x3F, 0x42, 0x43, 0xFE, 0x3C, 0x3D, 0x40, 0x41, 0x44, 0x45, 0xFF +#else #define TEXT_PAUSE _("PAUSE") // Pause text, Castle Courses #define TEXT_HUD_CONGRATULATIONS _("CONGRATULATIONS") // Course Complete Text, Bowser Courses +#endif #if defined(VERSION_JP) || defined(VERSION_SH) /** * File Select Text */ + // Main Screens // JPHUD menu strings are defined in "text_menu_strings.h.in" #define TEXT_MARIO TEXT_JPHUD_MARIO // View Score Menu @@ -129,6 +147,7 @@ /** * File Select Text */ + // Main Screens #define TEXT_MARIO _("MARIO") // View Score Menu #define TEXT_SELECT_FILE _("SELECT FILE") @@ -136,6 +155,7 @@ #define TEXT_COPY_FILE _("COPY FILE") #define TEXT_ERASE_FILE _("ERASE FILE") #define TEXT_SOUND_SELECT _("SOUND SELECT") + #define TEXT_FILE_MARIO_A _("MARIO A") #define TEXT_FILE_MARIO_B _("MARIO B") #define TEXT_FILE_MARIO_C _("MARIO C") @@ -472,4 +492,97 @@ #define TEXT_MENU_STARS_DE _(" GEHEIME STERNE") #endif // VERSION_EU +#ifdef VERSION_CN + +/** + * File Select Text + */ + +// Main Screens +// JPHUD menu strings are defined in "text_menu_strings.h.in" +#define TEXT_MARIO 0x76, 0x77, 0x7A, 0x7B, 0xFE, 0x78, 0x79, 0x7C, 0x7D, 0xFF +#define TEXT_SELECT_FILE 0x96, 0x97, 0x9A, 0x9B, 0x9E, 0x9F, 0xFE, 0x98, 0x99, 0x9C, 0x9D, 0xA0, 0xA1, 0xFF +#define TEXT_CHECK_FILE 0x46, 0x47, 0x4A, 0x4B, 0x4E, 0x4F, 0xFE, 0x48, 0x49, 0x4C, 0x4D, 0x50, 0x51, 0xFF +#define TEXT_COPY_FILE 0x52, 0x53, 0x56, 0x57, 0x5A, 0x5B, 0xFE, 0x54, 0x55, 0x58, 0x59, 0x5C, 0x5D, 0xFF +#define TEXT_ERASE_FILE 0x5E, 0x5F, 0x62, 0x63, 0x66, 0x67, 0xFE, 0x60, 0x61, 0x64, 0x65, 0x68, 0x69, 0xFF +#define TEXT_SOUND_SELECT 0xA2, 0xA3, 0xA6, 0xA7, 0xAA, 0xAB, 0xFE, 0xA4, 0xA5, 0xA8, 0xA9, 0xAC, 0xAD, 0xFF + +#define TEXT_FILE_MARIO_A _("马力欧 A") +#define TEXT_FILE_MARIO_B _("马力欧 B") +#define TEXT_FILE_MARIO_C _("马力欧 C") +#define TEXT_FILE_MARIO_D _("马力欧 D") + +// Menu Options +#define TEXT_SCORE _("积分") +#define TEXT_COPY _("复制") +#define TEXT_ERASE _("删除") + +// Sound Options +#define TEXT_STEREO _("立体声") +#define TEXT_MONO _("单声道") +#define TEXT_HEADSET _("耳机") + +// Misc Menu Text +#define TEXT_SAVED_DATA_EXISTS _("有保存的数据") +#define TEXT_NO_SAVED_DATA_EXISTS _("没有保存的数据") + +// Inside a Menu +#define TEXT_RETURN _("返回") +#define TEXT_CHECK_SCORE _("查看积分") +#define TEXT_COPY_FILE_BUTTON _("复制文件") +#define TEXT_ERASE_FILE_BUTTON _("删除文件") + +// Score Menu +#define TEXT_HI_SCORE _("最高积分") +#define TEXT_MY_SCORE _("我的积分") +#define TEXT_SCORE_MARIO_A _("☺A") +#define TEXT_SCORE_MARIO_B _("☺B") +#define TEXT_SCORE_MARIO_C _("☺C") +#define TEXT_SCORE_MARIO_D _("☺D") + +// Copy Menu +#define TEXT_COPY_IT_TO_WHERE _("复制到何处") +#define TEXT_COPYING_COMPLETED _("复制完毕") +#define TEXT_NO_FILE_TO_COPY_FROM _("没有空文件") + +// Erase Menu +#define TEXT_SURE _("确定吗?") +#define TEXT_YES _("是") +#define TEXT_NO _("否") +#define TEXT_FILE_MARIO_A_JUST_ERASED _("文件已删除") + +/** + * Menus Text (Pause, Course Completed) + */ +// Main Courses +#define TEXT_COURSE _("关卡") +#define TEXT_MYSCORE TEXT_MY_SCORE +#define TEXT_CONTINUE _("继续") +#define TEXT_EXIT_COURSE _("退出") +#define TEXT_CAMERA_ANGLE_R _("使用[R]键设定视角") + +// Camera Options +#define TEXT_LAKITU_MARIO TEXT_EMPTY_STRING +#define TEXT_LAKITU_STOP TEXT_EMPTY_STRING +#define TEXT_NORMAL_UPCLOSE _("特写镜头") +#define TEXT_NORMAL_FIXED _("固定镜头") + +// Course Completed Misc Text +#define TEXT_CATCH _("接住") +#define TEXT_CLEAR _("清除") +#define TEXT_HUD_HI_SCORE 0x6A, 0x6B, 0x6E, 0x6F, 0x72, 0x73, 0xFE, 0x6C, 0x6D, 0x70, 0x71, 0x74, 0x75, 0xFF + +// Save Options +#define TEXT_SAVE_AND_CONTINUE _("保存并继续") +#define TEXT_SAVE_AND_QUIT _("保存并退出") +#define TEXT_CONTINUE_WITHOUT_SAVING _("不必保存") + +// File Score Menu Icons +#define TEXT_ARROW_L _("◀ L") +#define TEXT_R_ARROW _("R ▶") + +#endif // VERSION_CN + #endif // TEXT_STRINGS_H + + diff --git a/include/types.h b/include/types.h index 150de575..e53fb7dd 100644 --- a/include/types.h +++ b/include/types.h @@ -48,11 +48,14 @@ typedef uintptr_t GeoLayout; typedef uintptr_t LevelScript; typedef s16 Movtex; typedef s16 MacroObject; -typedef s16 Collision; +typedef s16 Collision; // Collision data is limited to -32768 to 32767. Change this if you want to increase it. typedef s16 Trajectory; typedef s16 PaintingData; typedef uintptr_t BehaviorScript; typedef u8 Texture; +typedef s8 RoomData; // Rooms are limited to -128 to 127. Change the type if you wish to have more rooms. +typedef Collision TerrainData; +typedef TerrainData Vec3Terrain[3]; enum SpTaskState { SPTASK_STATE_NOT_STARTED, @@ -75,7 +78,7 @@ struct VblankHandler { }; #define ANIM_FLAG_NOLOOP (1 << 0) // 0x01 -#define ANIM_FLAG_FORWARD (1 << 1) // 0x02 +#define ANIM_FLAG_BACKWARD (1 << 1) // 0x02 #define ANIM_FLAG_2 (1 << 2) // 0x04 #define ANIM_FLAG_HOR_TRANS (1 << 3) // 0x08 #define ANIM_FLAG_VERT_TRANS (1 << 4) // 0x10 @@ -216,15 +219,15 @@ struct Waypoint { }; struct Surface { - /*0x00*/ s16 type; - /*0x02*/ s16 force; + /*0x00*/ TerrainData type; + /*0x02*/ TerrainData force; /*0x04*/ s8 flags; - /*0x05*/ s8 room; - /*0x06*/ s16 lowerY; - /*0x08*/ s16 upperY; - /*0x0A*/ Vec3s vertex1; - /*0x10*/ Vec3s vertex2; - /*0x16*/ Vec3s vertex3; + /*0x05*/ RoomData room; + /*0x06*/ TerrainData lowerY; + /*0x08*/ TerrainData upperY; + /*0x0A*/ Vec3Terrain vertex1; + /*0x10*/ Vec3Terrain vertex2; + /*0x16*/ Vec3Terrain vertex3; /*0x1C*/ struct { f32 x; f32 y; @@ -309,7 +312,7 @@ struct MarioState { /*0xB8*/ s16 prevNumStarsForDialog; /*0xBC*/ f32 peakHeight; /*0xC0*/ f32 quicksandDepth; - /*0xC4*/ f32 unkC4; + /*0xC4*/ f32 gettingBlownGravity; }; #endif // TYPES_H diff --git a/include/ultra64.h b/include/ultra64.h index 409a3cf7..36516203 100644 --- a/include/ultra64.h +++ b/include/ultra64.h @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -27,6 +28,7 @@ #include #include #include +#include #include #include diff --git a/levels/bbh/areas/1/geo.inc.c b/levels/bbh/areas/1/geo.inc.c index 6a7deebb..965ee409 100644 --- a/levels/bbh/areas/1/geo.inc.c +++ b/levels/bbh/areas/1/geo.inc.c @@ -1,526 +1,526 @@ // 0x0E000670 const GeoLayout geo_bbh_000670[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_070075A8), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_07007940), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07007B90), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07007FD0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07008B58), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07008EA8), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_070075A8), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_07007940), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07007B90), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07007FD0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07008B58), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07008EA8), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E0006B0 const GeoLayout geo_bbh_0006B0[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700AFF0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700B1C8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700B418), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700B9E0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700BBF8), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700AFF0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700B1C8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700B418), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700B9E0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700BBF8), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E0006E8 const GeoLayout geo_bbh_0006E8[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700D080), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0700D2E0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700D490), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700D7E0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07012220), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07012510), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_070126E8), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700D080), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0700D2E0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700D490), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700D7E0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07012220), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07012510), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_070126E8), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000730 const GeoLayout geo_bbh_000730[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700F510), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0700F848), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700F510), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0700F848), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000750 const GeoLayout geo_bbh_000750[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07011120), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07011120), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000768 const GeoLayout geo_bbh_000768[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700D080), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0700D2E0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700D490), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700D7E0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07012220), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07012510), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_070126E8), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700D080), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0700D2E0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700D490), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700D7E0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07012220), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07012510), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_070126E8), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E0007B0 const GeoLayout geo_bbh_0007B0[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_070139A8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07013BE8), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_070139A8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07013BE8), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E0007D0 const GeoLayout geo_bbh_0007D0[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07014FD8), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_07015398), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_070156E0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07015A20), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07014FD8), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_07015398), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_070156E0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07015A20), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000800 const GeoLayout geo_bbh_000800[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07017378), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07017570), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07017788), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07017378), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07017570), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07017788), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000828 const GeoLayout geo_bbh_000828[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07019EF8), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0701A080), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0400, geo_movtex_draw_water_regions), - GEO_ASM(0x0401, geo_movtex_draw_water_regions), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07019EF8), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0701A080), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x0400, geo_movtex_draw_water_regions), + GEO_ASM(0x0401, geo_movtex_draw_water_regions), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000860 const GeoLayout geo_bbh_000860[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701A850), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0400, geo_movtex_draw_water_regions), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701A850), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x0400, geo_movtex_draw_water_regions), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000888 const GeoLayout geo_bbh_000888[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701B6D0), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0400, geo_movtex_draw_water_regions), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701B6D0), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x0400, geo_movtex_draw_water_regions), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E0008B0 const GeoLayout geo_bbh_0008B0[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701E4E0), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0701E8D8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701ED18), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0701EEC8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701F070), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701E4E0), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0701E8D8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701ED18), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0701EEC8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701F070), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E0008E8 const GeoLayout geo_bbh_0008E8[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_070075A8), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_07007940), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07007B90), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07007FD0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07008B58), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07008EA8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700AFF0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700B1C8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700B418), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700B9E0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700BBF8), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_070075A8), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_07007940), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07007B90), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07007FD0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07008B58), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07008EA8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700AFF0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700B1C8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700B418), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700B9E0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700BBF8), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000950 const GeoLayout geo_bbh_000950[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_070075A8), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_07007940), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07007B90), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07007FD0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07008B58), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07008EA8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700D080), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0700D2E0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700D490), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700D7E0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07012220), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07012510), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_070126E8), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_070075A8), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_07007940), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07007B90), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07007FD0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07008B58), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07008EA8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700D080), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0700D2E0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700D490), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700D7E0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07012220), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07012510), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_070126E8), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E0009C8 const GeoLayout geo_bbh_0009C8[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_070075A8), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_07007940), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07007B90), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07007FD0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07008B58), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07008EA8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700F510), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0700F848), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_070075A8), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_07007940), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07007B90), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07007FD0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07008B58), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07008EA8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700F510), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0700F848), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000A18 const GeoLayout geo_bbh_000A18[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_070075A8), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_07007940), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07007B90), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07007FD0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07008B58), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07008EA8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07011120), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_070075A8), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_07007940), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07007B90), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07007FD0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07008B58), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07008EA8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07011120), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000A60 const GeoLayout geo_bbh_000A60[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_070075A8), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_07007940), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07007B90), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07007FD0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07008B58), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07008EA8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700D080), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0700D2E0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700D490), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700D7E0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07012220), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07012510), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_070126E8), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_070075A8), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_07007940), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07007B90), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07007FD0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07008B58), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07008EA8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700D080), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0700D2E0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700D490), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700D7E0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07012220), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07012510), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_070126E8), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000AD8 const GeoLayout geo_bbh_000AD8[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_070075A8), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_07007940), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07007B90), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07007FD0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07008B58), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07008EA8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_070139A8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07013BE8), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_070075A8), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_07007940), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07007B90), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07007FD0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07008B58), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07008EA8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_070139A8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07013BE8), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000B28 const GeoLayout geo_bbh_000B28[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_070075A8), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_07007940), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07007B90), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07007FD0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07008B58), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07008EA8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07014FD8), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_07015398), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_070156E0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07015A20), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_070075A8), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_07007940), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07007B90), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07007FD0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07008B58), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07008EA8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07014FD8), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_07015398), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_070156E0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07015A20), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000B88 const GeoLayout geo_bbh_000B88[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_070075A8), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_07007940), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07007B90), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07007FD0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07008B58), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07008EA8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701E4E0), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0701E8D8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701ED18), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0701EEC8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701F070), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_070075A8), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_07007940), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07007B90), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07007FD0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07008B58), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07008EA8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701E4E0), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0701E8D8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701ED18), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0701EEC8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701F070), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000BF0 const GeoLayout geo_bbh_000BF0[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700AFF0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700B1C8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700B418), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700B9E0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700BBF8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700F510), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0700F848), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700AFF0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700B1C8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700B418), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700B9E0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700BBF8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700F510), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0700F848), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000C38 const GeoLayout geo_bbh_000C38[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700AFF0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700B1C8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700B418), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700B9E0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700BBF8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07017378), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07017570), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07017788), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700AFF0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700B1C8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700B418), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700B9E0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700BBF8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07017378), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07017570), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07017788), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000C88 const GeoLayout geo_bbh_000C88[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700AFF0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700B1C8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700B418), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700B9E0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700BBF8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07019EF8), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0701A080), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0400, geo_movtex_draw_water_regions), - GEO_ASM(0x0401, geo_movtex_draw_water_regions), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700AFF0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700B1C8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700B418), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700B9E0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700BBF8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07019EF8), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0701A080), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x0400, geo_movtex_draw_water_regions), + GEO_ASM(0x0401, geo_movtex_draw_water_regions), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000CE8 const GeoLayout geo_bbh_000CE8[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700D080), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0700D2E0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700D490), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700D7E0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07011120), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700D080), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0700D2E0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700D490), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700D7E0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07011120), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000D20 const GeoLayout geo_bbh_000D20[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700D080), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0700D2E0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700D490), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700D7E0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07012220), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07012510), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_070126E8), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700D080), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0700D2E0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700D490), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0700D7E0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07012220), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07012510), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_070126E8), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000D68 const GeoLayout geo_bbh_000D68[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700F510), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0700F848), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07019EF8), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0701A080), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0400, geo_movtex_draw_water_regions), - GEO_ASM(0x0401, geo_movtex_draw_water_regions), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0700F510), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0700F848), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07019EF8), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0701A080), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x0400, geo_movtex_draw_water_regions), + GEO_ASM(0x0401, geo_movtex_draw_water_regions), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000DB0 const GeoLayout geo_bbh_000DB0[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07011120), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701E4E0), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0701E8D8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701ED18), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0701EEC8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701F070), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07011120), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701E4E0), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0701E8D8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701ED18), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0701EEC8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701F070), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000DF0 const GeoLayout geo_bbh_000DF0[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07017378), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07017570), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07017788), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701E4E0), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0701E8D8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701ED18), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0701EEC8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701F070), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07017378), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07017570), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_07017788), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701E4E0), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0701E8D8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701ED18), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0701EEC8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701F070), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000E40 const GeoLayout geo_bbh_000E40[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07019EF8), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0701A080), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701A850), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0400, geo_movtex_draw_water_regions), - GEO_ASM(0x0401, geo_movtex_draw_water_regions), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_07019EF8), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0701A080), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701A850), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x0400, geo_movtex_draw_water_regions), + GEO_ASM(0x0401, geo_movtex_draw_water_regions), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000E80 const GeoLayout geo_bbh_000E80[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701A850), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701B6D0), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0400, geo_movtex_draw_water_regions), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701A850), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701B6D0), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x0400, geo_movtex_draw_water_regions), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000EB0 const GeoLayout geo_bbh_000EB0[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701B6D0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701E4E0), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0701E8D8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701ED18), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0701EEC8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701F070), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0400, geo_movtex_draw_water_regions), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701B6D0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701E4E0), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0701E8D8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701ED18), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bbh_seg7_dl_0701EEC8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701F070), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x0400, geo_movtex_draw_water_regions), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000F00 const GeoLayout geo_bbh_000F00[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND(BACKGROUND_HAUNTED, geo_skybox_main), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 50, 10000, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(4, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_SWITCH_CASE(32, geo_switch_area), - GEO_OPEN_NODE(), - GEO_BRANCH(1, geo_bbh_000670), // 0x0E000670 - GEO_BRANCH(1, geo_bbh_0006B0), // 0x0E0006B0 - GEO_BRANCH(1, geo_bbh_0006E8), // 0x0E0006E8 - GEO_BRANCH(1, geo_bbh_000730), // 0x0E000730 - GEO_BRANCH(1, geo_bbh_000750), // 0x0E000750 - GEO_BRANCH(1, geo_bbh_000768), // 0x0E000768 - GEO_BRANCH(1, geo_bbh_0007B0), // 0x0E0007B0 - GEO_BRANCH(1, geo_bbh_0007D0), // 0x0E0007D0 - GEO_BRANCH(1, geo_bbh_000800), // 0x0E000800 - GEO_BRANCH(1, geo_bbh_000828), // 0x0E000828 - GEO_BRANCH(1, geo_bbh_000860), // 0x0E000860 - GEO_BRANCH(1, geo_bbh_000888), // 0x0E000888 - GEO_BRANCH(1, geo_bbh_0008B0), // 0x0E0008B0 - GEO_BRANCH(1, geo_bbh_0008E8), // 0x0E0008E8 - GEO_BRANCH(1, geo_bbh_000950), // 0x0E000950 - GEO_BRANCH(1, geo_bbh_0009C8), // 0x0E0009C8 - GEO_BRANCH(1, geo_bbh_000A18), // 0x0E000A18 - GEO_BRANCH(1, geo_bbh_000A60), // 0x0E000A60 - GEO_BRANCH(1, geo_bbh_000AD8), // 0x0E000AD8 - GEO_BRANCH(1, geo_bbh_000B28), // 0x0E000B28 - GEO_BRANCH(1, geo_bbh_000B88), // 0x0E000B88 - GEO_BRANCH(1, geo_bbh_000BF0), // 0x0E000BF0 - GEO_BRANCH(1, geo_bbh_000C38), // 0x0E000C38 - GEO_BRANCH(1, geo_bbh_000C88), // 0x0E000C88 - GEO_BRANCH(1, geo_bbh_000CE8), // 0x0E000CE8 - GEO_BRANCH(1, geo_bbh_000D20), // 0x0E000D20 - GEO_BRANCH(1, geo_bbh_000D68), // 0x0E000D68 - GEO_BRANCH(1, geo_bbh_000DB0), // 0x0E000DB0 - GEO_BRANCH(1, geo_bbh_000DF0), // 0x0E000DF0 - GEO_BRANCH(1, geo_bbh_000E40), // 0x0E000E40 - GEO_BRANCH(1, geo_bbh_000E80), // 0x0E000E80 - GEO_BRANCH(1, geo_bbh_000EB0), // 0x0E000EB0 - GEO_CLOSE_NODE(), - GEO_RENDER_OBJ(), - GEO_ASM(0, geo_envfx_main), + GEO_BACKGROUND(BACKGROUND_HAUNTED, geo_skybox_main), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 50, 10000, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(4, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(32, geo_switch_area), + GEO_OPEN_NODE(), + GEO_BRANCH(1, geo_bbh_000670), // 0x0E000670 + GEO_BRANCH(1, geo_bbh_0006B0), // 0x0E0006B0 + GEO_BRANCH(1, geo_bbh_0006E8), // 0x0E0006E8 + GEO_BRANCH(1, geo_bbh_000730), // 0x0E000730 + GEO_BRANCH(1, geo_bbh_000750), // 0x0E000750 + GEO_BRANCH(1, geo_bbh_000768), // 0x0E000768 + GEO_BRANCH(1, geo_bbh_0007B0), // 0x0E0007B0 + GEO_BRANCH(1, geo_bbh_0007D0), // 0x0E0007D0 + GEO_BRANCH(1, geo_bbh_000800), // 0x0E000800 + GEO_BRANCH(1, geo_bbh_000828), // 0x0E000828 + GEO_BRANCH(1, geo_bbh_000860), // 0x0E000860 + GEO_BRANCH(1, geo_bbh_000888), // 0x0E000888 + GEO_BRANCH(1, geo_bbh_0008B0), // 0x0E0008B0 + GEO_BRANCH(1, geo_bbh_0008E8), // 0x0E0008E8 + GEO_BRANCH(1, geo_bbh_000950), // 0x0E000950 + GEO_BRANCH(1, geo_bbh_0009C8), // 0x0E0009C8 + GEO_BRANCH(1, geo_bbh_000A18), // 0x0E000A18 + GEO_BRANCH(1, geo_bbh_000A60), // 0x0E000A60 + GEO_BRANCH(1, geo_bbh_000AD8), // 0x0E000AD8 + GEO_BRANCH(1, geo_bbh_000B28), // 0x0E000B28 + GEO_BRANCH(1, geo_bbh_000B88), // 0x0E000B88 + GEO_BRANCH(1, geo_bbh_000BF0), // 0x0E000BF0 + GEO_BRANCH(1, geo_bbh_000C38), // 0x0E000C38 + GEO_BRANCH(1, geo_bbh_000C88), // 0x0E000C88 + GEO_BRANCH(1, geo_bbh_000CE8), // 0x0E000CE8 + GEO_BRANCH(1, geo_bbh_000D20), // 0x0E000D20 + GEO_BRANCH(1, geo_bbh_000D68), // 0x0E000D68 + GEO_BRANCH(1, geo_bbh_000DB0), // 0x0E000DB0 + GEO_BRANCH(1, geo_bbh_000DF0), // 0x0E000DF0 + GEO_BRANCH(1, geo_bbh_000E40), // 0x0E000E40 + GEO_BRANCH(1, geo_bbh_000E80), // 0x0E000E80 + GEO_BRANCH(1, geo_bbh_000EB0), // 0x0E000EB0 + GEO_CLOSE_NODE(), + GEO_RENDER_OBJ(), + GEO_ASM(0, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bbh/areas/1/macro.inc.c b/levels/bbh/areas/1/macro.inc.c index acc59b67..581afa0d 100644 --- a/levels/bbh/areas/1/macro.inc.c +++ b/levels/bbh/areas/1/macro.inc.c @@ -1,38 +1,38 @@ // 0x070268C4 - 0x07026A1A const MacroObject bbh_seg7_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_haunted_chair, /*yaw*/ 90, /*pos*/ -1960, -20, 340), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -800, -204, 2915, /*behParam*/ DIALOG_063), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 400, -204, 3057, /*behParam*/ DIALOG_085), - MACRO_OBJECT(/*preset*/ macro_haunted_chair, /*yaw*/ 270, /*pos*/ -1080, 20, 160), - MACRO_OBJECT(/*preset*/ macro_box_vanish_cap, /*yaw*/ 0, /*pos*/ 1268, 1050, 1860), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -1164, 0, 2325), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2540, 820, 2174), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2600, 815, -380), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2950, 815, -1250), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -1500, 550, 960), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -420, 550, 60), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2856, 50, 2144), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 50, 900, -1400), - MACRO_OBJECT(/*preset*/ macro_box_1up, /*yaw*/ 0, /*pos*/ 660, 3200, 1160), - MACRO_OBJECT(/*preset*/ macro_blue_coin_switch, /*yaw*/ 0, /*pos*/ 640, 1741, 760), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1400, 1840, 1100), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1700, 1840, 1100), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 0, 1840, 1100), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -400, 1840, 1100), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 2026, -204, 2966, /*behParam*/ DIALOG_102), - MACRO_OBJECT(/*preset*/ macro_mr_i, /*yaw*/ 0, /*pos*/ 480, 10, -653), - MACRO_OBJECT(/*preset*/ macro_scuttlebug, /*yaw*/ 0, /*pos*/ -346, -204, -2813), - MACRO_OBJECT(/*preset*/ macro_scuttlebug, /*yaw*/ 0, /*pos*/ 1146, -203, -2280), - MACRO_OBJECT(/*preset*/ macro_mr_i, /*yaw*/ 0, /*pos*/ -2369, -204, 5184), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 135, /*pos*/ -1546, -204, 4813, /*behParam*/ DIALOG_086), - MACRO_OBJECT(/*preset*/ macro_scuttlebug, /*yaw*/ 0, /*pos*/ 3466, -204, 5106), - MACRO_OBJECT(/*preset*/ macro_mr_i, /*yaw*/ 0, /*pos*/ 1640, 840, -733), - MACRO_OBJECT(/*preset*/ macro_box_vanish_cap, /*yaw*/ 0, /*pos*/ -1960, 300, -120), - MACRO_OBJECT(/*preset*/ macro_box_vanish_cap, /*yaw*/ 0, /*pos*/ 460, 2140, -560), - MACRO_OBJECT(/*preset*/ macro_box_ten_coins, /*yaw*/ 0, /*pos*/ 700, 80, -2800), - MACRO_OBJECT(/*preset*/ macro_breakable_box_three_coins, /*yaw*/ 45, /*pos*/ -3800, -204, 4600), - MACRO_OBJECT(/*preset*/ macro_breakable_box_three_coins, /*yaw*/ 45, /*pos*/ -3659, -204, 4459), - MACRO_OBJECT(/*preset*/ macro_jumping_box, /*yaw*/ 0, /*pos*/ -220, -220, 6140), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -3040, 1120, 5460), + MACRO_OBJECT (/*preset*/ macro_haunted_chair_2, /*yaw*/ 90, /*pos*/ -1960, -20, 340), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -800, -204, 2915, /*bhvParam*/ DIALOG_063), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 400, -204, 3057, /*bhvParam*/ DIALOG_085), + MACRO_OBJECT (/*preset*/ macro_haunted_chair_2, /*yaw*/ 270, /*pos*/ -1080, 20, 160), + MACRO_OBJECT (/*preset*/ macro_box_vanish_cap, /*yaw*/ 0, /*pos*/ 1268, 1050, 1860), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -1164, 0, 2325), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2540, 820, 2174), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2600, 815, -380), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2950, 815, -1250), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -1500, 550, 960), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -420, 550, 60), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2856, 50, 2144), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 50, 900, -1400), + MACRO_OBJECT (/*preset*/ macro_box_1up, /*yaw*/ 0, /*pos*/ 660, 3200, 1160), + MACRO_OBJECT (/*preset*/ macro_blue_coin_switch, /*yaw*/ 0, /*pos*/ 640, 1741, 760), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1400, 1840, 1100), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1700, 1840, 1100), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 0, 1840, 1100), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -400, 1840, 1100), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 2026, -204, 2966, /*bhvParam*/ DIALOG_102), + MACRO_OBJECT (/*preset*/ macro_mr_i, /*yaw*/ 0, /*pos*/ 480, 10, -653), + MACRO_OBJECT (/*preset*/ macro_scuttlebug, /*yaw*/ 0, /*pos*/ -346, -204, -2813), + MACRO_OBJECT (/*preset*/ macro_scuttlebug, /*yaw*/ 0, /*pos*/ 1146, -203, -2280), + MACRO_OBJECT (/*preset*/ macro_mr_i, /*yaw*/ 0, /*pos*/ -2369, -204, 5184), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 135, /*pos*/ -1546, -204, 4813, /*bhvParam*/ DIALOG_086), + MACRO_OBJECT (/*preset*/ macro_scuttlebug, /*yaw*/ 0, /*pos*/ 3466, -204, 5106), + MACRO_OBJECT (/*preset*/ macro_mr_i, /*yaw*/ 0, /*pos*/ 1640, 840, -733), + MACRO_OBJECT (/*preset*/ macro_box_vanish_cap, /*yaw*/ 0, /*pos*/ -1960, 300, -120), + MACRO_OBJECT (/*preset*/ macro_box_vanish_cap, /*yaw*/ 0, /*pos*/ 460, 2140, -560), + MACRO_OBJECT (/*preset*/ macro_box_ten_coins, /*yaw*/ 0, /*pos*/ 700, 80, -2800), + MACRO_OBJECT (/*preset*/ macro_breakable_box_three_coins, /*yaw*/ 45, /*pos*/ -3800, -204, 4600), + MACRO_OBJECT (/*preset*/ macro_breakable_box_three_coins, /*yaw*/ 45, /*pos*/ -3659, -204, 4459), + MACRO_OBJECT (/*preset*/ macro_jumping_box, /*yaw*/ 0, /*pos*/ -220, -220, 6140), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -3040, 1120, 5460), MACRO_OBJECT_END(), }; diff --git a/levels/bbh/areas/1/room.inc.c b/levels/bbh/areas/1/room.inc.c index 29bba9cd..7412fdfe 100644 --- a/levels/bbh/areas/1/room.inc.c +++ b/levels/bbh/areas/1/room.inc.c @@ -1,5 +1,5 @@ // 0x0702605C - 0x070268C2 -const u8 bbh_seg7_rooms[] = { +const RoomData bbh_seg7_rooms[] = { 13, 13, 13, 13, 13, 13, 13, 13, // 0-7 13, 13, 13, 13, 13, 13, 13, 13, // 8-15 13, 13, 29, 29, 13, 13, 13, 13, // 16-23 diff --git a/levels/bbh/coffin/geo.inc.c b/levels/bbh/coffin/geo.inc.c index baa97eba..361e6832 100644 --- a/levels/bbh/coffin/geo.inc.c +++ b/levels/bbh/coffin/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000658 const GeoLayout geo_bbh_000658[] = { - GEO_CULLING_RADIUS(800), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_070206F0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(800), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_070206F0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bbh/header.h b/levels/bbh/header.h index 74f49d83..de769e94 100644 --- a/levels/bbh/header.h +++ b/levels/bbh/header.h @@ -96,7 +96,7 @@ extern const Gfx bbh_seg7_dl_0701FFE8[]; extern const Gfx bbh_seg7_dl_070202F0[]; extern const Gfx bbh_seg7_dl_070206F0[]; extern const Collision bbh_seg7_collision_level[]; -extern const u8 bbh_seg7_rooms[]; +extern const RoomData bbh_seg7_rooms[]; extern const MacroObject bbh_seg7_macro_objs[]; extern const Collision bbh_seg7_collision_staircase_step[]; extern const Collision bbh_seg7_collision_tilt_floor_platform[]; diff --git a/levels/bbh/leveldata.c b/levels/bbh/leveldata.c index 74440b9b..cf30b06e 100644 --- a/levels/bbh/leveldata.c +++ b/levels/bbh/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "dialog_ids.h" diff --git a/levels/bbh/merry_go_round/geo.inc.c b/levels/bbh/merry_go_round/geo.inc.c index 4b75cdcd..fc5ce0c2 100644 --- a/levels/bbh/merry_go_round/geo.inc.c +++ b/levels/bbh/merry_go_round/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000640 const GeoLayout geo_bbh_000640[] = { - GEO_CULLING_RADIUS(2300), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_070202F0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2300), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_070202F0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bbh/mesh_elevator/geo.inc.c b/levels/bbh/mesh_elevator/geo.inc.c index 80ef700a..2e75363f 100644 --- a/levels/bbh/mesh_elevator/geo.inc.c +++ b/levels/bbh/mesh_elevator/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000628 const GeoLayout geo_bbh_000628[] = { - GEO_CULLING_RADIUS(600), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0701FFE8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(600), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bbh_seg7_dl_0701FFE8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bbh/moving_bookshelf/geo.inc.c b/levels/bbh/moving_bookshelf/geo.inc.c index 7e00a5d4..4757f1d5 100644 --- a/levels/bbh/moving_bookshelf/geo.inc.c +++ b/levels/bbh/moving_bookshelf/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000610 const GeoLayout geo_bbh_000610[] = { - GEO_CULLING_RADIUS(1000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701FD28), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701FD28), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bbh/script.c b/levels/bbh/script.c index bfa04334..aa8301ed 100644 --- a/levels/bbh/script.c +++ b/levels/bbh/script.c @@ -18,77 +18,77 @@ static const LevelScript script_func_local_1[] = { - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 2089, 1331, -1125, /*angle*/ 0, 270, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 1331, 1075, -1330, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 2089, 1331, -511, /*angle*/ 0, 270, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ -511, 358, -1330, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 1126, 358, 2212, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 205, 358, 2212, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 2089, 1331, -1125, /*angle*/ 0, 270, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 1331, 1075, -1330, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 2089, 1331, -511, /*angle*/ 0, 270, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ -511, 358, -1330, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 1126, 358, 2212, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 205, 358, 2212, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), RETURN(), }; static const LevelScript script_func_local_2[] = { - OBJECT(/*model*/ MODEL_BBH_TILTING_FLOOR_PLATFORM, /*pos*/ 2866, 820, 1897, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBbhTiltingTrapPlatform), - OBJECT(/*model*/ MODEL_BBH_TUMBLING_PLATFORM, /*pos*/ 2961, 0, -768, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBbhTumblingBridge), - OBJECT(/*model*/ MODEL_BBH_MOVING_BOOKSHELF, /*pos*/ -1994, 819, 213, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHauntedBookshelf), - OBJECT(/*model*/ MODEL_BBH_MESH_ELEVATOR, /*pos*/ -2985, -205, 5400, /*angle*/ 0, -45, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMeshElevator), - OBJECT(/*model*/ MODEL_BBH_MERRY_GO_ROUND, /*pos*/ -205, -2560, 205, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMerryGoRound), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2200, 819, -800, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvCoffinSpawner), + OBJECT(/*model*/ MODEL_BBH_TILTING_FLOOR_PLATFORM, /*pos*/ 2866, 820, 1897, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBBHTiltingTrapPlatform), + OBJECT(/*model*/ MODEL_BBH_TUMBLING_PLATFORM, /*pos*/ 2961, 0, -768, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBBHTumblingBridge), + OBJECT(/*model*/ MODEL_BBH_MOVING_BOOKSHELF, /*pos*/ -1994, 819, 213, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvHauntedBookshelf), + OBJECT(/*model*/ MODEL_BBH_MESH_ELEVATOR, /*pos*/ -2985, -205, 5400, /*angle*/ 0, -45, 0, /*bhvParam*/ 0, /*bhv*/ bhvMeshElevator), + OBJECT(/*model*/ MODEL_BBH_MERRY_GO_ROUND, /*pos*/ -205, -2560, 205, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvMerryGoRound), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2200, 819, -800, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvCoffinSpawner), RETURN(), }; static const LevelScript script_func_local_3[] = { - OBJECT_WITH_ACTS(/*model*/ MODEL_BOO, /*pos*/ 1000, 50, 1000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGhostHuntBigBoo, /*acts*/ ACT_1), - OBJECT_WITH_ACTS(/*model*/ MODEL_BOO, /*pos*/ 20, 100, -908, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGhostHuntBoo, /*acts*/ ACT_1), - OBJECT_WITH_ACTS(/*model*/ MODEL_BOO, /*pos*/ 3150, 100, 398, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGhostHuntBoo, /*acts*/ ACT_1), - OBJECT_WITH_ACTS(/*model*/ MODEL_BOO, /*pos*/ -2000, 150, -800, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGhostHuntBoo, /*acts*/ ACT_1), - OBJECT_WITH_ACTS(/*model*/ MODEL_BOO, /*pos*/ 2851, 100, 2289, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGhostHuntBoo, /*acts*/ ACT_1), - OBJECT_WITH_ACTS(/*model*/ MODEL_BOO, /*pos*/ -1551, 100, -1018, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGhostHuntBoo, /*acts*/ ACT_1), - OBJECT_WITH_ACTS(/*model*/ MODEL_BBH_STAIRCASE_STEP, /*pos*/ 973, 0, 517, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenStaircaseStep, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_BBH_STAIRCASE_STEP, /*pos*/ 973, -206, 717, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenStaircaseStep, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_BBH_STAIRCASE_STEP, /*pos*/ 973, -412, 917, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenStaircaseStep, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_BOO, /*pos*/ 20, 100, -908, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBoo, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_BOO, /*pos*/ 3150, 100, 398, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBoo, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_BOO, /*pos*/ -2000, 150, -800, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBoo, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_BOO, /*pos*/ 2851, 100, 2289, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBoo, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_BOO, /*pos*/ -1551, 100, -1018, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBoo, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 990, -2146, -908, /*angle*/ 0, -45, 0, /*behParam*/ 0x00030000, /*beh*/ bhvFlamethrower, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ -1100, -2372, 1100, /*angle*/ 0, 135, 0, /*behParam*/ 0x01000000, /*beh*/ bhvMerryGoRoundBooManager, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_BOO, /*pos*/ 1030, 1922, 2546, /*angle*/ 0, -90, 0, /*behParam*/ 0x04000000, /*beh*/ bhvBalconyBigBoo, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_BOO, /*pos*/ 581, 1850, -206, /*angle*/ 0, -90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBoo, /*acts*/ ALL_ACTS), - OBJECT(/*model*/ MODEL_MAD_PIANO, /*pos*/ -1300, 0, 2310, /*angle*/ 0, 243, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMadPiano), - OBJECT(/*model*/ MODEL_HAUNTED_CHAIR, /*pos*/ -1530, 0, 2200, /*angle*/ 0, 66, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHauntedChair), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1330, 890, 200, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBookendSpawn), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -818, 890, -200, /*angle*/ 0, 270, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBookendSpawn), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1330, 890, -622, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBookendSpawn), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -818, 890, -686, /*angle*/ 0, 270, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBookendSpawn), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1950, 880, 8, /*angle*/ 0, 180, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHauntedBookshelfManager), - OBJECT(/*model*/ MODEL_BOOKEND, /*pos*/ 2680, 1045, 876, /*angle*/ 0, 166, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlyingBookend), - OBJECT(/*model*/ MODEL_BOOKEND, /*pos*/ 3075, 1045, 995, /*angle*/ 0, 166, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlyingBookend), - OBJECT(/*model*/ MODEL_BOOKEND, /*pos*/ -1411, 218, 922, /*angle*/ 0, 180, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlyingBookend), + OBJECT_WITH_ACTS(/*model*/ MODEL_BOO, /*pos*/ 1000, 50, 1000, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_1) | BPARAM2(BIG_BOO_BP_GHOST_HUNT), /*bhv*/ bhvGhostHuntBigBoo, /*acts*/ ACT_1), + OBJECT_WITH_ACTS(/*model*/ MODEL_BOO, /*pos*/ 20, 100, -908, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(BOO_BP_GHOST_HUNT), /*bhv*/ bhvGhostHuntBoo, /*acts*/ ACT_1), + OBJECT_WITH_ACTS(/*model*/ MODEL_BOO, /*pos*/ 3150, 100, 398, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(BOO_BP_GHOST_HUNT), /*bhv*/ bhvGhostHuntBoo, /*acts*/ ACT_1), + OBJECT_WITH_ACTS(/*model*/ MODEL_BOO, /*pos*/ -2000, 150, -800, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(BOO_BP_GHOST_HUNT), /*bhv*/ bhvGhostHuntBoo, /*acts*/ ACT_1), + OBJECT_WITH_ACTS(/*model*/ MODEL_BOO, /*pos*/ 2851, 100, 2289, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(BOO_BP_GHOST_HUNT), /*bhv*/ bhvGhostHuntBoo, /*acts*/ ACT_1), + OBJECT_WITH_ACTS(/*model*/ MODEL_BOO, /*pos*/ -1551, 100, -1018, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(BOO_BP_GHOST_HUNT), /*bhv*/ bhvGhostHuntBoo, /*acts*/ ACT_1), + OBJECT_WITH_ACTS(/*model*/ MODEL_BBH_STAIRCASE_STEP, /*pos*/ 973, 0, 517, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvHiddenStaircaseStep, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_BBH_STAIRCASE_STEP, /*pos*/ 973, -206, 717, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvHiddenStaircaseStep, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_BBH_STAIRCASE_STEP, /*pos*/ 973, -412, 917, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvHiddenStaircaseStep, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_BOO, /*pos*/ 20, 100, -908, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBoo, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_BOO, /*pos*/ 3150, 100, 398, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBoo, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_BOO, /*pos*/ -2000, 150, -800, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBoo, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_BOO, /*pos*/ 2851, 100, 2289, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBoo, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_BOO, /*pos*/ -1551, 100, -1018, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBoo, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 990, -2146, -908, /*angle*/ 0, -45, 0, /*bhvParam*/ BPARAM2(0x03), /*bhv*/ bhvFlamethrower, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ -1100, -2372, 1100, /*angle*/ 0, 135, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_2), /*bhv*/ bhvMerryGoRoundBooManager, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_BOO, /*pos*/ 1030, 1922, 2546, /*angle*/ 0, -90, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_5), /*bhv*/ bhvBalconyBigBoo, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_BOO, /*pos*/ 581, 1850, -206, /*angle*/ 0, -90, 0, /*bhvParam*/ 0, /*bhv*/ bhvBoo, /*acts*/ ALL_ACTS), + OBJECT (/*model*/ MODEL_MAD_PIANO, /*pos*/ -1300, 0, 2310, /*angle*/ 0, 243, 0, /*bhvParam*/ 0, /*bhv*/ bhvMadPiano), + OBJECT (/*model*/ MODEL_HAUNTED_CHAIR, /*pos*/ -1530, 0, 2200, /*angle*/ 0, 66, 0, /*bhvParam*/ 0, /*bhv*/ bhvHauntedChair), + OBJECT (/*model*/ MODEL_NONE, /*pos*/ -1330, 890, 200, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvBookendSpawn), + OBJECT (/*model*/ MODEL_NONE, /*pos*/ -818, 890, -200, /*angle*/ 0, 270, 0, /*bhvParam*/ 0, /*bhv*/ bhvBookendSpawn), + OBJECT (/*model*/ MODEL_NONE, /*pos*/ -1330, 890, -622, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvBookendSpawn), + OBJECT (/*model*/ MODEL_NONE, /*pos*/ -818, 890, -686, /*angle*/ 0, 270, 0, /*bhvParam*/ 0, /*bhv*/ bhvBookendSpawn), + OBJECT (/*model*/ MODEL_NONE, /*pos*/ -1950, 880, 8, /*angle*/ 0, 180, 0, /*bhvParam*/ 0, /*bhv*/ bhvHauntedBookshelfManager), + OBJECT (/*model*/ MODEL_BOOKEND, /*pos*/ 2680, 1045, 876, /*angle*/ 0, 166, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlyingBookend), + OBJECT (/*model*/ MODEL_BOOKEND, /*pos*/ 3075, 1045, 995, /*angle*/ 0, 166, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlyingBookend), + OBJECT (/*model*/ MODEL_BOOKEND, /*pos*/ -1411, 218, 922, /*angle*/ 0, 180, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlyingBookend), RETURN(), }; static const LevelScript script_func_local_4[] = { - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -2030, 1350, 1940, /*angle*/ 0, 0, 0, /*behParam*/ 0x02000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ -204, 1100, 1576, /*angle*/ 0, 0, 0, /*behParam*/ 0x03000000, /*beh*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 923, 1741, -332, /*angle*/ 0, 18, 0, /*behParam*/ 0x05010000, /*beh*/ bhvMrI, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -2030, 1350, 1940, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_3), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ -204, 1100, 1576, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_4), /*bhv*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 923, 1741, -332, /*angle*/ 0, 18, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_6) | BPARAM2(0x01), /*bhv*/ bhvMrI, /*acts*/ ALL_ACTS), RETURN(), }; const LevelScript level_bbh_entry[] = { INIT_LEVEL(), - LOAD_MIO0( /*seg*/ 0x07, _bbh_segment_7SegmentRomStart, _bbh_segment_7SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0A, _bbh_skybox_mio0SegmentRomStart, _bbh_skybox_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _bbh_segment_7SegmentRomStart, _bbh_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0A, _bbh_skybox_mio0SegmentRomStart, _bbh_skybox_mio0SegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _spooky_mio0SegmentRomStart, _spooky_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x05, _group9_mio0SegmentRomStart, _group9_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0C, _group9_geoSegmentRomStart, _group9_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x06, _group17_mio0SegmentRomStart, _group17_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0D, _group17_geoSegmentRomStart, _group17_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x05, _group9_mio0SegmentRomStart, _group9_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0C, _group9_geoSegmentRomStart, _group9_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x06, _group17_mio0SegmentRomStart, _group17_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0D, _group17_geoSegmentRomStart, _group17_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_1), JUMP_LINK(script_func_global_10), JUMP_LINK(script_func_global_18), @@ -107,10 +107,10 @@ const LevelScript level_bbh_entry[] = { JUMP_LINK(script_func_local_2), JUMP_LINK(script_func_local_3), JUMP_LINK(script_func_local_4), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 666, 796, 5350, /*angle*/ 0, 180, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvSpinAirborneWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_BBH, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE_COURTYARD, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE_COURTYARD, /*destArea*/ 0x01, /*destNode*/ 0x0B, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 666, 796, 5350, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvSpinAirborneWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_BBH, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE_COURTYARD, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE_COURTYARD, /*destArea*/ 1, /*destNode*/ WARP_NODE_0B, /*flags*/ WARP_NO_CHECKPOINT), TERRAIN(/*terrainData*/ bbh_seg7_collision_level), MACRO_OBJECTS(/*objList*/ bbh_seg7_macro_objs), ROOMS(/*surfaceRooms*/ bbh_seg7_rooms), diff --git a/levels/bbh/staircase_step/geo.inc.c b/levels/bbh/staircase_step/geo.inc.c index 7592fe2c..acc31f78 100644 --- a/levels/bbh/staircase_step/geo.inc.c +++ b/levels/bbh/staircase_step/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0005B0 const GeoLayout geo_bbh_0005B0[] = { - GEO_CULLING_RADIUS(700), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701F2E8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(700), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701F2E8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bbh/tilting_trap_platform/geo.inc.c b/levels/bbh/tilting_trap_platform/geo.inc.c index 81844d68..9c1f42d5 100644 --- a/levels/bbh/tilting_trap_platform/geo.inc.c +++ b/levels/bbh/tilting_trap_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0005C8 const GeoLayout geo_bbh_0005C8[] = { - GEO_CULLING_RADIUS(600), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701F5F8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(600), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701F5F8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bbh/tumbling_platform_far/geo.inc.c b/levels/bbh/tumbling_platform_far/geo.inc.c index ca2ae057..b10d459d 100644 --- a/levels/bbh/tumbling_platform_far/geo.inc.c +++ b/levels/bbh/tumbling_platform_far/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0005E0 const GeoLayout geo_bbh_0005E0[] = { - GEO_CULLING_RADIUS(650), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701F7E8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(650), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701F7E8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bbh/tumbling_platform_near/geo.inc.c b/levels/bbh/tumbling_platform_near/geo.inc.c index bfa6c6bc..447ee85a 100644 --- a/levels/bbh/tumbling_platform_near/geo.inc.c +++ b/levels/bbh/tumbling_platform_near/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0005F8 const GeoLayout geo_bbh_0005F8[] = { - GEO_CULLING_RADIUS(300), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701FAB0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(300), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bbh_seg7_dl_0701FAB0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitdw/areas/1/geo.inc.c b/levels/bitdw/areas/1/geo.inc.c index 39f6143e..949abbe5 100644 --- a/levels/bitdw/areas/1/geo.inc.c +++ b/levels/bitdw/areas/1/geo.inc.c @@ -1,26 +1,26 @@ // 0x0E000618 const GeoLayout geo_bitdw_000618[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND(BACKGROUND_GREEN_SKY, geo_skybox_main), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(14, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bitdw_seg7_dl_070020C8), - GEO_RENDER_OBJ(), - GEO_ASM(0, geo_envfx_main), + GEO_BACKGROUND(BACKGROUND_GREEN_SKY, geo_skybox_main), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(14, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bitdw_seg7_dl_070020C8), + GEO_RENDER_OBJ(), + GEO_ASM(0, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitdw/areas/1/large_platform/geo.inc.c b/levels/bitdw/areas/1/large_platform/geo.inc.c index d4b11233..fb9fa108 100644 --- a/levels/bitdw/areas/1/large_platform/geo.inc.c +++ b/levels/bitdw/areas/1/large_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0003D8 const GeoLayout geo_bitdw_0003D8[] = { - GEO_CULLING_RADIUS(2300), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_070032F8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2300), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_070032F8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitdw/areas/1/macro.inc.c b/levels/bitdw/areas/1/macro.inc.c index cf1783a1..e593eff8 100644 --- a/levels/bitdw/areas/1/macro.inc.c +++ b/levels/bitdw/areas/1/macro.inc.c @@ -1,63 +1,63 @@ // 0x0700F438 - 0x0700F688 const MacroObject bitdw_seg7_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_box_metal_cap, /*yaw*/ 0, /*pos*/ -6420, -2900, 3880), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal_flying, /*yaw*/ 0, /*pos*/ -1660, -3000, 3900), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -2400, -800, 1900), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -5300, 20, 1000, /*behParam*/ 0), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -7140, 500, 380, /*behParam*/ 1), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -7120, 1050, -2080, /*behParam*/ 1), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -6480, 240, 1000, /*behParam*/ 0), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal_flying, /*yaw*/ 0, /*pos*/ -2060, 1200, -940), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -170, 1070, 300), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -170, 1070, 700), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 1450, 1400, 300), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 1450, 1400, 700), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 1660, -1980, 3660), - MACRO_OBJECT(/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ 3180, 1020, 240), - MACRO_OBJECT(/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ 2860, 1020, 580), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 4640, 2360, 0), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 4900, 2600, 0), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 5180, 2820, 0), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 2760, 1940, 500), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 2760, 1940, 180), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2460, 812, 800), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -3080, 813, 840), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -3660, 873, 620), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -4060, 1011, 240), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -4620, 1220, -300, /*behParam*/ 2), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ -4620, 1220, -300), - MACRO_OBJECT(/*preset*/ macro_box_1up, /*yaw*/ 0, /*pos*/ -4860, 1380, -300), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -150, -1200, 3660), - MACRO_OBJECT(/*preset*/ macro_box_three_coins, /*yaw*/ 0, /*pos*/ -5120, 1460, -2140), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 4380, 2120, 0), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 5420, 3000, 0), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -2357, 1200, -2454), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -2357, 1300, -2454), - MACRO_OBJECT(/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ -2560, -1433, 3280), - MACRO_OBJECT(/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ -2060, -1433, 3540), - MACRO_OBJECT(/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ -2720, -1433, 3860), - MACRO_OBJECT(/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ -1680, 1024, 580), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -3100, -2900, 4520), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -4740, 1050, -2130), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -3120, 1160, -2570), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -4613, 1220, -427), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -1000, 1933, 466), - MACRO_OBJECT(/*preset*/ macro_1up_2, /*yaw*/ 0, /*pos*/ 33, 1900, 333), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -6475, 125, 890), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -7810, -3100, 4900), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1500, 1066, -166), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 5940, 2765, -280, /*behParam*/ DIALOG_066), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -2357, 1400, -2454), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -170, 1070, 500), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 1450, 1400, 500), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 610, 1045, -167), - MACRO_OBJECT(/*preset*/ macro_1up_2, /*yaw*/ 0, /*pos*/ -485, 1054, -167), - MACRO_OBJECT(/*preset*/ macro_1up_3, /*yaw*/ 0, /*pos*/ 1100, 2080, 363), - MACRO_OBJECT(/*preset*/ macro_floor_switch_hidden_objects, /*yaw*/ 0, /*pos*/ -3100, -2946, 3530), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ -7810, -3360, 4500), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ -7810, -3360, 4700), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ -7810, -3360, 4900), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ -3100, -3145, 4518), - MACRO_OBJECT(/*preset*/ macro_box_1up_running_away, /*yaw*/ 0, /*pos*/ -2420, -1140, 3700), + MACRO_OBJECT (/*preset*/ macro_box_metal_cap, /*yaw*/ 0, /*pos*/ -6420, -2900, 3880), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal_flying, /*yaw*/ 0, /*pos*/ -1660, -3000, 3900), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -2400, -800, 1900), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -5300, 20, 1000, /*bhvParam*/ AMP_BP_ROT_RADIUS_200), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -7140, 500, 380, /*bhvParam*/ AMP_BP_ROT_RADIUS_300), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -7120, 1050, -2080, /*bhvParam*/ AMP_BP_ROT_RADIUS_300), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -6480, 240, 1000, /*bhvParam*/ AMP_BP_ROT_RADIUS_200), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal_flying, /*yaw*/ 0, /*pos*/ -2060, 1200, -940), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -170, 1070, 300), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -170, 1070, 700), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 1450, 1400, 300), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 1450, 1400, 700), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 1660, -1980, 3660), + MACRO_OBJECT (/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ 3180, 1020, 240), + MACRO_OBJECT (/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ 2860, 1020, 580), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 4640, 2360, 0), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 4900, 2600, 0), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 5180, 2820, 0), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 2760, 1940, 500), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 2760, 1940, 180), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2460, 812, 800), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -3080, 813, 840), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -3660, 873, 620), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -4060, 1011, 240), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -4620, 1220, -300, /*bhvParam*/ AMP_BP_ROT_RADIUS_400), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ -4620, 1220, -300), + MACRO_OBJECT (/*preset*/ macro_box_1up, /*yaw*/ 0, /*pos*/ -4860, 1380, -300), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -150, -1200, 3660), + MACRO_OBJECT (/*preset*/ macro_box_three_coins, /*yaw*/ 0, /*pos*/ -5120, 1460, -2140), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 4380, 2120, 0), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 5420, 3000, 0), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -2357, 1200, -2454), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -2357, 1300, -2454), + MACRO_OBJECT (/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ -2560, -1433, 3280), + MACRO_OBJECT (/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ -2060, -1433, 3540), + MACRO_OBJECT (/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ -2720, -1433, 3860), + MACRO_OBJECT (/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ -1680, 1024, 580), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -3100, -2900, 4520), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -4740, 1050, -2130), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -3120, 1160, -2570), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -4613, 1220, -427), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -1000, 1933, 466), + MACRO_OBJECT (/*preset*/ macro_1up_beat_bitdw_bowser, /*yaw*/ 0, /*pos*/ 33, 1900, 333), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -6475, 125, 890), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -7810, -3100, 4900), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1500, 1066, -166), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 5940, 2765, -280, /*bhvParam*/ DIALOG_066), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -2357, 1400, -2454), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -170, 1070, 500), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 1450, 1400, 500), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 610, 1045, -167), + MACRO_OBJECT (/*preset*/ macro_1up_beat_bitdw_bowser, /*yaw*/ 0, /*pos*/ -485, 1054, -167), + MACRO_OBJECT (/*preset*/ macro_1up_beat_bitfs_bowser, /*yaw*/ 0, /*pos*/ 1100, 2080, 363), + MACRO_OBJECT (/*preset*/ macro_floor_switch_hidden_objects, /*yaw*/ 0, /*pos*/ -3100, -2946, 3530), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ -7810, -3360, 4500), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ -7810, -3360, 4700), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ -7810, -3360, 4900), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ -3100, -3145, 4518), + MACRO_OBJECT (/*preset*/ macro_box_1up_running_away, /*yaw*/ 0, /*pos*/ -2420, -1140, 3700), MACRO_OBJECT_END(), }; diff --git a/levels/bitdw/areas/1/narrow_path_platform/geo.inc.c b/levels/bitdw/areas/1/narrow_path_platform/geo.inc.c index 0855e361..205ce46b 100644 --- a/levels/bitdw/areas/1/narrow_path_platform/geo.inc.c +++ b/levels/bitdw/areas/1/narrow_path_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000510 const GeoLayout geo_bitdw_000510[] = { - GEO_CULLING_RADIUS(1400), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_0700AD10), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1400), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_0700AD10), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitdw/areas/1/octogonal_platform/geo.inc.c b/levels/bitdw/areas/1/octogonal_platform/geo.inc.c index 2f05fa7d..835854c3 100644 --- a/levels/bitdw/areas/1/octogonal_platform/geo.inc.c +++ b/levels/bitdw/areas/1/octogonal_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000450 const GeoLayout geo_bitdw_000450[] = { - GEO_CULLING_RADIUS(1300), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_07005078), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1300), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_07005078), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitdw/areas/1/platform_with_hill/geo.inc.c b/levels/bitdw/areas/1/platform_with_hill/geo.inc.c index bd5a2d8a..5609bf22 100644 --- a/levels/bitdw/areas/1/platform_with_hill/geo.inc.c +++ b/levels/bitdw/areas/1/platform_with_hill/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000468 const GeoLayout geo_bitdw_000468[] = { - GEO_CULLING_RADIUS(2900), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_07005BC0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2900), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_07005BC0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitdw/areas/1/platforms_and_tilting/geo.inc.c b/levels/bitdw/areas/1/platforms_and_tilting/geo.inc.c index ec785c46..1ceb6c50 100644 --- a/levels/bitdw/areas/1/platforms_and_tilting/geo.inc.c +++ b/levels/bitdw/areas/1/platforms_and_tilting/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000498 const GeoLayout geo_bitdw_000498[] = { - GEO_CULLING_RADIUS(2400), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_07007AA8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2400), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_07007AA8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitdw/areas/1/platforms_and_tilting_2/geo.inc.c b/levels/bitdw/areas/1/platforms_and_tilting_2/geo.inc.c index e9244276..f6ec2904 100644 --- a/levels/bitdw/areas/1/platforms_and_tilting_2/geo.inc.c +++ b/levels/bitdw/areas/1/platforms_and_tilting_2/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0004B0 const GeoLayout geo_bitdw_0004B0[] = { - GEO_CULLING_RADIUS(2400), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_07008FF0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2400), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_07008FF0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitdw/areas/1/quartz_crystal/geo.inc.c b/levels/bitdw/areas/1/quartz_crystal/geo.inc.c index a93affbd..73d7321b 100644 --- a/levels/bitdw/areas/1/quartz_crystal/geo.inc.c +++ b/levels/bitdw/areas/1/quartz_crystal/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0004C8 const GeoLayout geo_bitdw_0004C8[] = { - GEO_CULLING_RADIUS(300), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bitdw_seg7_dl_070093B0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(300), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bitdw_seg7_dl_070093B0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitdw/areas/1/quartzy_path_1/geo.inc.c b/levels/bitdw/areas/1/quartzy_path_1/geo.inc.c index c4d02183..3745c00c 100644 --- a/levels/bitdw/areas/1/quartzy_path_1/geo.inc.c +++ b/levels/bitdw/areas/1/quartzy_path_1/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000408 const GeoLayout geo_bitdw_000408[] = { - GEO_CULLING_RADIUS(4000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_07003BF0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(4000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_07003BF0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitdw/areas/1/quartzy_path_2/geo.inc.c b/levels/bitdw/areas/1/quartzy_path_2/geo.inc.c index 8b1b15d6..378af27e 100644 --- a/levels/bitdw/areas/1/quartzy_path_2/geo.inc.c +++ b/levels/bitdw/areas/1/quartzy_path_2/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000420 const GeoLayout geo_bitdw_000420[] = { - GEO_CULLING_RADIUS(3500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_07004318), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(3500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_07004318), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitdw/areas/1/quartzy_path_fences/geo.inc.c b/levels/bitdw/areas/1/quartzy_path_fences/geo.inc.c index cd97916f..478ced7e 100644 --- a/levels/bitdw/areas/1/quartzy_path_fences/geo.inc.c +++ b/levels/bitdw/areas/1/quartzy_path_fences/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000438 const GeoLayout geo_bitdw_000438[] = { - GEO_CULLING_RADIUS(2500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bitdw_seg7_dl_070045C0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bitdw_seg7_dl_070045C0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitdw/areas/1/staircase_slope_and_platform/geo.inc.c b/levels/bitdw/areas/1/staircase_slope_and_platform/geo.inc.c index f7315cce..7e9c73fc 100644 --- a/levels/bitdw/areas/1/staircase_slope_and_platform/geo.inc.c +++ b/levels/bitdw/areas/1/staircase_slope_and_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0004E0 const GeoLayout geo_bitdw_0004E0[] = { - GEO_CULLING_RADIUS(2400), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_0700A368), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2400), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_0700A368), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitdw/areas/1/starting_platform/geo.inc.c b/levels/bitdw/areas/1/starting_platform/geo.inc.c index b5f98fb5..c548184e 100644 --- a/levels/bitdw/areas/1/starting_platform/geo.inc.c +++ b/levels/bitdw/areas/1/starting_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0003C0 const GeoLayout geo_bitdw_0003C0[] = { - GEO_CULLING_RADIUS(2000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_070028A0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_070028A0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitdw/areas/1/track_for_pyramid_platforms/geo.inc.c b/levels/bitdw/areas/1/track_for_pyramid_platforms/geo.inc.c index 80f64d7e..cb7cd943 100644 --- a/levels/bitdw/areas/1/track_for_pyramid_platforms/geo.inc.c +++ b/levels/bitdw/areas/1/track_for_pyramid_platforms/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0004F8 const GeoLayout geo_bitdw_0004F8[] = { - GEO_CULLING_RADIUS(1100), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bitdw_seg7_dl_0700A6A8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1100), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bitdw_seg7_dl_0700A6A8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitdw/areas/1/wooden_bridge_and_fences/geo.inc.c b/levels/bitdw/areas/1/wooden_bridge_and_fences/geo.inc.c index d38fb3e3..6939eca8 100644 --- a/levels/bitdw/areas/1/wooden_bridge_and_fences/geo.inc.c +++ b/levels/bitdw/areas/1/wooden_bridge_and_fences/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0003F0 const GeoLayout geo_bitdw_0003F0[] = { - GEO_CULLING_RADIUS(2000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bitdw_seg7_dl_07003608), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bitdw_seg7_dl_07003608), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitdw/areas/1/wooden_platform/geo.inc.c b/levels/bitdw/areas/1/wooden_platform/geo.inc.c index d71272a8..1faa2b45 100644 --- a/levels/bitdw/areas/1/wooden_platform/geo.inc.c +++ b/levels/bitdw/areas/1/wooden_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000480 const GeoLayout geo_bitdw_000480[] = { - GEO_CULLING_RADIUS(1500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_070065F0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_070065F0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitdw/collapsing_stairs_1/geo.inc.c b/levels/bitdw/collapsing_stairs_1/geo.inc.c index 95e3b09e..c13e3f55 100644 --- a/levels/bitdw/collapsing_stairs_1/geo.inc.c +++ b/levels/bitdw/collapsing_stairs_1/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0005A0 const GeoLayout geo_bitdw_0005A0[] = { - GEO_CULLING_RADIUS(2000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_0700C0E0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_0700C0E0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitdw/collapsing_stairs_2/geo.inc.c b/levels/bitdw/collapsing_stairs_2/geo.inc.c index 264fb6ac..d977bcfc 100644 --- a/levels/bitdw/collapsing_stairs_2/geo.inc.c +++ b/levels/bitdw/collapsing_stairs_2/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0005B8 const GeoLayout geo_bitdw_0005B8[] = { - GEO_CULLING_RADIUS(2000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_0700C670), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_0700C670), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitdw/collapsing_stairs_3/geo.inc.c b/levels/bitdw/collapsing_stairs_3/geo.inc.c index ea51337d..7ac9acb7 100644 --- a/levels/bitdw/collapsing_stairs_3/geo.inc.c +++ b/levels/bitdw/collapsing_stairs_3/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0005D0 const GeoLayout geo_bitdw_0005D0[] = { - GEO_CULLING_RADIUS(2000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_0700CC00), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_0700CC00), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitdw/collapsing_stairs_4/geo.inc.c b/levels/bitdw/collapsing_stairs_4/geo.inc.c index fc1468ae..05325002 100644 --- a/levels/bitdw/collapsing_stairs_4/geo.inc.c +++ b/levels/bitdw/collapsing_stairs_4/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0005E8 const GeoLayout geo_bitdw_0005E8[] = { - GEO_CULLING_RADIUS(2000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_0700D190), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_0700D190), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitdw/collapsing_stairs_5/geo.inc.c b/levels/bitdw/collapsing_stairs_5/geo.inc.c index b25afb38..d01f7284 100644 --- a/levels/bitdw/collapsing_stairs_5/geo.inc.c +++ b/levels/bitdw/collapsing_stairs_5/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000600 const GeoLayout geo_bitdw_000600[] = { - GEO_CULLING_RADIUS(2000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_0700D3E8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_0700D3E8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitdw/ferris_platform/geo.inc.c b/levels/bitdw/ferris_platform/geo.inc.c index dea71c17..b019850c 100644 --- a/levels/bitdw/ferris_platform/geo.inc.c +++ b/levels/bitdw/ferris_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000588 const GeoLayout geo_bitdw_000588[] = { - GEO_CULLING_RADIUS(600), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_0700BB58), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(600), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_0700BB58), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitdw/ferris_wheel_axle/geo.inc.c b/levels/bitdw/ferris_wheel_axle/geo.inc.c index c7317a0a..f8ebdba5 100644 --- a/levels/bitdw/ferris_wheel_axle/geo.inc.c +++ b/levels/bitdw/ferris_wheel_axle/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000570 const GeoLayout geo_bitdw_000570[] = { - GEO_CULLING_RADIUS(600), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_0700B8D8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(600), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_0700B8D8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitdw/leveldata.c b/levels/bitdw/leveldata.c index de889e20..97f9b807 100644 --- a/levels/bitdw/leveldata.c +++ b/levels/bitdw/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "dialog_ids.h" diff --git a/levels/bitdw/script.c b/levels/bitdw/script.c index 5e14a7ee..3a09ec9f 100644 --- a/levels/bitdw/script.c +++ b/levels/bitdw/script.c @@ -17,45 +17,45 @@ #include "levels/bitdw/header.h" static const LevelScript script_func_local_1[] = { - OBJECT(/*model*/ MODEL_BITDW_SQUARE_PLATFORM, /*pos*/ -1966, -3154, 3586, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSquarishPathMoving), - OBJECT(/*model*/ MODEL_BITDW_SQUARE_PLATFORM, /*pos*/ -1352, -3154, 4200, /*angle*/ 0, 0, 0, /*behParam*/ 0x00020000, /*beh*/ bhvSquarishPathMoving), - OBJECT(/*model*/ MODEL_BITDW_SQUARE_PLATFORM, /*pos*/ -2963, 1017, -2464, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSquarishPathMoving), - OBJECT(/*model*/ MODEL_BITDW_SQUARE_PLATFORM, /*pos*/ -2349, 1017, -1849, /*angle*/ 0, 0, 0, /*behParam*/ 0x00020000, /*beh*/ bhvSquarishPathMoving), - OBJECT(/*model*/ MODEL_BITDW_SQUARE_PLATFORM, /*pos*/ -2349, 1017, -1235, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSquarishPathMoving), - OBJECT(/*model*/ MODEL_BITDW_SQUARE_PLATFORM, /*pos*/ -1735, 1017, -621, /*angle*/ 0, 0, 0, /*behParam*/ 0x00020000, /*beh*/ bhvSquarishPathMoving), - OBJECT(/*model*/ MODEL_BITDW_SEESAW_PLATFORM, /*pos*/ 1491, 1273, 512, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSeesawPlatform), - OBJECT(/*model*/ MODEL_BITDW_SEESAW_PLATFORM, /*pos*/ -147, 894, 512, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSeesawPlatform), - OBJECT(/*model*/ MODEL_BITDW_SLIDING_PLATFORM, /*pos*/ -5728, 819, -2151, /*angle*/ 0, 0, 0, /*behParam*/ 0x03CE0000, /*beh*/ bhvSlidingPlatform2), - OBJECT(/*model*/ MODEL_BITDW_FERRIS_WHEEL_AXLE, /*pos*/ -204, -1924, 3381, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvFerrisWheelAxle), - OBJECT(/*model*/ MODEL_BITDW_STAIRCASE, /*pos*/ 5279, 1740, -6, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvAnimatesOnFloorSwitchPress), - OBJECT(/*model*/ MODEL_PURPLE_SWITCH, /*pos*/ 3922, 1740, -7, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFloorSwitchAnimatesObject), + OBJECT(/*model*/ MODEL_BITDW_SQUARE_PLATFORM, /*pos*/ -1966, -3154, 3586, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x00), /*bhv*/ bhvSquarishPathMoving), + OBJECT(/*model*/ MODEL_BITDW_SQUARE_PLATFORM, /*pos*/ -1352, -3154, 4200, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x02), /*bhv*/ bhvSquarishPathMoving), + OBJECT(/*model*/ MODEL_BITDW_SQUARE_PLATFORM, /*pos*/ -2963, 1017, -2464, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x00), /*bhv*/ bhvSquarishPathMoving), + OBJECT(/*model*/ MODEL_BITDW_SQUARE_PLATFORM, /*pos*/ -2349, 1017, -1849, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x02), /*bhv*/ bhvSquarishPathMoving), + OBJECT(/*model*/ MODEL_BITDW_SQUARE_PLATFORM, /*pos*/ -2349, 1017, -1235, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x00), /*bhv*/ bhvSquarishPathMoving), + OBJECT(/*model*/ MODEL_BITDW_SQUARE_PLATFORM, /*pos*/ -1735, 1017, -621, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x02), /*bhv*/ bhvSquarishPathMoving), + OBJECT(/*model*/ MODEL_BITDW_SEESAW_PLATFORM, /*pos*/ 1491, 1273, 512, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvSeesawPlatform), + OBJECT(/*model*/ MODEL_BITDW_SEESAW_PLATFORM, /*pos*/ -147, 894, 512, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvSeesawPlatform), + OBJECT(/*model*/ MODEL_BITDW_SLIDING_PLATFORM, /*pos*/ -5728, 819, -2151, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(0x03) | BPARAM2(0xCE), /*bhv*/ bhvSlidingPlatform2), + OBJECT(/*model*/ MODEL_BITDW_FERRIS_WHEEL_AXLE, /*pos*/ -204, -1924, 3381, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x01), /*bhv*/ bhvFerrisWheelAxle), + OBJECT(/*model*/ MODEL_BITDW_STAIRCASE, /*pos*/ 5279, 1740, -6, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x01), /*bhv*/ bhvAnimatesOnFloorSwitchPress), + OBJECT(/*model*/ MODEL_PURPLE_SWITCH, /*pos*/ 3922, 1740, -7, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFloorSwitchAnimatesObject), RETURN(), }; static const LevelScript script_func_local_2[] = { - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3092, -2795, 2842, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlamethrower), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2463, -2386, 2844, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlamethrower), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3092, -2795, 2842, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlamethrower), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2463, -2386, 2844, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlamethrower), RETURN(), }; static const LevelScript script_func_local_3[] = { - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 7180, 3000, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBowserCourseRedCoinStar), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 7180, 3000, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_1), /*bhv*/ bhvBowserCourseRedCoinStar), RETURN(), }; const LevelScript level_bitdw_entry[] = { INIT_LEVEL(), - LOAD_MIO0( /*seg*/ 0x07, _bitdw_segment_7SegmentRomStart, _bitdw_segment_7SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0A, _bidw_skybox_mio0SegmentRomStart, _bidw_skybox_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _bitdw_segment_7SegmentRomStart, _bitdw_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0A, _bidw_skybox_mio0SegmentRomStart, _bidw_skybox_mio0SegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _sky_mio0SegmentRomStart, _sky_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x05, _group11_mio0SegmentRomStart, _group11_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0C, _group11_geoSegmentRomStart, _group11_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x06, _group17_mio0SegmentRomStart, _group17_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0D, _group17_geoSegmentRomStart, _group17_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x05, _group11_mio0SegmentRomStart, _group11_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0C, _group11_geoSegmentRomStart, _group11_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x06, _group17_mio0SegmentRomStart, _group17_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0D, _group17_geoSegmentRomStart, _group17_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_12), JUMP_LINK(script_func_global_18), JUMP_LINK(script_func_global_1), @@ -87,13 +87,13 @@ const LevelScript level_bitdw_entry[] = { LOAD_MODEL_FROM_GEO(MODEL_BITDW_STAIRCASE, geo_bitdw_000600), AREA(/*index*/ 1, geo_bitdw_000618), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -7443, -2153, 3886, /*angle*/ 0, 90, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvAirborneWarp), - OBJECT(/*model*/ MODEL_BITDW_WARP_PIPE, /*pos*/ 6816, 2860, -7, /*angle*/ 0, 0, 0, /*behParam*/ 0x000B0000, /*beh*/ bhvWarpPipe), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5910, 3500, -7, /*angle*/ 0, 90, 0, /*behParam*/ 0x000C0000, /*beh*/ bhvDeathWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_BITDW, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0B, /*destLevel*/ LEVEL_BOWSER_1, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0C, /*destLevel*/ LEVEL_BITDW, /*destArea*/ 0x01, /*destNode*/ 0x0C, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x25, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -7443, -2153, 3886, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvAirborneWarp), + OBJECT(/*model*/ MODEL_BITDW_WARP_PIPE, /*pos*/ 6816, 2860, -7, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0B), /*bhv*/ bhvWarpPipe), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5910, 3500, -7, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0C), /*bhv*/ bhvDeathWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_BITDW, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0B, /*destLevel*/ LEVEL_BOWSER_1, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0C, /*destLevel*/ LEVEL_BITDW, /*destArea*/ 1, /*destNode*/ WARP_NODE_0C, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_25, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_1), JUMP_LINK(script_func_local_2), JUMP_LINK(script_func_local_3), diff --git a/levels/bitdw/seesaw_platform/geo.inc.c b/levels/bitdw/seesaw_platform/geo.inc.c index 54673de6..68fdd24d 100644 --- a/levels/bitdw/seesaw_platform/geo.inc.c +++ b/levels/bitdw/seesaw_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000540 const GeoLayout geo_bitdw_000540[] = { - GEO_CULLING_RADIUS(1100), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_0700B220), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1100), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_0700B220), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitdw/sliding_platform/geo.inc.c b/levels/bitdw/sliding_platform/geo.inc.c index a27bbe88..cd64ca34 100644 --- a/levels/bitdw/sliding_platform/geo.inc.c +++ b/levels/bitdw/sliding_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000528 const GeoLayout geo_bitdw_000528[] = { - GEO_CULLING_RADIUS(1500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_0700AFA0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_0700AFA0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitdw/square_platform/geo.inc.c b/levels/bitdw/square_platform/geo.inc.c index 25813740..1cf15e20 100644 --- a/levels/bitdw/square_platform/geo.inc.c +++ b/levels/bitdw/square_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000558 const GeoLayout geo_bitdw_000558[] = { - GEO_CULLING_RADIUS(600), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_0700B480), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(600), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitdw_seg7_dl_0700B480), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/areas/1/10/geo.inc.c b/levels/bitfs/areas/1/10/geo.inc.c index d028d579..71353dda 100644 --- a/levels/bitfs/areas/1/10/geo.inc.c +++ b/levels/bitfs/areas/1/10/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000570 const GeoLayout bitfs_geo_000570[] = { - GEO_CULLING_RADIUS(500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_07007958), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_07007958), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/areas/1/11/geo.inc.c b/levels/bitfs/areas/1/11/geo.inc.c index a834d09f..d800f308 100644 --- a/levels/bitfs/areas/1/11/geo.inc.c +++ b/levels/bitfs/areas/1/11/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000588 const GeoLayout bitfs_geo_000588[] = { - GEO_CULLING_RADIUS(2200), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_07008F48), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2200), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_07008F48), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/areas/1/12/geo.inc.c b/levels/bitfs/areas/1/12/geo.inc.c index cc386401..5fe31894 100644 --- a/levels/bitfs/areas/1/12/geo.inc.c +++ b/levels/bitfs/areas/1/12/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0005A0 const GeoLayout bitfs_geo_0005A0[] = { - GEO_CULLING_RADIUS(2100), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bitfs_seg7_dl_070091E0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2100), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bitfs_seg7_dl_070091E0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/areas/1/13/geo.inc.c b/levels/bitfs/areas/1/13/geo.inc.c index e017bb37..fa371f89 100644 --- a/levels/bitfs/areas/1/13/geo.inc.c +++ b/levels/bitfs/areas/1/13/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0005B8 const GeoLayout bitfs_geo_0005B8[] = { - GEO_CULLING_RADIUS(1300), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_070095E0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1300), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_070095E0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/areas/1/14/geo.inc.c b/levels/bitfs/areas/1/14/geo.inc.c index 74a102d7..e4a44251 100644 --- a/levels/bitfs/areas/1/14/geo.inc.c +++ b/levels/bitfs/areas/1/14/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0005D0 const GeoLayout bitfs_geo_0005D0[] = { - GEO_CULLING_RADIUS(1900), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_0700AA00), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1900), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_0700AA00), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/areas/1/15/geo.inc.c b/levels/bitfs/areas/1/15/geo.inc.c index 2e2cb309..9c8facab 100644 --- a/levels/bitfs/areas/1/15/geo.inc.c +++ b/levels/bitfs/areas/1/15/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0005E8 const GeoLayout bitfs_geo_0005E8[] = { - GEO_CULLING_RADIUS(900), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bitfs_seg7_dl_0700AB90), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(900), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bitfs_seg7_dl_0700AB90), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/areas/1/16/geo.inc.c b/levels/bitfs/areas/1/16/geo.inc.c index 4e9a32be..72a5d45b 100644 --- a/levels/bitfs/areas/1/16/geo.inc.c +++ b/levels/bitfs/areas/1/16/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000600 const GeoLayout bitfs_geo_000600[] = { - GEO_CULLING_RADIUS(2800), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_0700BED8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2800), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_0700BED8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/areas/1/17/geo.inc.c b/levels/bitfs/areas/1/17/geo.inc.c index 13756b4d..ee93b2b2 100644 --- a/levels/bitfs/areas/1/17/geo.inc.c +++ b/levels/bitfs/areas/1/17/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000618 const GeoLayout bitfs_geo_000618[] = { - GEO_CULLING_RADIUS(2500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bitfs_seg7_dl_0700C3C0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bitfs_seg7_dl_0700C3C0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/areas/1/18/geo.inc.c b/levels/bitfs/areas/1/18/geo.inc.c index 8cfac073..ed2aed3e 100644 --- a/levels/bitfs/areas/1/18/geo.inc.c +++ b/levels/bitfs/areas/1/18/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000630 const GeoLayout bitfs_geo_000630[] = { - GEO_CULLING_RADIUS(1600), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_0700EC78), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1600), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_0700EC78), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/areas/1/19/geo.inc.c b/levels/bitfs/areas/1/19/geo.inc.c index e4a0c273..a5650def 100644 --- a/levels/bitfs/areas/1/19/geo.inc.c +++ b/levels/bitfs/areas/1/19/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000648 const GeoLayout bitfs_geo_000648[] = { - GEO_CULLING_RADIUS(600), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bitfs_seg7_dl_0700ED90), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(600), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bitfs_seg7_dl_0700ED90), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/areas/1/2/geo.inc.c b/levels/bitfs/areas/1/2/geo.inc.c index 3f291498..39298568 100644 --- a/levels/bitfs/areas/1/2/geo.inc.c +++ b/levels/bitfs/areas/1/2/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0004B0 const GeoLayout bitfs_geo_0004B0[] = { - GEO_CULLING_RADIUS(2700), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_07002A78), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2700), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_07002A78), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/areas/1/20/geo.inc.c b/levels/bitfs/areas/1/20/geo.inc.c index 126c08ea..4f9feecf 100644 --- a/levels/bitfs/areas/1/20/geo.inc.c +++ b/levels/bitfs/areas/1/20/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000660 const GeoLayout bitfs_geo_000660[] = { - GEO_CULLING_RADIUS(4100), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_0700F1C8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(4100), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_0700F1C8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/areas/1/3/geo.inc.c b/levels/bitfs/areas/1/3/geo.inc.c index 09ac4105..081c5e7f 100644 --- a/levels/bitfs/areas/1/3/geo.inc.c +++ b/levels/bitfs/areas/1/3/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0004C8 const GeoLayout bitfs_geo_0004C8[] = { - GEO_CULLING_RADIUS(2100), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_07003670), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2100), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_07003670), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/areas/1/4/geo.inc.c b/levels/bitfs/areas/1/4/geo.inc.c index 5b32eed3..d7f5c09b 100644 --- a/levels/bitfs/areas/1/4/geo.inc.c +++ b/levels/bitfs/areas/1/4/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0004E0 const GeoLayout bitfs_geo_0004E0[] = { - GEO_CULLING_RADIUS(2500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_07003C60), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_07003C60), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/areas/1/5/geo.inc.c b/levels/bitfs/areas/1/5/geo.inc.c index d30d19e5..5d54b044 100644 --- a/levels/bitfs/areas/1/5/geo.inc.c +++ b/levels/bitfs/areas/1/5/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0004F8 const GeoLayout bitfs_geo_0004F8[] = { - GEO_CULLING_RADIUS(3200), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_070040B0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(3200), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_070040B0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/areas/1/6/geo.inc.c b/levels/bitfs/areas/1/6/geo.inc.c index 699b1fea..470d236b 100644 --- a/levels/bitfs/areas/1/6/geo.inc.c +++ b/levels/bitfs/areas/1/6/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000510 const GeoLayout bitfs_geo_000510[] = { - GEO_CULLING_RADIUS(2600), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bitfs_seg7_dl_07004630), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2600), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bitfs_seg7_dl_07004630), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/areas/1/7/geo.inc.c b/levels/bitfs/areas/1/7/geo.inc.c index f2109770..0532d4dc 100644 --- a/levels/bitfs/areas/1/7/geo.inc.c +++ b/levels/bitfs/areas/1/7/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000528 const GeoLayout bitfs_geo_000528[] = { - GEO_CULLING_RADIUS(3500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_07006B90), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(3500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_07006B90), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/areas/1/8/geo.inc.c b/levels/bitfs/areas/1/8/geo.inc.c index c46b9625..33734eaf 100644 --- a/levels/bitfs/areas/1/8/geo.inc.c +++ b/levels/bitfs/areas/1/8/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000540 const GeoLayout bitfs_geo_000540[] = { - GEO_CULLING_RADIUS(1900), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bitfs_seg7_dl_07007070), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1900), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bitfs_seg7_dl_07007070), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/areas/1/9/geo.inc.c b/levels/bitfs/areas/1/9/geo.inc.c index a21c634a..fd97ad33 100644 --- a/levels/bitfs/areas/1/9/geo.inc.c +++ b/levels/bitfs/areas/1/9/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000558 const GeoLayout bitfs_geo_000558[] = { - GEO_CULLING_RADIUS(4600), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_07007720), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(4600), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_07007720), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/areas/1/geo.inc.c b/levels/bitfs/areas/1/geo.inc.c index 847c6ca7..6dce74b0 100644 --- a/levels/bitfs/areas/1/geo.inc.c +++ b/levels/bitfs/areas/1/geo.inc.c @@ -1,30 +1,30 @@ // 0x0E0007A0 const GeoLayout bitfs_geo_0007A0[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND(BACKGROUND_FLAMING_SKY, geo_skybox_main), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(14, 0, 2000, 6000, 0, -4500, -8000, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bitfs_seg7_dl_07002118), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x1901, geo_movtex_draw_nocolor), - GEO_ASM(0x1902, geo_movtex_draw_nocolor), - GEO_ASM(0x1903, geo_movtex_draw_nocolor), - GEO_RENDER_OBJ(), - GEO_ASM( 12, geo_envfx_main), + GEO_BACKGROUND(BACKGROUND_FLAMING_SKY, geo_skybox_main), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(14, 0, 2000, 6000, 0, -4500, -8000, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bitfs_seg7_dl_07002118), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x1901, geo_movtex_draw_nocolor), + GEO_ASM(0x1902, geo_movtex_draw_nocolor), + GEO_ASM(0x1903, geo_movtex_draw_nocolor), + GEO_RENDER_OBJ(), + GEO_ASM( 12, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/areas/1/macro.inc.c b/levels/bitfs/areas/1/macro.inc.c index 3e7a7bb2..fee87864 100644 --- a/levels/bitfs/areas/1/macro.inc.c +++ b/levels/bitfs/areas/1/macro.inc.c @@ -1,44 +1,44 @@ // 0x07014F90 - 0x07015122 const MacroObject bitfs_seg7_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -1990, -2780, -590), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -2860, -2780, -580), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal_flying, /*yaw*/ 0, /*pos*/ 1130, -3000, 400), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -4320, -2640, -500), - MACRO_OBJECT(/*preset*/ macro_bully, /*yaw*/ 0, /*pos*/ 2340, -2764, 580), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ 6600, -2770, 280, /*behParam*/ 0), - MACRO_OBJECT(/*preset*/ macro_recovery_heart, /*yaw*/ 0, /*pos*/ 3660, -2700, 280), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_in_pole, /*yaw*/ 0, /*pos*/ 3880, -1140, 260), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal_flying, /*yaw*/ 0, /*pos*/ -1900, 652, 320), - MACRO_OBJECT(/*preset*/ macro_bully, /*yaw*/ 0, /*pos*/ -1720, 1320, -340), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -640, 800, 180), - MACRO_OBJECT(/*preset*/ macro_bully, /*yaw*/ 0, /*pos*/ -5340, 410, 20), - MACRO_OBJECT(/*preset*/ macro_bully, /*yaw*/ 0, /*pos*/ -5200, 410, 700), - MACRO_OBJECT(/*preset*/ macro_box_1up, /*yaw*/ 0, /*pos*/ -7400, 1500, 0), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -6150, 1480, 500), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -6150, 2600, 500), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -6150, 3080, 500), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ -6460, 2760, 320, /*behParam*/ 3), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ -6360, 3760, -840), - MACRO_OBJECT(/*preset*/ macro_recovery_heart, /*yaw*/ 0, /*pos*/ -20, 3850, 160), - MACRO_OBJECT(/*preset*/ macro_box_1up, /*yaw*/ 0, /*pos*/ 2440, 5520, 140), - MACRO_OBJECT(/*preset*/ macro_1up_3, /*yaw*/ 0, /*pos*/ 1198, 5478, 103), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal_flying, /*yaw*/ 0, /*pos*/ -2610, 3600, 0), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ 1231, -2168, -1747), - MACRO_OBJECT(/*preset*/ macro_coin_line_vertical, /*yaw*/ 0, /*pos*/ -5705, 800, 0), - MACRO_OBJECT(/*preset*/ macro_goomba_triplet_spawner, /*yaw*/ 0, /*pos*/ 3660, -2764, 300), - MACRO_OBJECT(/*preset*/ macro_1up_3, /*yaw*/ 0, /*pos*/ -174, -2840, -138), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2888, -1375, 310), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1230, -1900, -1747), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 5800, -2000, 0), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -1846, 1600, -476), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -4210, 2615, 280), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -5361, 3686, 315), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -1390, 3575, -420), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 3065, 4610, 92), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4330, -790, -50), - MACRO_OBJECT(/*preset*/ macro_box_three_coins, /*yaw*/ 0, /*pos*/ 7220, -1800, 260), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -7280, 3100, -925), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -2325, 3625, 0, /*behParam*/ 2), - MACRO_OBJECT(/*preset*/ macro_box_ten_coins, /*yaw*/ 0, /*pos*/ -5340, 4000, 100), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -1990, -2780, -590), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -2860, -2780, -580), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal_flying, /*yaw*/ 0, /*pos*/ 1130, -3000, 400), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -4320, -2640, -500), + MACRO_OBJECT (/*preset*/ macro_small_bully, /*yaw*/ 0, /*pos*/ 2340, -2764, 580), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ 6600, -2770, 280, /*bhvParam*/ AMP_BP_ROT_RADIUS_200), + MACRO_OBJECT (/*preset*/ macro_recovery_heart, /*yaw*/ 0, /*pos*/ 3660, -2700, 280), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_in_pole, /*yaw*/ 0, /*pos*/ 3880, -1140, 260), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal_flying, /*yaw*/ 0, /*pos*/ -1900, 652, 320), + MACRO_OBJECT (/*preset*/ macro_small_bully, /*yaw*/ 0, /*pos*/ -1720, 1320, -340), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -640, 800, 180), + MACRO_OBJECT (/*preset*/ macro_small_bully, /*yaw*/ 0, /*pos*/ -5340, 410, 20), + MACRO_OBJECT (/*preset*/ macro_small_bully, /*yaw*/ 0, /*pos*/ -5200, 410, 700), + MACRO_OBJECT (/*preset*/ macro_box_1up, /*yaw*/ 0, /*pos*/ -7400, 1500, 0), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -6150, 1480, 500), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -6150, 2600, 500), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -6150, 3080, 500), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ -6460, 2760, 320, /*bhvParam*/ 3), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ -6360, 3760, -840), + MACRO_OBJECT (/*preset*/ macro_recovery_heart, /*yaw*/ 0, /*pos*/ -20, 3850, 160), + MACRO_OBJECT (/*preset*/ macro_box_1up, /*yaw*/ 0, /*pos*/ 2440, 5520, 140), + MACRO_OBJECT (/*preset*/ macro_1up_beat_bitfs_bowser, /*yaw*/ 0, /*pos*/ 1198, 5478, 103), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal_flying, /*yaw*/ 0, /*pos*/ -2610, 3600, 0), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ 1231, -2168, -1747), + MACRO_OBJECT (/*preset*/ macro_coin_line_vertical_flying, /*yaw*/ 0, /*pos*/ -5705, 800, 0), + MACRO_OBJECT (/*preset*/ macro_goomba_triplet_spawner, /*yaw*/ 0, /*pos*/ 3660, -2764, 300), + MACRO_OBJECT (/*preset*/ macro_1up_beat_bitfs_bowser, /*yaw*/ 0, /*pos*/ -174, -2840, -138), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2888, -1375, 310), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1230, -1900, -1747), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 5800, -2000, 0), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -1846, 1600, -476), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -4210, 2615, 280), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -5361, 3686, 315), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -1390, 3575, -420), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 3065, 4610, 92), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4330, -790, -50), + MACRO_OBJECT (/*preset*/ macro_box_three_coins, /*yaw*/ 0, /*pos*/ 7220, -1800, 260), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -7280, 3100, -925), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -2325, 3625, 0, /*bhvParam*/ AMP_BP_ROT_RADIUS_400), + MACRO_OBJECT (/*preset*/ macro_box_ten_coins, /*yaw*/ 0, /*pos*/ -5340, 4000, 100), MACRO_OBJECT_END(), }; diff --git a/levels/bitfs/elevator/geo.inc.c b/levels/bitfs/elevator/geo.inc.c index 2354c8ba..6b376c71 100644 --- a/levels/bitfs/elevator/geo.inc.c +++ b/levels/bitfs/elevator/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000678 const GeoLayout bitfs_geo_000678[] = { - GEO_CULLING_RADIUS(400), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_0700F508), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(400), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_0700F508), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/leveldata.c b/levels/bitfs/leveldata.c index 1d22a4f8..12297047 100644 --- a/levels/bitfs/leveldata.c +++ b/levels/bitfs/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "make_const_nonconst.h" diff --git a/levels/bitfs/moving_square_platform/geo.inc.c b/levels/bitfs/moving_square_platform/geo.inc.c index 5252ad07..c9a5f139 100644 --- a/levels/bitfs/moving_square_platform/geo.inc.c +++ b/levels/bitfs/moving_square_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000728 const GeoLayout bitfs_geo_000728[] = { - GEO_CULLING_RADIUS(650), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_07011318), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(650), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_07011318), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/platform_on_track/geo.inc.c b/levels/bitfs/platform_on_track/geo.inc.c index f4348621..ec83a7a2 100644 --- a/levels/bitfs/platform_on_track/geo.inc.c +++ b/levels/bitfs/platform_on_track/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000758 const GeoLayout bitfs_geo_000758[] = { - GEO_CULLING_RADIUS(600), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bitfs_seg7_dl_07011798), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(600), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bitfs_seg7_dl_07011798), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/script.c b/levels/bitfs/script.c index 56b108dc..585a6e08 100644 --- a/levels/bitfs/script.c +++ b/levels/bitfs/script.c @@ -16,54 +16,54 @@ #include "levels/bitfs/header.h" static const LevelScript script_func_local_1[] = { - OBJECT(/*model*/ MODEL_BITFS_PLATFORM_ON_TRACK, /*pos*/ -5733, -3071, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x07330000, /*beh*/ bhvPlatformOnTrack), - OBJECT(/*model*/ MODEL_BITFS_TILTING_SQUARE_PLATFORM, /*pos*/ -1945, -3225, -715, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBitfsTiltingInvertedPyramid), - OBJECT(/*model*/ MODEL_BITFS_TILTING_SQUARE_PLATFORM, /*pos*/ -2866, -3225, -715, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBitfsTiltingInvertedPyramid), - OBJECT(/*model*/ MODEL_BITFS_SINKING_PLATFORMS, /*pos*/ -1381, 3487, 96, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBitfsSinkingPlatforms), - OBJECT(/*model*/ MODEL_BITFS_SINKING_PLATFORMS, /*pos*/ 1126, -3065, 307, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBitfsSinkingPlatforms), - OBJECT(/*model*/ MODEL_BITFS_SINKING_PLATFORMS, /*pos*/ -3225, 3487, 96, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBitfsSinkingPlatforms), - OBJECT(/*model*/ MODEL_BITFS_SINKING_CAGE_PLATFORM, /*pos*/ 6605, -3071, 266, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBitfsSinkingCagePlatform), - OBJECT(/*model*/ MODEL_BITFS_SINKING_CAGE_PLATFORM, /*pos*/ 1843, 3584, 96, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvBitfsSinkingCagePlatform), - OBJECT(/*model*/ MODEL_BITFS_SINKING_CAGE_PLATFORM, /*pos*/ 614, 3584, 96, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvBitfsSinkingCagePlatform), - OBJECT(/*model*/ MODEL_BITFS_SINKING_CAGE_PLATFORM, /*pos*/ 3072, 3584, 96, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvBitfsSinkingCagePlatform), - OBJECT(/*model*/ MODEL_BITFS_ELEVATOR, /*pos*/ 2867, -1279, 307, /*angle*/ 0, 0, 0, /*behParam*/ 0x029F0000, /*beh*/ bhvActivatedBackAndForthPlatform), - OBJECT(/*model*/ MODEL_BITFS_STRETCHING_PLATFORMS, /*pos*/ -5836, 410, 300, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSquishablePlatform), - OBJECT(/*model*/ MODEL_BITFS_SEESAW_PLATFORM, /*pos*/ 4454, -2226, 266, /*angle*/ 0, 0, 0, /*behParam*/ 0x00040000, /*beh*/ bhvSeesawPlatform), - OBJECT(/*model*/ MODEL_BITFS_SEESAW_PLATFORM, /*pos*/ 5786, -2380, 266, /*angle*/ 0, 0, 0, /*behParam*/ 0x00040000, /*beh*/ bhvSeesawPlatform), - OBJECT(/*model*/ MODEL_BITFS_MOVING_SQUARE_PLATFORM, /*pos*/ -3890, 102, 617, /*angle*/ 0, 90, 0, /*behParam*/ 0x010C0000, /*beh*/ bhvSlidingPlatform2), - OBJECT(/*model*/ MODEL_BITFS_MOVING_SQUARE_PLATFORM, /*pos*/ -3276, 102, 2, /*angle*/ 0, 270, 0, /*behParam*/ 0x010C0000, /*beh*/ bhvSlidingPlatform2), - OBJECT(/*model*/ MODEL_BITFS_SLIDING_PLATFORM, /*pos*/ 2103, 198, 312, /*angle*/ 0, 0, 0, /*behParam*/ 0x019F0000, /*beh*/ bhvSlidingPlatform2), - OBJECT(/*model*/ MODEL_BITFS_TUMBLING_PLATFORM, /*pos*/ 4979, 4250, 96, /*angle*/ 0, 0, 0, /*behParam*/ 0x00030000, /*beh*/ bhvWfTumblingBridge), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3890, -2043, 266, /*angle*/ 0, 0, 0, /*behParam*/ 0x00520000, /*beh*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_BITFS_PLATFORM_ON_TRACK, /*pos*/ -5733, -3071, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(0x07) | BPARAM2(0x33), /*bhv*/ bhvPlatformOnTrack), + OBJECT(/*model*/ MODEL_BITFS_TILTING_SQUARE_PLATFORM, /*pos*/ -1945, -3225, -715, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBitFSTiltingInvertedPyramid), + OBJECT(/*model*/ MODEL_BITFS_TILTING_SQUARE_PLATFORM, /*pos*/ -2866, -3225, -715, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBitFSTiltingInvertedPyramid), + OBJECT(/*model*/ MODEL_BITFS_SINKING_PLATFORMS, /*pos*/ -1381, 3487, 96, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBitFSSinkingPlatforms), + OBJECT(/*model*/ MODEL_BITFS_SINKING_PLATFORMS, /*pos*/ 1126, -3065, 307, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBitFSSinkingPlatforms), + OBJECT(/*model*/ MODEL_BITFS_SINKING_PLATFORMS, /*pos*/ -3225, 3487, 96, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBitFSSinkingPlatforms), + OBJECT(/*model*/ MODEL_BITFS_SINKING_CAGE_PLATFORM, /*pos*/ 6605, -3071, 266, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x00), /*bhv*/ bhvBitFSSinkingCagePlatform), + OBJECT(/*model*/ MODEL_BITFS_SINKING_CAGE_PLATFORM, /*pos*/ 1843, 3584, 96, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x01), /*bhv*/ bhvBitFSSinkingCagePlatform), + OBJECT(/*model*/ MODEL_BITFS_SINKING_CAGE_PLATFORM, /*pos*/ 614, 3584, 96, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x01), /*bhv*/ bhvBitFSSinkingCagePlatform), + OBJECT(/*model*/ MODEL_BITFS_SINKING_CAGE_PLATFORM, /*pos*/ 3072, 3584, 96, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x01), /*bhv*/ bhvBitFSSinkingCagePlatform), + OBJECT(/*model*/ MODEL_BITFS_ELEVATOR, /*pos*/ 2867, -1279, 307, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(ACTIVATED_BF_PLAT_TYPE_BITFS_ELEVATOR) | BPARAM2(159), /*bhv*/ bhvActivatedBackAndForthPlatform), + OBJECT(/*model*/ MODEL_BITFS_STRETCHING_PLATFORMS, /*pos*/ -5836, 410, 300, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvSquishablePlatform), + OBJECT(/*model*/ MODEL_BITFS_SEESAW_PLATFORM, /*pos*/ 4454, -2226, 266, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x04), /*bhv*/ bhvSeesawPlatform), + OBJECT(/*model*/ MODEL_BITFS_SEESAW_PLATFORM, /*pos*/ 5786, -2380, 266, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x04), /*bhv*/ bhvSeesawPlatform), + OBJECT(/*model*/ MODEL_BITFS_MOVING_SQUARE_PLATFORM, /*pos*/ -3890, 102, 617, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM1(0x01) | BPARAM2(0x0C), /*bhv*/ bhvSlidingPlatform2), + OBJECT(/*model*/ MODEL_BITFS_MOVING_SQUARE_PLATFORM, /*pos*/ -3276, 102, 2, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM1(0x01) | BPARAM2(0x0C), /*bhv*/ bhvSlidingPlatform2), + OBJECT(/*model*/ MODEL_BITFS_SLIDING_PLATFORM, /*pos*/ 2103, 198, 312, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(0x01) | BPARAM2(0x9F), /*bhv*/ bhvSlidingPlatform2), + OBJECT(/*model*/ MODEL_BITFS_TUMBLING_PLATFORM, /*pos*/ 4979, 4250, 96, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(TUMBLING_BRIDGE_BP_BITFS), /*bhv*/ bhvTumblingBridge), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3890, -2043, 266, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(82), /*bhv*/ bhvPoleGrabbing), RETURN(), }; static const LevelScript script_func_local_2[] = { - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3226, 3584, -822, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlamethrower), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1382, 3584, -822, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlamethrower), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1229, 307, -412, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlamethrower), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3226, 3584, -822, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlamethrower), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1382, 3584, -822, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlamethrower), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1229, 307, -412, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlamethrower), RETURN(), }; static const LevelScript script_func_local_3[] = { - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1200, 5700, 160, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBowserCourseRedCoinStar), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1200, 5700, 160, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_1), /*bhv*/ bhvBowserCourseRedCoinStar), RETURN(), }; const LevelScript level_bitfs_entry[] = { INIT_LEVEL(), - LOAD_MIO0( /*seg*/ 0x07, _bitfs_segment_7SegmentRomStart, _bitfs_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _bitfs_segment_7SegmentRomStart, _bitfs_segment_7SegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _sky_mio0SegmentRomStart, _sky_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0A, _bitfs_skybox_mio0SegmentRomStart, _bitfs_skybox_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0B, _effect_mio0SegmentRomStart, _effect_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x05, _group2_mio0SegmentRomStart, _group2_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0C, _group2_geoSegmentRomStart, _group2_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x06, _group17_mio0SegmentRomStart, _group17_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0D, _group17_geoSegmentRomStart, _group17_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0A, _bitfs_skybox_mio0SegmentRomStart, _bitfs_skybox_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0B, _effect_mio0SegmentRomStart, _effect_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x05, _group2_mio0SegmentRomStart, _group2_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0C, _group2_geoSegmentRomStart, _group2_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x06, _group17_mio0SegmentRomStart, _group17_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0D, _group17_geoSegmentRomStart, _group17_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_3), JUMP_LINK(script_func_global_18), JUMP_LINK(script_func_global_1), @@ -100,13 +100,13 @@ const LevelScript level_bitfs_entry[] = { LOAD_MODEL_FROM_GEO(MODEL_BITFS_TUMBLING_PLATFORM, bitfs_geo_0006F0), AREA(/*index*/ 1, bitfs_geo_0007A0), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -7577, -1764, 0, /*angle*/ 0, 90, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvAirborneWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 6735, 3681, 99, /*angle*/ 0, 0, 0, /*behParam*/ 0x140B0000, /*beh*/ bhvWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5886, 5000, 99, /*angle*/ 0, 90, 0, /*behParam*/ 0x000C0000, /*beh*/ bhvDeathWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_BITFS, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0B, /*destLevel*/ LEVEL_BOWSER_2, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0C, /*destLevel*/ LEVEL_BITFS, /*destArea*/ 0x01, /*destNode*/ 0x0C, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x68, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -7577, -1764, 0, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvAirborneWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 6735, 3681, 99, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(20) | BPARAM2(WARP_NODE_0B), /*bhv*/ bhvWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5886, 5000, 99, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0C), /*bhv*/ bhvDeathWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_BITFS, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0B, /*destLevel*/ LEVEL_BOWSER_2, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0C, /*destLevel*/ LEVEL_BITFS, /*destArea*/ 1, /*destNode*/ WARP_NODE_0C, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_68, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_1), JUMP_LINK(script_func_local_2), JUMP_LINK(script_func_local_3), diff --git a/levels/bitfs/seesaw_platform/geo.inc.c b/levels/bitfs/seesaw_platform/geo.inc.c index 2efcfcf0..1e660131 100644 --- a/levels/bitfs/seesaw_platform/geo.inc.c +++ b/levels/bitfs/seesaw_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000788 const GeoLayout bitfs_geo_000788[] = { - GEO_CULLING_RADIUS(800), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_07011E28), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(800), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_07011E28), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/sinking_cage_platform/geo.inc.c b/levels/bitfs/sinking_cage_platform/geo.inc.c index a1a4790c..0f771969 100644 --- a/levels/bitfs/sinking_cage_platform/geo.inc.c +++ b/levels/bitfs/sinking_cage_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000690 const GeoLayout bitfs_geo_000690[] = { - GEO_CULLING_RADIUS(550), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bitfs_seg7_dl_0700F6A8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(550), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bitfs_seg7_dl_0700F6A8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/sinking_cage_pole/geo.inc.c b/levels/bitfs/sinking_cage_pole/geo.inc.c index e310384d..152ad1c7 100644 --- a/levels/bitfs/sinking_cage_pole/geo.inc.c +++ b/levels/bitfs/sinking_cage_pole/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0006A8 const GeoLayout bitfs_geo_0006A8[] = { - GEO_CULLING_RADIUS(900), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_0700FB38), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(900), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_0700FB38), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/sinking_platforms/geo.inc.c b/levels/bitfs/sinking_platforms/geo.inc.c index e88e9035..1e4cc3ef 100644 --- a/levels/bitfs/sinking_platforms/geo.inc.c +++ b/levels/bitfs/sinking_platforms/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000770 const GeoLayout bitfs_geo_000770[] = { - GEO_CULLING_RADIUS(1300), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_07011BA0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1300), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_07011BA0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/sliding_platform/geo.inc.c b/levels/bitfs/sliding_platform/geo.inc.c index 59ee8c55..ff3ae317 100644 --- a/levels/bitfs/sliding_platform/geo.inc.c +++ b/levels/bitfs/sliding_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000740 const GeoLayout bitfs_geo_000740[] = { - GEO_CULLING_RADIUS(550), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_07011568), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(550), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_07011568), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/stretching_platform/geo.inc.c b/levels/bitfs/stretching_platform/geo.inc.c index b30b987e..d0f239a9 100644 --- a/levels/bitfs/stretching_platform/geo.inc.c +++ b/levels/bitfs/stretching_platform/geo.inc.c @@ -1,9 +1,9 @@ // 0x0E000708 const GeoLayout bitfs_geo_000708[] = { - GEO_CULLING_RADIUS(3000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bitfs_seg7_dl_07010340), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_07011138), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(3000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bitfs_seg7_dl_07010340), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_07011138), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/tilting_square_platform/geo.inc.c b/levels/bitfs/tilting_square_platform/geo.inc.c index c8aa53dc..41293686 100644 --- a/levels/bitfs/tilting_square_platform/geo.inc.c +++ b/levels/bitfs/tilting_square_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0006C0 const GeoLayout bitfs_geo_0006C0[] = { - GEO_CULLING_RADIUS(700), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_0700FD08), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(700), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_0700FD08), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/tumbling_platform_far/geo.inc.c b/levels/bitfs/tumbling_platform_far/geo.inc.c index cfd6927b..2f2f0f0b 100644 --- a/levels/bitfs/tumbling_platform_far/geo.inc.c +++ b/levels/bitfs/tumbling_platform_far/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0006F0 const GeoLayout bitfs_geo_0006F0[] = { - GEO_CULLING_RADIUS(800), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_07010168), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(800), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_07010168), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bitfs/tumbling_platform_near/geo.inc.c b/levels/bitfs/tumbling_platform_near/geo.inc.c index 44f2edcc..f843af16 100644 --- a/levels/bitfs/tumbling_platform_near/geo.inc.c +++ b/levels/bitfs/tumbling_platform_near/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0006D8 const GeoLayout bitfs_geo_0006D8[] = { - GEO_CULLING_RADIUS(400), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_0700FF90), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(400), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bitfs_seg7_dl_0700FF90), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/10/geo.inc.c b/levels/bits/areas/1/10/geo.inc.c index c8b35d42..b57d44f3 100644 --- a/levels/bits/areas/1/10/geo.inc.c +++ b/levels/bits/areas/1/10/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0004F0 const GeoLayout bits_geo_0004F0[] = { - GEO_CULLING_RADIUS(1800), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07009690), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1800), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07009690), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/11/geo.inc.c b/levels/bits/areas/1/11/geo.inc.c index 79a10c9c..2fbbf056 100644 --- a/levels/bits/areas/1/11/geo.inc.c +++ b/levels/bits/areas/1/11/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000508 const GeoLayout bits_geo_000508[] = { - GEO_CULLING_RADIUS(3200), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_0700B4A0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(3200), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_0700B4A0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/12/geo.inc.c b/levels/bits/areas/1/12/geo.inc.c index d8fd4453..99693983 100644 --- a/levels/bits/areas/1/12/geo.inc.c +++ b/levels/bits/areas/1/12/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000520 const GeoLayout bits_geo_000520[] = { - GEO_CULLING_RADIUS(1100), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_0700B820), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1100), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_0700B820), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/13/geo.inc.c b/levels/bits/areas/1/13/geo.inc.c index 13cde878..c11aea60 100644 --- a/levels/bits/areas/1/13/geo.inc.c +++ b/levels/bits/areas/1/13/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000538 const GeoLayout bits_geo_000538[] = { - GEO_CULLING_RADIUS(800), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bits_seg7_dl_0700BA18), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(800), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bits_seg7_dl_0700BA18), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/14/geo.inc.c b/levels/bits/areas/1/14/geo.inc.c index 991fbc60..94eed8a6 100644 --- a/levels/bits/areas/1/14/geo.inc.c +++ b/levels/bits/areas/1/14/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000550 const GeoLayout bits_geo_000550[] = { - GEO_CULLING_RADIUS(2900), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_0700CDC0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2900), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_0700CDC0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/15/geo.inc.c b/levels/bits/areas/1/15/geo.inc.c index 3fa1f25e..e335455f 100644 --- a/levels/bits/areas/1/15/geo.inc.c +++ b/levels/bits/areas/1/15/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000568 const GeoLayout bits_geo_000568[] = { - GEO_CULLING_RADIUS(2400), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_0700D278), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2400), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_0700D278), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/16/geo.inc.c b/levels/bits/areas/1/16/geo.inc.c index 72c05ef9..0463273f 100644 --- a/levels/bits/areas/1/16/geo.inc.c +++ b/levels/bits/areas/1/16/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000580 const GeoLayout bits_geo_000580[] = { - GEO_CULLING_RADIUS(3500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bits_seg7_dl_0700D5A0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(3500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, bits_seg7_dl_0700D5A0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/17/geo.inc.c b/levels/bits/areas/1/17/geo.inc.c index f3e40957..f38c6676 100644 --- a/levels/bits/areas/1/17/geo.inc.c +++ b/levels/bits/areas/1/17/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000598 const GeoLayout bits_geo_000598[] = { - GEO_CULLING_RADIUS(2200), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_0700DD00), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2200), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_0700DD00), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/18/geo.inc.c b/levels/bits/areas/1/18/geo.inc.c index 965542d1..b1f37593 100644 --- a/levels/bits/areas/1/18/geo.inc.c +++ b/levels/bits/areas/1/18/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0005B0 const GeoLayout bits_geo_0005B0[] = { - GEO_CULLING_RADIUS(2700), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_0700FC70), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2700), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_0700FC70), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/19/geo.inc.c b/levels/bits/areas/1/19/geo.inc.c index 8ea28d01..75ac51b4 100644 --- a/levels/bits/areas/1/19/geo.inc.c +++ b/levels/bits/areas/1/19/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0005C8 const GeoLayout bits_geo_0005C8[] = { - GEO_CULLING_RADIUS(3300), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_070128F0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(3300), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_070128F0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/2/geo.inc.c b/levels/bits/areas/1/2/geo.inc.c index 35495bbf..ab8878d8 100644 --- a/levels/bits/areas/1/2/geo.inc.c +++ b/levels/bits/areas/1/2/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000430 const GeoLayout bits_geo_000430[] = { - GEO_CULLING_RADIUS(3200), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07003670), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(3200), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07003670), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/20/geo.inc.c b/levels/bits/areas/1/20/geo.inc.c index a56e5ab0..799a612b 100644 --- a/levels/bits/areas/1/20/geo.inc.c +++ b/levels/bits/areas/1/20/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0005E0 const GeoLayout bits_geo_0005E0[] = { - GEO_CULLING_RADIUS(1100), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07012B10), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1100), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07012B10), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/21/geo.inc.c b/levels/bits/areas/1/21/geo.inc.c index 7fc69385..204f06b7 100644 --- a/levels/bits/areas/1/21/geo.inc.c +++ b/levels/bits/areas/1/21/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0005F8 const GeoLayout bits_geo_0005F8[] = { - GEO_CULLING_RADIUS(700), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07012D40), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(700), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07012D40), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/22/geo.inc.c b/levels/bits/areas/1/22/geo.inc.c index edbe4217..0883f998 100644 --- a/levels/bits/areas/1/22/geo.inc.c +++ b/levels/bits/areas/1/22/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000610 const GeoLayout bits_geo_000610[] = { - GEO_CULLING_RADIUS(1300), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_070135A0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1300), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_070135A0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/23/geo.inc.c b/levels/bits/areas/1/23/geo.inc.c index 61984039..677af799 100644 --- a/levels/bits/areas/1/23/geo.inc.c +++ b/levels/bits/areas/1/23/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000628 const GeoLayout bits_geo_000628[] = { - GEO_CULLING_RADIUS(600), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07013820), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(600), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07013820), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/24/geo.inc.c b/levels/bits/areas/1/24/geo.inc.c index 6a66c119..1ec05d69 100644 --- a/levels/bits/areas/1/24/geo.inc.c +++ b/levels/bits/areas/1/24/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000640 const GeoLayout bits_geo_000640[] = { - GEO_CULLING_RADIUS(600), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07013C78), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(600), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07013C78), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/25/geo.inc.c b/levels/bits/areas/1/25/geo.inc.c index 245f8716..46d40db2 100644 --- a/levels/bits/areas/1/25/geo.inc.c +++ b/levels/bits/areas/1/25/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000658 const GeoLayout bits_geo_000658[] = { - GEO_CULLING_RADIUS(700), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07013EF8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(700), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07013EF8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/26/geo.inc.c b/levels/bits/areas/1/26/geo.inc.c index 752cb935..e78751d9 100644 --- a/levels/bits/areas/1/26/geo.inc.c +++ b/levels/bits/areas/1/26/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000670 const GeoLayout bits_geo_000670[] = { - GEO_CULLING_RADIUS(1100), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07014178), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1100), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07014178), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/27/geo.inc.c b/levels/bits/areas/1/27/geo.inc.c index 360c7188..b0fbf54f 100644 --- a/levels/bits/areas/1/27/geo.inc.c +++ b/levels/bits/areas/1/27/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000688 const GeoLayout bits_geo_000688[] = { - GEO_CULLING_RADIUS(1900), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07014C28), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1900), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07014C28), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/28/geo.inc.c b/levels/bits/areas/1/28/geo.inc.c index 947cd093..ae27d6ab 100644 --- a/levels/bits/areas/1/28/geo.inc.c +++ b/levels/bits/areas/1/28/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0006A0 const GeoLayout bits_geo_0006A0[] = { - GEO_CULLING_RADIUS(2100), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_070153C0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2100), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_070153C0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/29/geo.inc.c b/levels/bits/areas/1/29/geo.inc.c index 3a160451..fe724619 100644 --- a/levels/bits/areas/1/29/geo.inc.c +++ b/levels/bits/areas/1/29/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0006B8 const GeoLayout bits_geo_0006B8[] = { - GEO_CULLING_RADIUS(2100), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07015B60), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2100), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07015B60), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/3/geo.inc.c b/levels/bits/areas/1/3/geo.inc.c index 4f30e267..8eca6e59 100644 --- a/levels/bits/areas/1/3/geo.inc.c +++ b/levels/bits/areas/1/3/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000448 const GeoLayout bits_geo_000448[] = { - GEO_CULLING_RADIUS(3200), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_070047F0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(3200), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_070047F0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/30/geo.inc.c b/levels/bits/areas/1/30/geo.inc.c index a00b0133..9300693d 100644 --- a/levels/bits/areas/1/30/geo.inc.c +++ b/levels/bits/areas/1/30/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0006D0 const GeoLayout bits_geo_0006D0[] = { - GEO_CULLING_RADIUS(2100), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07016300), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2100), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07016300), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/31/geo.inc.c b/levels/bits/areas/1/31/geo.inc.c index 64590cb7..daa151ab 100644 --- a/levels/bits/areas/1/31/geo.inc.c +++ b/levels/bits/areas/1/31/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0006E8 const GeoLayout bits_geo_0006E8[] = { - GEO_CULLING_RADIUS(2100), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07016AA0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2100), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07016AA0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/32/geo.inc.c b/levels/bits/areas/1/32/geo.inc.c index 49547961..afbd2771 100644 --- a/levels/bits/areas/1/32/geo.inc.c +++ b/levels/bits/areas/1/32/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000700 const GeoLayout bits_geo_000700[] = { - GEO_CULLING_RADIUS(2100), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07016DA0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2100), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07016DA0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/4/geo.inc.c b/levels/bits/areas/1/4/geo.inc.c index 7e63710d..f15f79de 100644 --- a/levels/bits/areas/1/4/geo.inc.c +++ b/levels/bits/areas/1/4/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000460 const GeoLayout bits_geo_000460[] = { - GEO_CULLING_RADIUS(3900), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07005DB8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(3900), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07005DB8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/5/geo.inc.c b/levels/bits/areas/1/5/geo.inc.c index 7d10d034..9433b149 100644 --- a/levels/bits/areas/1/5/geo.inc.c +++ b/levels/bits/areas/1/5/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000478 const GeoLayout bits_geo_000478[] = { - GEO_CULLING_RADIUS(2500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07007AF0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07007AF0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/6/geo.inc.c b/levels/bits/areas/1/6/geo.inc.c index 31a7dbdc..f78f2bed 100644 --- a/levels/bits/areas/1/6/geo.inc.c +++ b/levels/bits/areas/1/6/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000490 const GeoLayout bits_geo_000490[] = { - GEO_CULLING_RADIUS(1000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bits_seg7_dl_07007C28), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bits_seg7_dl_07007C28), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/7/geo.inc.c b/levels/bits/areas/1/7/geo.inc.c index c46efb4f..d8300a84 100644 --- a/levels/bits/areas/1/7/geo.inc.c +++ b/levels/bits/areas/1/7/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0004A8 const GeoLayout bits_geo_0004A8[] = { - GEO_CULLING_RADIUS(1000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07007EC8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07007EC8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/8/geo.inc.c b/levels/bits/areas/1/8/geo.inc.c index 998ce57f..d5393a08 100644 --- a/levels/bits/areas/1/8/geo.inc.c +++ b/levels/bits/areas/1/8/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0004C0 const GeoLayout bits_geo_0004C0[] = { - GEO_CULLING_RADIUS(2700), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07008D18), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2700), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bits_seg7_dl_07008D18), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/9/geo.inc.c b/levels/bits/areas/1/9/geo.inc.c index 2ffb84ae..3548cce9 100644 --- a/levels/bits/areas/1/9/geo.inc.c +++ b/levels/bits/areas/1/9/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0004D8 const GeoLayout bits_geo_0004D8[] = { - GEO_CULLING_RADIUS(1600), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bits_seg7_dl_07008FE8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1600), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bits_seg7_dl_07008FE8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/geo.inc.c b/levels/bits/areas/1/geo.inc.c index 50e96cc3..831ee315 100644 --- a/levels/bits/areas/1/geo.inc.c +++ b/levels/bits/areas/1/geo.inc.c @@ -1,26 +1,26 @@ // 0x0E000718 const GeoLayout bits_geo_000718[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND(BACKGROUND_PURPLE_SKY, geo_skybox_main), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(14, 0, 2000, 6000, 0, -4500, -8000, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bits_seg7_dl_07002918), - GEO_RENDER_OBJ(), - GEO_ASM(0, geo_envfx_main), + GEO_BACKGROUND(BACKGROUND_PURPLE_SKY, geo_skybox_main), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(14, 0, 2000, 6000, 0, -4500, -8000, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bits_seg7_dl_07002918), + GEO_RENDER_OBJ(), + GEO_ASM(0, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bits/areas/1/macro.inc.c b/levels/bits/areas/1/macro.inc.c index 663871c0..4f4af5c4 100644 --- a/levels/bits/areas/1/macro.inc.c +++ b/levels/bits/areas/1/macro.inc.c @@ -1,60 +1,60 @@ // 0x0701A76C - 0x0701A99E const MacroObject bits_seg7_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -1400, -4000, 0), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -272, -4000, 0), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 840, -4000, 0), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ 4100, -1320, -1800, /*behParam*/ 1), - MACRO_OBJECT(/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ 6180, -1791, 0), - MACRO_OBJECT(/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ 6260, -1453, -1800), - MACRO_OBJECT(/*preset*/ macro_fire_piranha_plant, /*yaw*/ 0, /*pos*/ 1920, -1187, -1840), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -5080, -2457, -800), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 1380, -1740, -660), - MACRO_OBJECT(/*preset*/ macro_whomp, /*yaw*/ 90, /*pos*/ -4180, -1330, -800), - MACRO_OBJECT(/*preset*/ macro_chuckya, /*yaw*/ 90, /*pos*/ -3909, -409, -1199), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 600, -200, -900), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 900, 60, -900), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 1200, 310, -900), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 1500, 560, -900), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 1800, 810, -900), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 2100, 1060, -900), - MACRO_OBJECT(/*preset*/ macro_recovery_heart, /*yaw*/ 0, /*pos*/ 1279, 2639, -959), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -1399, 2750, -1159), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -2839, 2059, -959), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -3479, 2059, -799), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -7200, 2080, -890), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -6600, 2080, -180), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -6600, 2080, -1550), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -6600, 2080, -180), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -7200, 2080, -890), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -6600, 2080, -1550), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ -6640, 2280, -890, /*behParam*/ 3), - MACRO_OBJECT(/*preset*/ macro_goomba_triplet_spawner, /*yaw*/ 0, /*pos*/ -5239, 3839, -999), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -1559, 3800, -1079), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -1079, 3800, -1039), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 1879, 4639, -1559), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -259, 6059, -3759), - MACRO_OBJECT(/*preset*/ macro_recovery_heart, /*yaw*/ 0, /*pos*/ 359, 6099, -3219), - MACRO_OBJECT(/*preset*/ macro_fire_piranha_plant, /*yaw*/ 0, /*pos*/ 3680, 2428, -1840), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -6460, 2080, -900, /*behParam*/ 2), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -6460, 2280, -900, /*behParam*/ 0), - MACRO_OBJECT(/*preset*/ macro_goomba_triplet_spawner, /*yaw*/ 0, /*pos*/ 360, 6040, -2880), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -302, -2457, -800), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1590, -1120, -2055), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -2960, -3360, 0), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -298, -2600, -1600), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 7618, 4850, -1909), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -136, 3109, -909), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -3330, 4050, -900), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -4830, 2103, -1030), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 348, 5921, -4585), - MACRO_OBJECT(/*preset*/ macro_pushable_metal_box, /*yaw*/ 0, /*pos*/ -2300, -4100, 0), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -4769, 2344, -904), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ 377, 4140, -2042), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -1751, -1246, -805), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -6712, -899, -796), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 7322, 4566, -1922), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -3600, -2433, -800), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -2656, -2442, -800), - MACRO_OBJECT(/*preset*/ macro_box_1up_running_away, /*yaw*/ 0, /*pos*/ 4100, -1050, -1800), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -1400, -4000, 0), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -272, -4000, 0), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 840, -4000, 0), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ 4100, -1320, -1800, /*bhvParam*/ AMP_BP_ROT_RADIUS_300), + MACRO_OBJECT (/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ 6180, -1791, 0), + MACRO_OBJECT (/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ 6260, -1453, -1800), + MACRO_OBJECT (/*preset*/ macro_fire_piranha_plant_1, /*yaw*/ 0, /*pos*/ 1920, -1187, -1840), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -5080, -2457, -800), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 1380, -1740, -660), + MACRO_OBJECT (/*preset*/ macro_whomp, /*yaw*/ 90, /*pos*/ -4180, -1330, -800), + MACRO_OBJECT (/*preset*/ macro_chuckya, /*yaw*/ 90, /*pos*/ -3909, -409, -1199), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 600, -200, -900), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 900, 60, -900), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 1200, 310, -900), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 1500, 560, -900), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 1800, 810, -900), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 2100, 1060, -900), + MACRO_OBJECT (/*preset*/ macro_recovery_heart, /*yaw*/ 0, /*pos*/ 1279, 2639, -959), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -1399, 2750, -1159), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -2839, 2059, -959), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -3479, 2059, -799), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -7200, 2080, -890), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -6600, 2080, -180), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -6600, 2080, -1550), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -6600, 2080, -180), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -7200, 2080, -890), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -6600, 2080, -1550), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ -6640, 2280, -890, /*bhvParam*/ 3), + MACRO_OBJECT (/*preset*/ macro_goomba_triplet_spawner, /*yaw*/ 0, /*pos*/ -5239, 3839, -999), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -1559, 3800, -1079), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -1079, 3800, -1039), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 1879, 4639, -1559), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -259, 6059, -3759), + MACRO_OBJECT (/*preset*/ macro_recovery_heart, /*yaw*/ 0, /*pos*/ 359, 6099, -3219), + MACRO_OBJECT (/*preset*/ macro_fire_piranha_plant_1, /*yaw*/ 0, /*pos*/ 3680, 2428, -1840), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -6460, 2080, -900, /*bhvParam*/ AMP_BP_ROT_RADIUS_400), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -6460, 2280, -900, /*bhvParam*/ AMP_BP_ROT_RADIUS_200), + MACRO_OBJECT (/*preset*/ macro_goomba_triplet_spawner, /*yaw*/ 0, /*pos*/ 360, 6040, -2880), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -302, -2457, -800), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1590, -1120, -2055), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -2960, -3360, 0), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -298, -2600, -1600), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 7618, 4850, -1909), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -136, 3109, -909), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -3330, 4050, -900), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -4830, 2103, -1030), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 348, 5921, -4585), + MACRO_OBJECT (/*preset*/ macro_pushable_metal_box, /*yaw*/ 0, /*pos*/ -2300, -4100, 0), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -4769, 2344, -904), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ 377, 4140, -2042), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -1751, -1246, -805), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -6712, -899, -796), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 7322, 4566, -1922), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -3600, -2433, -800), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -2656, -2442, -800), + MACRO_OBJECT (/*preset*/ macro_box_1up_running_away, /*yaw*/ 0, /*pos*/ 4100, -1050, -1800), MACRO_OBJECT_END(), }; diff --git a/levels/bits/leveldata.c b/levels/bits/leveldata.c index 50b749ab..4134039d 100644 --- a/levels/bits/leveldata.c +++ b/levels/bits/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "make_const_nonconst.h" diff --git a/levels/bits/script.c b/levels/bits/script.c index 2d1bd872..2b18239d 100644 --- a/levels/bits/script.c +++ b/levels/bits/script.c @@ -16,44 +16,44 @@ #include "levels/bits/header.h" static const LevelScript script_func_local_1[] = { - OBJECT(/*model*/ MODEL_BITS_SLIDING_PLATFORM, /*pos*/ -2370, -4525, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00100000, /*beh*/ bhvSlidingPlatform2), - OBJECT(/*model*/ MODEL_BITS_TWIN_SLIDING_PLATFORMS, /*pos*/ -2611, 3544, -904, /*angle*/ 0, 0, 0, /*behParam*/ 0x00CF0000, /*beh*/ bhvSlidingPlatform2), - OBJECT(/*model*/ MODEL_BITS_TWIN_SLIDING_PLATFORMS, /*pos*/ -4700, 3544, -904, /*angle*/ 0, 180, 0, /*behParam*/ 0x008F0000, /*beh*/ bhvSlidingPlatform2), - OBJECT(/*model*/ MODEL_BITS_OCTAGONAL_PLATFORM, /*pos*/ 4139, -1740, -1831, /*angle*/ 0, 0, 0, /*behParam*/ 0x02000000, /*beh*/ bhvOctagonalPlatformRotating), - OBJECT(/*model*/ MODEL_BITS_OCTAGONAL_PLATFORM, /*pos*/ -6459, 1732, -904, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOctagonalPlatformRotating), - OBJECT(/*model*/ MODEL_BITS_OCTAGONAL_PLATFORM, /*pos*/ -4770, 1732, -904, /*angle*/ 0, 0, 0, /*behParam*/ 0x02000000, /*beh*/ bhvOctagonalPlatformRotating), - OBJECT(/*model*/ MODEL_BITS_FERRIS_WHEEL_AXLE, /*pos*/ -1748, -1330, -1094, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFerrisWheelAxle), - OBJECT(/*model*/ MODEL_BITS_FERRIS_WHEEL_AXLE, /*pos*/ 2275, 5628, -1315, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFerrisWheelAxle), - OBJECT(/*model*/ MODEL_BITS_FERRIS_WHEEL_AXLE, /*pos*/ 3114, 4701, -1320, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFerrisWheelAxle), - OBJECT(/*model*/ MODEL_BITS_ARROW_PLATFORM, /*pos*/ 2793, 2325, -904, /*angle*/ 0, 0, 0, /*behParam*/ 0x00610000, /*beh*/ bhvActivatedBackAndForthPlatform), - OBJECT(/*model*/ MODEL_BITS_SEESAW_PLATFORM, /*pos*/ 27, -1555, -713, /*angle*/ 0, 90, 0, /*behParam*/ 0x00010000, /*beh*/ bhvSeesawPlatform), - OBJECT(/*model*/ MODEL_BITS_TILTING_W_PLATFORM, /*pos*/ -306, -4300, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00020000, /*beh*/ bhvSeesawPlatform), - OBJECT(/*model*/ MODEL_BITS_STAIRCASE, /*pos*/ 1769, -234, -899, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvAnimatesOnFloorSwitchPress), - OBJECT(/*model*/ MODEL_PURPLE_SWITCH, /*pos*/ -279, -234, -900, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFloorSwitchAnimatesObject), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6460, 2039, -905, /*angle*/ 0, 0, 0, /*behParam*/ 0x00CF0000, /*beh*/ bhvPoleGrabbing), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3326, 3227, -905, /*angle*/ 0, 0, 0, /*behParam*/ 0x004D0000, /*beh*/ bhvPoleGrabbing), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5518, 3184, -4019, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlamethrower), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 6465, 3731, -1915, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlamethrower), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5915, 3718, -4019, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlamethrower), + OBJECT(/*model*/ MODEL_BITS_SLIDING_PLATFORM, /*pos*/ -2370, -4525, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x10), /*bhv*/ bhvSlidingPlatform2), + OBJECT(/*model*/ MODEL_BITS_TWIN_SLIDING_PLATFORMS, /*pos*/ -2611, 3544, -904, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0xCF), /*bhv*/ bhvSlidingPlatform2), + OBJECT(/*model*/ MODEL_BITS_TWIN_SLIDING_PLATFORMS, /*pos*/ -4700, 3544, -904, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(0x8F), /*bhv*/ bhvSlidingPlatform2), + OBJECT(/*model*/ MODEL_BITS_OCTAGONAL_PLATFORM, /*pos*/ 4139, -1740, -1831, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(0x02), /*bhv*/ bhvOctagonalPlatformRotating), + OBJECT(/*model*/ MODEL_BITS_OCTAGONAL_PLATFORM, /*pos*/ -6459, 1732, -904, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvOctagonalPlatformRotating), + OBJECT(/*model*/ MODEL_BITS_OCTAGONAL_PLATFORM, /*pos*/ -4770, 1732, -904, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(0x02), /*bhv*/ bhvOctagonalPlatformRotating), + OBJECT(/*model*/ MODEL_BITS_FERRIS_WHEEL_AXLE, /*pos*/ -1748, -1330, -1094, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFerrisWheelAxle), + OBJECT(/*model*/ MODEL_BITS_FERRIS_WHEEL_AXLE, /*pos*/ 2275, 5628, -1315, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFerrisWheelAxle), + OBJECT(/*model*/ MODEL_BITS_FERRIS_WHEEL_AXLE, /*pos*/ 3114, 4701, -1320, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFerrisWheelAxle), + OBJECT(/*model*/ MODEL_BITS_ARROW_PLATFORM, /*pos*/ 2793, 2325, -904, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(ACTIVATED_BF_PLAT_TYPE_BITS_ARROW_PLAT) | BPARAM2(97), /*bhv*/ bhvActivatedBackAndForthPlatform), + OBJECT(/*model*/ MODEL_BITS_SEESAW_PLATFORM, /*pos*/ 27, -1555, -713, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(0x01), /*bhv*/ bhvSeesawPlatform), + OBJECT(/*model*/ MODEL_BITS_TILTING_W_PLATFORM, /*pos*/ -306, -4300, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x02), /*bhv*/ bhvSeesawPlatform), + OBJECT(/*model*/ MODEL_BITS_STAIRCASE, /*pos*/ 1769, -234, -899, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvAnimatesOnFloorSwitchPress), + OBJECT(/*model*/ MODEL_PURPLE_SWITCH, /*pos*/ -279, -234, -900, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFloorSwitchAnimatesObject), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6460, 2039, -905, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(207), /*bhv*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3326, 3227, -905, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(77), /*bhv*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5518, 3184, -4019, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlamethrower), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 6465, 3731, -1915, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlamethrower), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5915, 3718, -4019, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlamethrower), RETURN(), }; static const LevelScript script_func_local_2[] = { - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 350, 6800, -6800, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBowserCourseRedCoinStar), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 350, 6800, -6800, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_1), /*bhv*/ bhvBowserCourseRedCoinStar), RETURN(), }; const LevelScript level_bits_entry[] = { INIT_LEVEL(), - LOAD_MIO0( /*seg*/ 0x07, _bits_segment_7SegmentRomStart, _bits_segment_7SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0A, _bits_skybox_mio0SegmentRomStart, _bits_skybox_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _bits_segment_7SegmentRomStart, _bits_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0A, _bits_skybox_mio0SegmentRomStart, _bits_skybox_mio0SegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _sky_mio0SegmentRomStart, _sky_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x06, _group14_mio0SegmentRomStart, _group14_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0D, _group14_geoSegmentRomStart, _group14_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x06, _group14_mio0SegmentRomStart, _group14_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0D, _group14_geoSegmentRomStart, _group14_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_15), JUMP_LINK(script_func_global_1), LOAD_MODEL_FROM_GEO(MODEL_LEVEL_GEOMETRY_03, bits_geo_000430), @@ -90,13 +90,13 @@ const LevelScript level_bits_entry[] = { LOAD_MODEL_FROM_GEO(MODEL_BITS_WARP_PIPE, warp_pipe_geo), AREA(/*index*/ 1, bits_geo_000718), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -7039, -3812, 4, /*angle*/ 0, 90, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvAirborneWarp), - OBJECT(/*model*/ MODEL_BITS_WARP_PIPE, /*pos*/ 351, 6652, -6030, /*angle*/ 0, 0, 0, /*behParam*/ 0x000B0000, /*beh*/ bhvWarpPipe), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 351, 6800, -3900, /*angle*/ 0, 180, 0, /*behParam*/ 0x000C0000, /*beh*/ bhvDeathWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_BITS, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0B, /*destLevel*/ LEVEL_BOWSER_3, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0C, /*destLevel*/ LEVEL_BITS, /*destArea*/ 0x01, /*destNode*/ 0x0C, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x6B, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -7039, -3812, 4, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvAirborneWarp), + OBJECT(/*model*/ MODEL_BITS_WARP_PIPE, /*pos*/ 351, 6652, -6030, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0B), /*bhv*/ bhvWarpPipe), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 351, 6800, -3900, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0C), /*bhv*/ bhvDeathWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_BITS, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0B, /*destLevel*/ LEVEL_BOWSER_3, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0C, /*destLevel*/ LEVEL_BITS, /*destArea*/ 1, /*destNode*/ WARP_NODE_0C, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_6B, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_1), JUMP_LINK(script_func_local_2), TERRAIN(/*terrainData*/ bits_seg7_collision_level), diff --git a/levels/bob/areas/1/geo.inc.c b/levels/bob/areas/1/geo.inc.c index c7c6fc20..a6d1f8dc 100644 --- a/levels/bob/areas/1/geo.inc.c +++ b/levels/bob/areas/1/geo.inc.c @@ -1,35 +1,35 @@ // 0x0E000488 const GeoLayout bob_geo_000488[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND(BACKGROUND_OCEAN_SKY, geo_skybox_main), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 30000, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(1, 0, 2000, 6000, 3072, 0, -4608, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bob_seg7_dl_07004390), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bob_seg7_dl_07009D80), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, bob_seg7_dl_0700A470), - GEO_DISPLAY_LIST(LAYER_ALPHA, bob_seg7_dl_0700A920), - 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_envfx_main), + GEO_BACKGROUND(BACKGROUND_OCEAN_SKY, geo_skybox_main), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_cannon_circle_base), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 30000, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(1, 0, 2000, 6000, 3072, 0, -4608, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bob_seg7_dl_07004390), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bob_seg7_dl_07009D80), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, bob_seg7_dl_0700A470), + GEO_DISPLAY_LIST(LAYER_ALPHA, bob_seg7_dl_0700A920), + 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_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_cannon_circle_base), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bob/areas/1/macro.inc.c b/levels/bob/areas/1/macro.inc.c index e7127c57..c0a0d0d5 100644 --- a/levels/bob/areas/1/macro.inc.c +++ b/levels/bob/areas/1/macro.inc.c @@ -1,92 +1,92 @@ // 0x0701104C - 0x070113BE const MacroObject bob_seg7_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_chain_chomp, /*yaw*/ 0, /*pos*/ 260, 735, 1920), - MACRO_OBJECT(/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ -3979, 0, 6827), - MACRO_OBJECT(/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ -2713, 152, 5778), - MACRO_OBJECT(/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ -342, 400, 5433), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_water_bomb_spawner, /*yaw*/ 0, /*pos*/ 3620, 4000, 4800, /*behParam*/ 15), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_water_bomb_spawner, /*yaw*/ 0, /*pos*/ -5141, 3764, -743, /*behParam*/ 25), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_water_bomb_spawner, /*yaw*/ 0, /*pos*/ -4208, 3769, -2036, /*behParam*/ 10), - MACRO_OBJECT(/*preset*/ macro_water_bomb_cannon, /*yaw*/ 315, /*pos*/ 1388, 2918, -2383), - MACRO_OBJECT(/*preset*/ macro_wooden_post, /*yaw*/ 0, /*pos*/ -6500, 768, 1800), - MACRO_OBJECT(/*preset*/ macro_wooden_post, /*yaw*/ 0, /*pos*/ -5500, 768, 1800), - MACRO_OBJECT(/*preset*/ macro_wooden_post, /*yaw*/ 0, /*pos*/ -6500, 768, 3000), - MACRO_OBJECT(/*preset*/ macro_wooden_post, /*yaw*/ 0, /*pos*/ -5500, 768, 3000), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ -4000, 0, 6050, /*behParam*/ DIALOG_015), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 1230, 768, 3258, /*behParam*/ DIALOG_008), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ -5018, 1332, -3533, /*behParam*/ 0x00), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ 6349, 2080, -7066, /*behParam*/ 0xC0), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ 4243, 3071, -2451, /*behParam*/ 0xC0), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ 4352, 3072, 1229, /*behParam*/ 0x80), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ 5376, 1537, 4610, /*behParam*/ 0x40), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -3080, 0, -5200), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -3688, 885, -3813), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -4629, 1024, -1772), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -3480, 891, -2120), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -3800, 1024, -460), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ 6888, 2002, -5608), - MACRO_OBJECT(/*preset*/ macro_recovery_heart, /*yaw*/ 0, /*pos*/ 3603, 3659, -7070), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ -6060, 1060, -5340), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ -129, 0, 5668), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 75, /*pos*/ 1851, 2917, -2234), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5500, 768, 2400), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -6500, 768, 2400), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1135, 1920, -7161), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 250, 1000, 1920), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1600, 980, 4440), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -2755, 0, -4083), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4934, 1352, 861), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4100, 3672, 1629), - MACRO_OBJECT(/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ -6710, 1300, -2170), - MACRO_OBJECT(/*preset*/ macro_breakable_box_small, /*yaw*/ 0, /*pos*/ -3740, 0, 6180), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ -4000, 0, 6300, /*behParam*/ DIALOG_095), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ -6060, 1060, -5340, /*behParam*/ 4), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -5760, 1060, -5340), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -6360, 1060, -5340), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -6060, 1060, -5640), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -6060, 1040, -5040), - MACRO_OBJECT(/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ 3789, 3340, 1818), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ 2350, 757, 3700), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -1750, 0, -2800), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -1400, 0, -950), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -2650, 0, 1750), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -1900, 0, 3450), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -2531, 0, -4201), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_in_pole, /*yaw*/ 0, /*pos*/ 5444, 1400, 6016), - MACRO_OBJECT(/*preset*/ macro_goomba_triplet_spawner, /*yaw*/ 0, /*pos*/ 3640, 768, 6280), - MACRO_OBJECT(/*preset*/ macro_goomba_triplet_spawner, /*yaw*/ 0, /*pos*/ 6060, 877, 2000), - MACRO_OBJECT(/*preset*/ macro_goomba_triplet_spawner, /*yaw*/ 0, /*pos*/ -6050, 768, 1250), - MACRO_OBJECT(/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ 400, 350, 6500), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ 66, 0, 6977, /*behParam*/ DIALOG_113), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 3394, 3072, 1846, /*behParam*/ DIALOG_064), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ -3110, 104, 5064, /*behParam*/ DIALOG_035), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 6860, 2041, -6640, /*behParam*/ DIALOG_074), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -6020, 768, 2957, /*behParam*/ DIALOG_104), - MACRO_OBJECT(/*preset*/ macro_coin_ring_vertical, /*yaw*/ 90, /*pos*/ -1506, 5317, 1250), - MACRO_OBJECT(/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ -1506, 5517, 1250), - MACRO_OBJECT(/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ 7157, 2027, -6714), - MACRO_OBJECT(/*preset*/ macro_coin_ring_vertical, /*yaw*/ 90, /*pos*/ 1000, 3400, 1250), - MACRO_OBJECT(/*preset*/ macro_coin_ring_vertical, /*yaw*/ 90, /*pos*/ 2000, 3400, 1250), - MACRO_OBJECT(/*preset*/ macro_coin_ring_vertical, /*yaw*/ 90, /*pos*/ 3000, 3400, 1250), - MACRO_OBJECT(/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ 1000, 3600, 1250), - MACRO_OBJECT(/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ 2000, 3600, 1250), - MACRO_OBJECT(/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ 3000, 3600, 1250), - MACRO_OBJECT(/*preset*/ macro_bobomb_still, /*yaw*/ 0, /*pos*/ 1127, 2897, -2495), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 120, /*pos*/ 4836, 3079, -2707), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 45, /*pos*/ -3530, 1415, 430, /*behParam*/ DIALOG_050), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 5053, 3073, 2180, /*behParam*/ DIALOG_053), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -1506, 5517, 1250), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 1000, 3600, 1250), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 2000, 3600, 1250), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 3000, 3600, 1250), - MACRO_OBJECT(/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ -300, 4200, 1250), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ -2224, 990, -4359, /*behParam*/ DIALOG_039), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 60, /*pos*/ 3911, 3529, -7081, /*behParam*/ DIALOG_112), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -7000, 1024, -2099, /*behParam*/ DIALOG_032), - MACRO_OBJECT(/*preset*/ macro_breakable_box_three_coins, /*yaw*/ 0, /*pos*/ -3979, 0, 6627), - MACRO_OBJECT(/*preset*/ macro_box_star_3, /*yaw*/ 0, /*pos*/ 5540, 3350, 1200), - MACRO_OBJECT(/*preset*/ macro_coin_ring_vertical, /*yaw*/ 90, /*pos*/ -300, 4000, 1250), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -300, 4200, 1250), - MACRO_OBJECT(/*preset*/ macro_breakable_box_small, /*yaw*/ 0, /*pos*/ -6800, 1024, 40), + MACRO_OBJECT (/*preset*/ macro_chain_chomp, /*yaw*/ 0, /*pos*/ 260, 735, 1920), + MACRO_OBJECT (/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ -3979, 0, 6827), + MACRO_OBJECT (/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ -2713, 152, 5778), + MACRO_OBJECT (/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ -342, 400, 5433), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_water_bomb_spawner, /*yaw*/ 0, /*pos*/ 3620, 4000, 4800, /*bhvParam*/ 15), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_water_bomb_spawner, /*yaw*/ 0, /*pos*/ -5141, 3764, -743, /*bhvParam*/ 25), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_water_bomb_spawner, /*yaw*/ 0, /*pos*/ -4208, 3769, -2036, /*bhvParam*/ 10), + MACRO_OBJECT (/*preset*/ macro_water_bomb_cannon_2, /*yaw*/ 315, /*pos*/ 1388, 2918, -2383), + MACRO_OBJECT (/*preset*/ macro_wooden_post_1, /*yaw*/ 0, /*pos*/ -6500, 768, 1800), + MACRO_OBJECT (/*preset*/ macro_wooden_post_1, /*yaw*/ 0, /*pos*/ -5500, 768, 1800), + MACRO_OBJECT (/*preset*/ macro_wooden_post_1, /*yaw*/ 0, /*pos*/ -6500, 768, 3000), + MACRO_OBJECT (/*preset*/ macro_wooden_post_1, /*yaw*/ 0, /*pos*/ -5500, 768, 3000), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ -4000, 0, 6050, /*bhvParam*/ DIALOG_015), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 1230, 768, 3258, /*bhvParam*/ DIALOG_008), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ -5018, 1332, -3533, /*bhvParam*/ 0x00), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ 6349, 2080, -7066, /*bhvParam*/ 0xC0), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ 4243, 3071, -2451, /*bhvParam*/ 0xC0), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ 4352, 3072, 1229, /*bhvParam*/ 0x80), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ 5376, 1537, 4610, /*bhvParam*/ 0x40), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -3080, 0, -5200), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -3688, 885, -3813), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -4629, 1024, -1772), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -3480, 891, -2120), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -3800, 1024, -460), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ 6888, 2002, -5608), + MACRO_OBJECT (/*preset*/ macro_recovery_heart, /*yaw*/ 0, /*pos*/ 3603, 3659, -7070), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ -6060, 1060, -5340), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ -129, 0, 5668), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 75, /*pos*/ 1851, 2917, -2234), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5500, 768, 2400), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -6500, 768, 2400), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1135, 1920, -7161), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 250, 1000, 1920), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1600, 980, 4440), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -2755, 0, -4083), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4934, 1352, 861), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4100, 3672, 1629), + MACRO_OBJECT (/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ -6710, 1300, -2170), + MACRO_OBJECT (/*preset*/ macro_breakable_box_small, /*yaw*/ 0, /*pos*/ -3740, 0, 6180), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ -4000, 0, 6300, /*bhvParam*/ DIALOG_095), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ -6060, 1060, -5340, /*bhvParam*/ 4), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -5760, 1060, -5340), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -6360, 1060, -5340), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -6060, 1060, -5640), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -6060, 1040, -5040), + MACRO_OBJECT (/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ 3789, 3340, 1818), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ 2350, 757, 3700), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -1750, 0, -2800), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -1400, 0, -950), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -2650, 0, 1750), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -1900, 0, 3450), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -2531, 0, -4201), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_in_pole, /*yaw*/ 0, /*pos*/ 5444, 1400, 6016), + MACRO_OBJECT (/*preset*/ macro_goomba_triplet_spawner, /*yaw*/ 0, /*pos*/ 3640, 768, 6280), + MACRO_OBJECT (/*preset*/ macro_goomba_triplet_spawner, /*yaw*/ 0, /*pos*/ 6060, 877, 2000), + MACRO_OBJECT (/*preset*/ macro_goomba_triplet_spawner, /*yaw*/ 0, /*pos*/ -6050, 768, 1250), + MACRO_OBJECT (/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ 400, 350, 6500), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ 66, 0, 6977, /*bhvParam*/ DIALOG_113), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 3394, 3072, 1846, /*bhvParam*/ DIALOG_064), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ -3110, 104, 5064, /*bhvParam*/ DIALOG_035), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 6860, 2041, -6640, /*bhvParam*/ DIALOG_074), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -6020, 768, 2957, /*bhvParam*/ DIALOG_104), + MACRO_OBJECT (/*preset*/ macro_coin_ring_vertical_flying, /*yaw*/ 90, /*pos*/ -1506, 5317, 1250), + MACRO_OBJECT (/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ -1506, 5517, 1250), + MACRO_OBJECT (/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ 7157, 2027, -6714), + MACRO_OBJECT (/*preset*/ macro_coin_ring_vertical_flying, /*yaw*/ 90, /*pos*/ 1000, 3400, 1250), + MACRO_OBJECT (/*preset*/ macro_coin_ring_vertical_flying, /*yaw*/ 90, /*pos*/ 2000, 3400, 1250), + MACRO_OBJECT (/*preset*/ macro_coin_ring_vertical_flying, /*yaw*/ 90, /*pos*/ 3000, 3400, 1250), + MACRO_OBJECT (/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ 1000, 3600, 1250), + MACRO_OBJECT (/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ 2000, 3600, 1250), + MACRO_OBJECT (/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ 3000, 3600, 1250), + MACRO_OBJECT (/*preset*/ macro_bobomb_stationary, /*yaw*/ 0, /*pos*/ 1127, 2897, -2495), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 120, /*pos*/ 4836, 3079, -2707), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 45, /*pos*/ -3530, 1415, 430, /*bhvParam*/ DIALOG_050), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 5053, 3073, 2180, /*bhvParam*/ DIALOG_053), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -1506, 5517, 1250), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 1000, 3600, 1250), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 2000, 3600, 1250), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 3000, 3600, 1250), + MACRO_OBJECT (/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ -300, 4200, 1250), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ -2224, 990, -4359, /*bhvParam*/ DIALOG_039), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 60, /*pos*/ 3911, 3529, -7081, /*bhvParam*/ DIALOG_112), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -7000, 1024, -2099, /*bhvParam*/ DIALOG_032), + MACRO_OBJECT (/*preset*/ macro_breakable_box_three_coins, /*yaw*/ 0, /*pos*/ -3979, 0, 6627), + MACRO_OBJECT (/*preset*/ macro_box_star_act_3, /*yaw*/ 0, /*pos*/ 5540, 3350, 1200), + MACRO_OBJECT (/*preset*/ macro_coin_ring_vertical_flying, /*yaw*/ 90, /*pos*/ -300, 4000, 1250), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -300, 4200, 1250), + MACRO_OBJECT (/*preset*/ macro_breakable_box_small, /*yaw*/ 0, /*pos*/ -6800, 1024, 40), MACRO_OBJECT_END(), }; diff --git a/levels/bob/chain_chomp_gate/geo.inc.c b/levels/bob/chain_chomp_gate/geo.inc.c index e6864f09..c786d0ad 100644 --- a/levels/bob/chain_chomp_gate/geo.inc.c +++ b/levels/bob/chain_chomp_gate/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000440 const GeoLayout bob_geo_000440[] = { - GEO_CULLING_RADIUS(1000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bob_seg7_dl_0700E458), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bob_seg7_dl_0700E458), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bob/grate_door/geo.inc.c b/levels/bob/grate_door/geo.inc.c index 447fbce8..42dfbf41 100644 --- a/levels/bob/grate_door/geo.inc.c +++ b/levels/bob/grate_door/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000470 const GeoLayout bob_geo_000470[] = { - GEO_CULLING_RADIUS(800), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, bob_seg7_dl_0700E8A0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(800), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, bob_seg7_dl_0700E8A0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bob/level.yaml b/levels/bob/level.yaml index 38a01def..fb26f569 100644 --- a/levels/bob/level.yaml +++ b/levels/bob/level.yaml @@ -1,6 +1,6 @@ -# Bob-Omb Battlefield +# Bob-omb Battlefield short-name: bob -full-name: Bob-Omb Battlefield +full-name: Bob-omb Battlefield texture-file: ["/texture.inc.c"] area-count: 1 objects: [chain_chomp_gate, grate_door, seesaw_platform] diff --git a/levels/bob/leveldata.c b/levels/bob/leveldata.c index 3c0befd1..9cec6310 100644 --- a/levels/bob/leveldata.c +++ b/levels/bob/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "dialog_ids.h" diff --git a/levels/bob/script.c b/levels/bob/script.c index ce7bf54c..2575812a 100644 --- a/levels/bob/script.c +++ b/levels/bob/script.c @@ -17,55 +17,55 @@ #include "levels/bob/header.h" static const LevelScript script_func_local_1[] = { - OBJECT(/*model*/ MODEL_BOB_CHAIN_CHOMP_GATE, /*pos*/ 1456, 768, 446, /*angle*/ 0, 326, 0, /*behParam*/ 0x00000000, /*beh*/ bhvChainChompGate), - OBJECT(/*model*/ MODEL_BOB_SEESAW_PLATFORM, /*pos*/ -2303, 717, 1024, /*angle*/ 0, 45, 0, /*behParam*/ 0x00030000, /*beh*/ bhvSeesawPlatform), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2050, 0, -3069, /*angle*/ 0, 25, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOpenableGrill), - OBJECT(/*model*/ MODEL_PURPLE_SWITCH, /*pos*/ -2283, 0, -3682, /*angle*/ 0, 27, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFloorSwitchGrills), - OBJECT(/*model*/ MODEL_CHECKERBOARD_PLATFORM, /*pos*/ 1612, 300, 4611, /*angle*/ 0, 0, 0, /*behParam*/ 0x00280000, /*beh*/ bhvCheckerboardElevatorGroup), + OBJECT(/*model*/ MODEL_BOB_CHAIN_CHOMP_GATE, /*pos*/ 1456, 768, 446, /*angle*/ 0, 326, 0, /*bhvParam*/ 0, /*bhv*/ bhvChainChompGate), + OBJECT(/*model*/ MODEL_BOB_SEESAW_PLATFORM, /*pos*/ -2303, 717, 1024, /*angle*/ 0, 45, 0, /*bhvParam*/ BPARAM2(0x03), /*bhv*/ bhvSeesawPlatform), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2050, 0, -3069, /*angle*/ 0, 25, 0, /*bhvParam*/ BPARAM2(OPENABLE_GRILL_BP_BOB), /*bhv*/ bhvOpenableGrill), + OBJECT(/*model*/ MODEL_PURPLE_SWITCH, /*pos*/ -2283, 0, -3682, /*angle*/ 0, 27, 0, /*bhvParam*/ 0, /*bhv*/ bhvFloorSwitchGrills), + OBJECT(/*model*/ MODEL_CHECKERBOARD_PLATFORM, /*pos*/ 1612, 300, 4611, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(0) | BPARAM2(40), /*bhv*/ bhvCheckerboardElevatorGroup), RETURN(), }; static const LevelScript script_func_local_2[] = { - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 1535, 3840, -5561, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBobBowlingBallSpawner, /*acts*/ ACT_1 | ACT_2), - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 1535, 3840, -5561, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTtmBowlingBallSpawner, /*acts*/ ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 524, 2825, -5400, /*angle*/ 0, 0, 0, /*behParam*/ 0x00020000, /*beh*/ bhvBobBowlingBallSpawner, /*acts*/ ACT_1 | ACT_2), - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 524, 2825, -5400, /*angle*/ 0, 0, 0, /*behParam*/ 0x00020000, /*beh*/ bhvTtmBowlingBallSpawner, /*acts*/ ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT (/*model*/ MODEL_BOWLING_BALL, /*pos*/ -993, 886, -3565, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPitBowlingBall), - OBJECT (/*model*/ MODEL_BOWLING_BALL, /*pos*/ -785, 886, -4301, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPitBowlingBall), - OBJECT_WITH_ACTS(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -93, 886, -3414, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPitBowlingBall, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_BOBOMB_BUDDY, /*pos*/ -5723, 140, 6017, /*angle*/ 0, 0, 0, /*behParam*/ DIALOG_002 << 16, /*beh*/ bhvBobombBuddy, /*acts*/ ACT_1), - OBJECT_WITH_ACTS(/*model*/ MODEL_BOBOMB_BUDDY, /*pos*/ -6250, 0, 6680, /*angle*/ 0, 0, 0, /*behParam*/ DIALOG_001 << 16, /*beh*/ bhvBobombBuddy, /*acts*/ ACT_1), - OBJECT_WITH_ACTS(/*model*/ MODEL_BOBOMB_BUDDY, /*pos*/ -5723, 140, 6017, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBobombBuddyOpensCannon, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_BOBOMB_BUDDY, /*pos*/ -6250, 0, 6680, /*angle*/ 0, 0, 0, /*behParam*/ DIALOG_003 << 16, /*beh*/ bhvBobombBuddy, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_CANNON_BASE, /*pos*/ -5694, 128, 5600, /*angle*/ 0, 135, 0, /*behParam*/ 0x00010000, /*beh*/ bhvWaterBombCannon, /*acts*/ ACT_1), - OBJECT_WITH_ACTS(/*model*/ MODEL_DL_CANNON_LID, /*pos*/ -5694, 128, 5600, /*angle*/ 0, 180, 0, /*behParam*/ 0x00000000, /*beh*/ bhvCannonClosed, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 3304, 4242, -4603, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvKoopaRaceEndpoint, /*acts*/ ACT_2), - OBJECT_WITH_ACTS(/*model*/ MODEL_KOOPA_WITH_SHELL, /*pos*/ 3400, 770, 6500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvKoopa, /*acts*/ ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 1535, 3840, -5561, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(BBALL_BP_STYPE_BOB_UPPER), /*bhv*/ bhvBoBBowlingBallSpawner, /*acts*/ ACT_1 | ACT_2), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 1535, 3840, -5561, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(BBALL_BP_STYPE_BOB_UPPER), /*bhv*/ bhvTTMBowlingBallSpawner, /*acts*/ ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 524, 2825, -5400, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(BBALL_BP_STYPE_BOB_LOWER), /*bhv*/ bhvBoBBowlingBallSpawner, /*acts*/ ACT_1 | ACT_2), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 524, 2825, -5400, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(BBALL_BP_STYPE_BOB_LOWER), /*bhv*/ bhvTTMBowlingBallSpawner, /*acts*/ ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT (/*model*/ MODEL_BOWLING_BALL, /*pos*/ -993, 886, -3565, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvPitBowlingBall), + OBJECT (/*model*/ MODEL_BOWLING_BALL, /*pos*/ -785, 886, -4301, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvPitBowlingBall), + OBJECT_WITH_ACTS(/*model*/ MODEL_BOWLING_BALL, /*pos*/ -93, 886, -3414, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvPitBowlingBall, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_BOBOMB_BUDDY, /*pos*/ -5723, 140, 6017, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(DIALOG_002), /*bhv*/ bhvBobombBuddy, /*acts*/ ACT_1), + OBJECT_WITH_ACTS(/*model*/ MODEL_BOBOMB_BUDDY, /*pos*/ -6250, 0, 6680, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(DIALOG_001), /*bhv*/ bhvBobombBuddy, /*acts*/ ACT_1), + OBJECT_WITH_ACTS(/*model*/ MODEL_BOBOMB_BUDDY, /*pos*/ -5723, 140, 6017, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBobombBuddyOpensCannon, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_BOBOMB_BUDDY, /*pos*/ -6250, 0, 6680, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(DIALOG_003), /*bhv*/ bhvBobombBuddy, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_CANNON_BASE, /*pos*/ -5694, 128, 5600, /*angle*/ 0, 135, 0, /*bhvParam*/ BPARAM2(0x01), /*bhv*/ bhvWaterBombCannon, /*acts*/ ACT_1), + OBJECT_WITH_ACTS(/*model*/ MODEL_DL_CANNON_LID, /*pos*/ -5694, 128, 5600, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(0x00), /*bhv*/ bhvCannonClosed, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 3304, 4242, -4603, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvKoopaRaceEndpoint, /*acts*/ ACT_2), + OBJECT_WITH_ACTS(/*model*/ MODEL_KOOPA_WITH_SHELL, /*pos*/ 3400, 770, 6500, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(KOOPA_BP_NORMAL), /*bhv*/ bhvKoopa, /*acts*/ ACT_3 | ACT_4 | ACT_5 | ACT_6), RETURN(), }; static const LevelScript script_func_local_3[] = { - OBJECT_WITH_ACTS(/*model*/ MODEL_KING_BOBOMB, /*pos*/ 1636, 4242, -5567, /*angle*/ 0, -147, 0, /*behParam*/ 0x00000000, /*beh*/ bhvKingBobomb, /*acts*/ ACT_1), - OBJECT_WITH_ACTS(/*model*/ MODEL_KOOPA_WITH_SHELL, /*pos*/ -4004, 0, 5221, /*angle*/ 0, 0, 0, /*behParam*/ 0x01020000, /*beh*/ bhvKoopa, /*acts*/ ACT_2), - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ -6000, 1000, 2400, /*angle*/ 0, 0, 0, /*behParam*/ 0x03000000, /*beh*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ -6600, 1000, 1250, /*angle*/ 0, 0, 0, /*behParam*/ 0x04040000, /*beh*/ bhvHiddenStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 1550, 1200, 300, /*angle*/ 0, 0, 0, /*behParam*/ 0x05000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_KING_BOBOMB, /*pos*/ 1636, 4242, -5567, /*angle*/ 0, -147, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_1), /*bhv*/ bhvKingBobomb, /*acts*/ ACT_1), + OBJECT_WITH_ACTS(/*model*/ MODEL_KOOPA_WITH_SHELL, /*pos*/ -4004, 0, 5221, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_2) | BPARAM2(KOOPA_BP_KOOPA_THE_QUICK_BOB), /*bhv*/ bhvKoopa, /*acts*/ ACT_2), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ -6000, 1000, 2400, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_4), /*bhv*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ -6600, 1000, 1250, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_5) | BPARAM2(0x04), /*bhv*/ bhvHiddenStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 1550, 1200, 300, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_6), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), RETURN(), }; const LevelScript level_bob_entry[] = { INIT_LEVEL(), - LOAD_MIO0( /*seg*/ 0x07, _bob_segment_7SegmentRomStart, _bob_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _bob_segment_7SegmentRomStart, _bob_segment_7SegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _generic_mio0SegmentRomStart, _generic_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0A, _water_skybox_mio0SegmentRomStart, _water_skybox_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x05, _group3_mio0SegmentRomStart, _group3_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0C, _group3_geoSegmentRomStart, _group3_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x06, _group14_mio0SegmentRomStart, _group14_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0D, _group14_geoSegmentRomStart, _group14_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0A, _water_skybox_mio0SegmentRomStart, _water_skybox_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x05, _group3_mio0SegmentRomStart, _group3_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0C, _group3_geoSegmentRomStart, _group3_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x06, _group14_mio0SegmentRomStart, _group14_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0D, _group14_geoSegmentRomStart, _group14_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_1), JUMP_LINK(script_func_global_4), JUMP_LINK(script_func_global_15), @@ -78,18 +78,18 @@ const LevelScript level_bob_entry[] = { JUMP_LINK(script_func_local_1), JUMP_LINK(script_func_local_2), JUMP_LINK(script_func_local_3), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6558, 1000, 6464, /*angle*/ 0, 135, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvSpinAirborneWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 583, 2683, -5387, /*angle*/ 0, -154, 0, /*behParam*/ 0x000B0000, /*beh*/ bhvFadingWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1680, 3835, -5523, /*angle*/ 0, -153, 0, /*behParam*/ 0x000C0000, /*beh*/ bhvFadingWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6612, 1024, -3351, /*angle*/ 0, 107, 0, /*behParam*/ 0x000D0000, /*beh*/ bhvFadingWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1980, 768, 6618, /*angle*/ 0, -151, 0, /*behParam*/ 0x000E0000, /*beh*/ bhvFadingWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_BOB, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0B, /*destLevel*/ LEVEL_BOB, /*destArea*/ 0x01, /*destNode*/ 0x0C, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0C, /*destLevel*/ LEVEL_BOB, /*destArea*/ 0x01, /*destNode*/ 0x0B, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0D, /*destLevel*/ LEVEL_BOB, /*destArea*/ 0x01, /*destNode*/ 0x0E, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0E, /*destLevel*/ LEVEL_BOB, /*destArea*/ 0x01, /*destNode*/ 0x0D, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x32, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x64, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6558, 1000, 6464, /*angle*/ 0, 135, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvSpinAirborneWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 583, 2683, -5387, /*angle*/ 0, -154, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0B), /*bhv*/ bhvFadingWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1680, 3835, -5523, /*angle*/ 0, -153, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0C), /*bhv*/ bhvFadingWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6612, 1024, -3351, /*angle*/ 0, 107, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0D), /*bhv*/ bhvFadingWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1980, 768, 6618, /*angle*/ 0, -151, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0E), /*bhv*/ bhvFadingWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_BOB, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0B, /*destLevel*/ LEVEL_BOB, /*destArea*/ 1, /*destNode*/ WARP_NODE_0C, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0C, /*destLevel*/ LEVEL_BOB, /*destArea*/ 1, /*destNode*/ WARP_NODE_0B, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0D, /*destLevel*/ LEVEL_BOB, /*destArea*/ 1, /*destNode*/ WARP_NODE_0E, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0E, /*destLevel*/ LEVEL_BOB, /*destArea*/ 1, /*destNode*/ WARP_NODE_0D, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_32, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_64, /*flags*/ WARP_NO_CHECKPOINT), TERRAIN(/*terrainData*/ bob_seg7_collision_level), MACRO_OBJECTS(/*objList*/ bob_seg7_macro_objs), SHOW_DIALOG(/*index*/ 0x00, DIALOG_000), diff --git a/levels/bob/seesaw_platform/geo.inc.c b/levels/bob/seesaw_platform/geo.inc.c index dd59ee12..7d738a36 100644 --- a/levels/bob/seesaw_platform/geo.inc.c +++ b/levels/bob/seesaw_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000458 const GeoLayout bob_geo_000458[] = { - GEO_CULLING_RADIUS(1200), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bob_seg7_dl_0700E768), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1200), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bob_seg7_dl_0700E768), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bowser_1/areas/1/geo.inc.c b/levels/bowser_1/areas/1/geo.inc.c index f6acd67f..ea430079 100644 --- a/levels/bowser_1/areas/1/geo.inc.c +++ b/levels/bowser_1/areas/1/geo.inc.c @@ -1,26 +1,26 @@ // 0x0E0000D0 const GeoLayout bowser_1_geo_0000D0[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND(BACKGROUND_GREEN_SKY, geo_skybox_main), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(11, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_1_seg7_dl_07002768), - GEO_RENDER_OBJ(), - GEO_ASM(0, geo_envfx_main), + GEO_BACKGROUND(BACKGROUND_GREEN_SKY, geo_skybox_main), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(11, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_1_seg7_dl_07002768), + GEO_RENDER_OBJ(), + GEO_ASM(0, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bowser_1/leveldata.c b/levels/bowser_1/leveldata.c index d198f19a..b703740e 100644 --- a/levels/bowser_1/leveldata.c +++ b/levels/bowser_1/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "make_const_nonconst.h" diff --git a/levels/bowser_1/script.c b/levels/bowser_1/script.c index e70de999..db4261d4 100644 --- a/levels/bowser_1/script.c +++ b/levels/bowser_1/script.c @@ -21,17 +21,17 @@ const LevelScript level_bowser_1_entry[] = { LOAD_MIO0(/*seg*/ 0x07, _bowser_1_segment_7SegmentRomStart, _bowser_1_segment_7SegmentRomEnd), LOAD_MIO0(/*seg*/ 0x0A, _bidw_skybox_mio0SegmentRomStart, _bidw_skybox_mio0SegmentRomEnd), LOAD_MIO0(/*seg*/ 0x06, _group12_mio0SegmentRomStart, _group12_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0D, _group12_geoSegmentRomStart, _group12_geoSegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0D, _group12_geoSegmentRomStart, _group12_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_13), LOAD_MODEL_FROM_GEO(MODEL_LEVEL_GEOMETRY_03, bowser_1_yellow_sphere_geo), AREA(/*index*/ 1, bowser_1_geo_0000D0), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 1307, 0, /*angle*/ 0, 180, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvSpinAirborneCircleWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_BOWSER_1, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x24, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_BITDW, /*destArea*/ 0x01, /*destNode*/ 0x0C, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 1307, 0, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvSpinAirborneCircleWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_BOWSER_1, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_24, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_BITDW, /*destArea*/ 1, /*destNode*/ WARP_NODE_0C, /*flags*/ WARP_NO_CHECKPOINT), TERRAIN(/*terrainData*/ bowser_1_seg7_collision_level), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0002, /*seq*/ SEQ_LEVEL_BOSS_KOOPA), TERRAIN_TYPE(/*terrainType*/ TERRAIN_STONE), diff --git a/levels/bowser_2/areas/1/geo.inc.c b/levels/bowser_2/areas/1/geo.inc.c index 2b0d120e..141816ff 100644 --- a/levels/bowser_2/areas/1/geo.inc.c +++ b/levels/bowser_2/areas/1/geo.inc.c @@ -1,26 +1,26 @@ // 0x0E000188 const GeoLayout bowser_2_geo_000188[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND(BACKGROUND_FLAMING_SKY, geo_skybox_main), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(11, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_2_seg7_dl_07001930), - GEO_RENDER_OBJ(), - GEO_ASM(12, geo_envfx_main), + GEO_BACKGROUND(BACKGROUND_FLAMING_SKY, geo_skybox_main), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(11, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_2_seg7_dl_07001930), + GEO_RENDER_OBJ(), + GEO_ASM(12, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bowser_2/leveldata.c b/levels/bowser_2/leveldata.c index 7c9e48bf..e4699d3e 100644 --- a/levels/bowser_2/leveldata.c +++ b/levels/bowser_2/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "make_const_nonconst.h" diff --git a/levels/bowser_2/script.c b/levels/bowser_2/script.c index b848c00c..4f1bda10 100644 --- a/levels/bowser_2/script.c +++ b/levels/bowser_2/script.c @@ -16,32 +16,32 @@ #include "levels/bowser_2/header.h" static const LevelScript script_func_local_1[] = { - OBJECT(/*model*/ MODEL_BOWSER_2_TILTING_ARENA, /*pos*/ 0, 0, 0, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTiltingBowserLavaPlatform), - OBJECT(/*model*/ MODEL_BOWSER_BOMB, /*pos*/ 4, 1329, 3598, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBowserBomb), - OBJECT(/*model*/ MODEL_BOWSER_BOMB, /*pos*/ 3584, 1329, 0, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBowserBomb), - OBJECT(/*model*/ MODEL_BOWSER_BOMB, /*pos*/ 0, 1329, -3583, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBowserBomb), - OBJECT(/*model*/ MODEL_BOWSER_BOMB, /*pos*/ -3583, 1329, 0, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBowserBomb), + OBJECT(/*model*/ MODEL_BOWSER_2_TILTING_ARENA, /*pos*/ 0, 0, 0, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvTiltingBowserLavaPlatform), + OBJECT(/*model*/ MODEL_BOWSER_BOMB, /*pos*/ 4, 1329, 3598, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvBowserBomb), + OBJECT(/*model*/ MODEL_BOWSER_BOMB, /*pos*/ 3584, 1329, 0, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvBowserBomb), + OBJECT(/*model*/ MODEL_BOWSER_BOMB, /*pos*/ 0, 1329, -3583, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvBowserBomb), + OBJECT(/*model*/ MODEL_BOWSER_BOMB, /*pos*/ -3583, 1329, 0, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvBowserBomb), RETURN(), }; const LevelScript level_bowser_2_entry[] = { INIT_LEVEL(), - LOAD_MIO0( /*seg*/ 0x0A, _bitfs_skybox_mio0SegmentRomStart, _bitfs_skybox_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0A, _bitfs_skybox_mio0SegmentRomStart, _bitfs_skybox_mio0SegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _fire_mio0SegmentRomStart, _fire_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0B, _effect_mio0SegmentRomStart, _effect_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x07, _bowser_2_segment_7SegmentRomStart, _bowser_2_segment_7SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x06, _group12_mio0SegmentRomStart, _group12_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0D, _group12_geoSegmentRomStart, _group12_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0B, _effect_mio0SegmentRomStart, _effect_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _bowser_2_segment_7SegmentRomStart, _bowser_2_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x06, _group12_mio0SegmentRomStart, _group12_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0D, _group12_geoSegmentRomStart, _group12_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_13), LOAD_MODEL_FROM_GEO(MODEL_BOWSER_2_TILTING_ARENA, bowser_2_geo_000170), AREA(/*index*/ 1, bowser_2_geo_000188), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 2229, 0, /*angle*/ 0, 180, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvSpinAirborneCircleWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_BOWSER_2, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x36, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_BITFS, /*destArea*/ 0x01, /*destNode*/ 0x0C, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 2229, 0, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvSpinAirborneCircleWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_BOWSER_2, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_36, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_BITFS, /*destArea*/ 1, /*destNode*/ WARP_NODE_0C, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_1), TERRAIN(/*terrainData*/ bowser_2_seg7_collision_lava), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0002, /*seq*/ SEQ_LEVEL_BOSS_KOOPA), diff --git a/levels/bowser_2/tilting_platform/geo.inc.c b/levels/bowser_2/tilting_platform/geo.inc.c index 6283a1e6..a11f2edb 100644 --- a/levels/bowser_2/tilting_platform/geo.inc.c +++ b/levels/bowser_2/tilting_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000170 const GeoLayout bowser_2_geo_000170[] = { - GEO_CULLING_RADIUS(5000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_2_seg7_dl_07000FE0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(5000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_2_seg7_dl_07000FE0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bowser_3/areas/1/bomb_stand/geo.inc.c b/levels/bowser_3/areas/1/bomb_stand/geo.inc.c index 3fe21e10..34fd2cfd 100644 --- a/levels/bowser_3/areas/1/bomb_stand/geo.inc.c +++ b/levels/bowser_3/areas/1/bomb_stand/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000380 const GeoLayout bowser_3_geo_000380[] = { - GEO_CULLING_RADIUS(700), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_3_seg7_dl_07004958), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(700), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_3_seg7_dl_07004958), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bowser_3/areas/1/geo.inc.c b/levels/bowser_3/areas/1/geo.inc.c index 9c6e02db..7c48328c 100644 --- a/levels/bowser_3/areas/1/geo.inc.c +++ b/levels/bowser_3/areas/1/geo.inc.c @@ -1,26 +1,26 @@ // 0x0E000398 const GeoLayout bowser_3_geo_000398[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND(BACKGROUND_PURPLE_SKY, geo_skybox_main), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(11, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_3_seg7_dl_070046B0), - GEO_RENDER_OBJ(), - GEO_ASM(0, geo_envfx_main), + GEO_BACKGROUND(BACKGROUND_PURPLE_SKY, geo_skybox_main), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(11, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_3_seg7_dl_070046B0), + GEO_RENDER_OBJ(), + GEO_ASM(0, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bowser_3/falling_platform_1/geo.inc.c b/levels/bowser_3/falling_platform_1/geo.inc.c index f46e4cb6..1f0c118c 100644 --- a/levels/bowser_3/falling_platform_1/geo.inc.c +++ b/levels/bowser_3/falling_platform_1/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000290 const GeoLayout bowser_3_geo_000290[] = { - GEO_CULLING_RADIUS(5000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_3_seg7_dl_070022A8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(5000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_3_seg7_dl_070022A8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bowser_3/falling_platform_10/geo.inc.c b/levels/bowser_3/falling_platform_10/geo.inc.c index 21fded64..15041f22 100644 --- a/levels/bowser_3/falling_platform_10/geo.inc.c +++ b/levels/bowser_3/falling_platform_10/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000368 const GeoLayout bowser_3_geo_000368[] = { - GEO_CULLING_RADIUS(5000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_3_seg7_dl_07003FA0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(5000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_3_seg7_dl_07003FA0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bowser_3/falling_platform_2/geo.inc.c b/levels/bowser_3/falling_platform_2/geo.inc.c index fb3a5cd1..8b173745 100644 --- a/levels/bowser_3/falling_platform_2/geo.inc.c +++ b/levels/bowser_3/falling_platform_2/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0002A8 const GeoLayout bowser_3_geo_0002A8[] = { - GEO_CULLING_RADIUS(5000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_3_seg7_dl_070025E0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(5000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_3_seg7_dl_070025E0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bowser_3/falling_platform_3/geo.inc.c b/levels/bowser_3/falling_platform_3/geo.inc.c index e6e0e5be..586638b7 100644 --- a/levels/bowser_3/falling_platform_3/geo.inc.c +++ b/levels/bowser_3/falling_platform_3/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0002C0 const GeoLayout bowser_3_geo_0002C0[] = { - GEO_CULLING_RADIUS(5000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_3_seg7_dl_07002918), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(5000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_3_seg7_dl_07002918), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bowser_3/falling_platform_4/geo.inc.c b/levels/bowser_3/falling_platform_4/geo.inc.c index d64b8dc8..92fb2277 100644 --- a/levels/bowser_3/falling_platform_4/geo.inc.c +++ b/levels/bowser_3/falling_platform_4/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0002D8 const GeoLayout bowser_3_geo_0002D8[] = { - GEO_CULLING_RADIUS(5000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_3_seg7_dl_07002C50), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(5000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_3_seg7_dl_07002C50), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bowser_3/falling_platform_5/geo.inc.c b/levels/bowser_3/falling_platform_5/geo.inc.c index 2b8500d2..52939954 100644 --- a/levels/bowser_3/falling_platform_5/geo.inc.c +++ b/levels/bowser_3/falling_platform_5/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0002F0 const GeoLayout bowser_3_geo_0002F0[] = { - GEO_CULLING_RADIUS(5000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_3_seg7_dl_07002F88), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(5000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_3_seg7_dl_07002F88), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bowser_3/falling_platform_6/geo.inc.c b/levels/bowser_3/falling_platform_6/geo.inc.c index 2fbe759e..b1ed8ccf 100644 --- a/levels/bowser_3/falling_platform_6/geo.inc.c +++ b/levels/bowser_3/falling_platform_6/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000308 const GeoLayout bowser_3_geo_000308[] = { - GEO_CULLING_RADIUS(5000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_3_seg7_dl_070032C0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(5000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_3_seg7_dl_070032C0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bowser_3/falling_platform_7/geo.inc.c b/levels/bowser_3/falling_platform_7/geo.inc.c index 4465bc7f..45016d71 100644 --- a/levels/bowser_3/falling_platform_7/geo.inc.c +++ b/levels/bowser_3/falling_platform_7/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000320 const GeoLayout bowser_3_geo_000320[] = { - GEO_CULLING_RADIUS(5000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_3_seg7_dl_070035F8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(5000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_3_seg7_dl_070035F8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bowser_3/falling_platform_8/geo.inc.c b/levels/bowser_3/falling_platform_8/geo.inc.c index 88529b73..556ba020 100644 --- a/levels/bowser_3/falling_platform_8/geo.inc.c +++ b/levels/bowser_3/falling_platform_8/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000338 const GeoLayout bowser_3_geo_000338[] = { - GEO_CULLING_RADIUS(5000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_3_seg7_dl_07003930), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(5000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_3_seg7_dl_07003930), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bowser_3/falling_platform_9/geo.inc.c b/levels/bowser_3/falling_platform_9/geo.inc.c index b9b80d50..9673c66b 100644 --- a/levels/bowser_3/falling_platform_9/geo.inc.c +++ b/levels/bowser_3/falling_platform_9/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000350 const GeoLayout bowser_3_geo_000350[] = { - GEO_CULLING_RADIUS(5000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_3_seg7_dl_07003C68), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(5000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_3_seg7_dl_07003C68), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/bowser_3/leveldata.c b/levels/bowser_3/leveldata.c index 3505aed3..d98fe545 100644 --- a/levels/bowser_3/leveldata.c +++ b/levels/bowser_3/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "make_const_nonconst.h" diff --git a/levels/bowser_3/script.c b/levels/bowser_3/script.c index 756ef81b..0ce454c3 100644 --- a/levels/bowser_3/script.c +++ b/levels/bowser_3/script.c @@ -16,21 +16,21 @@ #include "levels/bowser_3/header.h" static const LevelScript script_func_local_1[] = { - OBJECT(/*model*/ MODEL_BOWSER_3_FALLING_PLATFORM_1, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvFallingBowserPlatform), - OBJECT(/*model*/ MODEL_BOWSER_3_FALLING_PLATFORM_2, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00020000, /*beh*/ bhvFallingBowserPlatform), - OBJECT(/*model*/ MODEL_BOWSER_3_FALLING_PLATFORM_3, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00030000, /*beh*/ bhvFallingBowserPlatform), - OBJECT(/*model*/ MODEL_BOWSER_3_FALLING_PLATFORM_4, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00040000, /*beh*/ bhvFallingBowserPlatform), - OBJECT(/*model*/ MODEL_BOWSER_3_FALLING_PLATFORM_5, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00050000, /*beh*/ bhvFallingBowserPlatform), - OBJECT(/*model*/ MODEL_BOWSER_3_FALLING_PLATFORM_6, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00060000, /*beh*/ bhvFallingBowserPlatform), - OBJECT(/*model*/ MODEL_BOWSER_3_FALLING_PLATFORM_7, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00070000, /*beh*/ bhvFallingBowserPlatform), - OBJECT(/*model*/ MODEL_BOWSER_3_FALLING_PLATFORM_8, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00080000, /*beh*/ bhvFallingBowserPlatform), - OBJECT(/*model*/ MODEL_BOWSER_3_FALLING_PLATFORM_9, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00090000, /*beh*/ bhvFallingBowserPlatform), - OBJECT(/*model*/ MODEL_BOWSER_3_FALLING_PLATFORM_10, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvFallingBowserPlatform), - OBJECT(/*model*/ MODEL_BOWSER_BOMB, /*pos*/ -2122, 512, -2912, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBowserBomb), - OBJECT(/*model*/ MODEL_BOWSER_BOMB, /*pos*/ -3362, 512, 1121, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBowserBomb), - OBJECT(/*model*/ MODEL_BOWSER_BOMB, /*pos*/ 0, 512, 3584, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBowserBomb), - OBJECT(/*model*/ MODEL_BOWSER_BOMB, /*pos*/ 3363, 512, 1121, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBowserBomb), - OBJECT(/*model*/ MODEL_BOWSER_BOMB, /*pos*/ 2123, 512, -2912, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBowserBomb), + OBJECT(/*model*/ MODEL_BOWSER_3_FALLING_PLATFORM_1, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(1), /*bhv*/ bhvFallingBowserPlatform), + OBJECT(/*model*/ MODEL_BOWSER_3_FALLING_PLATFORM_2, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(2), /*bhv*/ bhvFallingBowserPlatform), + OBJECT(/*model*/ MODEL_BOWSER_3_FALLING_PLATFORM_3, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(3), /*bhv*/ bhvFallingBowserPlatform), + OBJECT(/*model*/ MODEL_BOWSER_3_FALLING_PLATFORM_4, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(4), /*bhv*/ bhvFallingBowserPlatform), + OBJECT(/*model*/ MODEL_BOWSER_3_FALLING_PLATFORM_5, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(5), /*bhv*/ bhvFallingBowserPlatform), + OBJECT(/*model*/ MODEL_BOWSER_3_FALLING_PLATFORM_6, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(6), /*bhv*/ bhvFallingBowserPlatform), + OBJECT(/*model*/ MODEL_BOWSER_3_FALLING_PLATFORM_7, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(7), /*bhv*/ bhvFallingBowserPlatform), + OBJECT(/*model*/ MODEL_BOWSER_3_FALLING_PLATFORM_8, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(8), /*bhv*/ bhvFallingBowserPlatform), + OBJECT(/*model*/ MODEL_BOWSER_3_FALLING_PLATFORM_9, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(9), /*bhv*/ bhvFallingBowserPlatform), + OBJECT(/*model*/ MODEL_BOWSER_3_FALLING_PLATFORM_10, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(10), /*bhv*/ bhvFallingBowserPlatform), + OBJECT(/*model*/ MODEL_BOWSER_BOMB, /*pos*/ -2122, 512, -2912, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBowserBomb), + OBJECT(/*model*/ MODEL_BOWSER_BOMB, /*pos*/ -3362, 512, 1121, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBowserBomb), + OBJECT(/*model*/ MODEL_BOWSER_BOMB, /*pos*/ 0, 512, 3584, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBowserBomb), + OBJECT(/*model*/ MODEL_BOWSER_BOMB, /*pos*/ 3363, 512, 1121, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBowserBomb), + OBJECT(/*model*/ MODEL_BOWSER_BOMB, /*pos*/ 2123, 512, -2912, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBowserBomb), RETURN(), }; @@ -38,10 +38,10 @@ const LevelScript level_bowser_3_entry[] = { INIT_LEVEL(), LOAD_MIO0(/*seg*/ 0x07, _bowser_3_segment_7SegmentRomStart, _bowser_3_segment_7SegmentRomEnd), LOAD_MIO0(/*seg*/ 0x06, _group12_mio0SegmentRomStart, _group12_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0D, _group12_geoSegmentRomStart, _group12_geoSegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0D, _group12_geoSegmentRomStart, _group12_geoSegmentRomEnd), LOAD_MIO0(/*seg*/ 0x0A, _bits_skybox_mio0SegmentRomStart, _bits_skybox_mio0SegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_13), LOAD_MODEL_FROM_GEO(MODEL_BOWSER_3_FALLING_PLATFORM_1, bowser_3_geo_000290), LOAD_MODEL_FROM_GEO(MODEL_BOWSER_3_FALLING_PLATFORM_2, bowser_3_geo_0002A8), @@ -56,10 +56,10 @@ const LevelScript level_bowser_3_entry[] = { LOAD_MODEL_FROM_GEO(MODEL_LEVEL_GEOMETRY_03, bowser_3_geo_000380), AREA(/*index*/ 1, bowser_3_geo_000398), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 1307, 0, /*angle*/ 0, 183, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvSpinAirborneCircleWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_BOWSER_3, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 1307, 0, /*angle*/ 0, 183, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvSpinAirborneCircleWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_BOWSER_3, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_1), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_BITS, /*destArea*/ 0x01, /*destNode*/ 0x0C, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_BITS, /*destArea*/ 1, /*destNode*/ WARP_NODE_0C, /*flags*/ WARP_NO_CHECKPOINT), TERRAIN(/*terrainData*/ bowser_3_seg7_collision_level), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0002, /*seq*/ SEQ_LEVEL_BOSS_KOOPA_FINAL), TERRAIN_TYPE(/*terrainType*/ TERRAIN_STONE), diff --git a/levels/castle_courtyard/areas/1/collision.inc.c b/levels/castle_courtyard/areas/1/collision.inc.c index 8d1f2bd3..b18e82c7 100644 --- a/levels/castle_courtyard/areas/1/collision.inc.c +++ b/levels/castle_courtyard/areas/1/collision.inc.c @@ -865,7 +865,7 @@ const Collision castle_courtyard_seg7_collision[] = { SPECIAL_OBJECT(/*preset*/ special_spiky_tree, /*pos*/ -2446, -214, -1786), SPECIAL_OBJECT(/*preset*/ special_spiky_tree, /*pos*/ -2820, -214, -1317), SPECIAL_OBJECT(/*preset*/ special_spiky_tree, /*pos*/ -1868, -214, -45), - SPECIAL_OBJECT_WITH_YAW_AND_PARAM(/*preset*/ special_wooden_door_warp, /*pos*/ 0, 0, 461, /*yaw*/ 0, /*behParam2*/ 1), + SPECIAL_OBJECT_WITH_YAW_AND_PARAM(/*preset*/ special_wooden_door_warp, /*pos*/ 0, 0, 461, /*yaw*/ 0, /*bhvParam2*/ 1), COL_WATER_BOX_INIT(1), COL_WATER_BOX(0, -656, -2405, 674, -1074, 51), COL_END(), diff --git a/levels/castle_courtyard/areas/1/geo.inc.c b/levels/castle_courtyard/areas/1/geo.inc.c index 1d1d1dec..ca842b4b 100644 --- a/levels/castle_courtyard/areas/1/geo.inc.c +++ b/levels/castle_courtyard/areas/1/geo.inc.c @@ -1,30 +1,30 @@ // 0x0E000218 const GeoLayout castle_courtyard_geo_000218[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND(BACKGROUND_OCEAN_SKY, geo_skybox_main), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, castle_courtyard_seg7_dl_070048B8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, castle_courtyard_seg7_dl_07005698), - GEO_DISPLAY_LIST(LAYER_ALPHA, castle_courtyard_seg7_dl_07005938), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x2601, geo_movtex_draw_water_regions), - GEO_RENDER_OBJ(), - GEO_ASM(0, geo_envfx_main), + GEO_BACKGROUND(BACKGROUND_OCEAN_SKY, geo_skybox_main), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, castle_courtyard_seg7_dl_070048B8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, castle_courtyard_seg7_dl_07005698), + GEO_DISPLAY_LIST(LAYER_ALPHA, castle_courtyard_seg7_dl_07005938), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x2601, geo_movtex_draw_water_regions), + GEO_RENDER_OBJ(), + GEO_ASM(0, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/castle_courtyard/areas/1/macro.inc.c b/levels/castle_courtyard/areas/1/macro.inc.c index 0f88dfd2..5014065d 100644 --- a/levels/castle_courtyard/areas/1/macro.inc.c +++ b/levels/castle_courtyard/areas/1/macro.inc.c @@ -1,8 +1,8 @@ // 0x07006E20 - 0x07006E4A const MacroObject castle_courtyard_seg7_macro_objs[] = { - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 225, /*pos*/ 3180, 20, 330, /*behParam*/ DIALOG_158), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 135, /*pos*/ -3180, 20, 330, /*behParam*/ DIALOG_159), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 300, 0, -3600, /*behParam*/ DIALOG_102), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -300, 0, -3600, /*behParam*/ DIALOG_160), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 225, /*pos*/ 3180, 20, 330, /*bhvParam*/ DIALOG_158), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 135, /*pos*/ -3180, 20, 330, /*bhvParam*/ DIALOG_159), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 300, 0, -3600, /*bhvParam*/ DIALOG_102), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -300, 0, -3600, /*bhvParam*/ DIALOG_160), MACRO_OBJECT_END(), }; diff --git a/levels/castle_courtyard/areas/1/spire/geo.inc.c b/levels/castle_courtyard/areas/1/spire/geo.inc.c index 1f24eaea..81e9c5db 100644 --- a/levels/castle_courtyard/areas/1/spire/geo.inc.c +++ b/levels/castle_courtyard/areas/1/spire/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000200 const GeoLayout castle_courtyard_geo_000200[] = { - GEO_CULLING_RADIUS(2600), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, castle_courtyard_seg7_dl_07005078), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2600), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, castle_courtyard_seg7_dl_07005078), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/castle_courtyard/leveldata.c b/levels/castle_courtyard/leveldata.c index 6d14ac59..cd6ed84f 100644 --- a/levels/castle_courtyard/leveldata.c +++ b/levels/castle_courtyard/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "dialog_ids.h" diff --git a/levels/castle_courtyard/script.c b/levels/castle_courtyard/script.c index c17cc21a..bffa0a62 100644 --- a/levels/castle_courtyard/script.c +++ b/levels/castle_courtyard/script.c @@ -16,30 +16,30 @@ #include "levels/castle_courtyard/header.h" static const LevelScript script_func_local_1[] = { - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 200, -1652, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvAmbientSounds), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2700, 0, -1652, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBirdsSoundLoop), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2700, 0, -1652, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvBirdsSoundLoop), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 200, -1652, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvAmbientSounds), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2700, 0, -1652, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x00), /*bhv*/ bhvBirdsSoundLoop), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2700, 0, -1652, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x01), /*bhv*/ bhvBirdsSoundLoop), RETURN(), }; static const LevelScript script_func_local_2[] = { - OBJECT(/*model*/ MODEL_BOO, /*pos*/ -3217, 100, -101, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvCourtyardBooTriplet), - OBJECT(/*model*/ MODEL_BOO, /*pos*/ 3317, 100, -1701, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvCourtyardBooTriplet), - OBJECT(/*model*/ MODEL_BOO, /*pos*/ -71, 1, -1387, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvCourtyardBooTriplet), + OBJECT(/*model*/ MODEL_BOO, /*pos*/ -3217, 100, -101, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvCourtyardBooTriplet), + OBJECT(/*model*/ MODEL_BOO, /*pos*/ 3317, 100, -1701, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvCourtyardBooTriplet), + OBJECT(/*model*/ MODEL_BOO, /*pos*/ -71, 1, -1387, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvCourtyardBooTriplet), RETURN(), }; const LevelScript level_castle_courtyard_entry[] = { INIT_LEVEL(), - LOAD_MIO0( /*seg*/ 0x07, _castle_courtyard_segment_7SegmentRomStart, _castle_courtyard_segment_7SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0A, _water_skybox_mio0SegmentRomStart, _water_skybox_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _castle_courtyard_segment_7SegmentRomStart, _castle_courtyard_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0A, _water_skybox_mio0SegmentRomStart, _water_skybox_mio0SegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _outside_mio0SegmentRomStart, _outside_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x05, _group9_mio0SegmentRomStart, _group9_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0C, _group9_geoSegmentRomStart, _group9_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x05, _group9_mio0SegmentRomStart, _group9_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0C, _group9_geoSegmentRomStart, _group9_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_1), JUMP_LINK(script_func_global_10), LOAD_MODEL_FROM_GEO(MODEL_COURTYARD_SPIKY_TREE, spiky_tree_geo), @@ -47,14 +47,14 @@ const LevelScript level_castle_courtyard_entry[] = { LOAD_MODEL_FROM_GEO(MODEL_LEVEL_GEOMETRY_03, castle_courtyard_geo_000200), AREA(/*index*/ 1, castle_courtyard_geo_000218), - OBJECT(/*model*/ MODEL_BOO, /*pos*/ -2360, -100, -2712, /*angle*/ 0, 0, 0, /*behParam*/ 0x01050000, /*beh*/ bhvBooWithCage), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 51, -1000, /*angle*/ 0, 180, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvLaunchStarCollectWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 51, -1000, /*angle*/ 0, 180, 0, /*behParam*/ 0x000B0000, /*beh*/ bhvLaunchDeathWarp), - WARP_NODE(/*id*/ 0x05, /*destLevel*/ LEVEL_BBH, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_CASTLE_COURTYARD, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0B, /*destLevel*/ LEVEL_CASTLE_COURTYARD, /*destArea*/ 0x01, /*destNode*/ 0x0B, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x01, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x02, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 0x01, /*destNode*/ 0x03, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_BOO, /*pos*/ -2360, -100, -2712, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(1) | BPARAM2(WARP_NODE_05), /*bhv*/ bhvBooWithCage), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 51, -1000, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvLaunchStarCollectWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 51, -1000, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0B), /*bhv*/ bhvLaunchDeathWarp), + WARP_NODE(/*id*/ WARP_NODE_05, /*destLevel*/ LEVEL_BBH, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_CASTLE_COURTYARD, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0B, /*destLevel*/ LEVEL_CASTLE_COURTYARD, /*destArea*/ 1, /*destNode*/ WARP_NODE_0B, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_01, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_02, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 1, /*destNode*/ WARP_NODE_03, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_1), JUMP_LINK(script_func_local_2), TERRAIN(/*terrainData*/ castle_courtyard_seg7_collision), diff --git a/levels/castle_grounds/areas/1/11/geo.inc.c b/levels/castle_grounds/areas/1/11/geo.inc.c index e5127f1d..3b85c389 100644 --- a/levels/castle_grounds/areas/1/11/geo.inc.c +++ b/levels/castle_grounds/areas/1/11/geo.inc.c @@ -1,27 +1,27 @@ // 0x0E000660 const GeoLayout castle_grounds_geo_000660[] = { - GEO_CULLING_RADIUS(1000), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 24576), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, castle_grounds_seg7_dl_0700C768), + GEO_CULLING_RADIUS(1000), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 24576), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 459, 0, 0, castle_grounds_seg7_dl_0700C728), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 460, 0, 0, castle_grounds_seg7_dl_0700C6E8), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 345, 0, 0, castle_grounds_seg7_dl_0700C6A8), - GEO_OPEN_NODE(), - GEO_ANIMATED_PART(LAYER_OPAQUE, 287, 0, 0, castle_grounds_seg7_dl_0700C670), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, castle_grounds_seg7_dl_0700C768), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 459, 0, 0, castle_grounds_seg7_dl_0700C728), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 460, 0, 0, castle_grounds_seg7_dl_0700C6E8), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 345, 0, 0, castle_grounds_seg7_dl_0700C6A8), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 287, 0, 0, castle_grounds_seg7_dl_0700C670), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), -GEO_CLOSE_NODE(), //! more close than open nodes -GEO_END(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), //! more close than open nodes + GEO_END(), }; diff --git a/levels/castle_grounds/areas/1/3/geo.inc.c b/levels/castle_grounds/areas/1/3/geo.inc.c index f76d37d2..a6fd4dd7 100644 --- a/levels/castle_grounds/areas/1/3/geo.inc.c +++ b/levels/castle_grounds/areas/1/3/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0006F4 const GeoLayout castle_grounds_geo_0006F4[] = { - GEO_CULLING_RADIUS(2100), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, castle_grounds_seg7_dl_0700A290), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2100), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, castle_grounds_seg7_dl_0700A290), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/castle_grounds/areas/1/7/geo.inc.c b/levels/castle_grounds/areas/1/7/geo.inc.c index 26bae9a8..26702b34 100644 --- a/levels/castle_grounds/areas/1/7/geo.inc.c +++ b/levels/castle_grounds/areas/1/7/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E00070C const GeoLayout castle_grounds_geo_00070C[] = { - GEO_CULLING_RADIUS(15000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, castle_grounds_seg7_dl_0700BB80), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(15000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, castle_grounds_seg7_dl_0700BB80), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/castle_grounds/areas/1/8/geo.inc.c b/levels/castle_grounds/areas/1/8/geo.inc.c index 1a5ae855..6bb3a8a4 100644 --- a/levels/castle_grounds/areas/1/8/geo.inc.c +++ b/levels/castle_grounds/areas/1/8/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000724 const GeoLayout castle_grounds_geo_000724[] = { - GEO_CULLING_RADIUS(15000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, castle_grounds_seg7_dl_0700BC68), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(15000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, castle_grounds_seg7_dl_0700BC68), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/castle_grounds/areas/1/collision.inc.c b/levels/castle_grounds/areas/1/collision.inc.c index 64a1fa82..04cc038c 100644 --- a/levels/castle_grounds/areas/1/collision.inc.c +++ b/levels/castle_grounds/areas/1/collision.inc.c @@ -1410,9 +1410,9 @@ const Collision castle_grounds_seg7_collision_level[] = { SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ 5774, 413, -1114), SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ 5954, 526, -2846), SPECIAL_OBJECT(/*preset*/ special_bubble_tree, /*pos*/ -5204, 296, 811), - SPECIAL_OBJECT_WITH_YAW_AND_PARAM(/*preset*/ special_metal_door_warp, /*pos*/ 3292, -511, -2931, /*yaw*/ 160, /*behParam2*/ 2), - SPECIAL_OBJECT_WITH_YAW_AND_PARAM(/*preset*/ special_castle_door_warp, /*pos*/ -76, 803, -3155, /*yaw*/ 0, /*behParam2*/ 0), - SPECIAL_OBJECT_WITH_YAW_AND_PARAM(/*preset*/ special_castle_door_warp, /*pos*/ 77, 803, -3155, /*yaw*/ 128, /*behParam2*/ 1), + SPECIAL_OBJECT_WITH_YAW_AND_PARAM(/*preset*/ special_metal_door_warp, /*pos*/ 3292, -511, -2931, /*yaw*/ 160, /*bhvParam2*/ 2), + SPECIAL_OBJECT_WITH_YAW_AND_PARAM(/*preset*/ special_castle_door_warp, /*pos*/ -76, 803, -3155, /*yaw*/ 0, /*bhvParam2*/ 0), + SPECIAL_OBJECT_WITH_YAW_AND_PARAM(/*preset*/ special_castle_door_warp, /*pos*/ 77, 803, -3155, /*yaw*/ 128, /*bhvParam2*/ 1), COL_WATER_BOX_INIT(2), COL_WATER_BOX(0, -7129, -7222, 8253, -58, -81), COL_WATER_BOX(1, 1024, -58, 8230, 8137, -81), diff --git a/levels/castle_grounds/areas/1/geo.inc.c b/levels/castle_grounds/areas/1/geo.inc.c index 96233941..59b155c3 100644 --- a/levels/castle_grounds/areas/1/geo.inc.c +++ b/levels/castle_grounds/areas/1/geo.inc.c @@ -1,39 +1,39 @@ // 0x0E00073C const GeoLayout castle_grounds_geo_00073C[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND(BACKGROUND_OCEAN_SKY, geo_skybox_main), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(16, 0, 1500, 2500, 0, 1500, -12000, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, castle_grounds_seg7_dl_07006D70), - GEO_DISPLAY_LIST(LAYER_OPAQUE, castle_grounds_seg7_dl_070095F0), - GEO_DISPLAY_LIST(LAYER_ALPHA, castle_grounds_seg7_dl_0700A860), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, castle_grounds_seg7_dl_0700B1D0), - GEO_DISPLAY_LIST(LAYER_ALPHA, castle_grounds_seg7_dl_0700BA20), - GEO_DISPLAY_LIST(LAYER_OPAQUE_DECAL, castle_grounds_seg7_dl_0700C430), - GEO_DISPLAY_LIST(LAYER_OPAQUE, castle_grounds_seg7_dl_0700C210), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x1601, geo_movtex_draw_nocolor), - GEO_ASM(0x1601, geo_movtex_draw_water_regions), - GEO_RENDER_OBJ(), - GEO_ASM(0, geo_envfx_main), + GEO_BACKGROUND(BACKGROUND_OCEAN_SKY, geo_skybox_main), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_cannon_circle_base), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(16, 0, 1500, 2500, 0, 1500, -12000, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, castle_grounds_seg7_dl_07006D70), + GEO_DISPLAY_LIST(LAYER_OPAQUE, castle_grounds_seg7_dl_070095F0), + GEO_DISPLAY_LIST(LAYER_ALPHA, castle_grounds_seg7_dl_0700A860), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, castle_grounds_seg7_dl_0700B1D0), + GEO_DISPLAY_LIST(LAYER_ALPHA, castle_grounds_seg7_dl_0700BA20), + GEO_DISPLAY_LIST(LAYER_OPAQUE_DECAL, castle_grounds_seg7_dl_0700C430), + GEO_DISPLAY_LIST(LAYER_OPAQUE, castle_grounds_seg7_dl_0700C210), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x1601, geo_movtex_draw_nocolor), + GEO_ASM(0x1601, geo_movtex_draw_water_regions), + GEO_RENDER_OBJ(), + GEO_ASM(0, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_cannon_circle_base), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/castle_grounds/areas/1/macro.inc.c b/levels/castle_grounds/areas/1/macro.inc.c index 94ea2330..d418394f 100644 --- a/levels/castle_grounds/areas/1/macro.inc.c +++ b/levels/castle_grounds/areas/1/macro.inc.c @@ -1,21 +1,21 @@ // 0x07010D08 - 0x07010DB4 const MacroObject castle_grounds_seg7_macro_objs[] = { - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 262, /*pos*/ 5288, 722, -800, /*behParam*/ DIALOG_050), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 90, /*pos*/ 1740, 35, 2500, /*behParam*/ DIALOG_065), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -1566, 260, 3503, /*behParam*/ DIALOG_167), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 82, /*pos*/ -4666, 260, 922, /*behParam*/ DIALOG_051), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_in_pole, /*yaw*/ 0, /*pos*/ -6270, 975, -2145), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -440, 3180, -5000), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 0, 3180, -5200), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 440, 3180, -5000), - MACRO_OBJECT(/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ 13, 3476, -5646), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 0, 535, -500), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 0, 535, -1774), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ 0, 510, -1170, /*behParam*/ 2), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 0, 540, -1774), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 0, 540, -500), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_cannon_open, /*yaw*/ 0, /*pos*/ 2384, 70, 1961, /*behParam*/ 0x40), - MACRO_OBJECT(/*preset*/ macro_butterfly_triplet_2, /*yaw*/ 0, /*pos*/ -6240, 295, 320), - MACRO_OBJECT(/*preset*/ macro_butterfly_triplet_2, /*yaw*/ 0, /*pos*/ 6330, 710, -3760), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 262, /*pos*/ 5288, 722, -800, /*bhvParam*/ DIALOG_050), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 90, /*pos*/ 1740, 35, 2500, /*bhvParam*/ DIALOG_065), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -1566, 260, 3503, /*bhvParam*/ DIALOG_167), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 82, /*pos*/ -4666, 260, 922, /*bhvParam*/ DIALOG_051), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_in_pole, /*yaw*/ 0, /*pos*/ -6270, 975, -2145), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -440, 3180, -5000), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 0, 3180, -5200), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 440, 3180, -5000), + MACRO_OBJECT (/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ 13, 3476, -5646), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 0, 535, -500), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 0, 535, -1774), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ 0, 510, -1170, /*bhvParam*/ 2), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 0, 540, -1774), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 0, 540, -500), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_cannon_open, /*yaw*/ 0, /*pos*/ 2384, 70, 1961, /*bhvParam*/ 0x40), + MACRO_OBJECT (/*preset*/ macro_butterfly_triplet_no_bombs, /*yaw*/ 0, /*pos*/ -6240, 295, 320), + MACRO_OBJECT (/*preset*/ macro_butterfly_triplet_no_bombs, /*yaw*/ 0, /*pos*/ 6330, 710, -3760), MACRO_OBJECT_END(), }; diff --git a/levels/castle_grounds/leveldata.c b/levels/castle_grounds/leveldata.c index 1263f062..a2f7eb7f 100644 --- a/levels/castle_grounds/leveldata.c +++ b/levels/castle_grounds/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "dialog_ids.h" diff --git a/levels/castle_grounds/script.c b/levels/castle_grounds/script.c index 626bece4..a1c899c2 100644 --- a/levels/castle_grounds/script.c +++ b/levels/castle_grounds/script.c @@ -16,95 +16,95 @@ #include "levels/castle_grounds/header.h" static const LevelScript script_func_local_1[] = { - WARP_NODE(/*id*/ 0x00, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x00, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x01, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x01, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x02, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x02, /*flags*/ WARP_NO_CHECKPOINT), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 900, -1710, /*angle*/ 0, 180, 0, /*behParam*/ 0x00030000, /*beh*/ bhvDeathWarp), - WARP_NODE(/*id*/ 0x03, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 0x01, /*destNode*/ 0x03, /*flags*/ WARP_NO_CHECKPOINT), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1328, 260, 4664, /*angle*/ 0, 180, 0, /*behParam*/ 0x00040000, /*beh*/ bhvSpinAirborneCircleWarp), - WARP_NODE(/*id*/ 0x04, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 0x01, /*destNode*/ 0x04, /*flags*/ WARP_NO_CHECKPOINT), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3379, -815, -2025, /*angle*/ 0, 0, 0, /*behParam*/ 0x3C050000, /*beh*/ bhvWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3379, -500, -2025, /*angle*/ 0, 180, 0, /*behParam*/ 0x00060000, /*beh*/ bhvLaunchDeathWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3799, -1199, -5816, /*angle*/ 0, 0, 0, /*behParam*/ 0x00070000, /*beh*/ bhvSwimmingWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3379, -500, -2025, /*angle*/ 0, 180, 0, /*behParam*/ 0x00080000, /*beh*/ bhvLaunchStarCollectWarp), - WARP_NODE(/*id*/ 0x05, /*destLevel*/ LEVEL_VCUTM, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x06, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 0x01, /*destNode*/ 0x06, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x07, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 0x01, /*destNode*/ 0x07, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x08, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 0x01, /*destNode*/ 0x08, /*flags*/ WARP_NO_CHECKPOINT), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5408, 4500, 3637, /*angle*/ 0, 225, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvAirborneWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6901, 2376, -6509, /*angle*/ 0, 230, 0, /*behParam*/ 0x00140000, /*beh*/ bhvAirborneWarp), - WARP_NODE(/*id*/ 0x14, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 0x01, /*destNode*/ 0x14, /*flags*/ WARP_NO_CHECKPOINT), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4997, -1250, 2258, /*angle*/ 0, 210, 0, /*behParam*/ 0x001E0000, /*beh*/ bhvSwimmingWarp), - WARP_NODE(/*id*/ 0x1E, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 0x01, /*destNode*/ 0x1E, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_00, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_00, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_01, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_01, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_02, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_02, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 900, -1710, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_03), /*bhv*/ bhvDeathWarp), + WARP_NODE(/*id*/ WARP_NODE_03, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 1, /*destNode*/ WARP_NODE_03, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1328, 260, 4664, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_04), /*bhv*/ bhvSpinAirborneCircleWarp), + WARP_NODE(/*id*/ WARP_NODE_04, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 1, /*destNode*/ WARP_NODE_04, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3379, -815, -2025, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(60) | BPARAM2(WARP_NODE_05), /*bhv*/ bhvWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3379, -500, -2025, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_06), /*bhv*/ bhvLaunchDeathWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3799, -1199, -5816, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WARP_NODE_07), /*bhv*/ bhvSwimmingWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3379, -500, -2025, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_08), /*bhv*/ bhvLaunchStarCollectWarp), + WARP_NODE(/*id*/ WARP_NODE_05, /*destLevel*/ LEVEL_VCUTM, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_06, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 1, /*destNode*/ WARP_NODE_06, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_07, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 1, /*destNode*/ WARP_NODE_07, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_08, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 1, /*destNode*/ WARP_NODE_08, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5408, 4500, 3637, /*angle*/ 0, 225, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvAirborneWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6901, 2376, -6509, /*angle*/ 0, 230, 0, /*bhvParam*/ BPARAM2(WARP_NODE_14), /*bhv*/ bhvAirborneWarp), + WARP_NODE(/*id*/ WARP_NODE_14, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 1, /*destNode*/ WARP_NODE_14, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4997, -1250, 2258, /*angle*/ 0, 210, 0, /*bhvParam*/ BPARAM2(WARP_NODE_1E), /*bhv*/ bhvSwimmingWarp), + WARP_NODE(/*id*/ WARP_NODE_1E, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 1, /*destNode*/ WARP_NODE_1E, /*flags*/ WARP_NO_CHECKPOINT), RETURN(), }; static const LevelScript script_func_local_2[] = { - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5812, 100, -5937, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWaterfallSoundLoop), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -7430, 1500, 873, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBirdsSoundLoop), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -80, 1500, 5004, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvBirdsSoundLoop), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 7131, 1500, -2989, /*angle*/ 0, 0, 0, /*behParam*/ 0x00020000, /*beh*/ bhvBirdsSoundLoop), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -7430, 1500, -5937, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvAmbientSounds), - OBJECT(/*model*/ MODEL_CASTLE_GROUNDS_VCUTM_GRILL, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMoatGrills), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvInvisibleObjectsUnderBridge), - OBJECT(/*model*/ MODEL_MIST, /*pos*/ -4878, -787, -5690, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWaterMist2), - OBJECT(/*model*/ MODEL_MIST, /*pos*/ -4996, -787, -5548, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvWaterMist2), - OBJECT(/*model*/ MODEL_MIST, /*pos*/ -5114, -787, -5406, /*angle*/ 0, 0, 0, /*behParam*/ 0x00020000, /*beh*/ bhvWaterMist2), - OBJECT(/*model*/ MODEL_MIST, /*pos*/ -5212, -787, -5219, /*angle*/ 0, 0, 0, /*behParam*/ 0x00030000, /*beh*/ bhvWaterMist2), - OBJECT(/*model*/ MODEL_MIST, /*pos*/ -5311, -787, -5033, /*angle*/ 0, 0, 0, /*behParam*/ 0x00040000, /*beh*/ bhvWaterMist2), - OBJECT(/*model*/ MODEL_MIST, /*pos*/ -5419, -787, -4895, /*angle*/ 0, 0, 0, /*behParam*/ 0x00050000, /*beh*/ bhvWaterMist2), - OBJECT(/*model*/ MODEL_MIST, /*pos*/ -5527, -787, -4757, /*angle*/ 0, 0, 0, /*behParam*/ 0x00060000, /*beh*/ bhvWaterMist2), - OBJECT(/*model*/ MODEL_MIST, /*pos*/ -5686, -787, -4733, /*angle*/ 0, 0, 0, /*behParam*/ 0x00070000, /*beh*/ bhvWaterMist2), - OBJECT(/*model*/ MODEL_MIST, /*pos*/ -5845, -787, -4710, /*angle*/ 0, 0, 0, /*behParam*/ 0x00080000, /*beh*/ bhvWaterMist2), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5223, -975, 1667, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvManyBlueFishSpawner), - OBJECT(/*model*/ MODEL_BIRDS, /*pos*/ -5069, 850, 3221, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvBird), - OBJECT(/*model*/ MODEL_BIRDS, /*pos*/ -4711, 742, 433, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvBird), - OBJECT(/*model*/ MODEL_BIRDS, /*pos*/ 5774, 913, -1114, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvBird), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1328, 260, 4664, /*angle*/ 0, 180, 0, /*behParam*/ 0x00280000, /*beh*/ bhvIntroScene), - OBJECT(/*model*/ MODEL_CASTLE_GROUNDS_CANNON_GRILL, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenAt120Stars), - OBJECT(/*model*/ MODEL_LAKITU, /*pos*/ 11, 803, -3015, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvCameraLakitu), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5812, 100, -5937, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvWaterfallSoundLoop), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -7430, 1500, 873, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x00), /*bhv*/ bhvBirdsSoundLoop), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -80, 1500, 5004, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x01), /*bhv*/ bhvBirdsSoundLoop), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 7131, 1500, -2989, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x02), /*bhv*/ bhvBirdsSoundLoop), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -7430, 1500, -5937, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvAmbientSounds), + OBJECT(/*model*/ MODEL_CASTLE_GROUNDS_VCUTM_GRILL, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvMoatGrills), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvInvisibleObjectsUnderBridge), + OBJECT(/*model*/ MODEL_MIST, /*pos*/ -4878, -787, -5690, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvWaterMist2), + OBJECT(/*model*/ MODEL_MIST, /*pos*/ -4996, -787, -5548, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x01), /*bhv*/ bhvWaterMist2), + OBJECT(/*model*/ MODEL_MIST, /*pos*/ -5114, -787, -5406, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x02), /*bhv*/ bhvWaterMist2), + OBJECT(/*model*/ MODEL_MIST, /*pos*/ -5212, -787, -5219, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x03), /*bhv*/ bhvWaterMist2), + OBJECT(/*model*/ MODEL_MIST, /*pos*/ -5311, -787, -5033, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x04), /*bhv*/ bhvWaterMist2), + OBJECT(/*model*/ MODEL_MIST, /*pos*/ -5419, -787, -4895, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x05), /*bhv*/ bhvWaterMist2), + OBJECT(/*model*/ MODEL_MIST, /*pos*/ -5527, -787, -4757, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x06), /*bhv*/ bhvWaterMist2), + OBJECT(/*model*/ MODEL_MIST, /*pos*/ -5686, -787, -4733, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x07), /*bhv*/ bhvWaterMist2), + OBJECT(/*model*/ MODEL_MIST, /*pos*/ -5845, -787, -4710, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x08), /*bhv*/ bhvWaterMist2), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5223, -975, 1667, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvManyBlueFishSpawner), + OBJECT(/*model*/ MODEL_BIRDS, /*pos*/ -5069, 850, 3221, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(BIRD_BP_SPAWNER), /*bhv*/ bhvBird), + OBJECT(/*model*/ MODEL_BIRDS, /*pos*/ -4711, 742, 433, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(BIRD_BP_SPAWNER), /*bhv*/ bhvBird), + OBJECT(/*model*/ MODEL_BIRDS, /*pos*/ 5774, 913, -1114, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(BIRD_BP_SPAWNER), /*bhv*/ bhvBird), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1328, 260, 4664, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(0x28), /*bhv*/ bhvIntroScene), + OBJECT(/*model*/ MODEL_CASTLE_GROUNDS_CANNON_GRILL, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvHiddenAt120Stars), + OBJECT(/*model*/ MODEL_LAKITU, /*pos*/ 11, 803, -3015, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(CAMERA_LAKITU_BP_INTRO), /*bhv*/ bhvCameraLakitu), RETURN(), }; static const LevelScript script_func_local_3[] = { - OBJECT(/*model*/ MODEL_CASTLE_GROUNDS_FLAG, /*pos*/ -3213, 3348, -3011, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvCastleFlagWaving), - OBJECT(/*model*/ MODEL_CASTLE_GROUNDS_FLAG, /*pos*/ 3213, 3348, -3011, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvCastleFlagWaving), - OBJECT(/*model*/ MODEL_CASTLE_GROUNDS_FLAG, /*pos*/ -3835, 3348, -6647, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvCastleFlagWaving), - OBJECT(/*model*/ MODEL_CASTLE_GROUNDS_FLAG, /*pos*/ 3835, 3348, -6647, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvCastleFlagWaving), + OBJECT(/*model*/ MODEL_CASTLE_GROUNDS_FLAG, /*pos*/ -3213, 3348, -3011, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvCastleFlagWaving), + OBJECT(/*model*/ MODEL_CASTLE_GROUNDS_FLAG, /*pos*/ 3213, 3348, -3011, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvCastleFlagWaving), + OBJECT(/*model*/ MODEL_CASTLE_GROUNDS_FLAG, /*pos*/ -3835, 3348, -6647, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvCastleFlagWaving), + OBJECT(/*model*/ MODEL_CASTLE_GROUNDS_FLAG, /*pos*/ 3835, 3348, -6647, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvCastleFlagWaving), RETURN(), }; static const LevelScript script_func_local_4[] = { - OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ -4508, 406, 4400, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvButterfly), - OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ -4408, 406, 4500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvButterfly), - OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ -4708, 406, 4100, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvButterfly), - OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ -6003, 473, -2621, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvButterfly), - OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ -6003, 473, -2321, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvButterfly), - OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ 6543, 461, -617, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvButterfly), - OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ 6143, 461, -617, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvButterfly), - OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ 5773, 775, -5722, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvButterfly), - OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ 5873, 775, -5622, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvButterfly), - OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ 5473, 775, -5322, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvButterfly), - OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ -1504, 326, 3196, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvButterfly), - OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ -1204, 326, 3296, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvButterfly), - OBJECT(/*model*/ MODEL_YOSHI, /*pos*/ 0, 3174, -5625, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYoshi), + OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ -4508, 406, 4400, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvButterfly), + OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ -4408, 406, 4500, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvButterfly), + OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ -4708, 406, 4100, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvButterfly), + OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ -6003, 473, -2621, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvButterfly), + OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ -6003, 473, -2321, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvButterfly), + OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ 6543, 461, -617, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvButterfly), + OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ 6143, 461, -617, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvButterfly), + OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ 5773, 775, -5722, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvButterfly), + OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ 5873, 775, -5622, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvButterfly), + OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ 5473, 775, -5322, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvButterfly), + OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ -1504, 326, 3196, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvButterfly), + OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ -1204, 326, 3296, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvButterfly), + OBJECT(/*model*/ MODEL_YOSHI, /*pos*/ 0, 3174, -5625, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvYoshi), RETURN(), }; const LevelScript level_castle_grounds_entry[] = { INIT_LEVEL(), - LOAD_MIO0( /*seg*/ 0x07, _castle_grounds_segment_7SegmentRomStart, _castle_grounds_segment_7SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0A, _water_skybox_mio0SegmentRomStart, _water_skybox_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _castle_grounds_segment_7SegmentRomStart, _castle_grounds_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0A, _water_skybox_mio0SegmentRomStart, _water_skybox_mio0SegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _outside_mio0SegmentRomStart, _outside_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x05, _group10_mio0SegmentRomStart, _group10_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0C, _group10_geoSegmentRomStart, _group10_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x06, _group15_mio0SegmentRomStart, _group15_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0D, _group15_geoSegmentRomStart, _group15_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x05, _group10_mio0SegmentRomStart, _group10_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0C, _group10_geoSegmentRomStart, _group10_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x06, _group15_mio0SegmentRomStart, _group15_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0D, _group15_geoSegmentRomStart, _group15_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_1), JUMP_LINK(script_func_global_11), JUMP_LINK(script_func_global_16), @@ -118,7 +118,7 @@ const LevelScript level_castle_grounds_entry[] = { LOAD_MODEL_FROM_GEO(MODEL_CASTLE_GROUNDS_CANNON_GRILL, castle_grounds_geo_000724), AREA(/*index*/ 1, castle_grounds_geo_00073C), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 0x01, /*destNode*/ 0x03, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 1, /*destNode*/ WARP_NODE_03, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_1), JUMP_LINK(script_func_local_2), JUMP_LINK(script_func_local_3), diff --git a/levels/castle_inside/areas/1/collision.inc.c b/levels/castle_inside/areas/1/collision.inc.c index a081bccf..45bacdfb 100644 --- a/levels/castle_inside/areas/1/collision.inc.c +++ b/levels/castle_inside/areas/1/collision.inc.c @@ -3744,9 +3744,9 @@ const Collision inside_castle_seg7_area_1_collision[] = { SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ -1023, 0, 1152, /*yaw*/ 128), // unused, probably an early way to set initial position SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_wooden_door, /*pos*/ -271, 0, -824, /*yaw*/ 32), SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_wooden_door, /*pos*/ -1775, 0, -824, /*yaw*/ 224), - SPECIAL_OBJECT_WITH_YAW_AND_PARAM(/*preset*/ special_castle_door_warp, /*pos*/ -1100, 0, 2202, /*yaw*/ 0, /*behParam2*/ 0), - SPECIAL_OBJECT_WITH_YAW_AND_PARAM(/*preset*/ special_castle_door_warp, /*pos*/ -946, 0, 2202, /*yaw*/ 128, /*behParam2*/ 1), - SPECIAL_OBJECT_WITH_YAW_AND_PARAM(/*preset*/ special_wooden_door_warp, /*pos*/ -1023, -101, -5170, /*yaw*/ 0, /*behParam2*/ 2), + SPECIAL_OBJECT_WITH_YAW_AND_PARAM(/*preset*/ special_castle_door_warp, /*pos*/ -1100, 0, 2202, /*yaw*/ 0, /*bhvParam2*/ 0), + SPECIAL_OBJECT_WITH_YAW_AND_PARAM(/*preset*/ special_castle_door_warp, /*pos*/ -946, 0, 2202, /*yaw*/ 128, /*bhvParam2*/ 1), + SPECIAL_OBJECT_WITH_YAW_AND_PARAM(/*preset*/ special_wooden_door_warp, /*pos*/ -1023, -101, -5170, /*yaw*/ 0, /*bhvParam2*/ 2), SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_0stars_door, /*pos*/ -3122, 205, -793, /*yaw*/ 64), SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_1star_door, /*pos*/ 256, 0, -1074, /*yaw*/ 0), SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_1star_door, /*pos*/ 644, 614, -1476, /*yaw*/ 224), diff --git a/levels/castle_inside/areas/1/geo.inc.c b/levels/castle_inside/areas/1/geo.inc.c index 78d3e442..1b15c86c 100644 --- a/levels/castle_inside/areas/1/geo.inc.c +++ b/levels/castle_inside/areas/1/geo.inc.c @@ -1,301 +1,301 @@ // 0x0E000F30 const GeoLayout castle_geo_000F30[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07028FD0), - GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07029578), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702A650), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, inside_castle_seg7_dl_0702AA10), - GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_0702AB20), - GEO_ASM(0, geo_exec_inside_castle_light), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07028FD0), + GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07029578), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702A650), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, inside_castle_seg7_dl_0702AA10), + GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_0702AB20), + GEO_ASM(0, geo_exec_inside_castle_light), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000F70 const GeoLayout castle_geo_000F70[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702E408), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702E408), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000F88 const GeoLayout castle_geo_000F88[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702FD30), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07023DB0), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702FD30), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07023DB0), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000FA8 const GeoLayout castle_geo_000FA8[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07031588), - GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07031720), - GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07031830), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07031588), + GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07031720), + GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07031830), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000FD0 const GeoLayout castle_geo_000FD0[] = { - GEO_NODE_START(), - 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, geo_painting_update), - GEO_ASM(PAINTING_ID(0, 1), geo_painting_draw), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + 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, geo_painting_update), + GEO_ASM(PAINTING_ID(0, 1), geo_painting_draw), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E001000 const GeoLayout castle_geo_001000[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - 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, geo_painting_update), - GEO_ASM(PAINTING_ID(2, 1), geo_painting_draw), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + 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, geo_painting_update), + GEO_ASM(PAINTING_ID(2, 1), geo_painting_draw), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E001038 const GeoLayout castle_geo_001038[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07036D88), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07037988), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07037BF8), - 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, geo_painting_update), - GEO_ASM(PAINTING_ID(3, 1), geo_painting_draw), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07036D88), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07037988), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07037BF8), + 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, geo_painting_update), + GEO_ASM(PAINTING_ID(3, 1), geo_painting_draw), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E001088 const GeoLayout castle_geo_001088[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0703A6C8), - 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, geo_painting_update), - GEO_ASM(PAINTING_ID(1, 1), geo_painting_draw), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0703A6C8), + 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, geo_painting_update), + GEO_ASM(PAINTING_ID(1, 1), geo_painting_draw), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E0010C8 const GeoLayout castle_geo_0010C8[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07028FD0), - GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07029578), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702A650), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, inside_castle_seg7_dl_0702AA10), - GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_0702AB20), - GEO_ASM(0, geo_exec_inside_castle_light), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0703BA08), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07028FD0), + GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07029578), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702A650), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, inside_castle_seg7_dl_0702AA10), + GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_0702AB20), + GEO_ASM(0, geo_exec_inside_castle_light), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0703BA08), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E001110 const GeoLayout castle_geo_001110[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07028FD0), - GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07029578), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702A650), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, inside_castle_seg7_dl_0702AA10), - GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_0702AB20), - GEO_ASM(0, geo_exec_inside_castle_light), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702E408), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07028FD0), + GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07029578), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702A650), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, inside_castle_seg7_dl_0702AA10), + GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_0702AB20), + GEO_ASM(0, geo_exec_inside_castle_light), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702E408), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E001158 const GeoLayout castle_geo_001158[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07028FD0), - GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07029578), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702A650), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, inside_castle_seg7_dl_0702AA10), - GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_0702AB20), - GEO_ASM(0, geo_exec_inside_castle_light), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702FD30), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07023DB0), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07028FD0), + GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07029578), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702A650), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, inside_castle_seg7_dl_0702AA10), + GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_0702AB20), + GEO_ASM(0, geo_exec_inside_castle_light), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702FD30), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07023DB0), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E0011A8 const GeoLayout castle_geo_0011A8[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07028FD0), - GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07029578), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702A650), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, inside_castle_seg7_dl_0702AA10), - GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_0702AB20), - GEO_ASM(0, geo_exec_inside_castle_light), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07031588), - GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07031720), - GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07031830), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07028FD0), + GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07029578), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702A650), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, inside_castle_seg7_dl_0702AA10), + GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_0702AB20), + GEO_ASM(0, geo_exec_inside_castle_light), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07031588), + GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07031720), + GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07031830), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E001200 const GeoLayout castle_geo_001200[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07028FD0), - GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07029578), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702A650), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, inside_castle_seg7_dl_0702AA10), - GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_0702AB20), - 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, geo_painting_update), - GEO_ASM(256, geo_painting_draw), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07028FD0), + GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07029578), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702A650), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, inside_castle_seg7_dl_0702AA10), + GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_0702AB20), + 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, geo_painting_update), + GEO_ASM(256, geo_painting_draw), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E001260 const GeoLayout castle_geo_001260[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07028FD0), - GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07029578), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702A650), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, inside_castle_seg7_dl_0702AA10), - GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_0702AB20), - GEO_ASM( 0, geo_exec_inside_castle_light), - 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, geo_painting_update), - GEO_ASM(258, geo_painting_draw), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07028FD0), + GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07029578), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702A650), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, inside_castle_seg7_dl_0702AA10), + GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_0702AB20), + GEO_ASM( 0, geo_exec_inside_castle_light), + 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, geo_painting_update), + GEO_ASM(258, geo_painting_draw), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E0012C8 const GeoLayout castle_geo_0012C8[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07028FD0), - GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07029578), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702A650), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, inside_castle_seg7_dl_0702AA10), - GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_0702AB20), - GEO_ASM( 0, geo_exec_inside_castle_light), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07036D88), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07037988), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07037BF8), - 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, geo_painting_update), - GEO_ASM(PAINTING_ID(3, 1), geo_painting_draw), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07028FD0), + GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07029578), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702A650), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, inside_castle_seg7_dl_0702AA10), + GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_0702AB20), + GEO_ASM( 0, geo_exec_inside_castle_light), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07036D88), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07037988), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07037BF8), + 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, geo_painting_update), + GEO_ASM(PAINTING_ID(3, 1), geo_painting_draw), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E001348 const GeoLayout castle_geo_001348[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07028FD0), - GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07029578), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702A650), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, inside_castle_seg7_dl_0702AA10), - GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_0702AB20), - GEO_ASM( 0, geo_exec_inside_castle_light), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0703A6C8), - 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, geo_painting_update), - GEO_ASM(PAINTING_ID(1, 1), geo_painting_draw), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07028FD0), + GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07029578), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702A650), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, inside_castle_seg7_dl_0702AA10), + GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_0702AB20), + GEO_ASM( 0, geo_exec_inside_castle_light), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0703A6C8), + 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, geo_painting_update), + GEO_ASM(PAINTING_ID(1, 1), geo_painting_draw), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E0013B8 const GeoLayout castle_geo_0013B8[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07028FD0), - GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07029578), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702A650), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, inside_castle_seg7_dl_0702AA10), - GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_0702AB20), - GEO_ASM(0, geo_exec_inside_castle_light), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0703BA08), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07028FD0), + GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07029578), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0702A650), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, inside_castle_seg7_dl_0702AA10), + GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_0702AB20), + GEO_ASM(0, geo_exec_inside_castle_light), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0703BA08), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E001400 const GeoLayout castle_geo_001400[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND_COLOR(0x0001), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(64, 50, 7000, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(13, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_SWITCH_CASE(17, geo_switch_area), - GEO_OPEN_NODE(), - GEO_BRANCH(1, castle_geo_000F30), // 0x0E000F30 - GEO_BRANCH(1, castle_geo_000F70), // 0x0E000F70 - GEO_BRANCH(1, castle_geo_000F88), // 0x0E000F88 - GEO_BRANCH(1, castle_geo_000FA8), // 0x0E000FA8 - GEO_BRANCH(1, castle_geo_000FD0), // 0x0E000FD0 - GEO_BRANCH(1, castle_geo_001000), // 0x0E001000 - GEO_BRANCH(1, castle_geo_001038), // 0x0E001038 - GEO_BRANCH(1, castle_geo_001088), // 0x0E001088 - GEO_BRANCH(1, castle_geo_0010C8), // 0x0E0010C8 - GEO_BRANCH(1, castle_geo_001110), // 0x0E001110 - GEO_BRANCH(1, castle_geo_001158), // 0x0E001158 - GEO_BRANCH(1, castle_geo_0011A8), // 0x0E0011A8 - GEO_BRANCH(1, castle_geo_001200), // 0x0E001200 - GEO_BRANCH(1, castle_geo_001260), // 0x0E001260 - GEO_BRANCH(1, castle_geo_0012C8), // 0x0E0012C8 - GEO_BRANCH(1, castle_geo_001348), // 0x0E001348 - GEO_BRANCH(1, castle_geo_0013B8), // 0x0E0013B8 - GEO_CLOSE_NODE(), - GEO_RENDER_OBJ(), - GEO_ASM(0, geo_envfx_main), + GEO_BACKGROUND_COLOR(0x0001), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(64, 50, 7000, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(13, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(17, geo_switch_area), + GEO_OPEN_NODE(), + GEO_BRANCH(1, castle_geo_000F30), // 0x0E000F30 + GEO_BRANCH(1, castle_geo_000F70), // 0x0E000F70 + GEO_BRANCH(1, castle_geo_000F88), // 0x0E000F88 + GEO_BRANCH(1, castle_geo_000FA8), // 0x0E000FA8 + GEO_BRANCH(1, castle_geo_000FD0), // 0x0E000FD0 + GEO_BRANCH(1, castle_geo_001000), // 0x0E001000 + GEO_BRANCH(1, castle_geo_001038), // 0x0E001038 + GEO_BRANCH(1, castle_geo_001088), // 0x0E001088 + GEO_BRANCH(1, castle_geo_0010C8), // 0x0E0010C8 + GEO_BRANCH(1, castle_geo_001110), // 0x0E001110 + GEO_BRANCH(1, castle_geo_001158), // 0x0E001158 + GEO_BRANCH(1, castle_geo_0011A8), // 0x0E0011A8 + GEO_BRANCH(1, castle_geo_001200), // 0x0E001200 + GEO_BRANCH(1, castle_geo_001260), // 0x0E001260 + GEO_BRANCH(1, castle_geo_0012C8), // 0x0E0012C8 + GEO_BRANCH(1, castle_geo_001348), // 0x0E001348 + GEO_BRANCH(1, castle_geo_0013B8), // 0x0E0013B8 + GEO_CLOSE_NODE(), + GEO_RENDER_OBJ(), + GEO_ASM(0, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/castle_inside/areas/1/macro.inc.c b/levels/castle_inside/areas/1/macro.inc.c index cf28d237..fed0a607 100644 --- a/levels/castle_inside/areas/1/macro.inc.c +++ b/levels/castle_inside/areas/1/macro.inc.c @@ -1,16 +1,16 @@ // 0x07077764 - 0x070777DE const MacroObject inside_castle_seg7_area_1_macro_objs[] = { - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_sign_on_wall, /*yaw*/ 90, /*pos*/ 1178, 614, -2434, /*behParam*/ DIALOG_075), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_sign_on_wall, /*yaw*/ 270, /*pos*/ -3185, 205, -410, /*behParam*/ DIALOG_046), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_sign_on_wall, /*yaw*/ 270, /*pos*/ -3185, 205, -51, /*behParam*/ DIALOG_070), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_sign_on_wall, /*yaw*/ 180, /*pos*/ 435, 0, -1137, /*behParam*/ DIALOG_069), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_sign_on_wall, /*yaw*/ 45, /*pos*/ 1670, 307, -1144, /*behParam*/ DIALOG_147), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_sign_on_wall, /*yaw*/ 180, /*pos*/ -2278, -410, -3002, /*behParam*/ DIALOG_052), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -618, 388, -324), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1430, 388, -324), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -724, 388, -324), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1324, 388, -324), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 2005, 800, -1694), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ 2036, 800, -1673, /*behParam*/ 1), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_sign_on_wall, /*yaw*/ 90, /*pos*/ 1178, 614, -2434, /*bhvParam*/ DIALOG_075), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_sign_on_wall, /*yaw*/ 270, /*pos*/ -3185, 205, -410, /*bhvParam*/ DIALOG_046), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_sign_on_wall, /*yaw*/ 270, /*pos*/ -3185, 205, -51, /*bhvParam*/ DIALOG_070), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_sign_on_wall, /*yaw*/ 180, /*pos*/ 435, 0, -1137, /*bhvParam*/ DIALOG_069), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_sign_on_wall, /*yaw*/ 45, /*pos*/ 1670, 307, -1144, /*bhvParam*/ DIALOG_147), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_sign_on_wall, /*yaw*/ 180, /*pos*/ -2278, -410, -3002, /*bhvParam*/ DIALOG_052), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -618, 388, -324), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1430, 388, -324), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -724, 388, -324), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1324, 388, -324), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 2005, 800, -1694), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ 2036, 800, -1673, /*bhvParam*/ 1), MACRO_OBJECT_END(), }; diff --git a/levels/castle_inside/areas/1/room.inc.c b/levels/castle_inside/areas/1/room.inc.c index 055c00c2..fb101699 100644 --- a/levels/castle_inside/areas/1/room.inc.c +++ b/levels/castle_inside/areas/1/room.inc.c @@ -1,5 +1,5 @@ // 0x0707782C - 0x0707808C -const u8 inside_castle_seg7_area_1_rooms[] = { +const RoomData inside_castle_seg7_area_1_rooms[] = { 1, 9, 9, 1, 9, 9, 9, 9, // 0-7 9, 9, 1, 1, 1, 9, 9, 17, // 8-15 1, 9, 9, 9, 9, 9, 17, 9, // 16-23 diff --git a/levels/castle_inside/areas/2/geo.inc.c b/levels/castle_inside/areas/2/geo.inc.c index 29748a6e..5433d088 100644 --- a/levels/castle_inside/areas/2/geo.inc.c +++ b/levels/castle_inside/areas/2/geo.inc.c @@ -1,200 +1,200 @@ // 0x0E001560 const GeoLayout castle_geo_001560[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0703E6F0), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0703E6F0), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E001578 const GeoLayout castle_geo_001578[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - 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, 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(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + 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, 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(), }; // 0x0E0015B8 const GeoLayout castle_geo_0015B8[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - 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, geo_painting_update), - GEO_ASM(PAINTING_ID(12, 1), geo_painting_draw), - GEO_ASM( 0, geo_render_mirror_mario), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + 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, geo_painting_update), + GEO_ASM(PAINTING_ID(12, 1), geo_painting_draw), + GEO_ASM( 0, geo_render_mirror_mario), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E0015F8 const GeoLayout castle_geo_0015F8[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0704C7D8), - 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(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0704C7D8), + 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(), }; // 0x0E001628 const GeoLayout castle_geo_001628[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07050938), - 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, geo_painting_update), - GEO_ASM(PAINTING_ID(11, 1), geo_painting_draw), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07050938), + 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, geo_painting_update), + GEO_ASM(PAINTING_ID(11, 1), geo_painting_draw), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E001668 const GeoLayout castle_geo_001668[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - 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_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + 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_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E001690 const GeoLayout castle_geo_001690[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0703E6F0), - 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, 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(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0703E6F0), + 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, 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(), }; // 0x0E0016D8 const GeoLayout castle_geo_0016D8[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - 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_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, 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(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + 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_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, 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(), }; // 0x0E001740 const GeoLayout castle_geo_001740[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - 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_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0704C7D8), - 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(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + 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_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0704C7D8), + 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(), }; // 0x0E001798 const GeoLayout castle_geo_001798[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - 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_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07050938), - 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, 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(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + 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_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07050938), + 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, 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(), }; // 0x0E001800 const GeoLayout castle_geo_001800[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07050938), - 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_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, geo_painting_update), - GEO_ASM(PAINTING_ID(11, 1), geo_painting_draw), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07050938), + 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_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, geo_painting_update), + GEO_ASM(PAINTING_ID(11, 1), geo_painting_draw), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E001858 const GeoLayout castle_geo_001858[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND_COLOR(0x0001), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(64, 50, 8000, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(4, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_SWITCH_CASE(11, geo_switch_area), - GEO_OPEN_NODE(), - GEO_BRANCH(1, castle_geo_001560), // 0x0E001560 - GEO_BRANCH(1, castle_geo_001578), // 0x0E001578 - GEO_BRANCH(1, castle_geo_0015B8), // 0x0E0015B8 - GEO_BRANCH(1, castle_geo_0015F8), // 0x0E0015F8 - GEO_BRANCH(1, castle_geo_001628), // 0x0E001628 - GEO_BRANCH(1, castle_geo_001668), // 0x0E001668 - GEO_BRANCH(1, castle_geo_001690), // 0x0E001690 - GEO_BRANCH(1, castle_geo_0016D8), // 0x0E0016D8 - GEO_BRANCH(1, castle_geo_001740), // 0x0E001740 - GEO_BRANCH(1, castle_geo_001798), // 0x0E001798 - GEO_BRANCH(1, castle_geo_001800), // 0x0E001800 - GEO_CLOSE_NODE(), - GEO_RENDER_OBJ(), - GEO_ASM(0, geo_envfx_main), + GEO_BACKGROUND_COLOR(0x0001), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(64, 50, 8000, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(4, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(11, geo_switch_area), + GEO_OPEN_NODE(), + GEO_BRANCH(1, castle_geo_001560), // 0x0E001560 + GEO_BRANCH(1, castle_geo_001578), // 0x0E001578 + GEO_BRANCH(1, castle_geo_0015B8), // 0x0E0015B8 + GEO_BRANCH(1, castle_geo_0015F8), // 0x0E0015F8 + GEO_BRANCH(1, castle_geo_001628), // 0x0E001628 + GEO_BRANCH(1, castle_geo_001668), // 0x0E001668 + GEO_BRANCH(1, castle_geo_001690), // 0x0E001690 + GEO_BRANCH(1, castle_geo_0016D8), // 0x0E0016D8 + GEO_BRANCH(1, castle_geo_001740), // 0x0E001740 + GEO_BRANCH(1, castle_geo_001798), // 0x0E001798 + GEO_BRANCH(1, castle_geo_001800), // 0x0E001800 + GEO_CLOSE_NODE(), + GEO_RENDER_OBJ(), + GEO_ASM(0, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/castle_inside/areas/2/macro.inc.c b/levels/castle_inside/areas/2/macro.inc.c index 5ae3bd18..12ed72b0 100644 --- a/levels/castle_inside/areas/2/macro.inc.c +++ b/levels/castle_inside/areas/2/macro.inc.c @@ -1,5 +1,5 @@ // 0x070777E0 - 0x070777EC const MacroObject inside_castle_seg7_area_2_macro_objs[] = { - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_sign_on_wall, /*yaw*/ 90, /*pos*/ 164, 1203, 2278, /*behParam*/ DIALOG_019), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_sign_on_wall, /*yaw*/ 90, /*pos*/ 164, 1203, 2278, /*bhvParam*/ DIALOG_019), MACRO_OBJECT_END(), }; diff --git a/levels/castle_inside/areas/2/pendulum/geo.inc.c b/levels/castle_inside/areas/2/pendulum/geo.inc.c index 19e4a400..d13fb854 100644 --- a/levels/castle_inside/areas/2/pendulum/geo.inc.c +++ b/levels/castle_inside/areas/2/pendulum/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E001518 const GeoLayout castle_geo_001518[] = { - GEO_CULLING_RADIUS(600), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_070512F8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(600), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_070512F8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/castle_inside/areas/2/room.inc.c b/levels/castle_inside/areas/2/room.inc.c index 4a8af19a..a2b40730 100644 --- a/levels/castle_inside/areas/2/room.inc.c +++ b/levels/castle_inside/areas/2/room.inc.c @@ -1,5 +1,5 @@ // 0x0707808C -const u8 inside_castle_seg7_area_2_rooms[] = { +const RoomData inside_castle_seg7_area_2_rooms[] = { 6, 6, 6, 6, 6, 6, 6, 6, // 2144-2151 6, 6, 6, 6, 6, 6, 6, 6, // 2152-2159 6, 6, 6, 6, 6, 6, 6, 6, // 2160-2167 diff --git a/levels/castle_inside/areas/3/collision.inc.c b/levels/castle_inside/areas/3/collision.inc.c index a74959bc..c74cfacb 100644 --- a/levels/castle_inside/areas/3/collision.inc.c +++ b/levels/castle_inside/areas/3/collision.inc.c @@ -2516,7 +2516,7 @@ const Collision inside_castle_seg7_area_3_collision[] = { SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_wooden_door, /*pos*/ -332, -767, 205, /*yaw*/ 0), SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_wooden_door, /*pos*/ 717, -1177, -869, /*yaw*/ 192), SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_0stars_door, /*pos*/ 1126, -1074, -2661, /*yaw*/ 192), - SPECIAL_OBJECT_WITH_YAW_AND_PARAM(/*preset*/ special_metal_door_warp, /*pos*/ 7885, -1586, -511, /*yaw*/ 192, /*behParam2*/ 2), + SPECIAL_OBJECT_WITH_YAW_AND_PARAM(/*preset*/ special_metal_door_warp, /*pos*/ 7885, -1586, -511, /*yaw*/ 192, /*bhvParam2*/ 2), COL_WATER_BOX_INIT(3), COL_WATER_BOX(1, 973, -1279, 5786, 256, -1228), COL_WATER_BOX(0, -3225, -4146, 870, -255, -1228), diff --git a/levels/castle_inside/areas/3/geo.inc.c b/levels/castle_inside/areas/3/geo.inc.c index 70b295fe..56ffe57e 100644 --- a/levels/castle_inside/areas/3/geo.inc.c +++ b/levels/castle_inside/areas/3/geo.inc.c @@ -1,185 +1,185 @@ // 0x0E001958 const GeoLayout castle_geo_001958[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0705E088), - GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_0705E2A0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, inside_castle_seg7_dl_0705E450), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0705E088), + GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_0705E2A0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, inside_castle_seg7_dl_0705E450), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E001980 const GeoLayout castle_geo_001980[] = { - GEO_NODE_START(), - 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, 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(), - GEO_RETURN(), + GEO_NODE_START(), + 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, 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(), + GEO_RETURN(), }; // 0x0E0019C8 const GeoLayout castle_geo_0019C8[] = { - GEO_NODE_START(), - 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, geo_painting_update), - GEO_ASM(PAINTING_ID(6, 1), geo_painting_draw), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + 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, geo_painting_update), + GEO_ASM(PAINTING_ID(6, 1), geo_painting_draw), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E0019F8 const GeoLayout castle_geo_0019F8[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - 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, geo_movtex_pause_control), - GEO_ASM(0x0612, geo_movtex_draw_water_regions), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + 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, geo_movtex_pause_control), + GEO_ASM(0x0612, geo_movtex_draw_water_regions), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E001A30 const GeoLayout castle_geo_001A30[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07068850), - GEO_ASM( 0, geo_painting_update), - GEO_ASM(PAINTING_ID(7, 1), geo_painting_draw), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07068850), + GEO_ASM( 0, geo_painting_update), + GEO_ASM(PAINTING_ID(7, 1), geo_painting_draw), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E001A58 const GeoLayout castle_geo_001A58[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0705E088), - 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_070616E8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, inside_castle_seg7_dl_07061C20), - 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(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0705E088), + 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_070616E8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, inside_castle_seg7_dl_07061C20), + 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(), + GEO_RETURN(), }; // 0x0E001AB8 const GeoLayout castle_geo_001AB8[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0705E088), - 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, geo_painting_update), - GEO_ASM(PAINTING_ID(7, 1), geo_painting_draw), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0705E088), + 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, geo_painting_update), + GEO_ASM(PAINTING_ID(7, 1), geo_painting_draw), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E001AF8 const GeoLayout castle_geo_001AF8[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0705E088), - 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_07066CE0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, inside_castle_seg7_dl_07066E90), - GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07066FA0), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0612, geo_movtex_draw_water_regions), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0705E088), + 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_07066CE0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, inside_castle_seg7_dl_07066E90), + GEO_DISPLAY_LIST(LAYER_ALPHA, inside_castle_seg7_dl_07066FA0), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x0612, geo_movtex_draw_water_regions), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E001B48 const GeoLayout castle_geo_001B48[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_070616E8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, inside_castle_seg7_dl_07061C20), - 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, 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), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_070616E8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, inside_castle_seg7_dl_07061C20), + 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, 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), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E001BB0 const GeoLayout castle_geo_001BB0[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_070616E8), - 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, 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(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_070616E8), + 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, 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(), + GEO_RETURN(), }; // 0x0E001C10 const GeoLayout castle_geo_001C10[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND_COLOR(0x0001), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(64, 50, 6400, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(4, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_SWITCH_CASE(10, geo_switch_area), - GEO_OPEN_NODE(), - GEO_BRANCH(1, castle_geo_001958), // 0x0E001958 - GEO_BRANCH(1, castle_geo_001980), // 0x0E001980 - GEO_BRANCH(1, castle_geo_0019C8), // 0x0E0019C8 - GEO_BRANCH(1, castle_geo_0019F8), // 0x0E0019F8 - GEO_BRANCH(1, castle_geo_001A30), // 0x0E001A30 - GEO_BRANCH(1, castle_geo_001A58), // 0x0E001A58 - GEO_BRANCH(1, castle_geo_001AB8), // 0x0E001AB8 - GEO_BRANCH(1, castle_geo_001AF8), // 0x0E001AF8 - GEO_BRANCH(1, castle_geo_001B48), // 0x0E001B48 - GEO_BRANCH(1, castle_geo_001BB0), // 0x0E001BB0 - GEO_CLOSE_NODE(), - GEO_RENDER_OBJ(), - GEO_ASM(0, geo_envfx_main), + GEO_BACKGROUND_COLOR(0x0001), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(64, 50, 6400, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(4, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(10, geo_switch_area), + GEO_OPEN_NODE(), + GEO_BRANCH(1, castle_geo_001958), // 0x0E001958 + GEO_BRANCH(1, castle_geo_001980), // 0x0E001980 + GEO_BRANCH(1, castle_geo_0019C8), // 0x0E0019C8 + GEO_BRANCH(1, castle_geo_0019F8), // 0x0E0019F8 + GEO_BRANCH(1, castle_geo_001A30), // 0x0E001A30 + GEO_BRANCH(1, castle_geo_001A58), // 0x0E001A58 + GEO_BRANCH(1, castle_geo_001AB8), // 0x0E001AB8 + GEO_BRANCH(1, castle_geo_001AF8), // 0x0E001AF8 + GEO_BRANCH(1, castle_geo_001B48), // 0x0E001B48 + GEO_BRANCH(1, castle_geo_001BB0), // 0x0E001BB0 + GEO_CLOSE_NODE(), + GEO_RENDER_OBJ(), + GEO_ASM(0, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/castle_inside/areas/3/macro.inc.c b/levels/castle_inside/areas/3/macro.inc.c index ab8212f7..c5fd9690 100644 --- a/levels/castle_inside/areas/3/macro.inc.c +++ b/levels/castle_inside/areas/3/macro.inc.c @@ -1,10 +1,10 @@ // 0x070777EC - 0x0707782A const MacroObject inside_castle_seg7_area_3_macro_objs[] = { - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_sign_on_wall, /*yaw*/ 0, /*pos*/ 6400, -1178, -1270, /*behParam*/ DIALOG_077), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 2130, -2508, -946), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 2130, -2508, -92), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 3515, -2508, -946), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 3515, -2508, -92), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ 2861, -2508, -515, /*behParam*/ 4), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_sign_on_wall, /*yaw*/ 0, /*pos*/ 6400, -1178, -1270, /*bhvParam*/ DIALOG_077), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 2130, -2508, -946), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 2130, -2508, -92), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 3515, -2508, -946), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 3515, -2508, -92), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ 2861, -2508, -515, /*bhvParam*/ 4), MACRO_OBJECT_END(), }; diff --git a/levels/castle_inside/areas/3/room.inc.c b/levels/castle_inside/areas/3/room.inc.c index 8802cd46..cecf412f 100644 --- a/levels/castle_inside/areas/3/room.inc.c +++ b/levels/castle_inside/areas/3/room.inc.c @@ -1,5 +1,5 @@ // 0x07078870 - 0x07078DE3 -const u8 inside_castle_seg7_area_3_rooms[] = { +const RoomData inside_castle_seg7_area_3_rooms[] = { 5, 5, 5, 5, 5, 5, 5, 5, // 0-7 5, 5, 5, 5, 5, 5, 5, 5, // 8-15 5, 5, 5, 5, 5, 5, 5, 5, // 16-23 diff --git a/levels/castle_inside/clock_hour_hand/geo.inc.c b/levels/castle_inside/clock_hour_hand/geo.inc.c index aa80186f..9b8de712 100644 --- a/levels/castle_inside/clock_hour_hand/geo.inc.c +++ b/levels/castle_inside/clock_hour_hand/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E001548 const GeoLayout castle_geo_001548[] = { - GEO_CULLING_RADIUS(300), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07059190), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(300), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07059190), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/castle_inside/clock_minute_hand/geo.inc.c b/levels/castle_inside/clock_minute_hand/geo.inc.c index 3f8baee6..f08aa526 100644 --- a/levels/castle_inside/clock_minute_hand/geo.inc.c +++ b/levels/castle_inside/clock_minute_hand/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E001530 const GeoLayout castle_geo_001530[] = { - GEO_CULLING_RADIUS(300), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07058950), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(300), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07058950), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/castle_inside/header.h b/levels/castle_inside/header.h index dfd63923..043e3383 100644 --- a/levels/castle_inside/header.h +++ b/levels/castle_inside/header.h @@ -141,9 +141,9 @@ extern const Collision inside_castle_seg7_collision_ddd_warp_2[]; extern const MacroObject inside_castle_seg7_area_1_macro_objs[]; extern const MacroObject inside_castle_seg7_area_2_macro_objs[]; extern const MacroObject inside_castle_seg7_area_3_macro_objs[]; -extern const u8 inside_castle_seg7_area_1_rooms[]; -extern const u8 inside_castle_seg7_area_2_rooms[]; -extern const u8 inside_castle_seg7_area_3_rooms[]; +extern const RoomData inside_castle_seg7_area_1_rooms[]; +extern const RoomData inside_castle_seg7_area_2_rooms[]; +extern const RoomData inside_castle_seg7_area_3_rooms[]; extern const Collision inside_castle_seg7_collision_floor_trap[]; extern const Collision inside_castle_seg7_collision_star_door[]; extern const Collision inside_castle_seg7_collision_water_level_pillar[]; diff --git a/levels/castle_inside/leveldata.c b/levels/castle_inside/leveldata.c index 7052031c..3f64fc2f 100644 --- a/levels/castle_inside/leveldata.c +++ b/levels/castle_inside/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "dialog_ids.h" diff --git a/levels/castle_inside/painting.inc.c b/levels/castle_inside/painting.inc.c index d668820f..096d2ebd 100644 --- a/levels/castle_inside/painting.inc.c +++ b/levels/castle_inside/painting.inc.c @@ -574,7 +574,7 @@ static const Lights1 inside_castle_seg7_lights_07022528 = gdSPDefLights1( // No gdSPDefLights1 macro defined because of odd different light value (0xff and 0xfa) static const Lights1 inside_castle_seg7_lights_07022540 = { {{ {0x40, 0x40, 0x80}, 0, {0x40, 0x40, 0x80}, 0} }, - {{{ {0x64, 0x64, 0xff}, 0, {0x64, 0x64, 0xfa}, 0, {0x28, 0x28, 0x28},0} }} + {{{ {0x64, 0x64, 0xff}, 0, {0x64, 0x64, 0xfa}, 0, {0x28, 0x28, 0x28},0} }} }; // 0x07022558 - 0x07022598 diff --git a/levels/castle_inside/script.c b/levels/castle_inside/script.c index 5d9ae4fb..d6d9eb3a 100644 --- a/levels/castle_inside/script.c +++ b/levels/castle_inside/script.c @@ -17,216 +17,216 @@ #include "levels/castle_inside/header.h" static const LevelScript script_func_local_1[] = { - WARP_NODE(/*id*/ 0x00, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 0x01, /*destNode*/ 0x00, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x01, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 0x01, /*destNode*/ 0x01, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x02, /*destLevel*/ LEVEL_CASTLE_COURTYARD, /*destArea*/ 0x01, /*destNode*/ 0x01, /*flags*/ WARP_NO_CHECKPOINT), - OBJECT(/*model*/ MODEL_CASTLE_STAR_DOOR_8_STARS, /*pos*/ -2706, 512, -1409, /*angle*/ 0, 45, 0, /*behParam*/ 0x08000000, /*beh*/ bhvStarDoor), - OBJECT(/*model*/ MODEL_CASTLE_STAR_DOOR_8_STARS, /*pos*/ -2598, 512, -1517, /*angle*/ 0, 225, 0, /*behParam*/ 0x08000000, /*beh*/ bhvStarDoor), - OBJECT(/*model*/ MODEL_CASTLE_KEY_DOOR, /*pos*/ -1100, 512, -1074, /*angle*/ 0, 0, 0, /*behParam*/ 0x01030000, /*beh*/ bhvDoorWarp), - OBJECT(/*model*/ MODEL_CASTLE_KEY_DOOR, /*pos*/ -946, 512, -1074, /*angle*/ 0, 180, 0, /*behParam*/ 0x01040000, /*beh*/ bhvDoorWarp), - OBJECT(/*model*/ MODEL_CASTLE_KEY_DOOR, /*pos*/ -1100, -1074, 922, /*angle*/ 0, 0, 0, /*behParam*/ 0x02050000, /*beh*/ bhvDoorWarp), - OBJECT(/*model*/ MODEL_CASTLE_KEY_DOOR, /*pos*/ -946, -1074, 922, /*angle*/ 0, 180, 0, /*behParam*/ 0x02060000, /*beh*/ bhvDoorWarp), - WARP_NODE(/*id*/ 0x03, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x00, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x04, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x01, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x05, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x00, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x06, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x01, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x00, /*destLevel*/ LEVEL_BOB, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x01, /*destLevel*/ LEVEL_BOB, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x02, /*destLevel*/ LEVEL_BOB, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x03, /*destLevel*/ LEVEL_CCM, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x04, /*destLevel*/ LEVEL_CCM, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x05, /*destLevel*/ LEVEL_CCM, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x06, /*destLevel*/ LEVEL_WF, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x07, /*destLevel*/ LEVEL_WF, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x08, /*destLevel*/ LEVEL_WF, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x09, /*destLevel*/ LEVEL_JRB, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_JRB, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x0B, /*destLevel*/ LEVEL_JRB, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2013, 768, -2014, /*angle*/ 0, 0, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_PSS, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5513, 512, -4324, /*angle*/ 0, 0, 0, /*behParam*/ 0x300B0000, /*beh*/ bhvWarp), - WARP_NODE(/*id*/ 0x0B, /*destLevel*/ LEVEL_BITDW, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1963, 819, 1280, /*angle*/ 0, 0, 0, /*behParam*/ 0x050C0000, /*beh*/ bhvWarp), - WARP_NODE(/*id*/ 0x0C, /*destLevel*/ LEVEL_SA, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF2, /*destLevel*/ LEVEL_TOTWC, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1024, 512, -650, /*angle*/ 0, 0, 0, /*behParam*/ 0x001E0000, /*beh*/ bhvInstantActiveWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1024, -50, 717, /*angle*/ 0, 180, 0, /*behParam*/ 0x001F0000, /*beh*/ bhvInstantActiveWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1024, 900, 717, /*angle*/ 0, 180, 0, /*behParam*/ 0x00200000, /*beh*/ bhvAirborneWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1024, 900, 717, /*angle*/ 0, 180, 0, /*behParam*/ 0x00210000, /*beh*/ bhvAirborneDeathWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1024, 900, 717, /*angle*/ 0, 180, 0, /*behParam*/ 0x00220000, /*beh*/ bhvHardAirKnockBackWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1024, 900, 717, /*angle*/ 0, 180, 0, /*behParam*/ 0x00230000, /*beh*/ bhvDeathWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5513, 512, -4324, /*angle*/ 0, -135, 0, /*behParam*/ 0x00240000, /*beh*/ bhvLaunchStarCollectWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5513, 512, -4324, /*angle*/ 0, -135, 0, /*behParam*/ 0x00250000, /*beh*/ bhvLaunchDeathWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1024, 900, 717, /*angle*/ 0, 0, 0, /*behParam*/ 0x00260000, /*beh*/ bhvAirborneStarCollectWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2816, 1200, -256, /*angle*/ 0, 90, 0, /*behParam*/ 0x00270000, /*beh*/ bhvAirborneStarCollectWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2816, 1200, -256, /*angle*/ 0, 270, 0, /*behParam*/ 0x00280000, /*beh*/ bhvDeathWarp), - WARP_NODE(/*id*/ 0x1E, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x1E, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x1F, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x1F, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x20, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x20, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x21, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x21, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x22, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x22, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x23, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x23, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x24, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x24, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x25, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x25, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x26, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x26, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x27, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x27, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x28, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x28, /*flags*/ WARP_NO_CHECKPOINT), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5422, 717, -461, /*angle*/ 0, 270, 0, /*behParam*/ 0x00320000, /*beh*/ bhvPaintingStarCollectWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2304, 0, -4552, /*angle*/ 0, 180, 0, /*behParam*/ 0x00330000, /*beh*/ bhvPaintingStarCollectWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 256, 102, -4706, /*angle*/ 0, 180, 0, /*behParam*/ 0x00340000, /*beh*/ bhvPaintingStarCollectWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4501, 717, -230, /*angle*/ 0, 90, 0, /*behParam*/ 0x00350000, /*beh*/ bhvPaintingStarCollectWarp), - WARP_NODE(/*id*/ 0x32, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x32, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x33, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x33, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x34, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x34, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x35, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x35, /*flags*/ WARP_NO_CHECKPOINT), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5422, 717, -461, /*angle*/ 0, 270, 0, /*behParam*/ 0x00640000, /*beh*/ bhvPaintingDeathWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2304, 0, -4552, /*angle*/ 0, 180, 0, /*behParam*/ 0x00650000, /*beh*/ bhvPaintingDeathWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 256, 102, -4706, /*angle*/ 0, 180, 0, /*behParam*/ 0x00660000, /*beh*/ bhvPaintingDeathWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4501, 717, -230, /*angle*/ 0, 90, 0, /*behParam*/ 0x00670000, /*beh*/ bhvPaintingDeathWarp), - WARP_NODE(/*id*/ 0x64, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x64, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x65, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x65, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x66, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x66, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x67, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x67, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_00, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 1, /*destNode*/ WARP_NODE_00, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_01, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 1, /*destNode*/ WARP_NODE_01, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_02, /*destLevel*/ LEVEL_CASTLE_COURTYARD, /*destArea*/ 1, /*destNode*/ WARP_NODE_01, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_CASTLE_STAR_DOOR_8_STARS, /*pos*/ -2706, 512, -1409, /*angle*/ 0, 45, 0, /*bhvParam*/ BPARAM1(8), /*bhv*/ bhvStarDoor), + OBJECT(/*model*/ MODEL_CASTLE_STAR_DOOR_8_STARS, /*pos*/ -2598, 512, -1517, /*angle*/ 0, 225, 0, /*bhvParam*/ BPARAM1(8), /*bhv*/ bhvStarDoor), + OBJECT(/*model*/ MODEL_CASTLE_KEY_DOOR, /*pos*/ -1100, 512, -1074, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(0x01) | BPARAM2(WARP_NODE_03), /*bhv*/ bhvDoorWarp), + OBJECT(/*model*/ MODEL_CASTLE_KEY_DOOR, /*pos*/ -946, 512, -1074, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM1(0x01) | BPARAM2(WARP_NODE_04), /*bhv*/ bhvDoorWarp), + OBJECT(/*model*/ MODEL_CASTLE_KEY_DOOR, /*pos*/ -1100, -1074, 922, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(0x02) | BPARAM2(WARP_NODE_05), /*bhv*/ bhvDoorWarp), + OBJECT(/*model*/ MODEL_CASTLE_KEY_DOOR, /*pos*/ -946, -1074, 922, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM1(0x02) | BPARAM2(WARP_NODE_06), /*bhv*/ bhvDoorWarp), + WARP_NODE(/*id*/ WARP_NODE_03, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_00, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_04, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_01, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_05, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_00, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_06, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_01, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_00, /*destLevel*/ LEVEL_BOB, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_01, /*destLevel*/ LEVEL_BOB, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_02, /*destLevel*/ LEVEL_BOB, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_03, /*destLevel*/ LEVEL_CCM, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_04, /*destLevel*/ LEVEL_CCM, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_05, /*destLevel*/ LEVEL_CCM, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_06, /*destLevel*/ LEVEL_WF, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_07, /*destLevel*/ LEVEL_WF, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_08, /*destLevel*/ LEVEL_WF, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_09, /*destLevel*/ LEVEL_JRB, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_JRB, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_0B, /*destLevel*/ LEVEL_JRB, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2013, 768, -2014, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_PSS, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5513, 512, -4324, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(0x30) | BPARAM2(WARP_NODE_0B), /*bhv*/ bhvWarp), + WARP_NODE(/*id*/ WARP_NODE_0B, /*destLevel*/ LEVEL_BITDW, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1963, 819, 1280, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(0x05) | BPARAM2(WARP_NODE_0C), /*bhv*/ bhvWarp), + WARP_NODE(/*id*/ WARP_NODE_0C, /*destLevel*/ LEVEL_SA, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_TOTWC, /*destLevel*/ LEVEL_TOTWC, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1024, 512, -650, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WARP_NODE_1E), /*bhv*/ bhvInstantActiveWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1024, -50, 717, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_1F), /*bhv*/ bhvInstantActiveWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1024, 900, 717, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_20), /*bhv*/ bhvAirborneWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1024, 900, 717, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_21), /*bhv*/ bhvAirborneDeathWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1024, 900, 717, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_22), /*bhv*/ bhvHardAirKnockBackWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1024, 900, 717, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_23), /*bhv*/ bhvDeathWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5513, 512, -4324, /*angle*/ 0, -135, 0, /*bhvParam*/ BPARAM2(WARP_NODE_24), /*bhv*/ bhvLaunchStarCollectWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5513, 512, -4324, /*angle*/ 0, -135, 0, /*bhvParam*/ BPARAM2(WARP_NODE_25), /*bhv*/ bhvLaunchDeathWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1024, 900, 717, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WARP_NODE_26), /*bhv*/ bhvAirborneStarCollectWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2816, 1200, -256, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(WARP_NODE_27), /*bhv*/ bhvAirborneStarCollectWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2816, 1200, -256, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM2(WARP_NODE_28), /*bhv*/ bhvDeathWarp), + WARP_NODE(/*id*/ WARP_NODE_1E, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_1E, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_1F, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_1F, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_20, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_20, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_21, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_21, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_22, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_22, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_23, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_23, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_24, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_24, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_25, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_25, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_26, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_26, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_27, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_27, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_28, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_28, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5422, 717, -461, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM2(WARP_NODE_32), /*bhv*/ bhvPaintingStarCollectWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2304, 0, -4552, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_33), /*bhv*/ bhvPaintingStarCollectWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 256, 102, -4706, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_34), /*bhv*/ bhvPaintingStarCollectWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4501, 717, -230, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(WARP_NODE_35), /*bhv*/ bhvPaintingStarCollectWarp), + WARP_NODE(/*id*/ WARP_NODE_32, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_32, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_33, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_33, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_34, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_34, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_35, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_35, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5422, 717, -461, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM2(WARP_NODE_64), /*bhv*/ bhvPaintingDeathWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2304, 0, -4552, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_65), /*bhv*/ bhvPaintingDeathWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 256, 102, -4706, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_66), /*bhv*/ bhvPaintingDeathWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4501, 717, -230, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(WARP_NODE_67), /*bhv*/ bhvPaintingDeathWarp), + WARP_NODE(/*id*/ WARP_NODE_64, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_64, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_65, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_65, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_66, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_66, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_67, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_67, /*flags*/ WARP_NO_CHECKPOINT), RETURN(), }; static const LevelScript script_func_local_2[] = { - OBJECT(/*model*/ MODEL_CASTLE_KEY_DOOR, /*pos*/ -1100, 512, 3021, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvDoorWarp), - OBJECT(/*model*/ MODEL_CASTLE_KEY_DOOR, /*pos*/ -946, 512, 3021, /*angle*/ 0, 180, 0, /*behParam*/ 0x00010000, /*beh*/ bhvDoorWarp), - WARP_NODE(/*id*/ 0x00, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x03, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x01, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x04, /*flags*/ WARP_NO_CHECKPOINT), - OBJECT(/*model*/ MODEL_CASTLE_STAR_DOOR_50_STARS, /*pos*/ -281, 2253, 4762, /*angle*/ 0, 0, 0, /*behParam*/ 0x32000000, /*beh*/ bhvStarDoor), - OBJECT(/*model*/ MODEL_CASTLE_STAR_DOOR_50_STARS, /*pos*/ -127, 2253, 4762, /*angle*/ 0, 180, 0, /*behParam*/ 0x32000000, /*beh*/ bhvStarDoor), - OBJECT(/*model*/ MODEL_CASTLE_STAR_DOOR_70_STARS, /*pos*/ -281, 3174, 3772, /*angle*/ 0, 0, 0, /*behParam*/ 0x46000000, /*beh*/ bhvStarDoor), - OBJECT(/*model*/ MODEL_CASTLE_STAR_DOOR_70_STARS, /*pos*/ -127, 3174, 3772, /*angle*/ 0, 180, 0, /*behParam*/ 0x46000000, /*beh*/ bhvStarDoor), - PAINTING_WARP_NODE(/*id*/ 0x18, /*destLevel*/ LEVEL_WDW, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x19, /*destLevel*/ LEVEL_WDW, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x1A, /*destLevel*/ LEVEL_WDW, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x1B, /*destLevel*/ LEVEL_THI, /*destArea*/ 0x02, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x1C, /*destLevel*/ LEVEL_THI, /*destArea*/ 0x02, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x1D, /*destLevel*/ LEVEL_THI, /*destArea*/ 0x02, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x1E, /*destLevel*/ LEVEL_TTM, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x1F, /*destLevel*/ LEVEL_TTM, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x20, /*destLevel*/ LEVEL_TTM, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x21, /*destLevel*/ LEVEL_TTC, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x22, /*destLevel*/ LEVEL_TTC, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x23, /*destLevel*/ LEVEL_TTC, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x24, /*destLevel*/ LEVEL_SL, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x25, /*destLevel*/ LEVEL_SL, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x26, /*destLevel*/ LEVEL_SL, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x27, /*destLevel*/ LEVEL_THI, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x28, /*destLevel*/ LEVEL_THI, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x29, /*destLevel*/ LEVEL_THI, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x2A, /*destLevel*/ LEVEL_RR, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3002, 2816, 5886, /*angle*/ 0, 0, 0, /*behParam*/ 0x0F0A0000, /*beh*/ bhvWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_WMOTR, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -230, 4813, -3352, /*angle*/ 0, 0, 0, /*behParam*/ 0x0F0B0000, /*beh*/ bhvWarp), - WARP_NODE(/*id*/ 0x0B, /*destLevel*/ LEVEL_BITS, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -659, 1613, -350, /*angle*/ 0, 180, 0, /*behParam*/ 0x00320000, /*beh*/ bhvPaintingStarCollectWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4693, 2157, 1828, /*angle*/ 0, 270, 0, /*behParam*/ 0x00330000, /*beh*/ bhvAirborneStarCollectWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -675, 1400, 3870, /*angle*/ 0, 0, 0, /*behParam*/ 0x00340000, /*beh*/ bhvPaintingStarCollectWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -205, 2918, 7300, /*angle*/ 0, 0, 0, /*behParam*/ 0x00350000, /*beh*/ bhvPaintingStarCollectWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3538, 1766, -400, /*angle*/ 0, 180, 0, /*behParam*/ 0x00360000, /*beh*/ bhvPaintingStarCollectWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4693, 2157, 1828, /*angle*/ 0, 270, 0, /*behParam*/ 0x00370000, /*beh*/ bhvAirborneStarCollectWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3002, 2816, 5886, /*angle*/ 0, 90, 0, /*behParam*/ 0x00380000, /*beh*/ bhvLaunchStarCollectWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3412, 2816, 5886, /*angle*/ 0, 270, 0, /*behParam*/ 0x003A0000, /*beh*/ bhvLaunchStarCollectWarp), - WARP_NODE(/*id*/ 0x32, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x32, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x33, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x33, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x34, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x34, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x35, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x35, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x36, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x36, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x37, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x37, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x38, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x38, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x3A, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x3A, /*flags*/ WARP_NO_CHECKPOINT), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -659, 1613, -350, /*angle*/ 0, 180, 0, /*behParam*/ 0x00640000, /*beh*/ bhvPaintingDeathWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4693, 2157, 1828, /*angle*/ 0, 270, 0, /*behParam*/ 0x00650000, /*beh*/ bhvDeathWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -675, 1400, 3870, /*angle*/ 0, 0, 0, /*behParam*/ 0x00660000, /*beh*/ bhvPaintingDeathWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -205, 2918, 7300, /*angle*/ 0, 0, 0, /*behParam*/ 0x00670000, /*beh*/ bhvPaintingDeathWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3538, 1766, -400, /*angle*/ 0, 180, 0, /*behParam*/ 0x00680000, /*beh*/ bhvPaintingDeathWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4693, 2157, 1828, /*angle*/ 0, 270, 0, /*behParam*/ 0x00690000, /*beh*/ bhvDeathWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -230, 4813, -3352, /*angle*/ 0, 180, 0, /*behParam*/ 0x006B0000, /*beh*/ bhvLaunchDeathWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3412, 2816, 5886, /*angle*/ 0, 270, 0, /*behParam*/ 0x006C0000, /*beh*/ bhvLaunchDeathWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3002, 2816, 5886, /*angle*/ 0, 90, 0, /*behParam*/ 0x006D0000, /*beh*/ bhvLaunchDeathWarp), - WARP_NODE(/*id*/ 0x64, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x64, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x65, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x65, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x66, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x66, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x67, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x67, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x68, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x68, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x69, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x69, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x6B, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x6B, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x6C, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x6C, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x6D, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x6D, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_CASTLE_KEY_DOOR, /*pos*/ -1100, 512, 3021, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WARP_NODE_00), /*bhv*/ bhvDoorWarp), + OBJECT(/*model*/ MODEL_CASTLE_KEY_DOOR, /*pos*/ -946, 512, 3021, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_01), /*bhv*/ bhvDoorWarp), + WARP_NODE(/*id*/ WARP_NODE_00, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_03, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_01, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_04, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_CASTLE_STAR_DOOR_50_STARS, /*pos*/ -281, 2253, 4762, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(50), /*bhv*/ bhvStarDoor), + OBJECT(/*model*/ MODEL_CASTLE_STAR_DOOR_50_STARS, /*pos*/ -127, 2253, 4762, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM1(50), /*bhv*/ bhvStarDoor), + OBJECT(/*model*/ MODEL_CASTLE_STAR_DOOR_70_STARS, /*pos*/ -281, 3174, 3772, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(70), /*bhv*/ bhvStarDoor), + OBJECT(/*model*/ MODEL_CASTLE_STAR_DOOR_70_STARS, /*pos*/ -127, 3174, 3772, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM1(70), /*bhv*/ bhvStarDoor), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_18, /*destLevel*/ LEVEL_WDW, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_19, /*destLevel*/ LEVEL_WDW, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_1A, /*destLevel*/ LEVEL_WDW, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_1B, /*destLevel*/ LEVEL_THI, /*destArea*/ 2, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_1C, /*destLevel*/ LEVEL_THI, /*destArea*/ 2, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_1D, /*destLevel*/ LEVEL_THI, /*destArea*/ 2, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_1E, /*destLevel*/ LEVEL_TTM, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_1F, /*destLevel*/ LEVEL_TTM, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_20, /*destLevel*/ LEVEL_TTM, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_21, /*destLevel*/ LEVEL_TTC, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_22, /*destLevel*/ LEVEL_TTC, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_23, /*destLevel*/ LEVEL_TTC, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_24, /*destLevel*/ LEVEL_SL, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_25, /*destLevel*/ LEVEL_SL, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_26, /*destLevel*/ LEVEL_SL, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_27, /*destLevel*/ LEVEL_THI, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_28, /*destLevel*/ LEVEL_THI, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_29, /*destLevel*/ LEVEL_THI, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_2A, /*destLevel*/ LEVEL_RR, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3002, 2816, 5886, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(15) | BPARAM2(WARP_NODE_0A), /*bhv*/ bhvWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_WMOTR, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -230, 4813, -3352, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(15) | BPARAM2(WARP_NODE_0B), /*bhv*/ bhvWarp), + WARP_NODE(/*id*/ WARP_NODE_0B, /*destLevel*/ LEVEL_BITS, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -659, 1613, -350, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_32), /*bhv*/ bhvPaintingStarCollectWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4693, 2157, 1828, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM2(WARP_NODE_33), /*bhv*/ bhvAirborneStarCollectWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -675, 1400, 3870, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WARP_NODE_34), /*bhv*/ bhvPaintingStarCollectWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -205, 2918, 7300, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WARP_NODE_35), /*bhv*/ bhvPaintingStarCollectWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3538, 1766, -400, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_36), /*bhv*/ bhvPaintingStarCollectWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4693, 2157, 1828, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM2(WARP_NODE_37), /*bhv*/ bhvAirborneStarCollectWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3002, 2816, 5886, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(WARP_NODE_38), /*bhv*/ bhvLaunchStarCollectWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3412, 2816, 5886, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM2(WARP_NODE_3A), /*bhv*/ bhvLaunchStarCollectWarp), + WARP_NODE(/*id*/ WARP_NODE_32, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_32, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_33, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_33, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_34, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_34, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_35, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_35, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_36, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_36, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_37, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_37, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_38, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_38, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(WARP_NODE_3A, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_3A, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -659, 1613, -350, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_64), /*bhv*/ bhvPaintingDeathWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4693, 2157, 1828, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM2(WARP_NODE_65), /*bhv*/ bhvDeathWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -675, 1400, 3870, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WARP_NODE_66), /*bhv*/ bhvPaintingDeathWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -205, 2918, 7300, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WARP_NODE_67), /*bhv*/ bhvPaintingDeathWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3538, 1766, -400, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_68), /*bhv*/ bhvPaintingDeathWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4693, 2157, 1828, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM2(WARP_NODE_69), /*bhv*/ bhvDeathWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -230, 4813, -3352, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_6B), /*bhv*/ bhvLaunchDeathWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3412, 2816, 5886, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM2(WARP_NODE_6C), /*bhv*/ bhvLaunchDeathWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3002, 2816, 5886, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(WARP_NODE_6D), /*bhv*/ bhvLaunchDeathWarp), + WARP_NODE(/*id*/ WARP_NODE_64, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_64, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_65, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_65, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_66, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_66, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_67, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_67, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_68, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_68, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_69, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_69, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_6B, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_6B, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_6C, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_6C, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_6D, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_6D, /*flags*/ WARP_NO_CHECKPOINT), RETURN(), }; static const LevelScript script_func_local_3[] = { - OBJECT(/*model*/ MODEL_CASTLE_KEY_DOOR, /*pos*/ -1100, -1074, 922, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvDoorWarp), - OBJECT(/*model*/ MODEL_CASTLE_KEY_DOOR, /*pos*/ -946, -1074, 922, /*angle*/ 0, 180, 0, /*behParam*/ 0x00010000, /*beh*/ bhvDoorWarp), - WARP_NODE(/*id*/ 0x00, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x05, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x01, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x06, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x02, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 0x01, /*destNode*/ 0x02, /*flags*/ WARP_NO_CHECKPOINT), - OBJECT(/*model*/ MODEL_CASTLE_STAR_DOOR_30_STARS, /*pos*/ 307, -1074, 2074, /*angle*/ 0, 90, 0, /*behParam*/ 0x1E000000, /*beh*/ bhvStarDoor), - OBJECT(/*model*/ MODEL_CASTLE_STAR_DOOR_30_STARS, /*pos*/ 307, -1074, 1920, /*angle*/ 0, 270, 0, /*behParam*/ 0x1E000000, /*beh*/ bhvStarDoor), - PAINTING_WARP_NODE(/*id*/ 0x0C, /*destLevel*/ LEVEL_LLL, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x0D, /*destLevel*/ LEVEL_LLL, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x0E, /*destLevel*/ LEVEL_LLL, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x0F, /*destLevel*/ LEVEL_SSL, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x10, /*destLevel*/ LEVEL_SSL, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x11, /*destLevel*/ LEVEL_SSL, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x2A, /*destLevel*/ LEVEL_HMC, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x15, /*destLevel*/ LEVEL_DDD, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x16, /*destLevel*/ LEVEL_DDD, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x17, /*destLevel*/ LEVEL_DDD, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4147, -1280, 1997, /*angle*/ 0, 0, 0, /*behParam*/ 0x0F180000, /*beh*/ bhvWarp), - WARP_NODE(/*id*/ 0x18, /*destLevel*/ LEVEL_BITFS, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1382, -819, -4150, /*angle*/ 0, 180, 0, /*behParam*/ 0x00320000, /*beh*/ bhvPaintingStarCollectWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2918, -870, -875, /*angle*/ 0, 0, 0, /*behParam*/ 0x00330000, /*beh*/ bhvPaintingStarCollectWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2483, -1688, -2662, /*angle*/ 0, 270, 0, /*behParam*/ 0x00340000, /*beh*/ bhvLaunchStarCollectWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2381, -500, 2011, /*angle*/ 0, 90, 0, /*behParam*/ 0x00350000, /*beh*/ bhvAirborneStarCollectWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4147, -1100, 1997, /*angle*/ 0, 90, 0, /*behParam*/ 0x00360000, /*beh*/ bhvLaunchStarCollectWarp), - WARP_NODE(/*id*/ 0x32, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x32, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x33, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x33, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x34, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x34, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x35, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x35, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x36, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x36, /*flags*/ WARP_NO_CHECKPOINT), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1382, -819, -4150, /*angle*/ 0, 180, 0, /*behParam*/ 0x00640000, /*beh*/ bhvPaintingDeathWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2918, -870, -875, /*angle*/ 0, 0, 0, /*behParam*/ 0x00650000, /*beh*/ bhvPaintingDeathWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2483, -1688, -2662, /*angle*/ 0, 270, 0, /*behParam*/ 0x00660000, /*beh*/ bhvLaunchDeathWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2381, -500, 2011, /*angle*/ 0, 90, 0, /*behParam*/ 0x00670000, /*beh*/ bhvDeathWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4147, -1100, 1997, /*angle*/ 0, 90, 0, /*behParam*/ 0x00680000, /*beh*/ bhvLaunchDeathWarp), - WARP_NODE(/*id*/ 0x64, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x64, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x65, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x65, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x66, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x66, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x67, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x67, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x68, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x68, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_CASTLE_KEY_DOOR, /*pos*/ -1100, -1074, 922, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WARP_NODE_00), /*bhv*/ bhvDoorWarp), + OBJECT(/*model*/ MODEL_CASTLE_KEY_DOOR, /*pos*/ -946, -1074, 922, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_01), /*bhv*/ bhvDoorWarp), + WARP_NODE(/*id*/ WARP_NODE_00, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_05, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_01, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_06, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_02, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 1, /*destNode*/ WARP_NODE_02, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_CASTLE_STAR_DOOR_30_STARS, /*pos*/ 307, -1074, 2074, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM1(30), /*bhv*/ bhvStarDoor), + OBJECT(/*model*/ MODEL_CASTLE_STAR_DOOR_30_STARS, /*pos*/ 307, -1074, 1920, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM1(30), /*bhv*/ bhvStarDoor), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_0C, /*destLevel*/ LEVEL_LLL, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_0D, /*destLevel*/ LEVEL_LLL, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_0E, /*destLevel*/ LEVEL_LLL, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_0F, /*destLevel*/ LEVEL_SSL, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_10, /*destLevel*/ LEVEL_SSL, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_11, /*destLevel*/ LEVEL_SSL, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_2A, /*destLevel*/ LEVEL_HMC, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_15, /*destLevel*/ LEVEL_DDD, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_16, /*destLevel*/ LEVEL_DDD, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_17, /*destLevel*/ LEVEL_DDD, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4147, -1280, 1997, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(15) | BPARAM2(WARP_NODE_18), /*bhv*/ bhvWarp), + WARP_NODE(/*id*/ WARP_NODE_18, /*destLevel*/ LEVEL_BITFS, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1382, -819, -4150, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_32), /*bhv*/ bhvPaintingStarCollectWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2918, -870, -875, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WARP_NODE_33), /*bhv*/ bhvPaintingStarCollectWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2483, -1688, -2662, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM2(WARP_NODE_34), /*bhv*/ bhvLaunchStarCollectWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2381, -500, 2011, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(WARP_NODE_35), /*bhv*/ bhvAirborneStarCollectWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4147, -1100, 1997, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(WARP_NODE_36), /*bhv*/ bhvLaunchStarCollectWarp), + WARP_NODE(/*id*/ WARP_NODE_32, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_32, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_33, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_33, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_34, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_34, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_35, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_35, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_36, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_36, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1382, -819, -4150, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_64), /*bhv*/ bhvPaintingDeathWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2918, -870, -875, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WARP_NODE_65), /*bhv*/ bhvPaintingDeathWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2483, -1688, -2662, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM2(WARP_NODE_66), /*bhv*/ bhvLaunchDeathWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2381, -500, 2011, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(WARP_NODE_67), /*bhv*/ bhvDeathWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4147, -1100, 1997, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(WARP_NODE_68), /*bhv*/ bhvLaunchDeathWarp), + WARP_NODE(/*id*/ WARP_NODE_64, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_64, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_65, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_65, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_66, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_66, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_67, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_67, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_68, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_68, /*flags*/ WARP_NO_CHECKPOINT), RETURN(), }; static const LevelScript script_func_local_4[] = { - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ -2037, -818, -716, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ -1648, -818, -716, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ -1648, -818, -101, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ -1648, -818, 512, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ -2037, -818, -101, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ -2969, -921, 420, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ -2037, -818, -1330, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ -3839, -1023, -1422, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ -1929, -818, -3615, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ -834, -818, -3615, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_BLUE_FLAME, /*pos*/ -3317, -921, 1229, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_BLUE_FLAME, /*pos*/ -204, -921, -624, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_BLUE_FLAME, /*pos*/ -2876, -921, 1229, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ -2037, -818, -716, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ -1648, -818, -716, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ -1648, -818, -101, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ -1648, -818, 512, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ -2037, -818, -101, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ -2969, -921, 420, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ -2037, -818, -1330, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ -3839, -1023, -1422, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ -1929, -818, -3615, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ -834, -818, -3615, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_BLUE_FLAME, /*pos*/ -3317, -921, 1229, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_BLUE_FLAME, /*pos*/ -204, -921, -624, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_BLUE_FLAME, /*pos*/ -2876, -921, 1229, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), RETURN(), }; const LevelScript level_castle_inside_entry[] = { INIT_LEVEL(), - LOAD_MIO0( /*seg*/ 0x07, _castle_inside_segment_7SegmentRomStart, _castle_inside_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _castle_inside_segment_7SegmentRomStart, _castle_inside_segment_7SegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _inside_mio0SegmentRomStart, _inside_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x06, _group15_mio0SegmentRomStart, _group15_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0D, _group15_geoSegmentRomStart, _group15_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x06, _group15_mio0SegmentRomStart, _group15_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0D, _group15_geoSegmentRomStart, _group15_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_16), LOAD_MODEL_FROM_GEO(MODEL_CASTLE_BOWSER_TRAP, castle_geo_000F18), LOAD_MODEL_FROM_GEO(MODEL_CASTLE_WATER_LEVEL_PILLAR, castle_geo_001940), @@ -250,18 +250,18 @@ const LevelScript level_castle_inside_entry[] = { LOAD_MODEL_FROM_GEO(MODEL_CASTLE_STAR_DOOR_70_STARS, castle_geo_000F00), AREA(/*index*/ 1, castle_geo_001400), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5513, 717, -4324, /*angle*/ 0, 45, 0, /*behParam*/ 0x00140000, /*beh*/ bhvCastleFloorTrap), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2477, 307, -2000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFishGroup), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2774, 507, -1716, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTankFishGroup), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3672, 507, -1307, /*angle*/ 0, 45, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTankFishGroup), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3748, 507, 773, /*angle*/ 0, -45, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTankFishGroup), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2778, 507, 1255, /*angle*/ 0, -90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTankFishGroup), - OBJECT(/*model*/ MODEL_BOO_CASTLE, /*pos*/ -1000, 50, -3500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBooInCastle), - OBJECT(/*model*/ MODEL_TOAD, /*pos*/ -1671, 0, 1313, /*angle*/ 0, 83, 0, /*behParam*/ DIALOG_133 << 24, /*beh*/ bhvToadMessage), - OBJECT(/*model*/ MODEL_TOAD, /*pos*/ 1524, 307, 458, /*angle*/ 0, 110, 0, /*behParam*/ DIALOG_134 << 24, /*beh*/ bhvToadMessage), - OBJECT(/*model*/ MODEL_TOAD, /*pos*/ 596, -306, -2637, /*angle*/ 0, 152, 0, /*behParam*/ DIALOG_135 << 24, /*beh*/ bhvToadMessage), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5513, 717, -4324, /*angle*/ 0, 45, 0, /*bhvParam*/ BPARAM2(0x14), /*bhv*/ bhvCastleFloorTrap), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2477, 307, -2000, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFishGroup), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2774, 507, -1716, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvTankFishGroup), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3672, 507, -1307, /*angle*/ 0, 45, 0, /*bhvParam*/ 0, /*bhv*/ bhvTankFishGroup), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3748, 507, 773, /*angle*/ 0, -45, 0, /*bhvParam*/ 0, /*bhv*/ bhvTankFishGroup), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2778, 507, 1255, /*angle*/ 0, -90, 0, /*bhvParam*/ 0, /*bhv*/ bhvTankFishGroup), + OBJECT(/*model*/ MODEL_BOO_CASTLE, /*pos*/ -1000, 50, -3500, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBooInCastle), + OBJECT(/*model*/ MODEL_TOAD, /*pos*/ -1671, 0, 1313, /*angle*/ 0, 83, 0, /*bhvParam*/ BPARAM1(DIALOG_133), /*bhv*/ bhvToadMessage), + OBJECT(/*model*/ MODEL_TOAD, /*pos*/ 1524, 307, 458, /*angle*/ 0, 110, 0, /*bhvParam*/ BPARAM1(DIALOG_134), /*bhv*/ bhvToadMessage), + OBJECT(/*model*/ MODEL_TOAD, /*pos*/ 596, -306, -2637, /*angle*/ 0, 152, 0, /*bhvParam*/ BPARAM1(DIALOG_135), /*bhv*/ bhvToadMessage), JUMP_LINK(script_func_local_1), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 0x01, /*destNode*/ 0x03, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 1, /*destNode*/ WARP_NODE_03, /*flags*/ WARP_NO_CHECKPOINT), TERRAIN(/*terrainData*/ inside_castle_seg7_area_1_collision), ROOMS(/*surfaceRooms*/ inside_castle_seg7_area_1_rooms), MACRO_OBJECTS(/*objList*/ inside_castle_seg7_area_1_macro_objs), @@ -270,15 +270,15 @@ const LevelScript level_castle_inside_entry[] = { END_AREA(), AREA(/*index*/ 2, castle_geo_001858), - OBJECT(/*model*/ MODEL_CASTLE_CLOCK_MINUTE_HAND, /*pos*/ -205, 2918, 7222, /*angle*/ 0, 180, 0, /*behParam*/ 0x00000000, /*beh*/ bhvClockMinuteHand), - OBJECT(/*model*/ MODEL_CASTLE_CLOCK_HOUR_HAND, /*pos*/ -205, 2918, 7222, /*angle*/ 0, 180, 0, /*behParam*/ 0x00000000, /*beh*/ bhvClockHourHand), - OBJECT(/*model*/ MODEL_CASTLE_CLOCK_PENDULUM, /*pos*/ -205, 2611, 7140, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvDecorativePendulum), - OBJECT(/*model*/ MODEL_LAKITU, /*pos*/ 4231, 1408, 1601, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvCameraLakitu), - OBJECT(/*model*/ MODEL_TOAD, /*pos*/ -977, 1203, 2569, /*angle*/ 0, 0, 0, /*behParam*/ DIALOG_076 << 24, /*beh*/ bhvToadMessage), - OBJECT(/*model*/ MODEL_TOAD, /*pos*/ -1584, 2253, 7157, /*angle*/ 0, 136, 0, /*behParam*/ DIALOG_083 << 24, /*beh*/ bhvToadMessage), - OBJECT(/*model*/ MODEL_TOAD, /*pos*/ 837, 1203, 3020, /*angle*/ 0, 180, 0, /*behParam*/ DIALOG_137 << 24, /*beh*/ bhvToadMessage), + OBJECT(/*model*/ MODEL_CASTLE_CLOCK_MINUTE_HAND, /*pos*/ -205, 2918, 7222, /*angle*/ 0, 180, 0, /*bhvParam*/ 0, /*bhv*/ bhvClockMinuteHand), + OBJECT(/*model*/ MODEL_CASTLE_CLOCK_HOUR_HAND, /*pos*/ -205, 2918, 7222, /*angle*/ 0, 180, 0, /*bhvParam*/ 0, /*bhv*/ bhvClockHourHand), + OBJECT(/*model*/ MODEL_CASTLE_CLOCK_PENDULUM, /*pos*/ -205, 2611, 7140, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvDecorativePendulum), + OBJECT(/*model*/ MODEL_LAKITU, /*pos*/ 4231, 1408, 1601, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(CAMERA_LAKITU_BP_FOLLOW_CAMERA), /*bhv*/ bhvCameraLakitu), + OBJECT(/*model*/ MODEL_TOAD, /*pos*/ -977, 1203, 2569, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(DIALOG_076), /*bhv*/ bhvToadMessage), + OBJECT(/*model*/ MODEL_TOAD, /*pos*/ -1584, 2253, 7157, /*angle*/ 0, 136, 0, /*bhvParam*/ BPARAM1(DIALOG_083), /*bhv*/ bhvToadMessage), + OBJECT(/*model*/ MODEL_TOAD, /*pos*/ 837, 1203, 3020, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM1(DIALOG_137), /*bhv*/ bhvToadMessage), JUMP_LINK(script_func_local_2), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 0x01, /*destNode*/ 0x03, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 1, /*destNode*/ WARP_NODE_03, /*flags*/ WARP_NO_CHECKPOINT), TERRAIN(/*terrainData*/ inside_castle_seg7_area_2_collision), ROOMS(/*surfaceRooms*/ inside_castle_seg7_area_2_rooms), MACRO_OBJECTS(/*objList*/ inside_castle_seg7_area_2_macro_objs), @@ -288,15 +288,15 @@ const LevelScript level_castle_inside_entry[] = { END_AREA(), AREA(/*index*/ 3, castle_geo_001C10), - OBJECT(/*model*/ MODEL_CASTLE_WATER_LEVEL_PILLAR, /*pos*/ 7066, -1178, -819, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWaterLevelPillar), - OBJECT(/*model*/ MODEL_CASTLE_WATER_LEVEL_PILLAR, /*pos*/ 7066, -1178, -205, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWaterLevelPillar), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvDddWarp), - OBJECT(/*model*/ MODEL_MIPS, /*pos*/ -1509, -1177, -1564, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMips), - OBJECT(/*model*/ MODEL_TOAD, /*pos*/ 1787, -1381, -1957, /*angle*/ 0, 126, 0, /*behParam*/ DIALOG_082 << 24, /*beh*/ bhvToadMessage), - OBJECT(/*model*/ MODEL_TOAD, /*pos*/ -4048, -1381, -1334, /*angle*/ 0, 30, 0, /*behParam*/ DIALOG_136 << 24, /*beh*/ bhvToadMessage), + OBJECT(/*model*/ MODEL_CASTLE_WATER_LEVEL_PILLAR, /*pos*/ 7066, -1178, -819, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvWaterLevelPillar), + OBJECT(/*model*/ MODEL_CASTLE_WATER_LEVEL_PILLAR, /*pos*/ 7066, -1178, -205, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvWaterLevelPillar), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvDDDWarp), + OBJECT(/*model*/ MODEL_MIPS, /*pos*/ -1509, -1177, -1564, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(MIPS_BP_15_STARS), /*bhv*/ bhvMips), + OBJECT(/*model*/ MODEL_TOAD, /*pos*/ 1787, -1381, -1957, /*angle*/ 0, 126, 0, /*bhvParam*/ BPARAM1(DIALOG_082), /*bhv*/ bhvToadMessage), + OBJECT(/*model*/ MODEL_TOAD, /*pos*/ -4048, -1381, -1334, /*angle*/ 0, 30, 0, /*bhvParam*/ BPARAM1(DIALOG_136), /*bhv*/ bhvToadMessage), JUMP_LINK(script_func_local_3), JUMP_LINK(script_func_local_4), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 0x01, /*destNode*/ 0x03, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 1, /*destNode*/ WARP_NODE_03, /*flags*/ WARP_NO_CHECKPOINT), TERRAIN(/*terrainData*/ inside_castle_seg7_area_3_collision), ROOMS(/*surfaceRooms*/ inside_castle_seg7_area_3_rooms), MACRO_OBJECTS(/*objList*/ inside_castle_seg7_area_3_macro_objs), diff --git a/levels/castle_inside/star_door/geo.inc.c b/levels/castle_inside/star_door/geo.inc.c index a70dbaf4..a7e91046 100644 --- a/levels/castle_inside/star_door/geo.inc.c +++ b/levels/castle_inside/star_door/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000F00 const GeoLayout castle_geo_000F00[] = { - GEO_CULLING_RADIUS(400), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0703BFA8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(400), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0703BFA8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/castle_inside/trap_door/geo.inc.c b/levels/castle_inside/trap_door/geo.inc.c index 4587fb54..4ca4f80e 100644 --- a/levels/castle_inside/trap_door/geo.inc.c +++ b/levels/castle_inside/trap_door/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000F18 const GeoLayout castle_geo_000F18[] = { - GEO_CULLING_RADIUS(600), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0703BCB8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(600), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_0703BCB8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/castle_inside/water_level_pillar/geo.inc.c b/levels/castle_inside/water_level_pillar/geo.inc.c index 44765314..b57fc53c 100644 --- a/levels/castle_inside/water_level_pillar/geo.inc.c +++ b/levels/castle_inside/water_level_pillar/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E001940 const GeoLayout castle_geo_001940[] = { - GEO_CULLING_RADIUS(550), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07068B10), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(550), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, inside_castle_seg7_dl_07068B10), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ccm/areas/1/10/geo.inc.c b/levels/ccm/areas/1/10/geo.inc.c index e29900af..2dcbeb63 100644 --- a/levels/ccm/areas/1/10/geo.inc.c +++ b/levels/ccm/areas/1/10/geo.inc.c @@ -1,13 +1,13 @@ // 0x0E0004E4 const GeoLayout ccm_geo_0004E4[] = { - GEO_CULLING_RADIUS(3500), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-3000, 6000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_07010660), - GEO_DISPLAY_LIST(LAYER_ALPHA, ccm_seg7_dl_070109D0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, ccm_seg7_dl_07010B50), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(3500), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-3000, 6000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_07010660), + GEO_DISPLAY_LIST(LAYER_ALPHA, ccm_seg7_dl_070109D0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, ccm_seg7_dl_07010B50), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ccm/areas/1/6/geo.inc.c b/levels/ccm/areas/1/6/geo.inc.c index 8b3a8d5b..197e5e38 100644 --- a/levels/ccm/areas/1/6/geo.inc.c +++ b/levels/ccm/areas/1/6/geo.inc.c @@ -1,12 +1,12 @@ // 0x0E00042C const GeoLayout ccm_geo_00042C[] = { - GEO_CULLING_RADIUS(800), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-1000, 4000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_0700E708), - GEO_DISPLAY_LIST(LAYER_ALPHA, ccm_seg7_dl_0700E970), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(800), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-1000, 4000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_0700E708), + GEO_DISPLAY_LIST(LAYER_ALPHA, ccm_seg7_dl_0700E970), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ccm/areas/1/7/geo.inc.c b/levels/ccm/areas/1/7/geo.inc.c index aa86bb9f..3f010512 100644 --- a/levels/ccm/areas/1/7/geo.inc.c +++ b/levels/ccm/areas/1/7/geo.inc.c @@ -1,13 +1,13 @@ // 0x0E00045C const GeoLayout ccm_geo_00045C[] = { - GEO_CULLING_RADIUS(900), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-1000, 7000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_0700F440), - GEO_DISPLAY_LIST(LAYER_ALPHA, ccm_seg7_dl_0700F650), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, ccm_seg7_dl_0700F780), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(900), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-1000, 7000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_0700F440), + GEO_DISPLAY_LIST(LAYER_ALPHA, ccm_seg7_dl_0700F650), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, ccm_seg7_dl_0700F780), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ccm/areas/1/8/geo.inc.c b/levels/ccm/areas/1/8/geo.inc.c index bd7b9bcc..8f446506 100644 --- a/levels/ccm/areas/1/8/geo.inc.c +++ b/levels/ccm/areas/1/8/geo.inc.c @@ -1,11 +1,11 @@ // 0x0E000494 const GeoLayout ccm_geo_000494[] = { - GEO_CULLING_RADIUS(400), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-500, 7000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_0700FB00), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(400), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-500, 7000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_0700FB00), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ccm/areas/1/9/geo.inc.c b/levels/ccm/areas/1/9/geo.inc.c index 408aec6b..8cc713db 100644 --- a/levels/ccm/areas/1/9/geo.inc.c +++ b/levels/ccm/areas/1/9/geo.inc.c @@ -1,11 +1,11 @@ // 0x0E0004BC const GeoLayout ccm_geo_0004BC[] = { - GEO_CULLING_RADIUS(800), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-1000, 7000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, ccm_seg7_dl_0700FD08), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(800), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-1000, 7000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, ccm_seg7_dl_0700FD08), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ccm/areas/1/collision.inc.c b/levels/ccm/areas/1/collision.inc.c index 45068372..b78170bc 100644 --- a/levels/ccm/areas/1/collision.inc.c +++ b/levels/ccm/areas/1/collision.inc.c @@ -1767,7 +1767,7 @@ const Collision ccm_seg7_area_1_collision[] = { SPECIAL_OBJECT(/*preset*/ special_snow_tree, /*pos*/ -1146, -3583, 5919), SPECIAL_OBJECT(/*preset*/ special_snow_tree, /*pos*/ -1768, 2560, -1793), SPECIAL_OBJECT(/*preset*/ special_snow_tree, /*pos*/ -3443, 807, -2713), - SPECIAL_OBJECT_WITH_YAW_AND_PARAM(/*preset*/ special_wooden_door_warp, /*pos*/ 2464, -4607, 4302, /*yaw*/ 158, /*behParam2*/ 20), + SPECIAL_OBJECT_WITH_YAW_AND_PARAM(/*preset*/ special_wooden_door_warp, /*pos*/ 2464, -4607, 4302, /*yaw*/ 158, /*bhvParam2*/ 20), COL_WATER_BOX_INIT(1), COL_WATER_BOX(0, 3137, 4228, 3925, 4945, -4638), COL_END(), diff --git a/levels/ccm/areas/1/geo.inc.c b/levels/ccm/areas/1/geo.inc.c index 2a0dfe34..58b0528f 100644 --- a/levels/ccm/areas/1/geo.inc.c +++ b/levels/ccm/areas/1/geo.inc.c @@ -1,36 +1,36 @@ // 0x0E00051C const GeoLayout ccm_geo_00051C[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND(BACKGROUND_SNOW_MOUNTAINS, geo_skybox_main), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(1, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_0700B090), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_0700B1D8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_0700C380), - GEO_DISPLAY_LIST(LAYER_ALPHA, ccm_seg7_dl_0700D578), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, ccm_seg7_dl_0700DDF0), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0501, geo_movtex_draw_water_regions), - GEO_RENDER_OBJ(), - GEO_ASM( 1, geo_envfx_main), + GEO_BACKGROUND(BACKGROUND_SNOW_MOUNTAINS, geo_skybox_main), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_cannon_circle_base), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(1, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_0700B090), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_0700B1D8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_0700C380), + GEO_DISPLAY_LIST(LAYER_ALPHA, ccm_seg7_dl_0700D578), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, ccm_seg7_dl_0700DDF0), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x0501, geo_movtex_draw_water_regions), + GEO_RENDER_OBJ(), + GEO_ASM( 1, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_cannon_circle_base), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ccm/areas/1/macro.inc.c b/levels/ccm/areas/1/macro.inc.c index a49d9c81..f612adf0 100644 --- a/levels/ccm/areas/1/macro.inc.c +++ b/levels/ccm/areas/1/macro.inc.c @@ -1,41 +1,41 @@ // 0x07016284 - 0x070163F8 const MacroObject ccm_seg7_area_1_macro_objs[] = { - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 180, /*pos*/ -2412, 2912, -878, /*behParam*/ DIALOG_040), - MACRO_OBJECT(/*preset*/ macro_mr_blizzard, /*yaw*/ 0, /*pos*/ 3054, -2674, 2072), - MACRO_OBJECT(/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ 2542, 2622, -1714), - MACRO_OBJECT(/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ -6090, -1740, 1936), - MACRO_OBJECT(/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ 4346, -3068, 400), - MACRO_OBJECT(/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ -5054, -4659, -1054), - MACRO_OBJECT(/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ -5033, -4740, -2666), - MACRO_OBJECT(/*preset*/ macro_bobomb_buddy_opens_cannon, /*yaw*/ 0, /*pos*/ -1220, -3583, 5969), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ -3615, -4607, 4790, /*behParam*/ 0x00), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ -5045, -1740, 4615, /*behParam*/ 0x00), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ 1090, -4607, 5729, /*behParam*/ 0x80), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ -1060, 2560, -1840, /*behParam*/ DIALOG_087), - MACRO_OBJECT(/*preset*/ macro_coin_line_vertical, /*yaw*/ 0, /*pos*/ -180, 3100, -1480), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 3560, 2100, -280), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 77, /*pos*/ -1942, 1334, 1678), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ -1020, 646, -2706), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 93, /*pos*/ -1460, -888, -3933), - MACRO_OBJECT(/*preset*/ macro_coin_arrow, /*yaw*/ 75, /*pos*/ -2586, -4889, -4093), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ -4350, -4864, -4813, /*behParam*/ DIALOG_094), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -1037, -3583, 5872, /*behParam*/ DIALOG_091), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 180, /*pos*/ -309, -4889, -3690, /*behParam*/ DIALOG_049), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 1900, -1535, 3500, /*behParam*/ DIALOG_040), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -488, 3100, -2305), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -3120, -1200, -2080), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_in_pole, /*yaw*/ 0, /*pos*/ -5200, -1345, 2995), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2940, -1400, 2630), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -600, -505, 1940), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -3814, -2112, 6427), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2700, -4600, 1230), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1990, -4040, 4950), - MACRO_OBJECT(/*preset*/ macro_blue_coin_switch, /*yaw*/ 0, /*pos*/ 3400, -820, 0), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 3400, -640, -740), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 3400, -320, -1740), - MACRO_OBJECT(/*preset*/ macro_recovery_heart, /*yaw*/ 0, /*pos*/ -270, -4650, -3100), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4408, -4550, -1534), - MACRO_OBJECT(/*preset*/ macro_box_1up_running_away, /*yaw*/ 0, /*pos*/ -4887, -1300, -4003), - MACRO_OBJECT(/*preset*/ macro_box_1up_running_away, /*yaw*/ 0, /*pos*/ -1557, -205, 1794), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 180, /*pos*/ -2412, 2912, -878, /*bhvParam*/ DIALOG_040), + MACRO_OBJECT (/*preset*/ macro_mr_blizzard_1, /*yaw*/ 0, /*pos*/ 3054, -2674, 2072), + MACRO_OBJECT (/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ 2542, 2622, -1714), + MACRO_OBJECT (/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ -6090, -1740, 1936), + MACRO_OBJECT (/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ 4346, -3068, 400), + MACRO_OBJECT (/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ -5054, -4659, -1054), + MACRO_OBJECT (/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ -5033, -4740, -2666), + MACRO_OBJECT (/*preset*/ macro_bobomb_buddy_opens_cannon_1, /*yaw*/ 0, /*pos*/ -1220, -3583, 5969), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ -3615, -4607, 4790, /*bhvParam*/ 0x00), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ -5045, -1740, 4615, /*bhvParam*/ 0x00), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ 1090, -4607, 5729, /*bhvParam*/ 0x80), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ -1060, 2560, -1840, /*bhvParam*/ DIALOG_087), + MACRO_OBJECT (/*preset*/ macro_coin_line_vertical_flying, /*yaw*/ 0, /*pos*/ -180, 3100, -1480), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 3560, 2100, -280), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 77, /*pos*/ -1942, 1334, 1678), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ -1020, 646, -2706), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 93, /*pos*/ -1460, -888, -3933), + MACRO_OBJECT (/*preset*/ macro_coin_arrow, /*yaw*/ 75, /*pos*/ -2586, -4889, -4093), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ -4350, -4864, -4813, /*bhvParam*/ DIALOG_094), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -1037, -3583, 5872, /*bhvParam*/ DIALOG_091), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 180, /*pos*/ -309, -4889, -3690, /*bhvParam*/ DIALOG_049), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 1900, -1535, 3500, /*bhvParam*/ DIALOG_040), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -488, 3100, -2305), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -3120, -1200, -2080), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_in_pole, /*yaw*/ 0, /*pos*/ -5200, -1345, 2995), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2940, -1400, 2630), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -600, -505, 1940), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -3814, -2112, 6427), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2700, -4600, 1230), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1990, -4040, 4950), + MACRO_OBJECT (/*preset*/ macro_blue_coin_switch, /*yaw*/ 0, /*pos*/ 3400, -820, 0), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 3400, -640, -740), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 3400, -320, -1740), + MACRO_OBJECT (/*preset*/ macro_recovery_heart, /*yaw*/ 0, /*pos*/ -270, -4650, -3100), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4408, -4550, -1534), + MACRO_OBJECT (/*preset*/ macro_box_1up_running_away, /*yaw*/ 0, /*pos*/ -4887, -1300, -4003), + MACRO_OBJECT (/*preset*/ macro_box_1up_running_away, /*yaw*/ 0, /*pos*/ -1557, -205, 1794), MACRO_OBJECT_END(), }; diff --git a/levels/ccm/areas/2/collision.inc.c b/levels/ccm/areas/2/collision.inc.c index d75bdf58..839eb273 100644 --- a/levels/ccm/areas/2/collision.inc.c +++ b/levels/ccm/areas/2/collision.inc.c @@ -1874,6 +1874,6 @@ const Collision ccm_seg7_area_2_collision[] = { COL_TRI_STOP(), COL_SPECIAL_INIT(2), SPECIAL_OBJECT_WITH_YAW(/*preset*/ special_null_start, /*pos*/ -5836, 7465, -6143, /*yaw*/ 64), // unused, probably an early way to set initial position - SPECIAL_OBJECT_WITH_YAW_AND_PARAM(/*preset*/ special_wooden_door_warp, /*pos*/ -7628, -5836, -6988, /*yaw*/ 64, /*behParam2*/ 20), + SPECIAL_OBJECT_WITH_YAW_AND_PARAM(/*preset*/ special_wooden_door_warp, /*pos*/ -7628, -5836, -6988, /*yaw*/ 64, /*bhvParam2*/ 20), COL_END(), }; diff --git a/levels/ccm/areas/2/geo.inc.c b/levels/ccm/areas/2/geo.inc.c index 11f40583..ac1eb305 100644 --- a/levels/ccm/areas/2/geo.inc.c +++ b/levels/ccm/areas/2/geo.inc.c @@ -1,32 +1,32 @@ // 0x0E0005E8 const GeoLayout ccm_geo_0005E8[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND_COLOR(0x0001), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(9, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_0701CE30), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_0701E558), - GEO_DISPLAY_LIST(LAYER_OPAQUE_DECAL, ccm_seg7_dl_0701E6B0), - GEO_DISPLAY_LIST(LAYER_ALPHA, ccm_seg7_dl_0701FC78), - GEO_DISPLAY_LIST(LAYER_ALPHA, ccm_seg7_dl_0701FD78), - 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_envfx_main), + GEO_BACKGROUND_COLOR(0x0001), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(9, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_0701CE30), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_0701E558), + GEO_DISPLAY_LIST(LAYER_OPAQUE_DECAL, ccm_seg7_dl_0701E6B0), + GEO_DISPLAY_LIST(LAYER_ALPHA, ccm_seg7_dl_0701FC78), + GEO_DISPLAY_LIST(LAYER_ALPHA, ccm_seg7_dl_0701FD78), + 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_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ccm/areas/2/macro.inc.c b/levels/ccm/areas/2/macro.inc.c index e4e91f29..8026dd1a 100644 --- a/levels/ccm/areas/2/macro.inc.c +++ b/levels/ccm/areas/2/macro.inc.c @@ -1,45 +1,45 @@ // 0x07023468 - 0x07023604 const MacroObject ccm_seg7_area_2_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 2255, 4091, -536), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 2055, 4352, -497), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 1843, 4486, -433), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 1603, 4567, -347), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 1397, 4530, -287), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -5320, 6656, -6540, /*behParam*/ DIALOG_054), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -4980, 2180, -1980), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 6640, -60, -800), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 6640, -1020, 440), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 6640, -1820, 1760), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 6640, -2260, 2620), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -6460, -5000, -3200), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -6460, -5540, -4100), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -6460, -5200, -5000), - MACRO_OBJECT(/*preset*/ macro_box_1up, /*yaw*/ 0, /*pos*/ -5600, -4500, -6644), - MACRO_OBJECT(/*preset*/ macro_moving_blue_coin, /*yaw*/ 0, /*pos*/ -3160, 6267, -6120), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -700, 5923, -6240), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 2260, 5342, -6440), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 120, /*pos*/ 2960, 4280, -880), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1900, 659, -2340), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1720, 690, -2220), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 3400, 302, -5240), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 3600, 297, -5420), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 6120, 4435, -5020), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 6140, -152, -5540), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 6320, -200, -5320), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 3960, -3297, 6440), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1400, -3560, 5840), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -220, -3780, 4960), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -520, -3890, 4360), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -740, -4008, 3540), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -920, -4094, 2760), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -960, -4101, 2080), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -860, 3391, -760), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1120, 3293, -1140), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1560, 2989, -3280), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1740, 2926, -3780), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2849, 2677, -4608), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -4620, 2353, -4120), - MACRO_OBJECT(/*preset*/ macro_1up_sliding, /*yaw*/ 0, /*pos*/ -4890, 1452, 552), - MACRO_OBJECT(/*preset*/ macro_1up_sliding, /*yaw*/ 0, /*pos*/ -6369, -1538, 3726), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 2255, 4091, -536), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 2055, 4352, -497), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 1843, 4486, -433), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 1603, 4567, -347), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 1397, 4530, -287), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -5320, 6656, -6540, /*bhvParam*/ DIALOG_054), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -4980, 2180, -1980), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 6640, -60, -800), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 6640, -1020, 440), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 6640, -1820, 1760), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 6640, -2260, 2620), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -6460, -5000, -3200), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -6460, -5540, -4100), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -6460, -5200, -5000), + MACRO_OBJECT (/*preset*/ macro_box_1up, /*yaw*/ 0, /*pos*/ -5600, -4500, -6644), + MACRO_OBJECT (/*preset*/ macro_moving_blue_coin, /*yaw*/ 0, /*pos*/ -3160, 6267, -6120), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -700, 5923, -6240), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 2260, 5342, -6440), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 120, /*pos*/ 2960, 4280, -880), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1900, 659, -2340), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1720, 690, -2220), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 3400, 302, -5240), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 3600, 297, -5420), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 6120, 4435, -5020), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 6140, -152, -5540), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 6320, -200, -5320), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 3960, -3297, 6440), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1400, -3560, 5840), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -220, -3780, 4960), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -520, -3890, 4360), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -740, -4008, 3540), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -920, -4094, 2760), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -960, -4101, 2080), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -860, 3391, -760), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1120, 3293, -1140), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1560, 2989, -3280), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1740, 2926, -3780), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2849, 2677, -4608), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -4620, 2353, -4120), + MACRO_OBJECT (/*preset*/ macro_1up_sliding, /*yaw*/ 0, /*pos*/ -4890, 1452, 552), + MACRO_OBJECT (/*preset*/ macro_1up_sliding, /*yaw*/ 0, /*pos*/ -6369, -1538, 3726), MACRO_OBJECT_END(), }; diff --git a/levels/ccm/level.yaml b/levels/ccm/level.yaml index 687296e3..15d39bac 100644 --- a/levels/ccm/level.yaml +++ b/levels/ccm/level.yaml @@ -1,6 +1,6 @@ -# Cool Cool Mountain +# Cool, Cool Mountain short-name: ccm -full-name: Cool Cool Mountain +full-name: Cool, Cool Mountain texture-file: ["/texture.inc.c"] area-count: 2 objects: [ropeway_lift, snowman_base, snowman_head] diff --git a/levels/ccm/leveldata.c b/levels/ccm/leveldata.c index fef53ddd..6ab07858 100644 --- a/levels/ccm/leveldata.c +++ b/levels/ccm/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "dialog_ids.h" diff --git a/levels/ccm/ropeway_lift/geo.inc.c b/levels/ccm/ropeway_lift/geo.inc.c index 67e33f52..aff4ae45 100644 --- a/levels/ccm/ropeway_lift/geo.inc.c +++ b/levels/ccm/ropeway_lift/geo.inc.c @@ -1,9 +1,9 @@ // 0x0E0003D0 const GeoLayout ccm_geo_0003D0[] = { - GEO_CULLING_RADIUS(500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, ccm_seg7_dl_07010F28), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_070118B0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, ccm_seg7_dl_07010F28), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_070118B0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ccm/script.c b/levels/ccm/script.c index c43f7891..38fda8c7 100644 --- a/levels/ccm/script.c +++ b/levels/ccm/script.c @@ -17,52 +17,52 @@ #include "levels/ccm/header.h" static const LevelScript script_func_local_1[] = { - OBJECT(/*model*/ MODEL_CCM_ROPEWAY_LIFT, /*pos*/ 531, -4430, 6426, /*angle*/ 0, 0, 0, /*behParam*/ 0x07120000, /*beh*/ bhvPlatformOnTrack), + OBJECT(/*model*/ MODEL_CCM_ROPEWAY_LIFT, /*pos*/ 531, -4430, 6426, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(0x07) | BPARAM2(0x12), /*bhv*/ bhvPlatformOnTrack), RETURN(), }; static const LevelScript script_func_local_2[] = { - OBJECT(/*model*/ MODEL_PENGUIN, /*pos*/ 2650, -3735, 3970, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvSmallPenguin), - OBJECT(/*model*/ MODEL_PENGUIN, /*pos*/ -555, 3470, -1000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSmallPenguin), - OBJECT(/*model*/ MODEL_MR_BLIZZARD, /*pos*/ -2376, -1589, 4256, /*angle*/ 0, 252, 0, /*behParam*/ 0x00010000, /*beh*/ bhvMrBlizzard), - OBJECT(/*model*/ MODEL_MR_BLIZZARD, /*pos*/ -394, -1589, 4878, /*angle*/ 0, 74, 0, /*behParam*/ 0x00010000, /*beh*/ bhvMrBlizzard), - OBJECT_WITH_ACTS(/*model*/ MODEL_CCM_SNOWMAN_BASE, /*pos*/ 2560, 2662, -1122, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSnowmansBottom, /*acts*/ ACT_5), + OBJECT (/*model*/ MODEL_PENGUIN, /*pos*/ 2650, -3735, 3970, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x01), /*bhv*/ bhvSmallPenguin), + OBJECT (/*model*/ MODEL_PENGUIN, /*pos*/ -555, 3470, -1000, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x00), /*bhv*/ bhvSmallPenguin), + OBJECT (/*model*/ MODEL_MR_BLIZZARD, /*pos*/ -2376, -1589, 4256, /*angle*/ 0, 252, 0, /*bhvParam*/ BPARAM2(MR_BLIZZARD_STYPE_JUMPING), /*bhv*/ bhvMrBlizzard), + OBJECT (/*model*/ MODEL_MR_BLIZZARD, /*pos*/ -394, -1589, 4878, /*angle*/ 0, 74, 0, /*bhvParam*/ BPARAM2(MR_BLIZZARD_STYPE_JUMPING), /*bhv*/ bhvMrBlizzard), + OBJECT_WITH_ACTS(/*model*/ MODEL_CCM_SNOWMAN_BASE, /*pos*/ 2560, 2662, -1122, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvSnowmansBottom, /*acts*/ ACT_5), RETURN(), }; static const LevelScript script_func_local_3[] = { - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 2665, -4607, 4525, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvCcmTouchedStarSpawn, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_PENGUIN, /*pos*/ 3450, -4700, 4550, /*angle*/ 0, 0, 0, /*behParam*/ 0x01000000, /*beh*/ bhvTuxiesMother, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 4200, -927, 400, /*angle*/ 0, 0, 0, /*behParam*/ 0x03000000, /*beh*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_CCM_SNOWMAN_HEAD, /*pos*/ -4230, -1169, 1813, /*angle*/ 0, 270, 0, /*behParam*/ 0x04000000, /*beh*/ bhvSnowmansHead, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -2000, -2200, -3000, /*angle*/ 0, 0, 0, /*behParam*/ 0x05000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 2665, -4607, 4525, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_1), /*bhv*/ bhvCCMTouchedStarSpawn, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_PENGUIN, /*pos*/ 3450, -4700, 4550, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_2), /*bhv*/ bhvTuxiesMother, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 4200, -927, 400, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_4), /*bhv*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_CCM_SNOWMAN_HEAD, /*pos*/ -4230, -1169, 1813, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_5), /*bhv*/ bhvSnowmansHead, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -2000, -2200, -3000, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_6), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), RETURN(), }; static const LevelScript script_func_local_4[] = { - OBJECT_WITH_ACTS(/*model*/ MODEL_PENGUIN, /*pos*/ -4952, 6656, -6075, /*angle*/ 0, 270, 0, /*behParam*/ 0x02000000, /*beh*/ bhvRacingPenguin, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6500, -5836, -6400, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPenguinRaceFinishLine), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6393, -716, 7503, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPenguinRaceShortcutCheck), + OBJECT_WITH_ACTS(/*model*/ MODEL_PENGUIN, /*pos*/ -4952, 6656, -6075, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_3) | BPARAM2(RACING_PENGUIN_BP_THIN), /*bhv*/ bhvRacingPenguin, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT (/*model*/ MODEL_NONE, /*pos*/ -6500, -5836, -6400, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvPenguinRaceFinishLine), + OBJECT (/*model*/ MODEL_NONE, /*pos*/ -6393, -716, 7503, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvPenguinRaceShortcutCheck), #ifndef VERSION_JP - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4943, 1321, 667, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPlaysMusicTrackWhenTouched), + OBJECT (/*model*/ MODEL_NONE, /*pos*/ -4943, 1321, 667, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvPlaysMusicTrackWhenTouched), #endif RETURN(), }; const LevelScript level_ccm_entry[] = { INIT_LEVEL(), - LOAD_MIO0( /*seg*/ 0x07, _ccm_segment_7SegmentRomStart, _ccm_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _ccm_segment_7SegmentRomStart, _ccm_segment_7SegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _snow_mio0SegmentRomStart, _snow_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0B, _effect_mio0SegmentRomStart, _effect_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0A, _ccm_skybox_mio0SegmentRomStart, _ccm_skybox_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x05, _group7_mio0SegmentRomStart, _group7_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0C, _group7_geoSegmentRomStart, _group7_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x06, _group16_mio0SegmentRomStart, _group16_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0D, _group16_geoSegmentRomStart, _group16_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0B, _effect_mio0SegmentRomStart, _effect_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0A, _ccm_skybox_mio0SegmentRomStart, _ccm_skybox_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x05, _group7_mio0SegmentRomStart, _group7_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0C, _group7_geoSegmentRomStart, _group7_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x06, _group16_mio0SegmentRomStart, _group16_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0D, _group16_geoSegmentRomStart, _group16_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_1), JUMP_LINK(script_func_global_8), JUMP_LINK(script_func_global_17), @@ -78,17 +78,17 @@ const LevelScript level_ccm_entry[] = { LOAD_MODEL_FROM_GEO(MODEL_CCM_SNOWMAN_HEAD, ccm_geo_00040C), AREA(/*index*/ 1, ccm_geo_00051C), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1512, 3560, -2305, /*angle*/ 0, 140, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvSpinAirborneWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -181, 2918, -1486, /*angle*/ 0, 0, 0, /*behParam*/ 0x0F1E0000, /*beh*/ bhvWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1847, 2815, -321, /*angle*/ 0, -158, 0, /*behParam*/ 0x001F0000, /*beh*/ bhvFadingWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3349, -4694, -183, /*angle*/ 0, -34, 0, /*behParam*/ 0x00200000, /*beh*/ bhvFadingWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_CCM, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x14, /*destLevel*/ LEVEL_CCM, /*destArea*/ 0x02, /*destNode*/ 0x14, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x1E, /*destLevel*/ LEVEL_CCM, /*destArea*/ 0x02, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x1F, /*destLevel*/ LEVEL_CCM, /*destArea*/ 0x01, /*destNode*/ 0x20, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x20, /*destLevel*/ LEVEL_CCM, /*destArea*/ 0x01, /*destNode*/ 0x1F, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x33, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x65, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1512, 3560, -2305, /*angle*/ 0, 140, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvSpinAirborneWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -181, 2918, -1486, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(15) | BPARAM2(WARP_NODE_1E), /*bhv*/ bhvWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1847, 2815, -321, /*angle*/ 0, -158, 0, /*bhvParam*/ BPARAM2(WARP_NODE_1F), /*bhv*/ bhvFadingWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3349, -4694, -183, /*angle*/ 0, -34, 0, /*bhvParam*/ BPARAM2(WARP_NODE_20), /*bhv*/ bhvFadingWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_CCM, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_14, /*destLevel*/ LEVEL_CCM, /*destArea*/ 2, /*destNode*/ WARP_NODE_14, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_1E, /*destLevel*/ LEVEL_CCM, /*destArea*/ 2, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_1F, /*destLevel*/ LEVEL_CCM, /*destArea*/ 1, /*destNode*/ WARP_NODE_20, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_20, /*destLevel*/ LEVEL_CCM, /*destArea*/ 1, /*destNode*/ WARP_NODE_1F, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_33, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_65, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_1), JUMP_LINK(script_func_local_2), JUMP_LINK(script_func_local_3), @@ -100,11 +100,11 @@ const LevelScript level_ccm_entry[] = { END_AREA(), AREA(/*index*/ 2, ccm_geo_0005E8), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5836, 7465, -6143, /*angle*/ 0, 90, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvAirborneWarp), - WARP_NODE(/*id*/ 0x14, /*destLevel*/ LEVEL_CCM, /*destArea*/ 0x01, /*destNode*/ 0x14, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_CCM, /*destArea*/ 0x02, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x33, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x65, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5836, 7465, -6143, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvAirborneWarp), + WARP_NODE(/*id*/ WARP_NODE_14, /*destLevel*/ LEVEL_CCM, /*destArea*/ 1, /*destNode*/ WARP_NODE_14, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_CCM, /*destArea*/ 2, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_33, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_65, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_4), TERRAIN(/*terrainData*/ ccm_seg7_area_2_collision), MACRO_OBJECTS(/*objList*/ ccm_seg7_area_2_macro_objs), diff --git a/levels/ccm/snowman_base/geo.inc.c b/levels/ccm/snowman_base/geo.inc.c index 57f2a3fc..6038acb1 100644 --- a/levels/ccm/snowman_base/geo.inc.c +++ b/levels/ccm/snowman_base/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0003F0 const GeoLayout ccm_geo_0003F0[] = { - GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 400), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_07012BD8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_SHADOW(SHADOW_CIRCLE_4_VERTS, 0xC8, 400), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_07012BD8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ccm/snowman_head/geo.inc.c b/levels/ccm/snowman_head/geo.inc.c index 96142663..ee1b2cb2 100644 --- a/levels/ccm/snowman_head/geo.inc.c +++ b/levels/ccm/snowman_head/geo.inc.c @@ -1,9 +1,9 @@ // 0x0E00040C const GeoLayout ccm_geo_00040C[] = { - GEO_CULLING_RADIUS(300), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_070136D0), - GEO_DISPLAY_LIST(LAYER_ALPHA, ccm_seg7_dl_07013870), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(300), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_070136D0), + GEO_DISPLAY_LIST(LAYER_ALPHA, ccm_seg7_dl_07013870), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/cotmc/areas/1/geo.inc.c b/levels/cotmc/areas/1/geo.inc.c index 26fc0a4c..686f456c 100644 --- a/levels/cotmc/areas/1/geo.inc.c +++ b/levels/cotmc/areas/1/geo.inc.c @@ -1,30 +1,30 @@ // 0x0E0001A0 const GeoLayout cotmc_geo_0001A0[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND_COLOR(0x0001), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, cotmc_seg7_dl_07007D48), - GEO_DISPLAY_LIST(LAYER_OPAQUE, cotmc_seg7_dl_0700A160), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x2801, geo_movtex_draw_nocolor), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, cotmc_seg7_dl_0700A4B8), - GEO_RENDER_OBJ(), - GEO_ASM(0, geo_envfx_main), + GEO_BACKGROUND_COLOR(0x0001), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, cotmc_seg7_dl_07007D48), + GEO_DISPLAY_LIST(LAYER_OPAQUE, cotmc_seg7_dl_0700A160), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x2801, geo_movtex_draw_nocolor), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, cotmc_seg7_dl_0700A4B8), + GEO_RENDER_OBJ(), + GEO_ASM(0, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/cotmc/areas/1/macro.inc.c b/levels/cotmc/areas/1/macro.inc.c index 0792e633..78d8a374 100644 --- a/levels/cotmc/areas/1/macro.inc.c +++ b/levels/cotmc/areas/1/macro.inc.c @@ -1,25 +1,25 @@ // 0x0700BD38 - 0x0700BE0C const MacroObject cotmc_seg7_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_snufit, /*yaw*/ 0, /*pos*/ -2920, 220, -20), - MACRO_OBJECT(/*preset*/ macro_snufit, /*yaw*/ 0, /*pos*/ -1380, 240, 740), - MACRO_OBJECT(/*preset*/ macro_box_metal_cap, /*yaw*/ 0, /*pos*/ -360, 300, -200), - MACRO_OBJECT(/*preset*/ macro_snufit, /*yaw*/ 0, /*pos*/ 360, 200, -1120), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 400, 256, -4300), - MACRO_OBJECT(/*preset*/ macro_box_metal_cap, /*yaw*/ 0, /*pos*/ 300, 620, -5280), - MACRO_OBJECT(/*preset*/ macro_snufit, /*yaw*/ 0, /*pos*/ -340, 260, -2620), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ 0, -450, -7000), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 900, 260, -3620), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 0, -170, -1660), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -20, -211, -3940), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ -71, 20, 720, /*behParam*/ DIALOG_123), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 200, -291, -5600), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 980, 260, -3430), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -540, -352, -5940), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -300, 450, -6240), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -200, -400, -6680), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 250, 450, -6400), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 540, -361, -6340), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 980, 260, -3810), - MACRO_OBJECT(/*preset*/ macro_box_1up_running_away, /*yaw*/ 0, /*pos*/ -20, 180, 2060), + MACRO_OBJECT (/*preset*/ macro_snufit, /*yaw*/ 0, /*pos*/ -2920, 220, -20), + MACRO_OBJECT (/*preset*/ macro_snufit, /*yaw*/ 0, /*pos*/ -1380, 240, 740), + MACRO_OBJECT (/*preset*/ macro_box_metal_cap, /*yaw*/ 0, /*pos*/ -360, 300, -200), + MACRO_OBJECT (/*preset*/ macro_snufit, /*yaw*/ 0, /*pos*/ 360, 200, -1120), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 400, 256, -4300), + MACRO_OBJECT (/*preset*/ macro_box_metal_cap, /*yaw*/ 0, /*pos*/ 300, 620, -5280), + MACRO_OBJECT (/*preset*/ macro_snufit, /*yaw*/ 0, /*pos*/ -340, 260, -2620), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ 0, -450, -7000), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 900, 260, -3620), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 0, -170, -1660), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -20, -211, -3940), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ -71, 20, 720, /*bhvParam*/ DIALOG_123), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 200, -291, -5600), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 980, 260, -3430), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -540, -352, -5940), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -300, 450, -6240), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -200, -400, -6680), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 250, 450, -6400), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 540, -361, -6340), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 980, 260, -3810), + MACRO_OBJECT (/*preset*/ macro_box_1up_running_away, /*yaw*/ 0, /*pos*/ -20, 180, 2060), MACRO_OBJECT_END(), }; diff --git a/levels/cotmc/leveldata.c b/levels/cotmc/leveldata.c index ae5abbea..1711438c 100644 --- a/levels/cotmc/leveldata.c +++ b/levels/cotmc/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "dialog_ids.h" diff --git a/levels/cotmc/script.c b/levels/cotmc/script.c index 118136ce..9800c0f4 100644 --- a/levels/cotmc/script.c +++ b/levels/cotmc/script.c @@ -17,39 +17,39 @@ #include "levels/cotmc/header.h" static const LevelScript script_func_local_1[] = { - OBJECT(/*model*/ MODEL_CAP_SWITCH, /*pos*/ 0, 363, -6144, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvCapSwitch), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 500, -7373, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWaterfallSoundLoop), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 500, 3584, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWaterfallSoundLoop), + OBJECT(/*model*/ MODEL_CAP_SWITCH, /*pos*/ 0, 363, -6144, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x01), /*bhv*/ bhvCapSwitch), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 500, -7373, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvWaterfallSoundLoop), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 500, 3584, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvWaterfallSoundLoop), RETURN(), }; static const LevelScript script_func_local_2[] = { - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, -200, -7000, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenRedCoinStar), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, -200, -7000, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_1), /*bhv*/ bhvHiddenRedCoinStar), RETURN(), }; const LevelScript level_cotmc_entry[] = { INIT_LEVEL(), - LOAD_MIO0( /*seg*/ 0x07, _cotmc_segment_7SegmentRomStart, _cotmc_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _cotmc_segment_7SegmentRomStart, _cotmc_segment_7SegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _cave_mio0SegmentRomStart, _cave_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x05, _group8_mio0SegmentRomStart, _group8_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0C, _group8_geoSegmentRomStart, _group8_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x06, _group17_mio0SegmentRomStart, _group17_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0D, _group17_geoSegmentRomStart, _group17_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x05, _group8_mio0SegmentRomStart, _group8_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0C, _group8_geoSegmentRomStart, _group8_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x06, _group17_mio0SegmentRomStart, _group17_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0D, _group17_geoSegmentRomStart, _group17_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_9), JUMP_LINK(script_func_global_18), JUMP_LINK(script_func_global_1), AREA(/*index*/ 1, cotmc_geo_0001A0), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4185, 1020, -47, /*angle*/ 0, 90, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvAirborneWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_COTMC, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x34, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x66, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF3, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 0x01, /*destNode*/ 0x14, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4185, 1020, -47, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvAirborneWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_COTMC, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_34, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_66, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_WARP_FLOOR, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 1, /*destNode*/ WARP_NODE_14, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_2), JUMP_LINK(script_func_local_1), TERRAIN(/*terrainData*/ cotmc_seg7_collision_level), diff --git a/levels/course_defines.h b/levels/course_defines.h index 600cead4..f028b78e 100644 --- a/levels/course_defines.h +++ b/levels/course_defines.h @@ -11,18 +11,18 @@ * 4: Default, used for 100 coin stars, 8 red coin stars in bowser levels, and secret stars */ DEFINE_COURSE(COURSE_NONE, 0x44444440) // (0) Course Hub (Castle Grounds) -DEFINE_COURSE(COURSE_BOB, 0x00022240) // (1) Bob Omb Battlefield +DEFINE_COURSE(COURSE_BOB, 0x00022240) // (1) Bob-omb Battlefield DEFINE_COURSE(COURSE_WF, 0x00002040) // (2) Whomp's Fortress -DEFINE_COURSE(COURSE_JRB, 0x22222240) // (3) Jolly Rodger's Bay -DEFINE_COURSE(COURSE_CCM, 0x00220040) // (4) Cool Cool Mountain +DEFINE_COURSE(COURSE_JRB, 0x22222240) // (3) Jolly Roger Bay +DEFINE_COURSE(COURSE_CCM, 0x00220040) // (4) Cool, Cool Mountain DEFINE_COURSE(COURSE_BBH, 0x22222240) // (5) Big Boo's Haunt DEFINE_COURSE(COURSE_HMC, 0x22222240) // (6) Hazy Maze Cave DEFINE_COURSE(COURSE_LLL, 0x21212140) // (7) Lethal Lava Land DEFINE_COURSE(COURSE_SSL, 0x20222240) // (8) Shifting Sand Land DEFINE_COURSE(COURSE_DDD, 0x22222240) // (9) Dire Dire Docks DEFINE_COURSE(COURSE_SL, 0x02020240) // (10) Snowman's Land -DEFINE_COURSE(COURSE_WDW, 0x22102240) // (11) Wet Dry World -DEFINE_COURSE(COURSE_TTM, 0x00000040) // (12) Tall Tall Mountain +DEFINE_COURSE(COURSE_WDW, 0x22102240) // (11) Wet-Dry World +DEFINE_COURSE(COURSE_TTM, 0x00000040) // (12) Tall, Tall Mountain DEFINE_COURSE(COURSE_THI, 0x11112140) // (13) Tiny Huge Island DEFINE_COURSE(COURSE_TTC, 0x22222240) // (14) Tick Tock Clock DEFINE_COURSE(COURSE_RR, 0x00000040) // (15) Rainbow Ride @@ -30,10 +30,10 @@ DEFINE_COURSES_END() DEFINE_BONUS_COURSE(COURSE_BITDW, 0x34444440) // (16) Bowser in the Dark World DEFINE_BONUS_COURSE(COURSE_BITFS, 0x34444440) // (17) Bowser in the Fire Sea DEFINE_BONUS_COURSE(COURSE_BITS, 0x34444440) // (18) Bowser in the Sky -DEFINE_BONUS_COURSE(COURSE_PSS, 0x24444440) // (19) Princess's Secret Slide +DEFINE_BONUS_COURSE(COURSE_PSS, 0x24444440) // (19) The Princess's Secret Slide DEFINE_BONUS_COURSE(COURSE_COTMC, 0x44444440) // (20) Cavern of the Metal Cap DEFINE_BONUS_COURSE(COURSE_TOTWC, 0x04444440) // (21) Tower of the Wing Cap -DEFINE_BONUS_COURSE(COURSE_VCUTM, 0x24444440) // (22) Vanish Cap Under the Moat -DEFINE_BONUS_COURSE(COURSE_WMOTR, 0x04444440) // (23) Winged Mario over the Rainbow +DEFINE_BONUS_COURSE(COURSE_VCUTM, 0x24444440) // (22) Vanish Cap under the Moat +DEFINE_BONUS_COURSE(COURSE_WMOTR, 0x04444440) // (23) Wing Mario over the Rainbow DEFINE_BONUS_COURSE(COURSE_SA, 0x24444440) // (24) Secret Aquarium DEFINE_BONUS_COURSE(COURSE_CAKE_END, 0x44444440) // (25) The End (Cake Scene) diff --git a/levels/ddd/areas/1/geo.inc.c b/levels/ddd/areas/1/geo.inc.c index e58d7e1e..91318cd0 100644 --- a/levels/ddd/areas/1/geo.inc.c +++ b/levels/ddd/areas/1/geo.inc.c @@ -1,31 +1,31 @@ // 0x0E0004C0 const GeoLayout ddd_geo_0004C0[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND(BACKGROUND_OCEAN_SKY, geo_skybox_main), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(2, 0, 2000, 6000, 2560, 0, 512, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ddd_seg7_dl_07004D48), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ddd_seg7_dl_070057E8), - GEO_DISPLAY_LIST(LAYER_ALPHA, ddd_seg7_dl_07005C40), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, ddd_seg7_dl_07005F78), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x2301, geo_movtex_draw_water_regions), - GEO_RENDER_OBJ(), - GEO_ASM( 13, geo_envfx_main), + GEO_BACKGROUND(BACKGROUND_OCEAN_SKY, geo_skybox_main), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(2, 0, 2000, 6000, 2560, 0, 512, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ddd_seg7_dl_07004D48), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ddd_seg7_dl_070057E8), + GEO_DISPLAY_LIST(LAYER_ALPHA, ddd_seg7_dl_07005C40), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, ddd_seg7_dl_07005F78), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x2301, geo_movtex_draw_water_regions), + GEO_RENDER_OBJ(), + GEO_ASM( 13, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ddd/areas/1/macro.inc.c b/levels/ddd/areas/1/macro.inc.c index 6544cfdb..0b094aeb 100644 --- a/levels/ddd/areas/1/macro.inc.c +++ b/levels/ddd/areas/1/macro.inc.c @@ -1,22 +1,22 @@ // 0x0700EEF4 - 0x0700EFAA const MacroObject ddd_seg7_area_1_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_seaweed_bundle, /*yaw*/ 0, /*pos*/ -2880, -5120, -1850), - MACRO_OBJECT(/*preset*/ macro_clam_shell, /*yaw*/ 90, /*pos*/ -4760, -5120, 580), - MACRO_OBJECT(/*preset*/ macro_seaweed_bundle, /*yaw*/ 0, /*pos*/ -3510, -5120, 1950), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -4760, -5100, 580), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ -4760, -5080, 580, /*behParam*/ 1), - MACRO_OBJECT(/*preset*/ macro_coin_ring_vertical, /*yaw*/ 90, /*pos*/ -1000, -4250, 0), - MACRO_OBJECT(/*preset*/ macro_fish_group, /*yaw*/ 0, /*pos*/ -4646, -4615, -800), - MACRO_OBJECT(/*preset*/ macro_fish_group_2, /*yaw*/ 0, /*pos*/ -1804, -2560, 1292), - MACRO_OBJECT(/*preset*/ macro_coin_line_vertical, /*yaw*/ 0, /*pos*/ -3760, -4560, 660), - MACRO_OBJECT(/*preset*/ macro_coin_line_vertical, /*yaw*/ 0, /*pos*/ -4240, -4786, 1180), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 315, /*pos*/ -4840, -1137, 1860), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2180, -5119, 1720), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1460, -5119, 1300), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1320, -5119, 840), - MACRO_OBJECT(/*preset*/ macro_fish_group, /*yaw*/ 0, /*pos*/ -3580, -2280, -1120), - MACRO_OBJECT(/*preset*/ macro_fish_group, /*yaw*/ 0, /*pos*/ -2020, -3460, -120), - MACRO_OBJECT(/*preset*/ macro_coin_ring_vertical, /*yaw*/ 90, /*pos*/ 0, -4250, 0), - MACRO_OBJECT(/*preset*/ macro_coin_ring_vertical, /*yaw*/ 90, /*pos*/ -2000, -4250, 0), + MACRO_OBJECT (/*preset*/ macro_seaweed_bundle, /*yaw*/ 0, /*pos*/ -2880, -5120, -1850), + MACRO_OBJECT (/*preset*/ macro_clam_shell, /*yaw*/ 90, /*pos*/ -4760, -5120, 580), + MACRO_OBJECT (/*preset*/ macro_seaweed_bundle, /*yaw*/ 0, /*pos*/ -3510, -5120, 1950), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -4760, -5100, 580), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ -4760, -5080, 580, /*bhvParam*/ 1), + MACRO_OBJECT (/*preset*/ macro_coin_ring_vertical_flying, /*yaw*/ 90, /*pos*/ -1000, -4250, 0), + MACRO_OBJECT (/*preset*/ macro_fish_spawner_few_blue, /*yaw*/ 0, /*pos*/ -4646, -4615, -800), + MACRO_OBJECT (/*preset*/ macro_fish_spawner_few_cyan, /*yaw*/ 0, /*pos*/ -1804, -2560, 1292), + MACRO_OBJECT (/*preset*/ macro_coin_line_vertical_flying, /*yaw*/ 0, /*pos*/ -3760, -4560, 660), + MACRO_OBJECT (/*preset*/ macro_coin_line_vertical_flying, /*yaw*/ 0, /*pos*/ -4240, -4786, 1180), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 315, /*pos*/ -4840, -1137, 1860), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2180, -5119, 1720), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1460, -5119, 1300), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1320, -5119, 840), + MACRO_OBJECT (/*preset*/ macro_fish_spawner_few_blue, /*yaw*/ 0, /*pos*/ -3580, -2280, -1120), + MACRO_OBJECT (/*preset*/ macro_fish_spawner_few_blue, /*yaw*/ 0, /*pos*/ -2020, -3460, -120), + MACRO_OBJECT (/*preset*/ macro_coin_ring_vertical_flying, /*yaw*/ 90, /*pos*/ 0, -4250, 0), + MACRO_OBJECT (/*preset*/ macro_coin_ring_vertical_flying, /*yaw*/ 90, /*pos*/ -2000, -4250, 0), MACRO_OBJECT_END(), }; diff --git a/levels/ddd/areas/2/geo.inc.c b/levels/ddd/areas/2/geo.inc.c index 68201f70..8c5c537b 100644 --- a/levels/ddd/areas/2/geo.inc.c +++ b/levels/ddd/areas/2/geo.inc.c @@ -1,33 +1,33 @@ // 0x0E000570 const GeoLayout ddd_geo_000570[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND_COLOR(0x0001), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(4, 0, 2000, 6000, 2560, 0, 512, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ddd_seg7_dl_07007408), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ddd_seg7_dl_07007CB8), - GEO_DISPLAY_LIST(LAYER_ALPHA, ddd_seg7_dl_07008C48), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, ddd_seg7_dl_07008F80), - GEO_DISPLAY_LIST(LAYER_ALPHA, ddd_seg7_dl_0700BAE0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ddd_seg7_dl_0700CE48), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x2302, geo_movtex_draw_water_regions), - GEO_RENDER_OBJ(), - GEO_ASM( 14, geo_envfx_main), + GEO_BACKGROUND_COLOR(0x0001), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(4, 0, 2000, 6000, 2560, 0, 512, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ddd_seg7_dl_07007408), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ddd_seg7_dl_07007CB8), + GEO_DISPLAY_LIST(LAYER_ALPHA, ddd_seg7_dl_07008C48), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, ddd_seg7_dl_07008F80), + GEO_DISPLAY_LIST(LAYER_ALPHA, ddd_seg7_dl_0700BAE0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ddd_seg7_dl_0700CE48), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x2302, geo_movtex_draw_water_regions), + GEO_RENDER_OBJ(), + GEO_ASM( 14, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ddd/areas/2/macro.inc.c b/levels/ddd/areas/2/macro.inc.c index f442f350..8278e5d4 100644 --- a/levels/ddd/areas/2/macro.inc.c +++ b/levels/ddd/areas/2/macro.inc.c @@ -1,50 +1,50 @@ // 0x0700EFAC - 0x0700F17A const MacroObject ddd_seg7_area_2_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_box_metal_cap, /*yaw*/ 0, /*pos*/ 6800, 500, -850), - MACRO_OBJECT(/*preset*/ macro_box_vanish_cap, /*yaw*/ 0, /*pos*/ 6800, 500, -150), - MACRO_OBJECT(/*preset*/ macro_floor_switch_hidden_objects, /*yaw*/ 0, /*pos*/ 6800, 110, 2000), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 6075, -100, 2000), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 5875, 100, 2000), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 5675, 100, 2000), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 5475, 300, 2000), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 5275, 300, 2000), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 5075, 500, 2000), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 4875, 500, 2000), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 6275, -100, 2000), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 6475, -100, 2000), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4680, 1155, -2200), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 3525, 1155, -2250), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 3850, 1111, 3550), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4400, 1288, 3595), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2974, 1015, 3584), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 5550, 1015, 3575), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 3300, 1111, -1900), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2100, 1025, -1600), - MACRO_OBJECT(/*preset*/ macro_fish_group, /*yaw*/ 0, /*pos*/ 2061, -3323, 2246), - MACRO_OBJECT(/*preset*/ macro_fish_group_2, /*yaw*/ 0, /*pos*/ 5661, -2923, -1415), - MACRO_OBJECT(/*preset*/ macro_clam_shell, /*yaw*/ 90, /*pos*/ 1273, -4106, 2320), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 180, /*pos*/ 3086, 110, 6120, /*behParam*/ DIALOG_053), - MACRO_OBJECT(/*preset*/ macro_seaweed_bundle, /*yaw*/ 0, /*pos*/ 6420, -4106, -2026), - MACRO_OBJECT(/*preset*/ macro_seaweed_bundle, /*yaw*/ 0, /*pos*/ 6340, -4106, -1413), - MACRO_OBJECT(/*preset*/ macro_clam_shell, /*yaw*/ 135, /*pos*/ 1966, -4106, 3226), - MACRO_OBJECT(/*preset*/ macro_clam_shell, /*yaw*/ 180, /*pos*/ 3886, -4006, 5130), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 5740, 710, 3900), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 5740, 510, 4100), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 5740, 310, 4300), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 5740, 110, 4500), - MACRO_OBJECT(/*preset*/ macro_seaweed_bundle, /*yaw*/ 0, /*pos*/ 2999, -4092, 4430), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ 4876, -4087, 4430), - MACRO_OBJECT(/*preset*/ macro_coin_line_vertical, /*yaw*/ 0, /*pos*/ 3892, -4030, -3830), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 3923, 110, 5953), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ 938, 153, 4107), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 5940, 110, 4500), - MACRO_OBJECT(/*preset*/ macro_blue_coin_switch, /*yaw*/ 0, /*pos*/ 1614, 928, 922), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1414, 1020, 622), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1814, 1020, 622), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1814, 1020, 1222), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1414, 1020, 1222), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1414, 1020, 922), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1814, 1020, 922), - MACRO_OBJECT(/*preset*/ macro_koopa_shell_underwater, /*yaw*/ 0, /*pos*/ 3886, -4050, 5100), + MACRO_OBJECT (/*preset*/ macro_box_metal_cap, /*yaw*/ 0, /*pos*/ 6800, 500, -850), + MACRO_OBJECT (/*preset*/ macro_box_vanish_cap, /*yaw*/ 0, /*pos*/ 6800, 500, -150), + MACRO_OBJECT (/*preset*/ macro_floor_switch_hidden_objects, /*yaw*/ 0, /*pos*/ 6800, 110, 2000), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 6075, -100, 2000), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 5875, 100, 2000), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 5675, 100, 2000), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 5475, 300, 2000), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 5275, 300, 2000), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 5075, 500, 2000), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 4875, 500, 2000), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 6275, -100, 2000), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 6475, -100, 2000), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4680, 1155, -2200), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 3525, 1155, -2250), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 3850, 1111, 3550), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4400, 1288, 3595), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2974, 1015, 3584), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 5550, 1015, 3575), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 3300, 1111, -1900), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2100, 1025, -1600), + MACRO_OBJECT (/*preset*/ macro_fish_spawner_few_blue, /*yaw*/ 0, /*pos*/ 2061, -3323, 2246), + MACRO_OBJECT (/*preset*/ macro_fish_spawner_few_cyan, /*yaw*/ 0, /*pos*/ 5661, -2923, -1415), + MACRO_OBJECT (/*preset*/ macro_clam_shell, /*yaw*/ 90, /*pos*/ 1273, -4106, 2320), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 180, /*pos*/ 3086, 110, 6120, /*bhvParam*/ DIALOG_053), + MACRO_OBJECT (/*preset*/ macro_seaweed_bundle, /*yaw*/ 0, /*pos*/ 6420, -4106, -2026), + MACRO_OBJECT (/*preset*/ macro_seaweed_bundle, /*yaw*/ 0, /*pos*/ 6340, -4106, -1413), + MACRO_OBJECT (/*preset*/ macro_clam_shell, /*yaw*/ 135, /*pos*/ 1966, -4106, 3226), + MACRO_OBJECT (/*preset*/ macro_clam_shell, /*yaw*/ 180, /*pos*/ 3886, -4006, 5130), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 5740, 710, 3900), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 5740, 510, 4100), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 5740, 310, 4300), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 5740, 110, 4500), + MACRO_OBJECT (/*preset*/ macro_seaweed_bundle, /*yaw*/ 0, /*pos*/ 2999, -4092, 4430), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ 4876, -4087, 4430), + MACRO_OBJECT (/*preset*/ macro_coin_line_vertical_flying, /*yaw*/ 0, /*pos*/ 3892, -4030, -3830), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 3923, 110, 5953), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ 938, 153, 4107), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 5940, 110, 4500), + MACRO_OBJECT (/*preset*/ macro_blue_coin_switch, /*yaw*/ 0, /*pos*/ 1614, 928, 922), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1414, 1020, 622), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1814, 1020, 622), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1814, 1020, 1222), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1414, 1020, 1222), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1414, 1020, 922), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1814, 1020, 922), + MACRO_OBJECT (/*preset*/ macro_koopa_shell_underwater, /*yaw*/ 0, /*pos*/ 3886, -4050, 5100), MACRO_OBJECT_END(), }; diff --git a/levels/ddd/leveldata.c b/levels/ddd/leveldata.c index 4b0434c5..582565b7 100644 --- a/levels/ddd/leveldata.c +++ b/levels/ddd/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "dialog_ids.h" diff --git a/levels/ddd/pole/geo.inc.c b/levels/ddd/pole/geo.inc.c index 49a90d0e..fb121655 100644 --- a/levels/ddd/pole/geo.inc.c +++ b/levels/ddd/pole/geo.inc.c @@ -1,11 +1,11 @@ // 0x0E000450 const GeoLayout ddd_geo_000450[] = { - GEO_CULLING_RADIUS(700), - GEO_OPEN_NODE(), - GEO_SHADOW(SHADOW_SQUARE_PERMANENT, 0xB4, 120), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ddd_seg7_dl_0700D2A0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(700), + GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_SQUARE_PERMANENT, 0xB4, 120), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ddd_seg7_dl_0700D2A0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ddd/script.c b/levels/ddd/script.c index 759a2627..a2f81f50 100644 --- a/levels/ddd/script.c +++ b/levels/ddd/script.c @@ -16,64 +16,64 @@ #include "levels/ddd/header.h" static const LevelScript script_func_local_1[] = { - OBJECT(/*model*/ MODEL_SUSHI, /*pos*/ -3071, -270, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSushiShark), - OBJECT(/*model*/ MODEL_SUSHI, /*pos*/ -3071, -4270, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSushiShark), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3071, -130, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFewBlueFishSpawner), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3071, -4270, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvManyBlueFishSpawner), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3071, -2000, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvChirpChirp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3071, -3000, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvChirpChirp), - OBJECT(/*model*/ MODEL_DL_WHIRLPOOL, /*pos*/ -3174, -4915, 102, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWhirlpool), + OBJECT(/*model*/ MODEL_SUSHI, /*pos*/ -3071, -270, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvSushiShark), + OBJECT(/*model*/ MODEL_SUSHI, /*pos*/ -3071, -4270, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvSushiShark), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3071, -130, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFewBlueFishSpawner), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3071, -4270, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvManyBlueFishSpawner), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3071, -2000, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvChirpChirp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3071, -3000, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvChirpChirp), + OBJECT(/*model*/ MODEL_DL_WHIRLPOOL, /*pos*/ -3174, -4915, 102, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvWhirlpool), RETURN(), }; static const LevelScript script_func_local_2[] = { - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ -2400, -4607, 125, /*angle*/ 0, 0, 0, /*behParam*/ 0x01000000, /*beh*/ bhvTreasureChests, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_MANTA_RAY, /*pos*/ -4640, -1380, 40, /*angle*/ 0, 0, 0, /*behParam*/ 0x04000000, /*beh*/ bhvMantaRay, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ -2400, -4607, 125, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_2), /*bhv*/ bhvTreasureChestsDDD, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_MANTA_RAY, /*pos*/ -4640, -1380, 40, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_5), /*bhv*/ bhvMantaRay, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), RETURN(), }; static const LevelScript script_func_local_3[] = { - OBJECT(/*model*/ MODEL_DDD_BOWSER_SUB_DOOR, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBowserSubDoor), - OBJECT(/*model*/ MODEL_DDD_BOWSER_SUB, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBowsersSub), - OBJECT(/*model*/ MODEL_DDD_POLE, /*pos*/ 5120, 1005, 3584, /*angle*/ 0, 180, 0, /*behParam*/ 0x001E0000, /*beh*/ bhvDDDPole), - OBJECT(/*model*/ MODEL_DDD_POLE, /*pos*/ 5605, 1005, 3380, /*angle*/ 0, 270, 0, /*behParam*/ 0x00150000, /*beh*/ bhvDDDPole), - OBJECT(/*model*/ MODEL_DDD_POLE, /*pos*/ 1800, 1005, 1275, /*angle*/ 0, 0, 0, /*behParam*/ 0x000B0000, /*beh*/ bhvDDDPole), - OBJECT(/*model*/ MODEL_DDD_POLE, /*pos*/ 4000, 1005, 1075, /*angle*/ 0, 180, 0, /*behParam*/ 0x000B0000, /*beh*/ bhvDDDPole), - OBJECT(/*model*/ MODEL_DDD_POLE, /*pos*/ 1830, 1005, 520, /*angle*/ 0, 270, 0, /*behParam*/ 0x00140000, /*beh*/ bhvDDDPole), - OBJECT(/*model*/ MODEL_DDD_POLE, /*pos*/ 4000, 1005, 1275, /*angle*/ 0, 0, 0, /*behParam*/ 0x000B0000, /*beh*/ bhvDDDPole), - OBJECT(/*model*/ MODEL_DDD_POLE, /*pos*/ 5760, 1005, 360, /*angle*/ 0, 270, 0, /*behParam*/ 0x00170000, /*beh*/ bhvDDDPole), - OBJECT(/*model*/ MODEL_DDD_POLE, /*pos*/ 3310, 1005, -1945, /*angle*/ 0, 0, 0, /*behParam*/ 0x00170000, /*beh*/ bhvDDDPole), - OBJECT(/*model*/ MODEL_DDD_POLE, /*pos*/ 3550, 1005, -2250, /*angle*/ 0, 0, 0, /*behParam*/ 0x000D0000, /*beh*/ bhvDDDPole), + OBJECT(/*model*/ MODEL_DDD_BOWSER_SUB_DOOR, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBowserSubDoor), + OBJECT(/*model*/ MODEL_DDD_BOWSER_SUB, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBowsersSub), + OBJECT(/*model*/ MODEL_DDD_POLE, /*pos*/ 5120, 1005, 3584, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(0x1E), /*bhv*/ bhvDDDPole), + OBJECT(/*model*/ MODEL_DDD_POLE, /*pos*/ 5605, 1005, 3380, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM2(0x15), /*bhv*/ bhvDDDPole), + OBJECT(/*model*/ MODEL_DDD_POLE, /*pos*/ 1800, 1005, 1275, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x0B), /*bhv*/ bhvDDDPole), + OBJECT(/*model*/ MODEL_DDD_POLE, /*pos*/ 4000, 1005, 1075, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(0x0B), /*bhv*/ bhvDDDPole), + OBJECT(/*model*/ MODEL_DDD_POLE, /*pos*/ 1830, 1005, 520, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM2(0x14), /*bhv*/ bhvDDDPole), + OBJECT(/*model*/ MODEL_DDD_POLE, /*pos*/ 4000, 1005, 1275, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x0B), /*bhv*/ bhvDDDPole), + OBJECT(/*model*/ MODEL_DDD_POLE, /*pos*/ 5760, 1005, 360, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM2(0x17), /*bhv*/ bhvDDDPole), + OBJECT(/*model*/ MODEL_DDD_POLE, /*pos*/ 3310, 1005, -1945, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x17), /*bhv*/ bhvDDDPole), + OBJECT(/*model*/ MODEL_DDD_POLE, /*pos*/ 3550, 1005, -2250, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x0D), /*bhv*/ bhvDDDPole), RETURN(), }; static const LevelScript script_func_local_4[] = { - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3404, -3319, -489, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvJetStream), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3404, -3319, -489, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvJetStream), RETURN(), }; static const LevelScript script_func_local_5[] = { - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 3900, 850, -600, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 5513, 1200, 900, /*angle*/ 0, 0, 0, /*behParam*/ 0x02000000, /*beh*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 3404, -3319, -489, /*angle*/ 0, 0, 0, /*behParam*/ 0x03000000, /*beh*/ bhvJetStreamRingSpawner, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 2030, -3700, -2780, /*angle*/ 0, 0, 0, /*behParam*/ 0x05000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 3900, 850, -600, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_1), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 5513, 1200, 900, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_3), /*bhv*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 3404, -3319, -489, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_4), /*bhv*/ bhvJetStreamRingSpawner, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 2030, -3700, -2780, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_6), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), RETURN(), }; const LevelScript level_ddd_entry[] = { INIT_LEVEL(), - LOAD_MIO0( /*seg*/ 0x07, _ddd_segment_7SegmentRomStart, _ddd_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _ddd_segment_7SegmentRomStart, _ddd_segment_7SegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _water_mio0SegmentRomStart, _water_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0B, _effect_mio0SegmentRomStart, _effect_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0A, _water_skybox_mio0SegmentRomStart, _water_skybox_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x05, _group4_mio0SegmentRomStart, _group4_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0C, _group4_geoSegmentRomStart, _group4_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x06, _group13_mio0SegmentRomStart, _group13_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0D, _group13_geoSegmentRomStart, _group13_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0B, _effect_mio0SegmentRomStart, _effect_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0A, _water_skybox_mio0SegmentRomStart, _water_skybox_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x05, _group4_mio0SegmentRomStart, _group4_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0C, _group4_geoSegmentRomStart, _group4_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x06, _group13_mio0SegmentRomStart, _group13_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0D, _group13_geoSegmentRomStart, _group13_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_1), JUMP_LINK(script_func_global_5), JUMP_LINK(script_func_global_14), @@ -82,10 +82,10 @@ const LevelScript level_ddd_entry[] = { LOAD_MODEL_FROM_GEO(MODEL_DDD_POLE, ddd_geo_000450), AREA(/*index*/ 1, ddd_geo_0004C0), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3071, 3000, 0, /*angle*/ 0, 7, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvSpinAirborneWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_DDD, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x35, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x67, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3071, 3000, 0, /*angle*/ 0, 7, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvSpinAirborneWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_DDD, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_35, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_67, /*flags*/ WARP_NO_CHECKPOINT), WHIRLPOOL(/*unk2*/ 0, /*unk3*/ 0, /*pos*/ -3174, -4915, 102, /*strength*/ 20), JUMP_LINK(script_func_local_1), JUMP_LINK(script_func_local_2), @@ -99,9 +99,9 @@ const LevelScript level_ddd_entry[] = { AREA(/*index*/ 2, ddd_geo_000570), WHIRLPOOL(/*unk2*/ 0, /*unk3*/ 0, /*pos*/ 3355, -3575, -515, /*strength*/ -30), WHIRLPOOL(/*unk2*/ 1, /*unk3*/ 2, /*pos*/ 3917, -2040, -6041, /*strength*/ 50), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x35, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x67, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF3, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 0x01, /*destNode*/ 0x1E, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_35, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_67, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_WARP_FLOOR, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 1, /*destNode*/ WARP_NODE_1E, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_3), JUMP_LINK(script_func_local_4), JUMP_LINK(script_func_local_5), diff --git a/levels/ddd/sub_door/geo.inc.c b/levels/ddd/sub_door/geo.inc.c index 271857fd..dfffe9e2 100644 --- a/levels/ddd/sub_door/geo.inc.c +++ b/levels/ddd/sub_door/geo.inc.c @@ -1,10 +1,10 @@ // 0x0E000478 const GeoLayout ddd_geo_000478[] = { - GEO_CULLING_RADIUS(10000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, ddd_seg7_dl_07009030), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ddd_seg7_dl_07009120), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, ddd_seg7_dl_07009208), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(10000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, ddd_seg7_dl_07009030), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ddd_seg7_dl_07009120), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, ddd_seg7_dl_07009208), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ddd/submarine/geo.inc.c b/levels/ddd/submarine/geo.inc.c index 62d318e3..bad9f9af 100644 --- a/levels/ddd/submarine/geo.inc.c +++ b/levels/ddd/submarine/geo.inc.c @@ -1,9 +1,9 @@ // 0x0E0004A0 const GeoLayout ddd_geo_0004A0[] = { - GEO_CULLING_RADIUS(10000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ddd_seg7_dl_0700AF10), - GEO_DISPLAY_LIST(LAYER_ALPHA, ddd_seg7_dl_0700B068), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(10000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ddd_seg7_dl_0700AF10), + GEO_DISPLAY_LIST(LAYER_ALPHA, ddd_seg7_dl_0700B068), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ending/geo.c b/levels/ending/geo.c index 867bebb5..1e973423 100644 --- a/levels/ending/geo.c +++ b/levels/ending/geo.c @@ -15,26 +15,26 @@ // 0x0E000050 const GeoLayout ending_geo_000050[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), + GEO_OPEN_NODE(), #ifdef VERSION_EU - GEO_BACKGROUND_COLOR(0x0001), + GEO_BACKGROUND_COLOR(0x0001), #endif - GEO_ASM(0, geo_exec_cake_end_screen), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(1, 0, 2000, 6000, 0, 0, 0, geo_camera_main), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_ASM(0, geo_exec_cake_end_screen), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(1, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ending/leveldata.c b/levels/ending/leveldata.c index 94b93872..5dcb7ed2 100644 --- a/levels/ending/leveldata.c +++ b/levels/ending/leveldata.c @@ -245,7 +245,11 @@ const Gfx dl_cake_end_screen_eu_070297D8[] = { // VERSION_EU #else +#ifdef VERSION_CN +#include "levels/ending/cake_cn.inc.c" +#else #include "levels/ending/cake.inc.c" +#endif // 0x07025800 - 0x07025840 static const Vtx cake_end_vertex_07025800[] = { diff --git a/levels/hmc/areas/1/geo.inc.c b/levels/hmc/areas/1/geo.inc.c index 5a2baac0..88686626 100644 --- a/levels/hmc/areas/1/geo.inc.c +++ b/levels/hmc/areas/1/geo.inc.c @@ -1,335 +1,335 @@ // 0x0E0005E8 const GeoLayout hmc_geo_0005E8[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070078B0), - GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_07007B50), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_070080E8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070093F0), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070078B0), + GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_07007B50), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_070080E8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070093F0), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000618 const GeoLayout hmc_geo_000618[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0700E448), - GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0700EF00), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0700F3E8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0700FA40), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0700FEF0), - GEO_DISPLAY_LIST(LAYER_OPAQUE_DECAL, hmc_seg7_dl_07010070), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0700E448), + GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0700EF00), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0700F3E8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0700FA40), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0700FEF0), + GEO_DISPLAY_LIST(LAYER_OPAQUE_DECAL, hmc_seg7_dl_07010070), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000658 const GeoLayout hmc_geo_000658[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07013CA8), - GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_07013E80), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07014300), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07014B08), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07014C00), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07014E48), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0702, geo_movtex_draw_water_regions), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07013CA8), + GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_07013E80), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07014300), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07014B08), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07014C00), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07014E48), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x0702, geo_movtex_draw_water_regions), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E0006A8 const GeoLayout hmc_geo_0006A8[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070173A8), - GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_07017C98), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07018200), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07019248), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07019368), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070173A8), + GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_07017C98), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07018200), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07019248), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07019368), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E0006E0 const GeoLayout hmc_geo_0006E0[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701A080), - GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0701A400), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701A080), + GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0701A400), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000700 const GeoLayout hmc_geo_000700[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701E820), - GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0701F1B0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0701F690), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0701F818), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701FD58), - GEO_ASM(0, geo_movtex_pause_control), - GEO_ASM(0x0701, geo_movtex_draw_water_regions), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701E820), + GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0701F1B0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0701F690), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0701F818), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701FD58), + GEO_ASM(0, geo_movtex_pause_control), + GEO_ASM(0x0701, geo_movtex_draw_water_regions), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000748 const GeoLayout hmc_geo_000748[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07020FD0), - GEO_ASM(0, geo_painting_update), - GEO_ASM(PAINTING_ID(0, 0), geo_painting_draw), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07020FD0), + GEO_ASM(0, geo_painting_update), + GEO_ASM(PAINTING_ID(0, 0), geo_painting_draw), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000770 const GeoLayout hmc_geo_000770[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07021760), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07021BA0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070228A0), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07021760), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07021BA0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070228A0), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000798 const GeoLayout hmc_geo_000798[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070078B0), - GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_07007B50), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_070080E8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070093F0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0700E448), - GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0700EF00), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0700F3E8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0700FA40), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0700FEF0), - GEO_DISPLAY_LIST(LAYER_OPAQUE_DECAL, hmc_seg7_dl_07010070), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070078B0), + GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_07007B50), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_070080E8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070093F0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0700E448), + GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0700EF00), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0700F3E8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0700FA40), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0700FEF0), + GEO_DISPLAY_LIST(LAYER_OPAQUE_DECAL, hmc_seg7_dl_07010070), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E0007F8 const GeoLayout hmc_geo_0007F8[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070078B0), - GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_07007B50), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_070080E8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070093F0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070173A8), - GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_07017C98), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07018200), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07019248), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07019368), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070078B0), + GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_07007B50), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_070080E8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070093F0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070173A8), + GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_07017C98), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07018200), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07019248), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07019368), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000850 const GeoLayout hmc_geo_000850[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0700E448), - GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0700EF00), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0700F3E8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0700FA40), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0700FEF0), - GEO_DISPLAY_LIST(LAYER_OPAQUE_DECAL, hmc_seg7_dl_07010070), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07013CA8), - GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_07013E80), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07014300), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07014B08), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07014C00), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07014E48), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0702, geo_movtex_draw_water_regions), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0700E448), + GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0700EF00), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0700F3E8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0700FA40), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0700FEF0), + GEO_DISPLAY_LIST(LAYER_OPAQUE_DECAL, hmc_seg7_dl_07010070), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07013CA8), + GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_07013E80), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07014300), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07014B08), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07014C00), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07014E48), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x0702, geo_movtex_draw_water_regions), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E0008D0 const GeoLayout hmc_geo_0008D0[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0700E448), - GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0700EF00), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0700F3E8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0700FA40), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0700FEF0), - GEO_DISPLAY_LIST(LAYER_OPAQUE_DECAL, hmc_seg7_dl_07010070), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070173A8), - GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_07017C98), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07018200), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07019248), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07019368), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0700E448), + GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0700EF00), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0700F3E8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0700FA40), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0700FEF0), + GEO_DISPLAY_LIST(LAYER_OPAQUE_DECAL, hmc_seg7_dl_07010070), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070173A8), + GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_07017C98), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07018200), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07019248), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07019368), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000938 const GeoLayout hmc_geo_000938[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07013CA8), - GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_07013E80), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07014300), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07014B08), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07014C00), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07014E48), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701A080), - GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0701A400), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0702, geo_movtex_draw_water_regions), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07013CA8), + GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_07013E80), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07014300), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07014B08), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07014C00), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07014E48), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701A080), + GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0701A400), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x0702, geo_movtex_draw_water_regions), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000998 const GeoLayout hmc_geo_000998[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07013CA8), - GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_07013E80), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07014300), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07014B08), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07014C00), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07014E48), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701E820), - GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0701F1B0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0701F690), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0701F818), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701FD58), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0701, geo_movtex_draw_water_regions), - GEO_ASM(0x0702, geo_movtex_draw_water_regions), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07013CA8), + GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_07013E80), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07014300), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07014B08), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07014C00), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07014E48), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701E820), + GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0701F1B0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0701F690), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0701F818), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701FD58), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x0701, geo_movtex_draw_water_regions), + GEO_ASM(0x0702, geo_movtex_draw_water_regions), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000A18 const GeoLayout hmc_geo_000A18[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070173A8), - GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_07017C98), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07018200), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07019248), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07019368), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701E820), - GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0701F1B0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0701F690), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0701F818), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701FD58), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0701, geo_movtex_draw_water_regions), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070173A8), + GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_07017C98), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07018200), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07019248), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07019368), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701E820), + GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0701F1B0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0701F690), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0701F818), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701FD58), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x0701, geo_movtex_draw_water_regions), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000A88 const GeoLayout hmc_geo_000A88[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701E820), - GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0701F1B0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0701F690), - 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, 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(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701E820), + GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0701F1B0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0701F690), + 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, 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(), + GEO_RETURN(), }; // 0x0E000AE8 const GeoLayout hmc_geo_000AE8[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701E820), - GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0701F1B0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0701F690), - 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_07021760), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07021BA0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070228A0), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0701, geo_movtex_draw_water_regions), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701E820), + GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0701F1B0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0701F690), + 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_07021760), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07021BA0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070228A0), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x0701, geo_movtex_draw_water_regions), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000B48 const GeoLayout hmc_geo_000B48[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070173A8), - GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_07017C98), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07018200), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07019248), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07019368), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701A080), - GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0701A400), - GEO_CLOSE_NODE(), - GEO_RETURN(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070173A8), + GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_07017C98), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07018200), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07019248), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07019368), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701A080), + GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0701A400), + GEO_CLOSE_NODE(), + GEO_RETURN(), }; // 0x0E000B90 const GeoLayout hmc_geo_000B90[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND_COLOR(0x0001), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_SWITCH_CASE(18, geo_switch_area), - GEO_OPEN_NODE(), - GEO_BRANCH(1, hmc_geo_0005E8), // 0x0E0005E8 - GEO_BRANCH(1, hmc_geo_000618), // 0x0E000618 - GEO_BRANCH(1, hmc_geo_000658), // 0x0E000658 - GEO_BRANCH(1, hmc_geo_0006A8), // 0x0E0006A8 - GEO_BRANCH(1, hmc_geo_0006E0), // 0x0E0006E0 - GEO_BRANCH(1, hmc_geo_000700), // 0x0E000700 - GEO_BRANCH(1, hmc_geo_000748), // 0x0E000748 - GEO_BRANCH(1, hmc_geo_000770), // 0x0E000770 - GEO_BRANCH(1, hmc_geo_000798), // 0x0E000798 - GEO_BRANCH(1, hmc_geo_0007F8), // 0x0E0007F8 - GEO_BRANCH(1, hmc_geo_000850), // 0x0E000850 - GEO_BRANCH(1, hmc_geo_0008D0), // 0x0E0008D0 - GEO_BRANCH(1, hmc_geo_000938), // 0x0E000938 - GEO_BRANCH(1, hmc_geo_000998), // 0x0E000998 - GEO_BRANCH(1, hmc_geo_000A18), // 0x0E000A18 - GEO_BRANCH(1, hmc_geo_000A88), // 0x0E000A88 - GEO_BRANCH(1, hmc_geo_000AE8), // 0x0E000AE8 - GEO_BRANCH(1, hmc_geo_000B48), // 0x0E000B48 - GEO_CLOSE_NODE(), - GEO_RENDER_OBJ(), - GEO_ASM(0, geo_envfx_main), + GEO_BACKGROUND_COLOR(0x0001), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(18, geo_switch_area), + GEO_OPEN_NODE(), + GEO_BRANCH(1, hmc_geo_0005E8), // 0x0E0005E8 + GEO_BRANCH(1, hmc_geo_000618), // 0x0E000618 + GEO_BRANCH(1, hmc_geo_000658), // 0x0E000658 + GEO_BRANCH(1, hmc_geo_0006A8), // 0x0E0006A8 + GEO_BRANCH(1, hmc_geo_0006E0), // 0x0E0006E0 + GEO_BRANCH(1, hmc_geo_000700), // 0x0E000700 + GEO_BRANCH(1, hmc_geo_000748), // 0x0E000748 + GEO_BRANCH(1, hmc_geo_000770), // 0x0E000770 + GEO_BRANCH(1, hmc_geo_000798), // 0x0E000798 + GEO_BRANCH(1, hmc_geo_0007F8), // 0x0E0007F8 + GEO_BRANCH(1, hmc_geo_000850), // 0x0E000850 + GEO_BRANCH(1, hmc_geo_0008D0), // 0x0E0008D0 + GEO_BRANCH(1, hmc_geo_000938), // 0x0E000938 + GEO_BRANCH(1, hmc_geo_000998), // 0x0E000998 + GEO_BRANCH(1, hmc_geo_000A18), // 0x0E000A18 + GEO_BRANCH(1, hmc_geo_000A88), // 0x0E000A88 + GEO_BRANCH(1, hmc_geo_000AE8), // 0x0E000AE8 + GEO_BRANCH(1, hmc_geo_000B48), // 0x0E000B48 + GEO_CLOSE_NODE(), + GEO_RENDER_OBJ(), + GEO_ASM(0, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/hmc/areas/1/grill_door/geo.inc.c b/levels/hmc/areas/1/grill_door/geo.inc.c index e4e123f2..b8fdcf8b 100644 --- a/levels/hmc/areas/1/grill_door/geo.inc.c +++ b/levels/hmc/areas/1/grill_door/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000530 const GeoLayout hmc_geo_000530[] = { - GEO_CULLING_RADIUS(1000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0701FFF8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0701FFF8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/hmc/areas/1/macro.inc.c b/levels/hmc/areas/1/macro.inc.c index 96a75fbb..f7582f40 100644 --- a/levels/hmc/areas/1/macro.inc.c +++ b/levels/hmc/areas/1/macro.inc.c @@ -1,88 +1,88 @@ // 0x0702AA78 - 0x0702ADC2 const MacroObject hmc_seg7_macro_objs[] = { - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 315, /*pos*/ -6060, 2048, 5960, /*behParam*/ DIALOG_089), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -6770, 1845, 4577, /*behParam*/ DIALOG_050), - MACRO_OBJECT(/*preset*/ macro_swoop_2, /*yaw*/ 0, /*pos*/ -439, 220, -2540), - MACRO_OBJECT(/*preset*/ macro_swoop, /*yaw*/ 0, /*pos*/ 80, 140, -4660), - MACRO_OBJECT(/*preset*/ macro_swoop, /*yaw*/ 0, /*pos*/ 800, 60, -7500), - MACRO_OBJECT(/*preset*/ macro_swoop_2, /*yaw*/ 0, /*pos*/ 1880, 100, -7620), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 2500, 217, 50, /*behParam*/ DIALOG_071), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 2900, 217, 50, /*behParam*/ DIALOG_062), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ 838, 2052, 3580, /*behParam*/ DIALOG_088), - MACRO_OBJECT(/*preset*/ macro_scuttlebug, /*yaw*/ 0, /*pos*/ -6320, 2048, 6740), - MACRO_OBJECT(/*preset*/ macro_scuttlebug, /*yaw*/ 0, /*pos*/ -5455, 1536, 521), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2140, 2048, 6540), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2900, 2048, 6500), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 6400, 2090, 5320), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 6820, 1024, 3300), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 6260, 1124, 4960), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4080, 1124, 5760), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4640, 2250, 3980), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2960, 1124, 5140), - MACRO_OBJECT(/*preset*/ macro_box_metal_cap, /*yaw*/ 45, /*pos*/ -6924, 2440, 7364), - MACRO_OBJECT(/*preset*/ macro_scuttlebug, /*yaw*/ 0, /*pos*/ 4160, 28, 6308), - MACRO_OBJECT(/*preset*/ macro_scuttlebug, /*yaw*/ 0, /*pos*/ 5392, 28, 3587), - MACRO_OBJECT(/*preset*/ macro_snufit, /*yaw*/ 0, /*pos*/ 2260, -627, -1660), - MACRO_OBJECT(/*preset*/ macro_snufit, /*yaw*/ 0, /*pos*/ 5760, -623, -1600), - MACRO_OBJECT(/*preset*/ macro_snufit, /*yaw*/ 0, /*pos*/ 4560, -620, -1499), - MACRO_OBJECT(/*preset*/ macro_box_metal_cap, /*yaw*/ 0, /*pos*/ 5860, -550, -739), - MACRO_OBJECT(/*preset*/ macro_box_metal_cap, /*yaw*/ 0, /*pos*/ 1939, -600, -2920), - MACRO_OBJECT(/*preset*/ macro_box_metal_cap, /*yaw*/ 0, /*pos*/ 5100, -600, -4500), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -6580, 1680, -5780), - MACRO_OBJECT(/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ 1022, 1848, 5120), - MACRO_OBJECT(/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ 3500, 2150, 3000), - MACRO_OBJECT(/*preset*/ macro_scuttlebug_spawner, /*yaw*/ 270, /*pos*/ 3240, -4720, 2360), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ -3600, -4240, 3600), - MACRO_OBJECT(/*preset*/ macro_box_metal_cap, /*yaw*/ 0, /*pos*/ -3000, -2250, -6400), - MACRO_OBJECT(/*preset*/ macro_scuttlebug_spawner, /*yaw*/ 270, /*pos*/ -3420, 1800, 5960), - MACRO_OBJECT(/*preset*/ macro_swoop, /*yaw*/ 0, /*pos*/ 6080, 3060, 4660), - MACRO_OBJECT(/*preset*/ macro_swoop, /*yaw*/ 0, /*pos*/ 5480, 3000, 7120), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ -2700, 2060, -6400), - MACRO_OBJECT(/*preset*/ macro_swoop_2, /*yaw*/ 0, /*pos*/ -5440, 1720, -320), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2220, 2048, 4440), - MACRO_OBJECT(/*preset*/ macro_recovery_heart, /*yaw*/ 0, /*pos*/ -7511, 1420, -666), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ -3359, 1536, 298, /*behParam*/ DIALOG_122), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -3092, 2033, -7685, /*behParam*/ DIALOG_138), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 5439, 0, 2785, /*behParam*/ DIALOG_125), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -3184, 0, 699, /*behParam*/ DIALOG_126), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ 500, -4300, 3644, /*behParam*/ DIALOG_127), - MACRO_OBJECT(/*preset*/ macro_box_1up, /*yaw*/ 0, /*pos*/ -4960, 2700, 80), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 180, /*pos*/ 2006, 0, 6713, /*behParam*/ DIALOG_124), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 2510, 0, 2800, /*behParam*/ DIALOG_140), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 90, /*pos*/ 510, 0, 5380, /*behParam*/ DIALOG_139), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2340, 2040, 4560), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2460, 2040, 4660), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2060, 2040, 4380), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1920, 2040, 4320), - MACRO_OBJECT(/*preset*/ macro_blue_coin_switch, /*yaw*/ 0, /*pos*/ 5145, -767, -2954), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 3945, -1023, -2918), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 3800, -1023, -4009), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 3036, -858, -4118), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 2018, -921, -4154), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1836, -921, -4700), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1836, -721, -4700), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1836, -521, -4700), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 2800, 205, 463), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 1800, -409, -7390), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal_flying, /*yaw*/ 144, /*pos*/ -5342, 2809, -1790), - MACRO_OBJECT(/*preset*/ macro_swoop_2, /*yaw*/ 0, /*pos*/ 5632, -563, -4454), - MACRO_OBJECT(/*preset*/ macro_swoop_2, /*yaw*/ 0, /*pos*/ 4915, -665, -5274), - MACRO_OBJECT(/*preset*/ macro_swoop, /*yaw*/ 0, /*pos*/ 5120, -665, -4660), - MACRO_OBJECT(/*preset*/ macro_swoop, /*yaw*/ 0, /*pos*/ 5427, -665, -5070), - MACRO_OBJECT(/*preset*/ macro_snufit, /*yaw*/ 0, /*pos*/ 2439, -722, -5499), - MACRO_OBJECT(/*preset*/ macro_monty_mole_hole, /*yaw*/ 0, /*pos*/ 2714, -768, -4096), - MACRO_OBJECT(/*preset*/ macro_monty_mole_hole, /*yaw*/ 0, /*pos*/ 3011, -768, -1272), - MACRO_OBJECT(/*preset*/ macro_monty_mole_hole, /*yaw*/ 0, /*pos*/ 3324, -768, -1475), - MACRO_OBJECT(/*preset*/ macro_monty_mole, /*yaw*/ 0, /*pos*/ 3940, -768, -2880), - MACRO_OBJECT(/*preset*/ macro_mr_i, /*yaw*/ 0, /*pos*/ 4740, 1060, 4680), - MACRO_OBJECT(/*preset*/ macro_mr_i, /*yaw*/ 0, /*pos*/ 6700, 1020, 6820), - MACRO_OBJECT(/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ 2960, 1024, 5140), - MACRO_OBJECT(/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ 4080, 1024, 5760), - MACRO_OBJECT(/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ 6260, 1024, 4960), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 135, /*pos*/ -4370, 2860, -2243, /*behParam*/ DIALOG_043), - MACRO_OBJECT(/*preset*/ macro_flamethrower, /*yaw*/ 0, /*pos*/ -2900, 1620, 4640), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ 1420, -380, -7040), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ 2500, -380, -7740), - MACRO_OBJECT(/*preset*/ macro_box_1up_running_away, /*yaw*/ 0, /*pos*/ -2700, 2100, -6400), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 315, /*pos*/ -6060, 2048, 5960, /*bhvParam*/ DIALOG_089), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -6770, 1845, 4577, /*bhvParam*/ DIALOG_050), + MACRO_OBJECT (/*preset*/ macro_swoop_2, /*yaw*/ 0, /*pos*/ -439, 220, -2540), + MACRO_OBJECT (/*preset*/ macro_swoop_1, /*yaw*/ 0, /*pos*/ 80, 140, -4660), + MACRO_OBJECT (/*preset*/ macro_swoop_1, /*yaw*/ 0, /*pos*/ 800, 60, -7500), + MACRO_OBJECT (/*preset*/ macro_swoop_2, /*yaw*/ 0, /*pos*/ 1880, 100, -7620), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 2500, 217, 50, /*bhvParam*/ DIALOG_071), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 2900, 217, 50, /*bhvParam*/ DIALOG_062), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ 838, 2052, 3580, /*bhvParam*/ DIALOG_088), + MACRO_OBJECT (/*preset*/ macro_scuttlebug, /*yaw*/ 0, /*pos*/ -6320, 2048, 6740), + MACRO_OBJECT (/*preset*/ macro_scuttlebug, /*yaw*/ 0, /*pos*/ -5455, 1536, 521), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2140, 2048, 6540), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2900, 2048, 6500), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 6400, 2090, 5320), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 6820, 1024, 3300), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 6260, 1124, 4960), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4080, 1124, 5760), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4640, 2250, 3980), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2960, 1124, 5140), + MACRO_OBJECT (/*preset*/ macro_box_metal_cap, /*yaw*/ 45, /*pos*/ -6924, 2440, 7364), + MACRO_OBJECT (/*preset*/ macro_scuttlebug, /*yaw*/ 0, /*pos*/ 4160, 28, 6308), + MACRO_OBJECT (/*preset*/ macro_scuttlebug, /*yaw*/ 0, /*pos*/ 5392, 28, 3587), + MACRO_OBJECT (/*preset*/ macro_snufit, /*yaw*/ 0, /*pos*/ 2260, -627, -1660), + MACRO_OBJECT (/*preset*/ macro_snufit, /*yaw*/ 0, /*pos*/ 5760, -623, -1600), + MACRO_OBJECT (/*preset*/ macro_snufit, /*yaw*/ 0, /*pos*/ 4560, -620, -1499), + MACRO_OBJECT (/*preset*/ macro_box_metal_cap, /*yaw*/ 0, /*pos*/ 5860, -550, -739), + MACRO_OBJECT (/*preset*/ macro_box_metal_cap, /*yaw*/ 0, /*pos*/ 1939, -600, -2920), + MACRO_OBJECT (/*preset*/ macro_box_metal_cap, /*yaw*/ 0, /*pos*/ 5100, -600, -4500), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -6580, 1680, -5780), + MACRO_OBJECT (/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ 1022, 1848, 5120), + MACRO_OBJECT (/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ 3500, 2150, 3000), + MACRO_OBJECT (/*preset*/ macro_scuttlebug_spawner, /*yaw*/ 270, /*pos*/ 3240, -4720, 2360), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ -3600, -4240, 3600), + MACRO_OBJECT (/*preset*/ macro_box_metal_cap, /*yaw*/ 0, /*pos*/ -3000, -2250, -6400), + MACRO_OBJECT (/*preset*/ macro_scuttlebug_spawner, /*yaw*/ 270, /*pos*/ -3420, 1800, 5960), + MACRO_OBJECT (/*preset*/ macro_swoop_1, /*yaw*/ 0, /*pos*/ 6080, 3060, 4660), + MACRO_OBJECT (/*preset*/ macro_swoop_1, /*yaw*/ 0, /*pos*/ 5480, 3000, 7120), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ -2700, 2060, -6400), + MACRO_OBJECT (/*preset*/ macro_swoop_2, /*yaw*/ 0, /*pos*/ -5440, 1720, -320), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2220, 2048, 4440), + MACRO_OBJECT (/*preset*/ macro_recovery_heart, /*yaw*/ 0, /*pos*/ -7511, 1420, -666), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ -3359, 1536, 298, /*bhvParam*/ DIALOG_122), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -3092, 2033, -7685, /*bhvParam*/ DIALOG_138), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 5439, 0, 2785, /*bhvParam*/ DIALOG_125), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -3184, 0, 699, /*bhvParam*/ DIALOG_126), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ 500, -4300, 3644, /*bhvParam*/ DIALOG_127), + MACRO_OBJECT (/*preset*/ macro_box_1up, /*yaw*/ 0, /*pos*/ -4960, 2700, 80), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 180, /*pos*/ 2006, 0, 6713, /*bhvParam*/ DIALOG_124), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 2510, 0, 2800, /*bhvParam*/ DIALOG_140), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 90, /*pos*/ 510, 0, 5380, /*bhvParam*/ DIALOG_139), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2340, 2040, 4560), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2460, 2040, 4660), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2060, 2040, 4380), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1920, 2040, 4320), + MACRO_OBJECT (/*preset*/ macro_blue_coin_switch, /*yaw*/ 0, /*pos*/ 5145, -767, -2954), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 3945, -1023, -2918), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 3800, -1023, -4009), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 3036, -858, -4118), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 2018, -921, -4154), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1836, -921, -4700), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1836, -721, -4700), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1836, -521, -4700), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 2800, 205, 463), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 1800, -409, -7390), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal_flying, /*yaw*/ 144, /*pos*/ -5342, 2809, -1790), + MACRO_OBJECT (/*preset*/ macro_swoop_2, /*yaw*/ 0, /*pos*/ 5632, -563, -4454), + MACRO_OBJECT (/*preset*/ macro_swoop_2, /*yaw*/ 0, /*pos*/ 4915, -665, -5274), + MACRO_OBJECT (/*preset*/ macro_swoop_1, /*yaw*/ 0, /*pos*/ 5120, -665, -4660), + MACRO_OBJECT (/*preset*/ macro_swoop_1, /*yaw*/ 0, /*pos*/ 5427, -665, -5070), + MACRO_OBJECT (/*preset*/ macro_snufit, /*yaw*/ 0, /*pos*/ 2439, -722, -5499), + MACRO_OBJECT (/*preset*/ macro_monty_mole_hole, /*yaw*/ 0, /*pos*/ 2714, -768, -4096), + MACRO_OBJECT (/*preset*/ macro_monty_mole_hole, /*yaw*/ 0, /*pos*/ 3011, -768, -1272), + MACRO_OBJECT (/*preset*/ macro_monty_mole_hole, /*yaw*/ 0, /*pos*/ 3324, -768, -1475), + MACRO_OBJECT (/*preset*/ macro_monty_mole, /*yaw*/ 0, /*pos*/ 3940, -768, -2880), + MACRO_OBJECT (/*preset*/ macro_mr_i, /*yaw*/ 0, /*pos*/ 4740, 1060, 4680), + MACRO_OBJECT (/*preset*/ macro_mr_i, /*yaw*/ 0, /*pos*/ 6700, 1020, 6820), + MACRO_OBJECT (/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ 2960, 1024, 5140), + MACRO_OBJECT (/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ 4080, 1024, 5760), + MACRO_OBJECT (/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ 6260, 1024, 4960), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 135, /*pos*/ -4370, 2860, -2243, /*bhvParam*/ DIALOG_043), + MACRO_OBJECT (/*preset*/ macro_flamethrower, /*yaw*/ 0, /*pos*/ -2900, 1620, 4640), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ 1420, -380, -7040), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ 2500, -380, -7740), + MACRO_OBJECT (/*preset*/ macro_box_1up_running_away, /*yaw*/ 0, /*pos*/ -2700, 2100, -6400), MACRO_OBJECT_END(), }; diff --git a/levels/hmc/areas/1/painting.inc.c b/levels/hmc/areas/1/painting.inc.c index 86e688a1..a0c55961 100644 --- a/levels/hmc/areas/1/painting.inc.c +++ b/levels/hmc/areas/1/painting.inc.c @@ -10,7 +10,7 @@ static const Lights1 hmc_seg7_lights_070241B8 = gdSPDefLights1( // No gdSPDefLights1 macro defined because of odd different light value (0xff and 0xfa) static const Lights1 hmc_seg7_lights_070241D0 = { {{ {0x40, 0x40, 0x80}, 0, {0x40, 0x40, 0x80}, 0} }, - {{{ {0x64, 0x64, 0xff}, 0, {0x64, 0x64, 0xfa}, 0, {0x28, 0x28, 0x28},0} }} + {{{ {0x64, 0x64, 0xff}, 0, {0x64, 0x64, 0xfa}, 0, {0x28, 0x28, 0x28},0} }} }; // Appears to lock 4 of the sides when shimmering and in use. Unused. diff --git a/levels/hmc/areas/1/room.inc.c b/levels/hmc/areas/1/room.inc.c index 3342df39..a3f23161 100644 --- a/levels/hmc/areas/1/room.inc.c +++ b/levels/hmc/areas/1/room.inc.c @@ -1,5 +1,5 @@ // 0x0702ADC4 - 0x0702B5E4 -const u8 hmc_seg7_rooms[] = { +const RoomData hmc_seg7_rooms[] = { 17, 8, 8, 8, 8, 8, 8, 17, // 0-7 17, 8, 8, 8, 17, 8, 8, 8, // 8-15 8, 8, 8, 8, 8, 8, 8, 8, // 16-23 diff --git a/levels/hmc/arrow_platform/geo.inc.c b/levels/hmc/arrow_platform/geo.inc.c index 71f0be75..2541ad56 100644 --- a/levels/hmc/arrow_platform/geo.inc.c +++ b/levels/hmc/arrow_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0005A0 const GeoLayout hmc_geo_0005A0[] = { - GEO_CULLING_RADIUS(550), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07022DA0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(550), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07022DA0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/hmc/arrow_platform_button/geo.inc.c b/levels/hmc/arrow_platform_button/geo.inc.c index 09af5b26..1cc1d5a9 100644 --- a/levels/hmc/arrow_platform_button/geo.inc.c +++ b/levels/hmc/arrow_platform_button/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0005B8 const GeoLayout hmc_geo_0005B8[] = { - GEO_CULLING_RADIUS(200), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07023090), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(200), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07023090), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/hmc/elevator_platform/geo.inc.c b/levels/hmc/elevator_platform/geo.inc.c index 2265af03..1094904e 100644 --- a/levels/hmc/elevator_platform/geo.inc.c +++ b/levels/hmc/elevator_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0005D0 const GeoLayout hmc_geo_0005D0[] = { - GEO_CULLING_RADIUS(500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07022AA0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07022AA0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/hmc/header.h b/levels/hmc/header.h index 6cf715a6..6c2cca11 100644 --- a/levels/hmc/header.h +++ b/levels/hmc/header.h @@ -78,7 +78,7 @@ extern const u8 *const hmc_seg7_painting_textures_07025518[]; extern struct Painting cotmc_painting; extern const Collision hmc_seg7_collision_level[]; extern const MacroObject hmc_seg7_macro_objs[]; -extern const u8 hmc_seg7_rooms[]; +extern const RoomData hmc_seg7_rooms[]; extern const Collision hmc_seg7_collision_elevator[]; extern const Collision hmc_seg7_collision_0702B65C[]; extern const Collision hmc_seg7_collision_controllable_platform[]; diff --git a/levels/hmc/leveldata.c b/levels/hmc/leveldata.c index ec169436..50d38854 100644 --- a/levels/hmc/leveldata.c +++ b/levels/hmc/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "dialog_ids.h" diff --git a/levels/hmc/rolling_rock/geo.inc.c b/levels/hmc/rolling_rock/geo.inc.c index 3822ed9b..678021f7 100644 --- a/levels/hmc/rolling_rock/geo.inc.c +++ b/levels/hmc/rolling_rock/geo.inc.c @@ -1,11 +1,11 @@ // 0x0E000548 const GeoLayout hmc_geo_000548[] = { - GEO_CULLING_RADIUS(300), - GEO_OPEN_NODE(), - GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0xB4, 400), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07023BC8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(300), + GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0xB4, 400), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07023BC8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/hmc/rolling_rock_fragment_1/geo.inc.c b/levels/hmc/rolling_rock_fragment_1/geo.inc.c index a40bae62..fd854425 100644 --- a/levels/hmc/rolling_rock_fragment_1/geo.inc.c +++ b/levels/hmc/rolling_rock_fragment_1/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000570 const GeoLayout hmc_geo_000570[] = { - GEO_CULLING_RADIUS(150), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07023E10), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(150), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07023E10), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/hmc/rolling_rock_fragment_2/geo.inc.c b/levels/hmc/rolling_rock_fragment_2/geo.inc.c index fe5072ce..91c50821 100644 --- a/levels/hmc/rolling_rock_fragment_2/geo.inc.c +++ b/levels/hmc/rolling_rock_fragment_2/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000588 const GeoLayout hmc_geo_000588[] = { - GEO_CULLING_RADIUS(100), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07024110), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(100), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07024110), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/hmc/script.c b/levels/hmc/script.c index 06198229..f41e3928 100644 --- a/levels/hmc/script.c +++ b/levels/hmc/script.c @@ -16,70 +16,70 @@ #include "levels/hmc/header.h" static const LevelScript script_func_local_1[] = { - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 4936, -357, -4146, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 5018, -460, -5559, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 1997, 666, -235, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 1762, -460, -2610, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 4178, -255, -3737, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 2233, -460, 256, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 5510, -255, -3429, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 4690, -357, -767, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 3462, -255, -1125, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 1762, 666, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 1762, -460, 256, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 6482, 461, 3226, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 1075, 461, 6543, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 6912, 461, 6543, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 6912, 461, 3697, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 6482, 461, 7014, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 3817, 717, 1034, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 799, 1024, 4434, /*angle*/ 0, 0, 0, /*behParam*/ 0x00B80000, /*beh*/ bhvPoleGrabbing), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 889, 1024, 3277, /*angle*/ 0, 0, 0, /*behParam*/ 0x00B80000, /*beh*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 4936, -357, -4146, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 5018, -460, -5559, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 1997, 666, -235, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 1762, -460, -2610, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 4178, -255, -3737, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 2233, -460, 256, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 5510, -255, -3429, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 4690, -357, -767, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 3462, -255, -1125, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 1762, 666, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 1762, -460, 256, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 6482, 461, 3226, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 1075, 461, 6543, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 6912, 461, 6543, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 6912, 461, 3697, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 6482, 461, 7014, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 3817, 717, 1034, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlame), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 799, 1024, 4434, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(184), /*bhv*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 889, 1024, 3277, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(184), /*bhv*/ bhvPoleGrabbing), RETURN(), }; static const LevelScript script_func_local_2[] = { - OBJECT(/*model*/ MODEL_HMC_METAL_PLATFORM, /*pos*/ 1100, 950, 6350, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvControllablePlatform), - OBJECT(/*model*/ MODEL_HMC_ELEVATOR_PLATFORM, /*pos*/ -3243, 1434, 1392, /*angle*/ 0, 27, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHmcElevatorPlatform), - OBJECT(/*model*/ MODEL_HMC_ELEVATOR_PLATFORM, /*pos*/ -2816, 2253, -2509, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvHmcElevatorPlatform), - OBJECT(/*model*/ MODEL_HMC_ELEVATOR_PLATFORM, /*pos*/ -973, 1741, -7347, /*angle*/ 0, 0, 0, /*behParam*/ 0x00020000, /*beh*/ bhvHmcElevatorPlatform), - OBJECT(/*model*/ MODEL_HMC_ELEVATOR_PLATFORM, /*pos*/ -3533, 1741, -7040, /*angle*/ 0, 0, 0, /*behParam*/ 0x00030000, /*beh*/ bhvHmcElevatorPlatform), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 614, -4690, 2330, /*angle*/ 0, 270, 0, /*behParam*/ 0x00010000, /*beh*/ bhvOpenableGrill), - OBJECT(/*model*/ MODEL_PURPLE_SWITCH, /*pos*/ -307, -4997, 2483, /*angle*/ 0, 270, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFloorSwitchGrills), - OBJECT(/*model*/ MODEL_CHECKERBOARD_PLATFORM, /*pos*/ 1270, 2000, 4000, /*angle*/ 0, 270, 0, /*behParam*/ 0x09A40000, /*beh*/ bhvPlatformOnTrack), + OBJECT(/*model*/ MODEL_HMC_METAL_PLATFORM, /*pos*/ 1100, 950, 6350, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvControllablePlatform), + OBJECT(/*model*/ MODEL_HMC_ELEVATOR_PLATFORM, /*pos*/ -3243, 1434, 1392, /*angle*/ 0, 27, 0, /*bhvParam*/ 0, /*bhv*/ bhvHMCElevatorPlatform), + OBJECT(/*model*/ MODEL_HMC_ELEVATOR_PLATFORM, /*pos*/ -2816, 2253, -2509, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x01), /*bhv*/ bhvHMCElevatorPlatform), + OBJECT(/*model*/ MODEL_HMC_ELEVATOR_PLATFORM, /*pos*/ -973, 1741, -7347, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x02), /*bhv*/ bhvHMCElevatorPlatform), + OBJECT(/*model*/ MODEL_HMC_ELEVATOR_PLATFORM, /*pos*/ -3533, 1741, -7040, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x03), /*bhv*/ bhvHMCElevatorPlatform), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 614, -4690, 2330, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM2(OPENABLE_GRILL_BP_HMC), /*bhv*/ bhvOpenableGrill), + OBJECT(/*model*/ MODEL_PURPLE_SWITCH, /*pos*/ -307, -4997, 2483, /*angle*/ 0, 270, 0, /*bhvParam*/ 0, /*bhv*/ bhvFloorSwitchGrills), + OBJECT(/*model*/ MODEL_CHECKERBOARD_PLATFORM, /*pos*/ 1270, 2000, 4000, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM1(0x09) | BPARAM2(0xA4), /*bhv*/ bhvPlatformOnTrack), RETURN(), }; static const LevelScript script_func_local_3[] = { - OBJECT(/*model*/ MODEL_DORRIE, /*pos*/ -3533, -4969, 3558, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvDorrie), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6093, 3075, -7807, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBigBoulderGenerator), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -500, 1600, 3500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00040000, /*beh*/ bhvFlamethrower), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -500, 1600, 3800, /*angle*/ 0, 0, 0, /*behParam*/ 0x00040000, /*beh*/ bhvFlamethrower), + OBJECT(/*model*/ MODEL_DORRIE, /*pos*/ -3533, -4969, 3558, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvDorrie), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6093, 3075, -7807, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBigBoulderGenerator), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -500, 1600, 3500, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x04), /*bhv*/ bhvFlamethrower), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -500, 1600, 3800, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x04), /*bhv*/ bhvFlamethrower), RETURN(), }; static const LevelScript script_func_local_4[] = { - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -3600, -4000, 3600, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 4000, 300, 5000, /*angle*/ 0, 0, 0, /*behParam*/ 0x01000000, /*beh*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 6200, -4400, 2300, /*angle*/ 0, 0, 0, /*behParam*/ 0x02000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -2100, 2100, -7550, /*angle*/ 0, 0, 0, /*behParam*/ 0x03000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -6500, 2700, -1600, /*angle*/ 0, 0, 0, /*behParam*/ 0x04000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -5000, 3050, -6700, /*angle*/ 0, 0, 0, /*behParam*/ 0x05000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -3600, -4000, 3600, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_1), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 4000, 300, 5000, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_2), /*bhv*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 6200, -4400, 2300, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_3), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -2100, 2100, -7550, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_4), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -6500, 2700, -1600, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_5), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -5000, 3050, -6700, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_6), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), RETURN(), }; const LevelScript level_hmc_entry[] = { INIT_LEVEL(), - LOAD_MIO0( /*seg*/ 0x07, _hmc_segment_7SegmentRomStart, _hmc_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _hmc_segment_7SegmentRomStart, _hmc_segment_7SegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _cave_mio0SegmentRomStart, _cave_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x05, _group6_mio0SegmentRomStart, _group6_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0C, _group6_geoSegmentRomStart, _group6_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x06, _group17_mio0SegmentRomStart, _group17_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0D, _group17_geoSegmentRomStart, _group17_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x05, _group6_mio0SegmentRomStart, _group6_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0C, _group6_geoSegmentRomStart, _group6_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x06, _group17_mio0SegmentRomStart, _group17_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0D, _group17_geoSegmentRomStart, _group17_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_1), JUMP_LINK(script_func_global_7), JUMP_LINK(script_func_global_18), @@ -95,12 +95,12 @@ const LevelScript level_hmc_entry[] = { LOAD_MODEL_FROM_GEO(MODEL_HMC_RED_GRILLS, hmc_geo_000530), AREA(/*index*/ 1, hmc_geo_000B90), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -7152, 3161, 7181, /*angle*/ 0, 135, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvSpinAirborneWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3351, -4690, 4773, /*angle*/ 0, 0, 0, /*behParam*/ 0x340B0000, /*beh*/ bhvWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_HMC, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0B, /*destLevel*/ LEVEL_COTMC, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x34, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x66, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -7152, 3161, 7181, /*angle*/ 0, 135, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvSpinAirborneWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3351, -4690, 4773, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(52) | BPARAM2(WARP_NODE_0B), /*bhv*/ bhvWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_HMC, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0B, /*destLevel*/ LEVEL_COTMC, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_34, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_66, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_1), JUMP_LINK(script_func_local_2), JUMP_LINK(script_func_local_3), diff --git a/levels/intro/geo.c b/levels/intro/geo.c index 30a87806..3048638b 100644 --- a/levels/intro/geo.c +++ b/levels/intro/geo.c @@ -17,126 +17,126 @@ // 0x0E0002D0 const GeoLayout intro_geo_0002D0[] = { - GEO_NODE_SCREEN_AREA(0, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND_COLOR(0x0001), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM(45, 128, 16384), - GEO_OPEN_NODE(), - GEO_CAMERA(0, 0, 0, 3200, 0, 0, 0, 0x00000000), + GEO_NODE_SCREEN_AREA(0, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_ASM(0, geo_intro_super_mario_64_logo), + GEO_BACKGROUND_COLOR(0x0001), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_intro_tm_copyright), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM(45, 128, 16384), + GEO_OPEN_NODE(), + GEO_CAMERA(0, 0, 0, 3200, 0, 0, 0, 0x00000000), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_intro_super_mario_64_logo), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_intro_tm_copyright), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E00035C const GeoLayout intro_geo_mario_head_regular[] = { - GEO_NODE_SCREEN_AREA(0, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_intro_regular_backdrop), -#ifdef VERSION_SH - GEO_ASM(0, geo_intro_face_easter_egg), + GEO_NODE_SCREEN_AREA(0, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_intro_regular_backdrop), +#if defined(VERSION_SH) || defined(VERSION_CN) + GEO_ASM(0, geo_intro_face_easter_egg), #endif - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM(45, 128, 16384), - GEO_OPEN_NODE(), - GEO_ASM(2, geo_draw_mario_head_goddard), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM(45, 128, 16384), + GEO_OPEN_NODE(), + GEO_ASM(2, geo_draw_mario_head_goddard), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), #ifdef VERSION_SH - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_intro_rumble_pak_graphic), - GEO_CLOSE_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_intro_rumble_pak_graphic), + GEO_CLOSE_NODE(), #endif - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E0003B8 const GeoLayout intro_geo_mario_head_dizzy[] = { - GEO_NODE_SCREEN_AREA(0, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_intro_gameover_backdrop), -#ifdef VERSION_SH - GEO_ASM(0, geo_intro_face_easter_egg), + GEO_NODE_SCREEN_AREA(0, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_intro_gameover_backdrop), +#if defined(VERSION_SH) || defined(VERSION_CN) + GEO_ASM(0, geo_intro_face_easter_egg), #endif - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM(45, 128, 16384), - GEO_OPEN_NODE(), - GEO_ASM(3, geo_draw_mario_head_goddard), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM(45, 128, 16384), + GEO_OPEN_NODE(), + GEO_ASM(3, geo_draw_mario_head_goddard), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), #ifdef VERSION_SH - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_ASM(1, geo_intro_rumble_pak_graphic), - GEO_CLOSE_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_ASM(1, geo_intro_rumble_pak_graphic), + GEO_CLOSE_NODE(), #endif - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000414 const GeoLayout intro_geo_000414[] = { - GEO_NODE_SCREEN_AREA(0, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_intro_regular_backdrop), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM(45, 128, 16384), - GEO_OPEN_NODE(), - GEO_CAMERA(0, 0, 0, 1200, 0, 0, 0, 0x00000000), + GEO_NODE_SCREEN_AREA(0, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_TRANSLATE_NODE_WITH_DL(LAYER_OPAQUE, -230, 300, 0, debug_level_select_dl_07000858), - GEO_TRANSLATE_NODE_WITH_DL(LAYER_OPAQUE, -120, 300, 0, debug_level_select_dl_07001100), - GEO_TRANSLATE_NODE_WITH_DL(LAYER_OPAQUE, -20, 300, 0, debug_level_select_dl_07001BA0), - GEO_TRANSLATE_NODE_WITH_DL(LAYER_OPAQUE, 100, 300, 0, debug_level_select_dl_070025F0), - GEO_TRANSLATE_NODE_WITH_DL(LAYER_OPAQUE, 250, 300, 0, debug_level_select_dl_07003258), - GEO_TRANSLATE_NODE_WITH_DL(LAYER_OPAQUE, -310, 100, 0, debug_level_select_dl_07003DB8), - GEO_TRANSLATE_NODE_WITH_DL(LAYER_OPAQUE, -90, 100, 0, debug_level_select_dl_070048C8), - GEO_TRANSLATE_NODE_WITH_DL(LAYER_OPAQUE, 60, 100, 0, debug_level_select_dl_07005558), - GEO_TRANSLATE_NODE_WITH_DL(LAYER_OPAQUE, 180, 100, 0, debug_level_select_dl_070059F8), - GEO_TRANSLATE_NODE_WITH_DL(LAYER_OPAQUE, 300, 100, 0, debug_level_select_dl_070063B0), + GEO_ASM(0, geo_intro_regular_backdrop), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM(45, 128, 16384), + GEO_OPEN_NODE(), + GEO_CAMERA(0, 0, 0, 1200, 0, 0, 0, 0x00000000), + GEO_OPEN_NODE(), + GEO_TRANSLATE_NODE_WITH_DL(LAYER_OPAQUE, -230, 300, 0, debug_level_select_dl_07000858), + GEO_TRANSLATE_NODE_WITH_DL(LAYER_OPAQUE, -120, 300, 0, debug_level_select_dl_07001100), + GEO_TRANSLATE_NODE_WITH_DL(LAYER_OPAQUE, -20, 300, 0, debug_level_select_dl_07001BA0), + GEO_TRANSLATE_NODE_WITH_DL(LAYER_OPAQUE, 100, 300, 0, debug_level_select_dl_070025F0), + GEO_TRANSLATE_NODE_WITH_DL(LAYER_OPAQUE, 250, 300, 0, debug_level_select_dl_07003258), + GEO_TRANSLATE_NODE_WITH_DL(LAYER_OPAQUE, -310, 100, 0, debug_level_select_dl_07003DB8), + GEO_TRANSLATE_NODE_WITH_DL(LAYER_OPAQUE, -90, 100, 0, debug_level_select_dl_070048C8), + GEO_TRANSLATE_NODE_WITH_DL(LAYER_OPAQUE, 60, 100, 0, debug_level_select_dl_07005558), + GEO_TRANSLATE_NODE_WITH_DL(LAYER_OPAQUE, 180, 100, 0, debug_level_select_dl_070059F8), + GEO_TRANSLATE_NODE_WITH_DL(LAYER_OPAQUE, 300, 100, 0, debug_level_select_dl_070063B0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/intro/leveldata.c b/levels/intro/leveldata.c index 7a4474d2..cb683344 100644 --- a/levels/intro/leveldata.c +++ b/levels/intro/leveldata.c @@ -6,6 +6,3835 @@ #include "make_const_nonconst.h" +#if defined(VERSION_CN) +// 0x07000000 - 0x07000030 +static const Vtx intro_seg7_vertex_07000000[] = { + {{{ 416, 749, -312}, 0, { 96, 96}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ 452, 751, -313}, 0, { 96, 96}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ 431, 777, -344}, 0, { 96, 96}, {0x16, 0x27, 0x9e, 0xff}}}, +}; + +// 0x07000030 - 0x07000060 +static const Vtx intro_seg7_vertex_07000030[] = { + {{{ 427, 812, -365}, 0, { 64, 96}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 431, 777, -344}, 0, { 96, 96}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 451, 805, -346}, 0, { 64, 96}, {0x12, 0x20, 0x81, 0xff}}}, +}; + +// 0x07000060 - 0x07000090 +static const Vtx intro_seg7_vertex_07000060[] = { + {{{ 431, 777, -344}, 0, { 96, 96}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 452, 751, -313}, 0, { 96, 96}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 451, 805, -346}, 0, { 64, 96}, {0x12, 0x20, 0x81, 0xff}}}, +}; + +// 0x07000090 - 0x070000C0 +static const Vtx intro_seg7_vertex_07000090[] = { + {{{ 427, 812, -365}, 0, { 64, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 406, 804, -345}, 0, { 64, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 431, 777, -344}, 0, { 96, 96}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x070000C0 - 0x070000F0 +static const Vtx intro_seg7_vertex_070000C0[] = { + {{{ 431, 777, -344}, 0, { 96, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 406, 804, -345}, 0, { 64, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 416, 749, -312}, 0, { 96, 96}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x070000F0 - 0x07000140 +static const Vtx intro_seg7_vertex_070000F0[] = { + {{{ 571, 814, -363}, 0, { 64, 64}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ 427, 812, -365}, 0, { 64, 96}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ 553, 804, -345}, 0, { 96, 64}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ 427, 812, -365}, 0, { 64, 96}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ 451, 805, -346}, 0, { 64, 96}, {0x16, 0x27, 0x9e, 0xff}}}, +}; + +// 0x07000140 - 0x07000190 +static const Vtx intro_seg7_vertex_07000140[] = { + {{{ 427, 812, -365}, 0, { 64, 96}, {0x14, 0x23, 0x90, 0xff}}}, + {{{ 302, 780, -330}, 0, { 96, 128}, {0x14, 0x23, 0x90, 0xff}}}, + {{{ 406, 804, -345}, 0, { 64, 96}, {0x14, 0x23, 0x90, 0xff}}}, + {{{ 276, 781, -348}, 0, { 64, 128}, {0x14, 0x23, 0x90, 0xff}}}, + {{{ 427, 812, -365}, 0, { 64, 96}, {0x14, 0x23, 0x90, 0xff}}}, +}; + +// 0x07000190 - 0x070001D0 +static const Vtx intro_seg7_vertex_07000190[] = { + {{{ 557, 762, -320}, 0, { 96, 64}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 573, 772, -341}, 0, { 96, 64}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 553, 804, -345}, 0, { 96, 64}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 571, 814, -363}, 0, { 64, 64}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x070001D0 - 0x07000210 +static const Vtx intro_seg7_vertex_070001D0[] = { + {{{ 653, 778, -348}, 0, { 96, 32}, {0x14, 0x23, 0x90, 0xff}}}, + {{{ 573, 772, -341}, 0, { 96, 64}, {0x14, 0x23, 0x90, 0xff}}}, + {{{ 639, 768, -323}, 0, { 96, 32}, {0x14, 0x23, 0x90, 0xff}}}, + {{{ 557, 762, -320}, 0, { 96, 64}, {0x14, 0x23, 0x90, 0xff}}}, +}; + +// 0x07000210 - 0x07000250 +static const Vtx intro_seg7_vertex_07000210[] = { + {{{ 653, 778, -348}, 0, { 96, 32}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 639, 768, -323}, 0, { 96, 32}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 647, 662, -276}, 0, { 128, 32}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 632, 689, -276}, 0, { 128, 32}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000250 - 0x07000280 +static const Vtx intro_seg7_vertex_07000250[] = { + {{{ 647, 662, -276}, 0, { 128, 32}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 632, 689, -276}, 0, { 128, 32}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 637, 664, -277}, 0, { 128, 32}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000280 - 0x070002B0 +static const Vtx intro_seg7_vertex_07000280[] = { + {{{ 637, 664, -277}, 0, { 128, 32}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 632, 689, -276}, 0, { 128, 32}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 621, 687, -275}, 0, { 128, 32}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x070002B0 - 0x070002E0 +static const Vtx intro_seg7_vertex_070002B0[] = { + {{{ 632, 689, -276}, 0, { 128, 32}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 506, 692, -278}, 0, { 128, 64}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 621, 687, -275}, 0, { 128, 32}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x070002E0 - 0x07000310 +static const Vtx intro_seg7_vertex_070002E0[] = { + {{{ 545, 679, -286}, 0, { 128, 64}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 621, 687, -275}, 0, { 128, 32}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 506, 692, -278}, 0, { 128, 64}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000310 - 0x07000340 +static const Vtx intro_seg7_vertex_07000310[] = { + {{{ 545, 679, -286}, 0, { 128, 64}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 506, 692, -278}, 0, { 128, 64}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 503, 682, -272}, 0, { 128, 64}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000340 - 0x07000370 +static const Vtx intro_seg7_vertex_07000340[] = { + {{{ 621, 687, -275}, 0, { 128, 32}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 614, 680, -271}, 0, { 128, 64}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 637, 664, -277}, 0, { 128, 32}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000370 - 0x070003A0 +static const Vtx intro_seg7_vertex_07000370[] = { + {{{ 621, 687, -275}, 0, { 128, 32}, {0x14, 0x23, 0x90, 0xff}}}, + {{{ 545, 679, -286}, 0, { 128, 64}, {0x14, 0x23, 0x90, 0xff}}}, + {{{ 614, 680, -271}, 0, { 128, 64}, {0x14, 0x23, 0x90, 0xff}}}, +}; + +// 0x070003A0 - 0x070003D0 +static const Vtx intro_seg7_vertex_070003A0[] = { + {{{ 545, 679, -286}, 0, { 128, 64}, {0x14, 0x27, 0x9e, 0xff}}}, + {{{ 503, 682, -272}, 0, { 128, 64}, {0x14, 0x27, 0x9e, 0xff}}}, + {{{ 614, 680, -271}, 0, { 128, 64}, {0x14, 0x27, 0x9e, 0xff}}}, +}; + +// 0x070003D0 - 0x07000410 +static const Vtx intro_seg7_vertex_070003D0[] = { + {{{ 618, 578, -227}, 0, { 160, 32}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 629, 625, -238}, 0, { 160, 32}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 587, 571, -206}, 0, { 160, 64}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 646, 614, -248}, 0, { 160, 32}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000410 - 0x07000450 +static const Vtx intro_seg7_vertex_07000410[] = { + {{{ 652, 577, -226}, 0, { 160, 32}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 618, 578, -227}, 0, { 160, 32}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 638, 572, -206}, 0, { 160, 32}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 587, 571, -206}, 0, { 160, 64}, {0x12, 0x20, 0x81, 0xff}}}, +}; + +// 0x07000450 - 0x07000490 +static const Vtx intro_seg7_vertex_07000450[] = { + {{{ 646, 614, -248}, 0, { 160, 32}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 637, 664, -277}, 0, { 128, 32}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 629, 625, -238}, 0, { 160, 32}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 614, 680, -271}, 0, { 128, 64}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000490 - 0x070004D0 +static const Vtx intro_seg7_vertex_07000490[] = { + {{{ 658, 486, -172}, 0, { 192, 32}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 652, 577, -226}, 0, { 160, 32}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 642, 504, -165}, 0, { 192, 32}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 638, 572, -206}, 0, { 160, 32}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x070004D0 - 0x07000510 +static const Vtx intro_seg7_vertex_070004D0[] = { + {{{ 611, 499, -162}, 0, { 192, 64}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 627, 482, -170}, 0, { 192, 32}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 642, 504, -165}, 0, { 192, 32}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 658, 486, -172}, 0, { 192, 32}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000510 - 0x07000550 +static const Vtx intro_seg7_vertex_07000510[] = { + {{{ 642, 392, -117}, 0, { 224, 32}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 627, 482, -170}, 0, { 192, 32}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 626, 410, -109}, 0, { 224, 64}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 611, 499, -162}, 0, { 192, 64}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000550 - 0x07000590 +static const Vtx intro_seg7_vertex_07000550[] = { + {{{ 642, 392, -117}, 0, { 224, 32}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 626, 410, -109}, 0, { 224, 64}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 463, 390, -115}, 0, { 224, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 482, 408, -108}, 0, { 224, 96}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000590 - 0x070005C0 +static const Vtx intro_seg7_vertex_07000590[] = { + {{{ 463, 390, -115}, 0, { 224, 96}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 482, 408, -108}, 0, { 224, 96}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 461, 469, -162}, 0, { 192, 96}, {0x12, 0x20, 0x81, 0xff}}}, +}; + +// 0x070005C0 - 0x070005F0 +static const Vtx intro_seg7_vertex_070005C0[] = { + {{{ 461, 469, -162}, 0, { 192, 96}, {0xff, 0xff, 0xff, 0x01}}}, + {{{ 482, 408, -108}, 0, { 224, 96}, {0xff, 0xff, 0xff, 0x01}}}, + {{{ 466, 457, -137}, 0, { 192, 96}, {0xff, 0xff, 0xff, 0x01}}}, +}; + +// 0x070005F0 - 0x07000620 +static const Vtx intro_seg7_vertex_070005F0[] = { + {{{ 461, 469, -162}, 0, { 192, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 466, 457, -137}, 0, { 192, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 505, 481, -151}, 0, { 192, 96}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000620 - 0x07000650 +static const Vtx intro_seg7_vertex_07000620[] = { + {{{ 461, 469, -162}, 0, { 192, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 505, 481, -151}, 0, { 192, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 499, 498, -162}, 0, { 192, 96}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000650 - 0x07000680 +static const Vtx intro_seg7_vertex_07000650[] = { + {{{ 461, 469, -162}, 0, { 192, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 499, 498, -162}, 0, { 192, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 442, 496, -161}, 0, { 192, 96}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000680 - 0x070006B0 +static const Vtx intro_seg7_vertex_07000680[] = { + {{{ 463, 390, -115}, 0, { 224, 96}, {0x20, 0x39, 0x81, 0xff}}}, + {{{ 461, 469, -162}, 0, { 192, 96}, {0x20, 0x39, 0x81, 0xff}}}, + {{{ 445, 408, -108}, 0, { 224, 96}, {0x20, 0x39, 0x81, 0xff}}}, +}; + +// 0x070006B0 - 0x070006E0 +static const Vtx intro_seg7_vertex_070006B0[] = { + {{{ 461, 469, -162}, 0, { 192, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 442, 496, -161}, 0, { 192, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 445, 408, -108}, 0, { 224, 96}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x070006E0 - 0x07000720 +static const Vtx intro_seg7_vertex_070006E0[] = { + {{{ 463, 390, -115}, 0, { 224, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 445, 408, -108}, 0, { 224, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 347, 390, -115}, 0, { 224, 128}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 351, 408, -108}, 0, { 224, 128}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000720 - 0x07000750 +static const Vtx intro_seg7_vertex_07000720[] = { + {{{ 347, 390, -115}, 0, { 224, 128}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 351, 408, -108}, 0, { 224, 128}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 341, 430, -139}, 0, { 224, 128}, {0x12, 0x20, 0x81, 0xff}}}, +}; + +// 0x07000750 - 0x07000780 +static const Vtx intro_seg7_vertex_07000750[] = { + {{{ 341, 430, -139}, 0, { 224, 128}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 351, 408, -108}, 0, { 224, 128}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 343, 447, -131}, 0, { 192, 128}, {0x12, 0x20, 0x81, 0xff}}}, +}; + +// 0x07000780 - 0x070007B0 +static const Vtx intro_seg7_vertex_07000780[] = { + {{{ 355, 490, -175}, 0, { 192, 128}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 341, 430, -139}, 0, { 224, 128}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 363, 472, -146}, 0, { 192, 128}, {0x12, 0x20, 0x81, 0xff}}}, +}; + +// 0x070007B0 - 0x070007E0 +static const Vtx intro_seg7_vertex_070007B0[] = { + {{{ 341, 430, -139}, 0, { 224, 128}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 343, 447, -131}, 0, { 192, 128}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 363, 472, -146}, 0, { 192, 128}, {0x12, 0x20, 0x81, 0xff}}}, +}; + +// 0x070007E0 - 0x07000810 +static const Vtx intro_seg7_vertex_070007E0[] = { + {{{ 355, 490, -175}, 0, { 192, 128}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 363, 472, -146}, 0, { 192, 128}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 359, 588, -216}, 0, { 160, 128}, {0x12, 0x20, 0x81, 0xff}}}, +}; + +// 0x07000810 - 0x07000840 +static const Vtx intro_seg7_vertex_07000810[] = { + {{{ 355, 490, -175}, 0, { 192, 128}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 359, 588, -216}, 0, { 160, 128}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 352, 506, -167}, 0, { 192, 128}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000840 - 0x07000870 +static const Vtx intro_seg7_vertex_07000840[] = { + {{{ 338, 374, -106}, 0, { 256, 128}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 347, 390, -115}, 0, { 224, 128}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 324, 401, -104}, 0, { 224, 128}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000870 - 0x070008A0 +static const Vtx intro_seg7_vertex_07000870[] = { + {{{ 352, 506, -167}, 0, { 192, 128}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 324, 401, -104}, 0, { 224, 128}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 355, 490, -175}, 0, { 192, 128}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x070008A0 - 0x070008D0 +static const Vtx intro_seg7_vertex_070008A0[] = { + {{{ 355, 490, -175}, 0, { 192, 128}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 324, 401, -104}, 0, { 224, 128}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 341, 430, -139}, 0, { 224, 128}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x070008D0 - 0x07000900 +static const Vtx intro_seg7_vertex_070008D0[] = { + {{{ 347, 390, -115}, 0, { 224, 128}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 341, 430, -139}, 0, { 224, 128}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 324, 401, -104}, 0, { 224, 128}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000900 - 0x07000940 +static const Vtx intro_seg7_vertex_07000900[] = { + {{{ 141, 425, -137}, 0, { 224, 192}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 338, 374, -106}, 0, { 256, 128}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 173, 443, -129}, 0, { 192, 160}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 324, 401, -104}, 0, { 224, 128}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000940 - 0x07000980 +static const Vtx intro_seg7_vertex_07000940[] = { + {{{ 141, 425, -137}, 0, { 224, 192}, {0x10, 0x1c, 0x73, 0xff}}}, + {{{ 173, 443, -129}, 0, { 192, 160}, {0x10, 0x1c, 0x73, 0xff}}}, + {{{ 278, 596, -220}, 0, { 160, 128}, {0x10, 0x1c, 0x73, 0xff}}}, + {{{ 261, 594, -236}, 0, { 160, 128}, {0x10, 0x1c, 0x73, 0xff}}}, +}; + +// 0x07000980 - 0x070009C0 +static const Vtx intro_seg7_vertex_07000980[] = { + {{{ 291, 666, -262}, 0, { 128, 128}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 274, 649, -268}, 0, { 128, 128}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 278, 596, -220}, 0, { 160, 128}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 261, 594, -236}, 0, { 160, 128}, {0x12, 0x20, 0x81, 0xff}}}, +}; + +// 0x070009C0 - 0x07000A00 +static const Vtx intro_seg7_vertex_070009C0[] = { + {{{ 291, 666, -262}, 0, { 128, 128}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 263, 669, -264}, 0, { 128, 128}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 274, 649, -268}, 0, { 128, 128}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 248, 650, -269}, 0, { 128, 160}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000A00 - 0x07000A40 +static const Vtx intro_seg7_vertex_07000A00[] = { + {{{ 248, 650, -269}, 0, { 128, 160}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 263, 669, -264}, 0, { 128, 128}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 247, 742, -321}, 0, { 96, 128}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 266, 735, -303}, 0, { 96, 128}, {0x12, 0x20, 0x81, 0xff}}}, +}; + +// 0x07000A40 - 0x07000A80 +static const Vtx intro_seg7_vertex_07000A40[] = { + {{{ 324, 740, -307}, 0, { 96, 128}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ 302, 744, -325}, 0, { 96, 128}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ 266, 735, -303}, 0, { 96, 128}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ 247, 742, -321}, 0, { 96, 128}, {0x16, 0x27, 0x9e, 0xff}}}, +}; + +// 0x07000A80 - 0x07000AC0 +static const Vtx intro_seg7_vertex_07000A80[] = { + {{{ 324, 740, -307}, 0, { 96, 128}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 302, 780, -330}, 0, { 96, 128}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 302, 744, -325}, 0, { 96, 128}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 276, 781, -348}, 0, { 64, 128}, {0x12, 0x20, 0x81, 0xff}}}, +}; + +// 0x07000AC0 - 0x07000AF0 +static const Vtx intro_seg7_vertex_07000AC0[] = { + {{{ 428, 674, -267}, 0, { 128, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 362, 671, -266}, 0, { 128, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 380, 649, -269}, 0, { 128, 96}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000AF0 - 0x07000B20 +static const Vtx intro_seg7_vertex_07000AF0[] = { + {{{ 380, 649, -269}, 0, { 128, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 362, 671, -266}, 0, { 128, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 363, 640, -247}, 0, { 128, 96}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000B20 - 0x07000B50 +static const Vtx intro_seg7_vertex_07000B20[] = { + {{{ 380, 649, -269}, 0, { 128, 96}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ 363, 640, -247}, 0, { 128, 96}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ 410, 640, -247}, 0, { 128, 96}, {0x16, 0x27, 0x9e, 0xff}}}, +}; + +// 0x07000B50 - 0x07000B80 +static const Vtx intro_seg7_vertex_07000B50[] = { + {{{ 380, 649, -269}, 0, { 128, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 410, 640, -247}, 0, { 128, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 428, 674, -267}, 0, { 128, 96}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000B80 - 0x07000BB0 +static const Vtx intro_seg7_vertex_07000B80[] = { + {{{ 504, 622, -236}, 0, { 160, 64}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 473, 619, -234}, 0, { 160, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 469, 578, -227}, 0, { 160, 96}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000BB0 - 0x07000BE0 +static const Vtx intro_seg7_vertex_07000BB0[] = { + {{{ 469, 578, -227}, 0, { 160, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 473, 619, -234}, 0, { 160, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 457, 596, -220}, 0, { 160, 96}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000BE0 - 0x07000C10 +static const Vtx intro_seg7_vertex_07000BE0[] = { + {{{ 469, 578, -227}, 0, { 160, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 457, 596, -220}, 0, { 160, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 436, 608, -228}, 0, { 160, 96}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000C10 - 0x07000C40 +static const Vtx intro_seg7_vertex_07000C10[] = { + {{{ 469, 578, -227}, 0, { 160, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 436, 608, -228}, 0, { 160, 96}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 439, 567, -203}, 0, { 160, 96}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000C40 - 0x07000C70 +static const Vtx intro_seg7_vertex_07000C40[] = { + {{{ 469, 578, -227}, 0, { 160, 96}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ 439, 567, -203}, 0, { 160, 96}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ 482, 570, -205}, 0, { 160, 96}, {0x16, 0x27, 0x9e, 0xff}}}, +}; + +// 0x07000C70 - 0x07000CA0 +static const Vtx intro_seg7_vertex_07000C70[] = { + {{{ 469, 578, -227}, 0, { 160, 96}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 482, 570, -205}, 0, { 160, 96}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ 475, 585, -214}, 0, { 160, 96}, {0x12, 0x20, 0x81, 0xff}}}, +}; + +// 0x07000CA0 - 0x07000CD0 +static const Vtx intro_seg7_vertex_07000CA0[] = { + {{{ 469, 578, -227}, 0, { 160, 96}, {0x12, 0x20, 0x7f, 0xff}}}, + {{{ 475, 585, -214}, 0, { 160, 96}, {0x12, 0x20, 0x7f, 0xff}}}, + {{{ 504, 622, -236}, 0, { 160, 64}, {0x12, 0x20, 0x7f, 0xff}}}, +}; + +// 0x07000CD0 - 0x07000D00 +static const Vtx intro_seg7_vertex_07000CD0[] = { + {{{ 515, 621, -236}, 0, { 160, 64}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 542, 602, -224}, 0, { 160, 64}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 544, 600, -240}, 0, { 160, 64}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000D00 - 0x07000D30 +static const Vtx intro_seg7_vertex_07000D00[] = { + {{{ 544, 600, -240}, 0, { 160, 64}, {0x12, 0x20, 0x7f, 0xff}}}, + {{{ 542, 602, -224}, 0, { 160, 64}, {0x12, 0x20, 0x7f, 0xff}}}, + {{{ 564, 621, -235}, 0, { 160, 64}, {0x12, 0x20, 0x7f, 0xff}}}, +}; + +// 0x07000D30 - 0x07000D60 +static const Vtx intro_seg7_vertex_07000D30[] = { + {{{ 544, 600, -240}, 0, { 160, 64}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 564, 621, -235}, 0, { 160, 64}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 515, 621, -236}, 0, { 160, 64}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07000D60 - 0x07000E60 +static const Vtx intro_seg7_vertex_07000D60[] = { + {{{ 173, 443, -129}, 0, { 192, 160}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 324, 401, -104}, 0, { 224, 128}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 278, 596, -220}, 0, { 160, 128}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 352, 506, -167}, 0, { 192, 128}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 359, 588, -216}, 0, { 160, 128}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 291, 666, -262}, 0, { 128, 128}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 363, 472, -146}, 0, { 192, 128}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 442, 496, -161}, 0, { 192, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 439, 567, -203}, 0, { 160, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 436, 608, -228}, 0, { 160, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 302, 780, -330}, 0, { 96, 128}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 324, 740, -307}, 0, { 96, 128}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 406, 804, -345}, 0, { 64, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 416, 749, -312}, 0, { 96, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 266, 735, -303}, 0, { 96, 128}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 362, 671, -266}, 0, { 128, 96}, {0x65, 0x7f, 0xff, 0xff}}}, +}; + +// 0x07000E60 - 0x07000F50 +static const Vtx intro_seg7_vertex_07000E60[] = { + {{{ 362, 671, -266}, 0, { 128, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 428, 674, -267}, 0, { 128, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 416, 749, -312}, 0, { 96, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 452, 751, -313}, 0, { 96, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 626, 410, -109}, 0, { 224, 64}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 611, 499, -162}, 0, { 192, 64}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 482, 408, -108}, 0, { 224, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 466, 457, -137}, 0, { 192, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 505, 481, -151}, 0, { 192, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 642, 504, -165}, 0, { 192, 32}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 587, 571, -206}, 0, { 160, 64}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 499, 498, -162}, 0, { 192, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 639, 768, -323}, 0, { 96, 32}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 557, 762, -320}, 0, { 96, 64}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 632, 689, -276}, 0, { 128, 32}, {0x65, 0x7f, 0xff, 0xff}}}, +}; + +// 0x07000F50 - 0x07001050 +static const Vtx intro_seg7_vertex_07000F50[] = { + {{{ 632, 689, -276}, 0, { 128, 32}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 557, 762, -320}, 0, { 96, 64}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 506, 692, -278}, 0, { 128, 64}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 553, 804, -345}, 0, { 96, 64}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 452, 751, -313}, 0, { 96, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 428, 674, -267}, 0, { 128, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 503, 682, -272}, 0, { 128, 64}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 263, 669, -264}, 0, { 128, 128}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 291, 666, -262}, 0, { 128, 128}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 266, 735, -303}, 0, { 96, 128}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 436, 608, -228}, 0, { 160, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 363, 640, -247}, 0, { 128, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 362, 671, -266}, 0, { 128, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 445, 408, -108}, 0, { 224, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 442, 496, -161}, 0, { 192, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 351, 408, -108}, 0, { 224, 128}, {0x65, 0x7f, 0xff, 0xff}}}, +}; + +// 0x07001050 - 0x07001130 +static const Vtx intro_seg7_vertex_07001050[] = { + {{{ 351, 408, -108}, 0, { 224, 128}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 442, 496, -161}, 0, { 192, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 343, 447, -131}, 0, { 192, 128}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 363, 472, -146}, 0, { 192, 128}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 499, 498, -162}, 0, { 192, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 542, 602, -224}, 0, { 160, 64}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 482, 570, -205}, 0, { 160, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 439, 567, -203}, 0, { 160, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 451, 805, -346}, 0, { 64, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 452, 751, -313}, 0, { 96, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 553, 804, -345}, 0, { 96, 64}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 638, 572, -206}, 0, { 160, 32}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 587, 571, -206}, 0, { 160, 64}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 642, 504, -165}, 0, { 192, 32}, {0x65, 0x7f, 0xff, 0xff}}}, +}; + +// 0x07001130 - 0x07001220 +static const Vtx intro_seg7_vertex_07001130[] = { + {{{ 629, 625, -238}, 0, { 160, 32}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 564, 621, -235}, 0, { 160, 64}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 587, 571, -206}, 0, { 160, 64}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 542, 602, -224}, 0, { 160, 64}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 499, 498, -162}, 0, { 192, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 614, 680, -271}, 0, { 128, 64}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 503, 682, -272}, 0, { 128, 64}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 515, 621, -236}, 0, { 160, 64}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 504, 622, -236}, 0, { 160, 64}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 473, 619, -234}, 0, { 160, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 428, 674, -267}, 0, { 128, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 482, 570, -205}, 0, { 160, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 475, 585, -214}, 0, { 160, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 457, 596, -220}, 0, { 160, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 436, 608, -228}, 0, { 160, 96}, {0x65, 0x7f, 0xff, 0xff}}}, +}; + +// 0x07001220 - 0x07001270 +static const Vtx intro_seg7_vertex_07001220[] = { + {{{ 363, 640, -247}, 0, { 128, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 436, 608, -228}, 0, { 160, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 410, 640, -247}, 0, { 128, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 473, 619, -234}, 0, { 160, 96}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 428, 674, -267}, 0, { 128, 96}, {0x65, 0x7f, 0xff, 0xff}}}, +}; + +// 0x07001270 - 0x070012B0 +static const Vtx intro_seg7_vertex_07001270[] = { + {{{ 213, 700, -299}, 0, { 128, 160}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 278, 778, -345}, 0, { 96, 128}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 208, 731, -301}, 0, { 96, 160}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 255, 785, -333}, 0, { 96, 128}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x070012B0 - 0x070012F0 +static const Vtx intro_seg7_vertex_070012B0[] = { + {{{ 94, 750, -328}, 0, { 96, 192}, {0x18, 0x2b, 0xad, 0xff}}}, + {{{ 208, 731, -301}, 0, { 96, 160}, {0x18, 0x2b, 0xad, 0xff}}}, + {{{ 122, 764, -321}, 0, { 96, 160}, {0x18, 0x2b, 0xad, 0xff}}}, + {{{ 213, 700, -299}, 0, { 128, 160}, {0x18, 0x2b, 0xad, 0xff}}}, +}; + +// 0x070012F0 - 0x07001330 +static const Vtx intro_seg7_vertex_070012F0[] = { + {{{ 180, 850, -387}, 0, { 32, 160}, {0x10, 0x1c, 0x73, 0xff}}}, + {{{ 94, 750, -328}, 0, { 96, 192}, {0x10, 0x1c, 0x73, 0xff}}}, + {{{ 185, 837, -365}, 0, { 64, 160}, {0x10, 0x1c, 0x73, 0xff}}}, + {{{ 122, 764, -321}, 0, { 96, 160}, {0x10, 0x1c, 0x73, 0xff}}}, +}; + +// 0x07001330 - 0x07001370 +static const Vtx intro_seg7_vertex_07001330[] = { + {{{ 278, 778, -345}, 0, { 96, 128}, {0x1a, 0x2e, 0xbb, 0xff}}}, + {{{ 180, 850, -387}, 0, { 32, 160}, {0x1a, 0x2e, 0xbb, 0xff}}}, + {{{ 255, 785, -333}, 0, { 96, 128}, {0x1a, 0x2e, 0xbb, 0xff}}}, + {{{ 185, 837, -365}, 0, { 64, 160}, {0x1a, 0x2e, 0xbb, 0xff}}}, +}; + +// 0x07001370 - 0x070013B0 +static const Vtx intro_seg7_vertex_07001370[] = { + {{{ 122, 764, -321}, 0, { 96, 160}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 208, 731, -301}, 0, { 96, 160}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 185, 837, -365}, 0, { 64, 160}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 255, 785, -333}, 0, { 96, 128}, {0x65, 0x7f, 0xff, 0xff}}}, +}; + +// 0x070013B0 - 0x070013F0 +static const Vtx intro_seg7_vertex_070013B0[] = { + {{{ 214, 657, -257}, 0, { 128, 160}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 162, 600, -223}, 0, { 160, 160}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 245, 652, -270}, 0, { 128, 128}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 170, 568, -221}, 0, { 160, 160}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x070013F0 - 0x07001430 +static const Vtx intro_seg7_vertex_070013F0[] = { + {{{ 61, 631, -258}, 0, { 128, 192}, {0x18, 0x2b, 0xad, 0xff}}}, + {{{ 170, 568, -221}, 0, { 160, 160}, {0x18, 0x2b, 0xad, 0xff}}}, + {{{ 84, 642, -248}, 0, { 128, 192}, {0x18, 0x2b, 0xad, 0xff}}}, + {{{ 162, 600, -223}, 0, { 160, 160}, {0x18, 0x2b, 0xad, 0xff}}}, +}; + +// 0x07001430 - 0x07001470 +static const Vtx intro_seg7_vertex_07001430[] = { + {{{ 61, 631, -258}, 0, { 128, 192}, {0x10, 0x1c, 0x73, 0xff}}}, + {{{ 84, 642, -248}, 0, { 128, 192}, {0x10, 0x1c, 0x73, 0xff}}}, + {{{ 134, 738, -321}, 0, { 96, 160}, {0x10, 0x1c, 0x73, 0xff}}}, + {{{ 140, 725, -298}, 0, { 96, 160}, {0x10, 0x1c, 0x73, 0xff}}}, +}; + +// 0x07001470 - 0x070014B0 +static const Vtx intro_seg7_vertex_07001470[] = { + {{{ 245, 652, -270}, 0, { 128, 128}, {0x1a, 0x2e, 0xbb, 0xff}}}, + {{{ 134, 738, -321}, 0, { 96, 160}, {0x1a, 0x2e, 0xbb, 0xff}}}, + {{{ 214, 657, -257}, 0, { 128, 160}, {0x1a, 0x2e, 0xbb, 0xff}}}, + {{{ 140, 725, -298}, 0, { 96, 160}, {0x1a, 0x2e, 0xbb, 0xff}}}, +}; + +// 0x070014B0 - 0x070014F0 +static const Vtx intro_seg7_vertex_070014B0[] = { + {{{ 140, 725, -298}, 0, { 96, 160}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 84, 642, -248}, 0, { 128, 192}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 214, 657, -257}, 0, { 128, 160}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 162, 600, -223}, 0, { 160, 160}, {0x65, 0x7f, 0xff, 0xff}}}, +}; + +// 0x070014F0 - 0x07001530 +static const Vtx intro_seg7_vertex_070014F0[] = { + {{{ 224, 552, -211}, 0, { 160, 128}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 201, 550, -193}, 0, { 160, 160}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 126, 383, -111}, 0, { 224, 160}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ 120, 413, -111}, 0, { 224, 192}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07001530 - 0x07001570 +static const Vtx intro_seg7_vertex_07001530[] = { + {{{ -28, 486, -172}, 0, { 192, 224}, {0x18, 0x2b, 0xad, 0xff}}}, + {{{ 126, 383, -111}, 0, { 224, 160}, {0x18, 0x2b, 0xad, 0xff}}}, + {{{ 0, 495, -160}, 0, { 192, 192}, {0x18, 0x2b, 0xad, 0xff}}}, + {{{ 120, 413, -111}, 0, { 224, 192}, {0x18, 0x2b, 0xad, 0xff}}}, +}; + +// 0x07001570 - 0x070015B0 +static const Vtx intro_seg7_vertex_07001570[] = { + {{{ -28, 486, -172}, 0, { 192, 224}, {0x10, 0x1c, 0x73, 0xff}}}, + {{{ 0, 495, -160}, 0, { 192, 192}, {0x10, 0x1c, 0x73, 0xff}}}, + {{{ 97, 580, -211}, 0, { 160, 192}, {0x10, 0x1c, 0x73, 0xff}}}, + {{{ 89, 593, -236}, 0, { 128, 192}, {0x10, 0x1c, 0x73, 0xff}}}, +}; + +// 0x070015B0 - 0x070015F0 +static const Vtx intro_seg7_vertex_070015B0[] = { + {{{ 89, 593, -236}, 0, { 128, 192}, {0x1a, 0x2e, 0xbb, 0xff}}}, + {{{ 97, 580, -211}, 0, { 160, 192}, {0x1a, 0x2e, 0xbb, 0xff}}}, + {{{ 224, 552, -211}, 0, { 160, 128}, {0x1a, 0x2e, 0xbb, 0xff}}}, + {{{ 201, 550, -193}, 0, { 160, 160}, {0x1a, 0x2e, 0xbb, 0xff}}}, +}; + +// 0x070015F0 - 0x07001630 +static const Vtx intro_seg7_vertex_070015F0[] = { + {{{ 120, 413, -111}, 0, { 224, 192}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 201, 550, -193}, 0, { 160, 160}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 0, 495, -160}, 0, { 192, 192}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ 97, 580, -211}, 0, { 160, 192}, {0x65, 0x7f, 0xff, 0xff}}}, +}; + +// 0x07001630 - 0x07001670 +static const Vtx intro_seg7_vertex_07001630[] = { + {{{ -385, 770, -324}, 0, { 64, 288}, {0x80, 0x00, 0x00, 0xff}}}, + {{{ -352, 768, -323}, 0, { 64, 288}, {0x80, 0x00, 0x00, 0xff}}}, + {{{ -371, 778, -345}, 0, { 64, 288}, {0x80, 0x00, 0x00, 0xff}}}, + {{{ -340, 779, -346}, 0, { 64, 288}, {0x80, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001670 - 0x070016A0 +static const Vtx intro_seg7_vertex_07001670[] = { + {{{ -340, 779, -346}, 0, { 64, 288}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -352, 768, -323}, 0, { 64, 288}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -350, 688, -292}, 0, { 96, 288}, {0xd7, 0x00, 0x00, 0xff}}}, +}; + +// 0x070016A0 - 0x070016D0 +static const Vtx intro_seg7_vertex_070016A0[] = { + {{{ -350, 688, -292}, 0, { 96, 288}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -352, 768, -323}, 0, { 64, 288}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -357, 701, -283}, 0, { 96, 288}, {0xd7, 0x00, 0x00, 0xff}}}, +}; + +// 0x070016D0 - 0x07001700 +static const Vtx intro_seg7_vertex_070016D0[] = { + {{{ -350, 688, -292}, 0, { 96, 288}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -357, 701, -283}, 0, { 96, 288}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -381, 648, -252}, 0, { 128, 288}, {0xd7, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001700 - 0x07001730 +static const Vtx intro_seg7_vertex_07001700[] = { + {{{ -350, 688, -292}, 0, { 96, 288}, {0x99, 0x00, 0x00, 0xff}}}, + {{{ -381, 648, -252}, 0, { 128, 288}, {0x99, 0x00, 0x00, 0xff}}}, + {{{ -346, 623, -236}, 0, { 128, 288}, {0x99, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001730 - 0x07001760 +static const Vtx intro_seg7_vertex_07001730[] = { + {{{ -346, 623, -236}, 0, { 128, 288}, {0x62, 0x00, 0x00, 0xff}}}, + {{{ -336, 775, -327}, 0, { 64, 288}, {0x62, 0x00, 0x00, 0xff}}}, + {{{ -350, 688, -292}, 0, { 96, 288}, {0x62, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001760 - 0x07001790 +static const Vtx intro_seg7_vertex_07001760[] = { + {{{ -340, 779, -346}, 0, { 64, 288}, {0x62, 0x00, 0x00, 0xff}}}, + {{{ -350, 688, -292}, 0, { 96, 288}, {0x62, 0x00, 0x00, 0xff}}}, + {{{ -336, 775, -327}, 0, { 64, 288}, {0x62, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001790 - 0x070017D0 +static const Vtx intro_seg7_vertex_07001790[] = { + {{{ -405, 831, -361}, 0, { 64, 288}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -385, 770, -324}, 0, { 64, 288}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -387, 844, -382}, 0, { 32, 288}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -371, 778, -345}, 0, { 64, 288}, {0xd7, 0x00, 0x00, 0xff}}}, +}; + +// 0x070017D0 - 0x07001810 +static const Vtx intro_seg7_vertex_070017D0[] = { + {{{ -244, 775, -327}, 0, { 64, 256}, {0x80, 0x00, 0x00, 0xff}}}, + {{{ -261, 785, -349}, 0, { 64, 256}, {0x80, 0x00, 0x00, 0xff}}}, + {{{ -336, 775, -327}, 0, { 64, 288}, {0x80, 0x00, 0x00, 0xff}}}, + {{{ -340, 779, -346}, 0, { 64, 288}, {0x80, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001810 - 0x07001850 +static const Vtx intro_seg7_vertex_07001810[] = { + {{{ -257, 840, -381}, 0, { 32, 256}, {0x62, 0x00, 0x00, 0xff}}}, + {{{ -261, 785, -349}, 0, { 64, 256}, {0x62, 0x00, 0x00, 0xff}}}, + {{{ -236, 830, -360}, 0, { 64, 256}, {0x62, 0x00, 0x00, 0xff}}}, + {{{ -244, 775, -327}, 0, { 64, 256}, {0x62, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001850 - 0x07001890 +static const Vtx intro_seg7_vertex_07001850[] = { + {{{ -257, 840, -381}, 0, { 32, 256}, {0x80, 0x00, 0x00, 0xff}}}, + {{{ -236, 830, -360}, 0, { 64, 256}, {0x80, 0x00, 0x00, 0xff}}}, + {{{ -115, 837, -380}, 0, { 64, 224}, {0x80, 0x00, 0x00, 0xff}}}, + {{{ -130, 832, -361}, 0, { 64, 224}, {0x80, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001890 - 0x070018D0 +static const Vtx intro_seg7_vertex_07001890[] = { + {{{ -132, 769, -324}, 0, { 96, 224}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -116, 775, -343}, 0, { 64, 224}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -130, 832, -361}, 0, { 64, 224}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -115, 837, -380}, 0, { 64, 224}, {0xd7, 0x00, 0x00, 0xff}}}, +}; + +// 0x070018D0 - 0x07001910 +static const Vtx intro_seg7_vertex_070018D0[] = { + {{{ -17, 773, -339}, 0, { 64, 192}, {0x80, 0x00, 0x00, 0xff}}}, + {{{ -116, 775, -343}, 0, { 64, 224}, {0x80, 0x00, 0x00, 0xff}}}, + {{{ -34, 766, -322}, 0, { 96, 192}, {0x80, 0x00, 0x00, 0xff}}}, + {{{ -132, 769, -324}, 0, { 96, 224}, {0x80, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001910 - 0x07001950 +static const Vtx intro_seg7_vertex_07001910[] = { + {{{ -9, 498, -179}, 0, { 192, 192}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -34, 766, -322}, 0, { 96, 192}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -26, 518, -174}, 0, { 160, 224}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -17, 773, -339}, 0, { 64, 192}, {0xd7, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001950 - 0x07001990 +static const Vtx intro_seg7_vertex_07001950[] = { + {{{ -9, 498, -179}, 0, { 192, 192}, {0xc5, 0x00, 0x00, 0xff}}}, + {{{ -26, 518, -174}, 0, { 160, 224}, {0xc5, 0x00, 0x00, 0xff}}}, + {{{ -108, 493, -177}, 0, { 192, 224}, {0xc5, 0x00, 0x00, 0xff}}}, + {{{ -121, 515, -172}, 0, { 160, 224}, {0xc5, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001990 - 0x070019D0 +static const Vtx intro_seg7_vertex_07001990[] = { + {{{ -106, 391, -116}, 0, { 224, 224}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -108, 493, -177}, 0, { 192, 224}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -122, 413, -111}, 0, { 224, 224}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -121, 515, -172}, 0, { 160, 224}, {0xd7, 0x00, 0x00, 0xff}}}, +}; + +// 0x070019D0 - 0x07001A10 +static const Vtx intro_seg7_vertex_070019D0[] = { + {{{ -272, 396, -118}, 0, { 224, 288}, {0xc5, 0x00, 0x00, 0xff}}}, + {{{ -106, 391, -116}, 0, { 224, 224}, {0xc5, 0x00, 0x00, 0xff}}}, + {{{ -255, 416, -113}, 0, { 224, 256}, {0xc5, 0x00, 0x00, 0xff}}}, + {{{ -122, 413, -111}, 0, { 224, 224}, {0xc5, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001A10 - 0x07001A50 +static const Vtx intro_seg7_vertex_07001A10[] = { + {{{ -268, 502, -182}, 0, { 192, 288}, {0x62, 0x00, 0x00, 0xff}}}, + {{{ -255, 416, -113}, 0, { 224, 256}, {0x62, 0x00, 0x00, 0xff}}}, + {{{ -252, 521, -176}, 0, { 160, 256}, {0x62, 0x00, 0x00, 0xff}}}, + {{{ -272, 396, -118}, 0, { 224, 288}, {0x62, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001A50 - 0x07001A90 +static const Vtx intro_seg7_vertex_07001A50[] = { + {{{ -252, 521, -176}, 0, { 160, 256}, {0xc5, 0x00, 0x00, 0xff}}}, + {{{ -351, 524, -177}, 0, { 160, 288}, {0xc5, 0x00, 0x00, 0xff}}}, + {{{ -268, 502, -182}, 0, { 192, 288}, {0xc5, 0x00, 0x00, 0xff}}}, + {{{ -380, 504, -183}, 0, { 192, 288}, {0xc5, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001A90 - 0x07001AC0 +static const Vtx intro_seg7_vertex_07001A90[] = { + {{{ -380, 504, -183}, 0, { 192, 288}, {0x62, 0x00, 0x00, 0xff}}}, + {{{ -351, 524, -177}, 0, { 160, 288}, {0x62, 0x00, 0x00, 0xff}}}, + {{{ -348, 585, -214}, 0, { 160, 288}, {0x62, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001AC0 - 0x07001AF0 +static const Vtx intro_seg7_vertex_07001AC0[] = { + {{{ -380, 504, -183}, 0, { 192, 288}, {0x99, 0x00, 0x00, 0xff}}}, + {{{ -348, 585, -214}, 0, { 160, 288}, {0x99, 0x00, 0x00, 0xff}}}, + {{{ -378, 557, -197}, 0, { 160, 288}, {0x99, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001AF0 - 0x07001B20 +static const Vtx intro_seg7_vertex_07001AF0[] = { + {{{ -380, 504, -183}, 0, { 192, 288}, {0xa1, 0x00, 0x00, 0xff}}}, + {{{ -378, 557, -197}, 0, { 160, 288}, {0xa1, 0x00, 0x00, 0xff}}}, + {{{ -400, 564, -201}, 0, { 160, 288}, {0xa1, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001B20 - 0x07001B60 +static const Vtx intro_seg7_vertex_07001B20[] = { + {{{ -400, 564, -201}, 0, { 160, 288}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -398, 425, -118}, 0, { 192, 288}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -380, 504, -183}, 0, { 192, 288}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -379, 401, -121}, 0, { 224, 288}, {0xd7, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001B60 - 0x07001BA0 +static const Vtx intro_seg7_vertex_07001B60[] = { + {{{ -379, 401, -121}, 0, { 224, 288}, {0xc5, 0x00, 0x00, 0xff}}}, + {{{ -398, 425, -118}, 0, { 192, 288}, {0xc5, 0x00, 0x00, 0xff}}}, + {{{ -566, 406, -122}, 0, { 224, 352}, {0xc5, 0x00, 0x00, 0xff}}}, + {{{ -547, 428, -120}, 0, { 192, 352}, {0xc5, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001BA0 - 0x07001BE0 +static const Vtx intro_seg7_vertex_07001BA0[] = { + {{{ -524, 562, -200}, 0, { 160, 320}, {0x62, 0x00, 0x00, 0xff}}}, + {{{ -540, 534, -201}, 0, { 192, 352}, {0x62, 0x00, 0x00, 0xff}}}, + {{{ -547, 428, -120}, 0, { 192, 352}, {0x62, 0x00, 0x00, 0xff}}}, + {{{ -566, 406, -122}, 0, { 224, 352}, {0x62, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001BE0 - 0x07001C10 +static const Vtx intro_seg7_vertex_07001BE0[] = { + {{{ -568, 515, -189}, 0, { 192, 352}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -540, 534, -201}, 0, { 192, 352}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -558, 542, -188}, 0, { 160, 352}, {0xd7, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001C10 - 0x07001C40 +static const Vtx intro_seg7_vertex_07001C10[] = { + {{{ -540, 534, -201}, 0, { 192, 352}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -524, 562, -200}, 0, { 160, 320}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -558, 542, -188}, 0, { 160, 352}, {0xd7, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001C40 - 0x07001C90 +static const Vtx intro_seg7_vertex_07001C40[] = { + {{{ -610, 638, -260}, 0, { 128, 352}, {0x93, 0x00, 0x00, 0xff}}}, + {{{ -568, 515, -189}, 0, { 192, 352}, {0x93, 0x00, 0x00, 0xff}}}, + {{{ -594, 639, -246}, 0, { 128, 352}, {0x93, 0x00, 0x00, 0xff}}}, + {{{ -558, 542, -188}, 0, { 160, 352}, {0x93, 0x00, 0x00, 0xff}}}, + {{{ -594, 639, -246}, 0, { 128, 352}, {0x93, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001C90 - 0x07001CC0 +static const Vtx intro_seg7_vertex_07001C90[] = { + {{{ -500, 682, -272}, 0, { 96, 320}, {0x6b, 0x00, 0x00, 0xff}}}, + {{{ -537, 670, -281}, 0, { 96, 352}, {0x6b, 0x00, 0x00, 0xff}}}, + {{{ -594, 639, -246}, 0, { 128, 352}, {0x6b, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001CC0 - 0x07001CF0 +static const Vtx intro_seg7_vertex_07001CC0[] = { + {{{ -537, 670, -281}, 0, { 96, 352}, {0xa1, 0x00, 0x00, 0xff}}}, + {{{ -500, 682, -272}, 0, { 96, 320}, {0xa1, 0x00, 0x00, 0xff}}}, + {{{ -565, 698, -282}, 0, { 96, 352}, {0xa1, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001CF0 - 0x07001D20 +static const Vtx intro_seg7_vertex_07001CF0[] = { + {{{ -582, 680, -287}, 0, { 96, 352}, {0x93, 0x00, 0x00, 0xff}}}, + {{{ -537, 670, -281}, 0, { 96, 352}, {0x93, 0x00, 0x00, 0xff}}}, + {{{ -565, 698, -282}, 0, { 96, 352}, {0x93, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001D20 - 0x07001D60 +static const Vtx intro_seg7_vertex_07001D20[] = { + {{{ -556, 784, -347}, 0, { 64, 352}, {0x5e, 0x00, 0x00, 0xff}}}, + {{{ -565, 698, -282}, 0, { 96, 352}, {0x5e, 0x00, 0x00, 0xff}}}, + {{{ -543, 776, -328}, 0, { 64, 320}, {0x5e, 0x00, 0x00, 0xff}}}, + {{{ -582, 680, -287}, 0, { 96, 352}, {0x5e, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001D60 - 0x07001D90 +static const Vtx intro_seg7_vertex_07001D60[] = { + {{{ -537, 670, -281}, 0, { 96, 352}, {0x6b, 0x00, 0x00, 0xff}}}, + {{{ -610, 638, -260}, 0, { 128, 352}, {0x6b, 0x00, 0x00, 0xff}}}, + {{{ -594, 639, -246}, 0, { 128, 352}, {0x6b, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001D90 - 0x07001DD0 +static const Vtx intro_seg7_vertex_07001D90[] = { + {{{ -488, 772, -326}, 0, { 64, 320}, {0x80, 0x00, 0x00, 0xff}}}, + {{{ -504, 781, -347}, 0, { 64, 320}, {0x80, 0x00, 0x00, 0xff}}}, + {{{ -543, 776, -328}, 0, { 64, 320}, {0x80, 0x00, 0x00, 0xff}}}, + {{{ -556, 784, -347}, 0, { 64, 352}, {0x80, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001DD0 - 0x07001E10 +static const Vtx intro_seg7_vertex_07001DD0[] = { + {{{ -488, 772, -326}, 0, { 64, 320}, {0x93, 0x00, 0x00, 0xff}}}, + {{{ -499, 805, -345}, 0, { 64, 320}, {0x93, 0x00, 0x00, 0xff}}}, + {{{ -504, 781, -347}, 0, { 64, 320}, {0x93, 0x00, 0x00, 0xff}}}, + {{{ -515, 811, -362}, 0, { 64, 320}, {0x93, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001E10 - 0x07001E50 +static const Vtx intro_seg7_vertex_07001E10[] = { + {{{ -387, 844, -382}, 0, { 32, 288}, {0x80, 0x00, 0x00, 0xff}}}, + {{{ -515, 811, -362}, 0, { 64, 320}, {0x80, 0x00, 0x00, 0xff}}}, + {{{ -405, 831, -361}, 0, { 64, 288}, {0x80, 0x00, 0x00, 0xff}}}, + {{{ -499, 805, -345}, 0, { 64, 320}, {0x80, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001E50 - 0x07001E80 +static const Vtx intro_seg7_vertex_07001E50[] = { + {{{ -244, 715, -292}, 0, { 96, 256}, {0xa1, 0x00, 0x00, 0xff}}}, + {{{ -277, 713, -291}, 0, { 96, 256}, {0xa1, 0x00, 0x00, 0xff}}}, + {{{ -265, 690, -293}, 0, { 96, 256}, {0xa1, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001E80 - 0x07001EB0 +static const Vtx intro_seg7_vertex_07001E80[] = { + {{{ -265, 690, -293}, 0, { 96, 256}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -277, 713, -291}, 0, { 96, 256}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -278, 677, -269}, 0, { 128, 256}, {0xd7, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001EB0 - 0x07001EE0 +static const Vtx intro_seg7_vertex_07001EB0[] = { + {{{ -265, 690, -293}, 0, { 96, 256}, {0x99, 0x00, 0x00, 0xff}}}, + {{{ -278, 677, -269}, 0, { 128, 256}, {0x99, 0x00, 0x00, 0xff}}}, + {{{ -249, 681, -271}, 0, { 128, 256}, {0x99, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001EE0 - 0x07001F10 +static const Vtx intro_seg7_vertex_07001EE0[] = { + {{{ -265, 690, -293}, 0, { 96, 256}, {0x5e, 0x00, 0x00, 0xff}}}, + {{{ -249, 681, -271}, 0, { 128, 256}, {0x5e, 0x00, 0x00, 0xff}}}, + {{{ -244, 715, -292}, 0, { 96, 256}, {0x5e, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001F10 - 0x07001F40 +static const Vtx intro_seg7_vertex_07001F10[] = { + {{{ -97, 717, -293}, 0, { 96, 224}, {0xa1, 0x00, 0x00, 0xff}}}, + {{{ -138, 714, -291}, 0, { 96, 224}, {0xa1, 0x00, 0x00, 0xff}}}, + {{{ -116, 688, -292}, 0, { 96, 224}, {0xa1, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001F40 - 0x07001F70 +static const Vtx intro_seg7_vertex_07001F40[] = { + {{{ -116, 688, -292}, 0, { 96, 224}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -138, 714, -291}, 0, { 96, 224}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -139, 675, -268}, 0, { 128, 224}, {0xd7, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001F70 - 0x07001FA0 +static const Vtx intro_seg7_vertex_07001F70[] = { + {{{ -116, 688, -292}, 0, { 96, 224}, {0x99, 0x00, 0x00, 0xff}}}, + {{{ -139, 675, -268}, 0, { 128, 224}, {0x99, 0x00, 0x00, 0xff}}}, + {{{ -90, 677, -269}, 0, { 128, 224}, {0x99, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001FA0 - 0x07001FD0 +static const Vtx intro_seg7_vertex_07001FA0[] = { + {{{ -116, 688, -292}, 0, { 96, 224}, {0x5e, 0x00, 0x00, 0xff}}}, + {{{ -90, 677, -269}, 0, { 128, 224}, {0x5e, 0x00, 0x00, 0xff}}}, + {{{ -97, 717, -293}, 0, { 96, 224}, {0x5e, 0x00, 0x00, 0xff}}}, +}; + +// 0x07001FD0 - 0x07002000 +static const Vtx intro_seg7_vertex_07001FD0[] = { + {{{ -244, 617, -233}, 0, { 128, 256}, {0xa1, 0x00, 0x00, 0xff}}}, + {{{ -279, 621, -235}, 0, { 128, 256}, {0xa1, 0x00, 0x00, 0xff}}}, + {{{ -259, 598, -239}, 0, { 128, 256}, {0xa1, 0x00, 0x00, 0xff}}}, +}; + +// 0x07002000 - 0x07002030 +static const Vtx intro_seg7_vertex_07002000[] = { + {{{ -259, 598, -239}, 0, { 128, 256}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -279, 621, -235}, 0, { 128, 256}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -285, 581, -211}, 0, { 160, 256}, {0xd7, 0x00, 0x00, 0xff}}}, +}; + +// 0x07002030 - 0x07002060 +static const Vtx intro_seg7_vertex_07002030[] = { + {{{ -259, 598, -239}, 0, { 128, 256}, {0x99, 0x00, 0x00, 0xff}}}, + {{{ -285, 581, -211}, 0, { 160, 256}, {0x99, 0x00, 0x00, 0xff}}}, + {{{ -246, 581, -211}, 0, { 160, 256}, {0x99, 0x00, 0x00, 0xff}}}, +}; + +// 0x07002060 - 0x07002090 +static const Vtx intro_seg7_vertex_07002060[] = { + {{{ -259, 598, -239}, 0, { 128, 256}, {0x5e, 0x00, 0x00, 0xff}}}, + {{{ -246, 581, -211}, 0, { 160, 256}, {0x5e, 0x00, 0x00, 0xff}}}, + {{{ -244, 617, -233}, 0, { 128, 256}, {0x5e, 0x00, 0x00, 0xff}}}, +}; + +// 0x07002090 - 0x070020C0 +static const Vtx intro_seg7_vertex_07002090[] = { + {{{ -89, 627, -239}, 0, { 128, 224}, {0xa1, 0x00, 0x00, 0xff}}}, + {{{ -133, 623, -237}, 0, { 128, 224}, {0xa1, 0x00, 0x00, 0xff}}}, + {{{ -113, 595, -237}, 0, { 160, 224}, {0xa1, 0x00, 0x00, 0xff}}}, +}; + +// 0x070020C0 - 0x070020F0 +static const Vtx intro_seg7_vertex_070020C0[] = { + {{{ -113, 595, -237}, 0, { 160, 224}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -133, 623, -237}, 0, { 128, 224}, {0xd7, 0x00, 0x00, 0xff}}}, + {{{ -136, 581, -212}, 0, { 160, 224}, {0xd7, 0x00, 0x00, 0xff}}}, +}; + +// 0x070020F0 - 0x07002120 +static const Vtx intro_seg7_vertex_070020F0[] = { + {{{ -113, 595, -237}, 0, { 160, 224}, {0x99, 0x00, 0x00, 0xff}}}, + {{{ -136, 581, -212}, 0, { 160, 224}, {0x99, 0x00, 0x00, 0xff}}}, + {{{ -93, 581, -212}, 0, { 160, 224}, {0x99, 0x00, 0x00, 0xff}}}, +}; + +// 0x07002120 - 0x07002150 +static const Vtx intro_seg7_vertex_07002120[] = { + {{{ -113, 595, -237}, 0, { 160, 224}, {0x5e, 0x00, 0x00, 0xff}}}, + {{{ -93, 581, -212}, 0, { 160, 224}, {0x5e, 0x00, 0x00, 0xff}}}, + {{{ -89, 627, -239}, 0, { 128, 224}, {0x5e, 0x00, 0x00, 0xff}}}, +}; + +// 0x07002150 - 0x07002240 +static const Vtx intro_seg7_vertex_07002150[] = { + {{{ -558, 542, -188}, 0, { 160, 352}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -524, 562, -200}, 0, { 160, 320}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -594, 639, -246}, 0, { 128, 352}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -500, 682, -272}, 0, { 96, 320}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -547, 428, -120}, 0, { 192, 352}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -398, 425, -118}, 0, { 192, 288}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -400, 564, -201}, 0, { 160, 288}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -565, 698, -282}, 0, { 96, 352}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -543, 776, -328}, 0, { 64, 320}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -488, 772, -326}, 0, { 64, 320}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -385, 770, -324}, 0, { 64, 288}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -357, 701, -283}, 0, { 96, 288}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -381, 648, -252}, 0, { 128, 288}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -346, 623, -236}, 0, { 128, 288}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -378, 557, -197}, 0, { 160, 288}, {0xff, 0x2f, 0x2f, 0xff}}}, +}; + +// 0x07002240 - 0x07002340 +static const Vtx intro_seg7_vertex_07002240[] = { + {{{ -405, 831, -361}, 0, { 64, 288}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -499, 805, -345}, 0, { 64, 320}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -385, 770, -324}, 0, { 64, 288}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -488, 772, -326}, 0, { 64, 320}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -352, 768, -323}, 0, { 64, 288}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -357, 701, -283}, 0, { 96, 288}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -130, 832, -361}, 0, { 64, 224}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -236, 830, -360}, 0, { 64, 256}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -132, 769, -324}, 0, { 96, 224}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -244, 775, -327}, 0, { 64, 256}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -34, 766, -322}, 0, { 96, 192}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -97, 717, -293}, 0, { 96, 224}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -138, 714, -291}, 0, { 96, 224}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -336, 775, -327}, 0, { 64, 288}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -346, 623, -236}, 0, { 128, 288}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -277, 713, -291}, 0, { 96, 256}, {0xff, 0x2f, 0x2f, 0xff}}}, +}; + +// 0x07002340 - 0x07002420 +static const Vtx intro_seg7_vertex_07002340[] = { + {{{ -277, 713, -291}, 0, { 96, 256}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -244, 715, -292}, 0, { 96, 256}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -244, 775, -327}, 0, { 64, 256}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -138, 714, -291}, 0, { 96, 224}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -351, 524, -177}, 0, { 160, 288}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -252, 521, -176}, 0, { 160, 256}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -348, 585, -214}, 0, { 160, 288}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -255, 416, -113}, 0, { 224, 256}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -121, 515, -172}, 0, { 160, 224}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -136, 581, -212}, 0, { 160, 224}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -285, 581, -211}, 0, { 160, 256}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -246, 581, -211}, 0, { 160, 256}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -378, 557, -197}, 0, { 160, 288}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -346, 623, -236}, 0, { 128, 288}, {0xff, 0x2f, 0x2f, 0xff}}}, +}; + +// 0x07002420 - 0x07002520 +static const Vtx intro_seg7_vertex_07002420[] = { + {{{ -122, 413, -111}, 0, { 224, 224}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -121, 515, -172}, 0, { 160, 224}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -255, 416, -113}, 0, { 224, 256}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -26, 518, -174}, 0, { 160, 224}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -93, 581, -212}, 0, { 160, 224}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -136, 581, -212}, 0, { 160, 224}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -34, 766, -322}, 0, { 96, 192}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -89, 627, -239}, 0, { 128, 224}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -90, 677, -269}, 0, { 128, 224}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -97, 717, -293}, 0, { 96, 224}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -133, 623, -237}, 0, { 128, 224}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -246, 581, -211}, 0, { 160, 256}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -244, 617, -233}, 0, { 128, 256}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -138, 714, -291}, 0, { 96, 224}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -244, 715, -292}, 0, { 96, 256}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -139, 675, -268}, 0, { 128, 224}, {0xff, 0x2f, 0x2f, 0xff}}}, +}; + +// 0x07002520 - 0x070025D0 +static const Vtx intro_seg7_vertex_07002520[] = { + {{{ -277, 713, -291}, 0, { 96, 256}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -346, 623, -236}, 0, { 128, 288}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -278, 677, -269}, 0, { 128, 256}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -285, 581, -211}, 0, { 160, 256}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -279, 621, -235}, 0, { 128, 256}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -244, 617, -233}, 0, { 128, 256}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -249, 681, -271}, 0, { 128, 256}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -244, 715, -292}, 0, { 96, 256}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -139, 675, -268}, 0, { 128, 224}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -133, 623, -237}, 0, { 128, 224}, {0xff, 0x2f, 0x2f, 0xff}}}, + {{{ -90, 677, -269}, 0, { 128, 224}, {0xff, 0x2f, 0x2f, 0xff}}}, +}; + +// 0x070025D0 - 0x07002610 +static const Vtx intro_seg7_vertex_070025D0[] = { + {{{ 658, 317, -73}, 0, { 256, 64}, {0x6a, 0x6a, 0x00, 0xff}}}, + {{{ 669, 311, -50}, 0, { 256, 32}, {0x6a, 0x6a, 0x00, 0xff}}}, + {{{ 806, 317, -73}, 0, { 256, 0}, {0x6a, 0x6a, 0x00, 0xff}}}, + {{{ 777, 309, -49}, 0, { 256, 32}, {0x6a, 0x6a, 0x00, 0xff}}}, +}; + +// 0x07002610 - 0x07002650 +static const Vtx intro_seg7_vertex_07002610[] = { + {{{ 760, 257, -17}, 0, { 288, 32}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 790, 270, -45}, 0, { 256, 0}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 777, 309, -49}, 0, { 256, 32}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 806, 317, -73}, 0, { 256, 0}, {0xb1, 0xb1, 0x00, 0xff}}}, +}; + +// 0x07002650 - 0x07002690 +static const Vtx intro_seg7_vertex_07002650[] = { + {{{ 760, 257, -17}, 0, { 288, 32}, {0x6a, 0x6a, 0x00, 0xff}}}, + {{{ 901, 264, -22}, 0, { 288, 0}, {0x6a, 0x6a, 0x00, 0xff}}}, + {{{ 790, 270, -45}, 0, { 256, 0}, {0x6a, 0x6a, 0x00, 0xff}}}, + {{{ 930, 277, -49}, 0, { 256, 0}, {0x6a, 0x6a, 0x00, 0xff}}}, +}; + +// 0x07002690 - 0x070026D0 +static const Vtx intro_seg7_vertex_07002690[] = { + {{{ 887, 92, 62}, 0, { 352, 0}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 930, 277, -49}, 0, { 256, 0}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 871, 123, 62}, 0, { 320, 0}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 901, 264, -22}, 0, { 288, 0}, {0xb1, 0xb1, 0x00, 0xff}}}, +}; + +// 0x070026D0 - 0x07002710 +static const Vtx intro_seg7_vertex_070026D0[] = { + {{{ 887, 92, 62}, 0, { 352, 0}, {0xa1, 0xa1, 0x00, 0xff}}}, + {{{ 871, 123, 62}, 0, { 320, 0}, {0xa1, 0xa1, 0x00, 0xff}}}, + {{{ 786, 118, 44}, 0, { 352, 0}, {0xa1, 0xa1, 0x00, 0xff}}}, + {{{ 779, 149, 46}, 0, { 320, 32}, {0xa1, 0xa1, 0x00, 0xff}}}, +}; + +// 0x07002710 - 0x07002740 +static const Vtx intro_seg7_vertex_07002710[] = { + {{{ 769, 144, 49}, 0, { 320, 32}, {0xa1, 0xa1, 0x00, 0xff}}}, + {{{ 786, 118, 44}, 0, { 352, 0}, {0xa1, 0xa1, 0x00, 0xff}}}, + {{{ 779, 149, 46}, 0, { 320, 32}, {0xa1, 0xa1, 0x00, 0xff}}}, +}; + +// 0x07002740 - 0x07002770 +static const Vtx intro_seg7_vertex_07002740[] = { + {{{ 769, 144, 49}, 0, { 320, 32}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 779, 149, 46}, 0, { 320, 32}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 774, 159, 40}, 0, { 320, 32}, {0xb1, 0xb1, 0x00, 0xff}}}, +}; + +// 0x07002770 - 0x070027A0 +static const Vtx intro_seg7_vertex_07002770[] = { + {{{ 761, 188, 23}, 0, { 320, 32}, {0xa1, 0xa1, 0x00, 0xff}}}, + {{{ 698, 171, 33}, 0, { 320, 32}, {0xa1, 0xa1, 0x00, 0xff}}}, + {{{ 750, 162, 24}, 0, { 320, 32}, {0xa1, 0xa1, 0x00, 0xff}}}, +}; + +// 0x070027A0 - 0x070027D0 +static const Vtx intro_seg7_vertex_070027A0[] = { + {{{ 709, 150, 31}, 0, { 320, 32}, {0xa1, 0xa1, 0x00, 0xff}}}, + {{{ 750, 162, 24}, 0, { 320, 32}, {0xa1, 0xa1, 0x00, 0xff}}}, + {{{ 698, 171, 33}, 0, { 320, 32}, {0xa1, 0xa1, 0x00, 0xff}}}, +}; + +// 0x070027D0 - 0x07002800 +static const Vtx intro_seg7_vertex_070027D0[] = { + {{{ 709, 150, 31}, 0, { 320, 32}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 698, 171, 33}, 0, { 320, 32}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 649, 126, 60}, 0, { 320, 64}, {0xb1, 0xb1, 0x00, 0xff}}}, +}; + +// 0x07002800 - 0x07002830 +static const Vtx intro_seg7_vertex_07002800[] = { + {{{ 750, 162, 24}, 0, { 320, 32}, {0xa1, 0xa1, 0x00, 0xff}}}, + {{{ 774, 159, 40}, 0, { 320, 32}, {0xa1, 0xa1, 0x00, 0xff}}}, + {{{ 761, 188, 23}, 0, { 320, 32}, {0xa1, 0xa1, 0x00, 0xff}}}, +}; + +// 0x07002830 - 0x07002860 +static const Vtx intro_seg7_vertex_07002830[] = { + {{{ 649, 126, 60}, 0, { 320, 64}, {0x6a, 0x6a, 0x00, 0xff}}}, + {{{ 658, 122, 62}, 0, { 320, 64}, {0x6a, 0x6a, 0x00, 0xff}}}, + {{{ 709, 150, 31}, 0, { 320, 32}, {0x6a, 0x6a, 0x00, 0xff}}}, +}; + +// 0x07002860 - 0x07002890 +static const Vtx intro_seg7_vertex_07002860[] = { + {{{ 658, 122, 62}, 0, { 320, 64}, {0x6a, 0x6a, 0x00, 0xff}}}, + {{{ 769, 156, 42}, 0, { 320, 32}, {0x6a, 0x6a, 0x00, 0xff}}}, + {{{ 709, 150, 31}, 0, { 320, 32}, {0x6a, 0x6a, 0x00, 0xff}}}, +}; + +// 0x07002890 - 0x070028C0 +static const Vtx intro_seg7_vertex_07002890[] = { + {{{ 709, 150, 31}, 0, { 320, 32}, {0x6a, 0x6a, 0x00, 0xff}}}, + {{{ 769, 156, 42}, 0, { 320, 32}, {0x6a, 0x6a, 0x00, 0xff}}}, + {{{ 750, 162, 24}, 0, { 320, 32}, {0x6a, 0x6a, 0x00, 0xff}}}, +}; + +// 0x070028C0 - 0x070028F0 +static const Vtx intro_seg7_vertex_070028C0[] = { + {{{ 750, 162, 24}, 0, { 320, 32}, {0x6a, 0x6a, 0x00, 0xff}}}, + {{{ 769, 156, 42}, 0, { 320, 32}, {0x6a, 0x6a, 0x00, 0xff}}}, + {{{ 774, 159, 40}, 0, { 320, 32}, {0x6a, 0x6a, 0x00, 0xff}}}, +}; + +// 0x070028F0 - 0x07002920 +static const Vtx intro_seg7_vertex_070028F0[] = { + {{{ 774, 159, 40}, 0, { 320, 32}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 769, 156, 42}, 0, { 320, 32}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 769, 144, 49}, 0, { 320, 32}, {0xb1, 0xb1, 0x00, 0xff}}}, +}; + +// 0x07002920 - 0x07002950 +static const Vtx intro_seg7_vertex_07002920[] = { + {{{ 769, 156, 42}, 0, { 320, 32}, {0x6a, 0x6a, 0x00, 0xff}}}, + {{{ 658, 122, 62}, 0, { 320, 64}, {0x6a, 0x6a, 0x00, 0xff}}}, + {{{ 769, 144, 49}, 0, { 320, 32}, {0x6a, 0x6a, 0x00, 0xff}}}, +}; + +// 0x07002950 - 0x07002980 +static const Vtx intro_seg7_vertex_07002950[] = { + {{{ 629, 69, 80}, 0, { 352, 64}, {0x43, 0x43, 0x00, 0xff}}}, + {{{ 621, 100, 75}, 0, { 352, 64}, {0x43, 0x43, 0x00, 0xff}}}, + {{{ 611, 67, 74}, 0, { 352, 64}, {0x43, 0x43, 0x00, 0xff}}}, +}; + +// 0x07002980 - 0x070029B0 +static const Vtx intro_seg7_vertex_07002980[] = { + {{{ 629, 69, 80}, 0, { 352, 64}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 649, 126, 60}, 0, { 320, 64}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 621, 100, 75}, 0, { 352, 64}, {0xb1, 0xb1, 0x00, 0xff}}}, +}; + +// 0x070029B0 - 0x070029E0 +static const Vtx intro_seg7_vertex_070029B0[] = { + {{{ 625, 27, 119}, 0, { 352, 64}, {0x43, 0x43, 0x00, 0xff}}}, + {{{ 629, 69, 80}, 0, { 352, 64}, {0x43, 0x43, 0x00, 0xff}}}, + {{{ 610, 30, 96}, 0, { 352, 64}, {0x43, 0x43, 0x00, 0xff}}}, +}; + +// 0x070029E0 - 0x07002A10 +static const Vtx intro_seg7_vertex_070029E0[] = { + {{{ 610, 30, 96}, 0, { 352, 64}, {0x43, 0x43, 0x00, 0xff}}}, + {{{ 629, 69, 80}, 0, { 352, 64}, {0x43, 0x43, 0x00, 0xff}}}, + {{{ 611, 67, 74}, 0, { 352, 64}, {0x43, 0x43, 0x00, 0xff}}}, +}; + +// 0x07002A10 - 0x07002A40 +static const Vtx intro_seg7_vertex_07002A10[] = { + {{{ 649, 126, 60}, 0, { 320, 64}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 629, 69, 80}, 0, { 352, 64}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 658, 122, 62}, 0, { 320, 64}, {0xb1, 0xb1, 0x00, 0xff}}}, +}; + +// 0x07002A40 - 0x07002A70 +static const Vtx intro_seg7_vertex_07002A40[] = { + {{{ 629, 69, 80}, 0, { 352, 64}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 625, 27, 119}, 0, { 352, 64}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 658, 122, 62}, 0, { 320, 64}, {0xba, 0xba, 0x00, 0xff}}}, +}; + +// 0x07002A70 - 0x07002AB0 +static const Vtx intro_seg7_vertex_07002A70[] = { + {{{ 482, -98, 173}, 0, { 416, 96}, {0x43, 0x43, 0x00, 0xff}}}, + {{{ 515, -83, 185}, 0, { 416, 96}, {0x43, 0x43, 0x00, 0xff}}}, + {{{ 610, 30, 96}, 0, { 352, 64}, {0x43, 0x43, 0x00, 0xff}}}, + {{{ 625, 27, 119}, 0, { 352, 64}, {0x43, 0x43, 0x00, 0xff}}}, +}; + +// 0x07002AB0 - 0x07002AF0 +static const Vtx intro_seg7_vertex_07002AB0[] = { + {{{ 541, 186, 5}, 0, { 288, 96}, {0x78, 0x78, 0x00, 0xff}}}, + {{{ 611, 67, 74}, 0, { 352, 64}, {0x78, 0x78, 0x00, 0xff}}}, + {{{ 566, 193, 20}, 0, { 288, 64}, {0x78, 0x78, 0x00, 0xff}}}, + {{{ 621, 100, 75}, 0, { 352, 64}, {0x78, 0x78, 0x00, 0xff}}}, +}; + +// 0x07002AF0 - 0x07002B30 +static const Vtx intro_seg7_vertex_07002AF0[] = { + {{{ 541, 186, 5}, 0, { 288, 96}, {0x43, 0x43, 0x00, 0xff}}}, + {{{ 566, 193, 20}, 0, { 288, 64}, {0x43, 0x43, 0x00, 0xff}}}, + {{{ 628, 246, -11}, 0, { 288, 64}, {0x43, 0x43, 0x00, 0xff}}}, + {{{ 619, 247, -31}, 0, { 288, 64}, {0x43, 0x43, 0x00, 0xff}}}, +}; + +// 0x07002B30 - 0x07002B70 +static const Vtx intro_seg7_vertex_07002B30[] = { + {{{ 619, 247, -31}, 0, { 288, 64}, {0x43, 0x43, 0x00, 0xff}}}, + {{{ 628, 246, -11}, 0, { 288, 64}, {0x43, 0x43, 0x00, 0xff}}}, + {{{ 658, 317, -73}, 0, { 256, 64}, {0x43, 0x43, 0x00, 0xff}}}, + {{{ 669, 311, -50}, 0, { 256, 32}, {0x43, 0x43, 0x00, 0xff}}}, +}; + +// 0x07002B70 - 0x07002BB0 +static const Vtx intro_seg7_vertex_07002B70[] = { + {{{ 482, -98, 173}, 0, { 416, 96}, {0x6b, 0x6b, 0x00, 0xff}}}, + {{{ 619, -170, 215}, 0, { 448, 64}, {0x6b, 0x6b, 0x00, 0xff}}}, + {{{ 515, -83, 185}, 0, { 416, 96}, {0x6b, 0x6b, 0x00, 0xff}}}, + {{{ 615, -133, 215}, 0, { 416, 64}, {0x6b, 0x6b, 0x00, 0xff}}}, +}; + +// 0x07002BB0 - 0x07002BF0 +static const Vtx intro_seg7_vertex_07002BB0[] = { + {{{ 668, -97, 172}, 0, { 416, 64}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 615, -133, 215}, 0, { 416, 64}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 619, -170, 215}, 0, { 448, 64}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 667, -61, 172}, 0, { 384, 64}, {0xba, 0xba, 0x00, 0xff}}}, +}; + +// 0x07002BF0 - 0x07002C30 +static const Vtx intro_seg7_vertex_07002BF0[] = { + {{{ 667, -61, 172}, 0, { 384, 64}, {0x6b, 0x6b, 0x00, 0xff}}}, + {{{ 668, -97, 172}, 0, { 416, 64}, {0x6b, 0x6b, 0x00, 0xff}}}, + {{{ 812, -164, 234}, 0, { 448, 32}, {0x6b, 0x6b, 0x00, 0xff}}}, + {{{ 810, -196, 234}, 0, { 448, 32}, {0x6b, 0x6b, 0x00, 0xff}}}, +}; + +// 0x07002C30 - 0x07002C70 +static const Vtx intro_seg7_vertex_07002C30[] = { + {{{ 994, -64, 156}, 0, { 416, 0}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 954, -62, 173}, 0, { 416, 0}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 810, -196, 234}, 0, { 448, 32}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 812, -164, 234}, 0, { 448, 32}, {0xba, 0xba, 0x00, 0xff}}}, +}; + +// 0x07002C70 - 0x07002CB0 +static const Vtx intro_seg7_vertex_07002C70[] = { + {{{ 994, -64, 156}, 0, { 416, 0}, {0x81, 0x81, 0x00, 0xff}}}, + {{{ 789, 26, 98}, 0, { 352, 32}, {0x81, 0x81, 0x00, 0xff}}}, + {{{ 954, -62, 173}, 0, { 416, 0}, {0x81, 0x81, 0x00, 0xff}}}, + {{{ 768, 21, 123}, 0, { 384, 32}, {0x81, 0x81, 0x00, 0xff}}}, +}; + +// 0x07002CB0 - 0x07002CF0 +static const Vtx intro_seg7_vertex_07002CB0[] = { + {{{ 769, 144, 49}, 0, { 320, 32}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 768, 21, 123}, 0, { 384, 32}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 786, 118, 44}, 0, { 352, 0}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 789, 26, 98}, 0, { 352, 32}, {0xb1, 0xb1, 0x00, 0xff}}}, +}; + +// 0x07002CF0 - 0x07002DC0 +static const Vtx intro_seg7_vertex_07002CF0[] = { + {{{ 621, 100, 75}, 0, { 352, 64}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 649, 126, 60}, 0, { 320, 64}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 566, 193, 20}, 0, { 288, 64}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 698, 171, 33}, 0, { 320, 32}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 628, 246, -11}, 0, { 288, 64}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 777, 309, -49}, 0, { 256, 32}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 669, 311, -50}, 0, { 256, 32}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 760, 257, -17}, 0, { 288, 32}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 901, 264, -22}, 0, { 288, 0}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 871, 123, 62}, 0, { 320, 0}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 779, 149, 46}, 0, { 320, 32}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 774, 159, 40}, 0, { 320, 32}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 761, 188, 23}, 0, { 320, 32}, {0xff, 0xff, 0x39, 0xff}}}, +}; + +// 0x07002DC0 - 0x07002E50 +static const Vtx intro_seg7_vertex_07002DC0[] = { + {{{ 954, -62, 173}, 0, { 416, 0}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 768, 21, 123}, 0, { 384, 32}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 812, -164, 234}, 0, { 448, 32}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 667, -61, 172}, 0, { 384, 64}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 769, 144, 49}, 0, { 320, 32}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 658, 122, 62}, 0, { 320, 64}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 625, 27, 119}, 0, { 352, 64}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 515, -83, 185}, 0, { 416, 96}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 615, -133, 215}, 0, { 416, 64}, {0xff, 0xff, 0x39, 0xff}}}, +}; + +// 0x07002E50 - 0x07002E90 +static const Vtx intro_seg7_vertex_07002E50[] = { + {{{ 494, 73, 70}, 0, { 352, 96}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 552, 151, 28}, 0, { 320, 64}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 480, 81, 86}, 0, { 352, 96}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 525, 152, 44}, 0, { 320, 96}, {0xba, 0xba, 0x00, 0xff}}}, +}; + +// 0x07002E90 - 0x07002ED0 +static const Vtx intro_seg7_vertex_07002E90[] = { + {{{ 494, 73, 70}, 0, { 352, 96}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 480, 81, 86}, 0, { 352, 96}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 545, -8, 124}, 0, { 384, 64}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 520, 7, 131}, 0, { 384, 96}, {0xb1, 0xb1, 0x00, 0xff}}}, +}; + +// 0x07002ED0 - 0x07002F00 +static const Vtx intro_seg7_vertex_07002ED0[] = { + {{{ 449, 179, 28}, 0, { 320, 96}, {0x8b, 0x8b, 0x00, 0xff}}}, + {{{ 525, 152, 44}, 0, { 320, 96}, {0x8b, 0x8b, 0x00, 0xff}}}, + {{{ 522, 162, 18}, 0, { 320, 64}, {0x8b, 0x8b, 0x00, 0xff}}}, +}; + +// 0x07002F00 - 0x07002F30 +static const Vtx intro_seg7_vertex_07002F00[] = { + {{{ 552, 151, 28}, 0, { 320, 64}, {0x8b, 0x8b, 0x00, 0xff}}}, + {{{ 551, 176, 13}, 0, { 320, 64}, {0x8b, 0x8b, 0x00, 0xff}}}, + {{{ 525, 152, 44}, 0, { 320, 96}, {0x8b, 0x8b, 0x00, 0xff}}}, +}; + +// 0x07002F30 - 0x07002F60 +static const Vtx intro_seg7_vertex_07002F30[] = { + {{{ 530, 186, 24}, 0, { 320, 96}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 522, 162, 18}, 0, { 320, 64}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 551, 176, 13}, 0, { 320, 64}, {0xba, 0xba, 0x00, 0xff}}}, +}; + +// 0x07002F60 - 0x07002F90 +static const Vtx intro_seg7_vertex_07002F60[] = { + {{{ 551, 176, 13}, 0, { 320, 64}, {0x6a, 0x6a, 0x00, 0xff}}}, + {{{ 522, 162, 18}, 0, { 320, 64}, {0x6a, 0x6a, 0x00, 0xff}}}, + {{{ 525, 152, 44}, 0, { 320, 96}, {0x6a, 0x6a, 0x00, 0xff}}}, +}; + +// 0x07002F90 - 0x07002FC0 +static const Vtx intro_seg7_vertex_07002F90[] = { + {{{ 522, 162, 18}, 0, { 320, 64}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 530, 186, 24}, 0, { 320, 96}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 449, 179, 28}, 0, { 320, 96}, {0xba, 0xba, 0x00, 0xff}}}, +}; + +// 0x07002FC0 - 0x07003000 +static const Vtx intro_seg7_vertex_07002FC0[] = { + {{{ 545, -8, 124}, 0, { 384, 64}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 520, 7, 131}, 0, { 384, 96}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 480, -27, 130}, 0, { 384, 96}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 461, -7, 140}, 0, { 384, 96}, {0xba, 0xba, 0x00, 0xff}}}, +}; + +// 0x07003000 - 0x07003040 +static const Vtx intro_seg7_vertex_07003000[] = { + {{{ 191, -117, 186}, 0, { 416, 192}, {0x51, 0x51, 0x00, 0xff}}}, + {{{ 211, -92, 191}, 0, { 416, 160}, {0x51, 0x51, 0x00, 0xff}}}, + {{{ 175, 281, -51}, 0, { 256, 160}, {0x51, 0x51, 0x00, 0xff}}}, + {{{ 195, 272, -26}, 0, { 256, 160}, {0x51, 0x51, 0x00, 0xff}}}, +}; + +// 0x07003040 - 0x07003080 +static const Vtx intro_seg7_vertex_07003040[] = { + {{{ 578, 342, -86}, 0, { 224, 64}, {0x6a, 0x6a, 0x00, 0xff}}}, + {{{ 175, 281, -51}, 0, { 256, 160}, {0x6a, 0x6a, 0x00, 0xff}}}, + {{{ 554, 328, -60}, 0, { 256, 64}, {0x6a, 0x6a, 0x00, 0xff}}}, + {{{ 195, 272, -26}, 0, { 256, 160}, {0x6a, 0x6a, 0x00, 0xff}}}, +}; + +// 0x07003080 - 0x070030C0 +static const Vtx intro_seg7_vertex_07003080[] = { + {{{ 578, 342, -86}, 0, { 224, 64}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 554, 328, -60}, 0, { 256, 64}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 551, 176, 13}, 0, { 320, 64}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 530, 186, 24}, 0, { 320, 96}, {0xb1, 0xb1, 0x00, 0xff}}}, +}; + +// 0x070030C0 - 0x07003100 +static const Vtx intro_seg7_vertex_070030C0[] = { + {{{ 480, -27, 130}, 0, { 384, 96}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 461, -7, 140}, 0, { 384, 96}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 480, -103, 197}, 0, { 416, 96}, {0xb1, 0xb1, 0x00, 0xff}}}, + {{{ 499, -126, 196}, 0, { 416, 96}, {0xb1, 0xb1, 0x00, 0xff}}}, +}; + +// 0x07003100 - 0x07003140 +static const Vtx intro_seg7_vertex_07003100[] = { + {{{ 499, -126, 196}, 0, { 416, 96}, {0xa4, 0xa4, 0x00, 0xff}}}, + {{{ 480, -103, 197}, 0, { 416, 96}, {0xa4, 0xa4, 0x00, 0xff}}}, + {{{ 191, -117, 186}, 0, { 416, 192}, {0xa4, 0xa4, 0x00, 0xff}}}, + {{{ 211, -92, 191}, 0, { 416, 160}, {0xa4, 0xa4, 0x00, 0xff}}}, +}; + +// 0x07003140 - 0x07003240 +static const Vtx intro_seg7_vertex_07003140[] = { + {{{ 449, 179, 28}, 0, { 320, 96}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 438, 183, 26}, 0, { 320, 96}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 435, 180, 28}, 0, { 320, 96}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 369, 174, 31}, 0, { 320, 128}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 530, 186, 24}, 0, { 320, 96}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 195, 272, -26}, 0, { 256, 160}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 348, 188, 23}, 0, { 288, 128}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 427, 8, 130}, 0, { 384, 96}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 449, -10, 142}, 0, { 384, 96}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 456, 10, 130}, 0, { 384, 96}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 461, -7, 140}, 0, { 384, 96}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 211, -92, 191}, 0, { 416, 160}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 328, 172, 32}, 0, { 320, 128}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 306, 154, 43}, 0, { 320, 128}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 411, 147, 47}, 0, { 320, 96}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 313, 165, 36}, 0, { 320, 128}, {0xff, 0xff, 0x39, 0xff}}}, +}; + +// 0x07003240 - 0x07003330 +static const Vtx intro_seg7_vertex_07003240[] = { + {{{ 328, 172, 32}, 0, { 320, 128}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 307, 170, 34}, 0, { 320, 128}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 313, 165, 36}, 0, { 320, 128}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 195, 272, -26}, 0, { 256, 160}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 461, -7, 140}, 0, { 384, 96}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 480, 81, 86}, 0, { 352, 96}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 456, 10, 130}, 0, { 384, 96}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 427, 8, 130}, 0, { 384, 96}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 306, 154, 43}, 0, { 320, 128}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 520, 7, 131}, 0, { 384, 96}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 525, 152, 44}, 0, { 320, 96}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 449, 179, 28}, 0, { 320, 96}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 435, 180, 28}, 0, { 320, 96}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 411, 147, 47}, 0, { 320, 96}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 398, 34, 115}, 0, { 352, 128}, {0xff, 0xff, 0x39, 0xff}}}, +}; + +// 0x07003330 - 0x07003410 +static const Vtx intro_seg7_vertex_07003330[] = { + {{{ 480, -103, 197}, 0, { 416, 96}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 461, -7, 140}, 0, { 384, 96}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 211, -92, 191}, 0, { 416, 160}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 301, 36, 114}, 0, { 352, 128}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 343, 5, 132}, 0, { 384, 128}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 330, 88, 82}, 0, { 352, 128}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 299, 2, 134}, 0, { 384, 128}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 195, 272, -26}, 0, { 256, 160}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 306, 154, 43}, 0, { 320, 128}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 398, 34, 115}, 0, { 352, 128}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 427, 8, 130}, 0, { 384, 96}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 411, 147, 47}, 0, { 320, 96}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 554, 328, -60}, 0, { 256, 64}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 530, 186, 24}, 0, { 320, 96}, {0xff, 0xff, 0x39, 0xff}}}, +}; + +// 0x07003410 - 0x07003440 +static const Vtx intro_seg7_vertex_07003410[] = { + {{{ 211, -92, 191}, 0, { 416, 160}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 299, 2, 134}, 0, { 384, 128}, {0xff, 0xff, 0x39, 0xff}}}, + {{{ 195, 272, -26}, 0, { 256, 160}, {0xff, 0xff, 0x39, 0xff}}}, +}; + +// 0x07003440 - 0x07003470 +static const Vtx intro_seg7_vertex_07003440[] = { + {{{ 411, 147, 47}, 0, { 320, 96}, {0x43, 0x43, 0x00, 0xff}}}, + {{{ 435, 180, 28}, 0, { 320, 96}, {0x43, 0x43, 0x00, 0xff}}}, + {{{ 407, 159, 26}, 0, { 320, 128}, {0x43, 0x43, 0x00, 0xff}}}, +}; + +// 0x07003470 - 0x070034A0 +static const Vtx intro_seg7_vertex_07003470[] = { + {{{ 368, 174, 31}, 0, { 320, 128}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 410, 147, 47}, 0, { 320, 96}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 406, 159, 26}, 0, { 320, 128}, {0xba, 0xba, 0x00, 0xff}}}, +}; + +// 0x070034A0 - 0x070034D0 +static const Vtx intro_seg7_vertex_070034A0[] = { + {{{ 435, 180, 28}, 0, { 320, 96}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 369, 174, 31}, 0, { 320, 128}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 407, 159, 26}, 0, { 320, 128}, {0xba, 0xba, 0x00, 0xff}}}, +}; + +// 0x070034D0 - 0x070035C0 +static const Vtx intro_seg7_vertex_070034D0[] = { + {{{ 396, 12, 114}, 0, { 352, 128}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 398, 34, 115}, 0, { 352, 128}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 343, 5, 132}, 0, { 384, 128}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 316, 83, 71}, 0, { 352, 128}, {0x78, 0x78, 0x00, 0xff}}}, + {{{ 330, 88, 82}, 0, { 352, 128}, {0x78, 0x78, 0x00, 0xff}}}, + {{{ 306, 154, 43}, 0, { 320, 128}, {0x78, 0x78, 0x00, 0xff}}}, + {{{ 312, 7, 117}, 0, { 352, 128}, {0x62, 0x62, 0x00, 0xff}}}, + {{{ 299, 2, 134}, 0, { 384, 128}, {0x62, 0x62, 0x00, 0xff}}}, + {{{ 343, 5, 132}, 0, { 384, 128}, {0x62, 0x62, 0x00, 0xff}}}, + {{{ 301, 36, 114}, 0, { 352, 128}, {0x43, 0x43, 0x00, 0xff}}}, + {{{ 330, 88, 82}, 0, { 352, 128}, {0x43, 0x43, 0x00, 0xff}}}, + {{{ 316, 83, 71}, 0, { 352, 128}, {0x43, 0x43, 0x00, 0xff}}}, + {{{ 427, 8, 130}, 0, { 384, 96}, {0x78, 0x78, 0x00, 0xff}}}, + {{{ 398, 34, 115}, 0, { 352, 128}, {0x78, 0x78, 0x00, 0xff}}}, + {{{ 396, 12, 114}, 0, { 352, 128}, {0x78, 0x78, 0x00, 0xff}}}, +}; + +// 0x070035C0 - 0x07003680 +static const Vtx intro_seg7_vertex_070035C0[] = { + {{{ 343, 5, 132}, 0, { 384, 128}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 427, 8, 130}, 0, { 384, 96}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 396, 12, 114}, 0, { 352, 128}, {0xba, 0xba, 0x00, 0xff}}}, + {{{ 301, 36, 114}, 0, { 352, 128}, {0x78, 0x78, 0x00, 0xff}}}, + {{{ 299, 2, 134}, 0, { 384, 128}, {0x78, 0x78, 0x00, 0xff}}}, + {{{ 312, 7, 117}, 0, { 352, 128}, {0x78, 0x78, 0x00, 0xff}}}, + {{{ 306, 154, 43}, 0, { 320, 128}, {0x62, 0x62, 0x00, 0xff}}}, + {{{ 301, 36, 114}, 0, { 352, 128}, {0x62, 0x62, 0x00, 0xff}}}, + {{{ 316, 83, 71}, 0, { 352, 128}, {0x62, 0x62, 0x00, 0xff}}}, + {{{ 312, 7, 117}, 0, { 352, 128}, {0x43, 0x43, 0x00, 0xff}}}, + {{{ 343, 5, 132}, 0, { 384, 128}, {0x43, 0x43, 0x00, 0xff}}}, + {{{ 301, 36, 114}, 0, { 352, 128}, {0x43, 0x43, 0x00, 0xff}}}, +}; + +// 0x07003680 - 0x070036C0 +static const Vtx intro_seg7_vertex_07003680[] = { + {{{ -85, 319, -74}, 0, { 224, 224}, {0x00, 0x75, 0x00, 0xff}}}, + {{{ -72, 307, -47}, 0, { 256, 224}, {0x00, 0x75, 0x00, 0xff}}}, + {{{ 98, 302, -60}, 0, { 256, 160}, {0x00, 0x75, 0x00, 0xff}}}, + {{{ 69, 291, -38}, 0, { 256, 192}, {0x00, 0x75, 0x00, 0xff}}}, +}; + +// 0x070036C0 - 0x07003700 +static const Vtx intro_seg7_vertex_070036C0[] = { + {{{ 59, 241, -21}, 0, { 288, 192}, {0x00, 0xa6, 0x00, 0xff}}}, + {{{ 69, 291, -38}, 0, { 256, 192}, {0x00, 0xa6, 0x00, 0xff}}}, + {{{ 32, 233, -3}, 0, { 288, 192}, {0x00, 0xa6, 0x00, 0xff}}}, + {{{ 98, 302, -60}, 0, { 256, 160}, {0x00, 0xa6, 0x00, 0xff}}}, +}; + +// 0x07003700 - 0x07003740 +static const Vtx intro_seg7_vertex_07003700[] = { + {{{ 32, 233, -3}, 0, { 288, 192}, {0x00, 0x75, 0x00, 0xff}}}, + {{{ 116, 212, 8}, 0, { 288, 192}, {0x00, 0x75, 0x00, 0xff}}}, + {{{ 59, 241, -21}, 0, { 288, 192}, {0x00, 0x75, 0x00, 0xff}}}, + {{{ 144, 218, -12}, 0, { 288, 160}, {0x00, 0x75, 0x00, 0xff}}}, +}; + +// 0x07003740 - 0x07003780 +static const Vtx intro_seg7_vertex_07003740[] = { + {{{ -93, 259, -19}, 0, { 256, 224}, {0x00, 0x4b, 0x00, 0xff}}}, + {{{ -72, 307, -47}, 0, { 256, 224}, {0x00, 0x4b, 0x00, 0xff}}}, + {{{ -110, 272, -42}, 0, { 256, 224}, {0x00, 0x4b, 0x00, 0xff}}}, + {{{ -85, 319, -74}, 0, { 224, 224}, {0x00, 0x4b, 0x00, 0xff}}}, +}; + +// 0x07003780 - 0x070037C0 +static const Vtx intro_seg7_vertex_07003780[] = { + {{{ -93, 259, -19}, 0, { 256, 224}, {0x00, 0x75, 0x00, 0xff}}}, + {{{ -110, 272, -42}, 0, { 256, 224}, {0x00, 0x75, 0x00, 0xff}}}, + {{{ -202, 276, -29}, 0, { 256, 256}, {0x00, 0x75, 0x00, 0xff}}}, + {{{ -213, 286, -51}, 0, { 256, 256}, {0x00, 0x75, 0x00, 0xff}}}, +}; + +// 0x070037C0 - 0x070037F0 +static const Vtx intro_seg7_vertex_070037C0[] = { + {{{ -190, 150, 28}, 0, { 320, 256}, {0x00, 0x5a, 0x00, 0xff}}}, + {{{ -195, 134, 55}, 0, { 320, 256}, {0x00, 0x5a, 0x00, 0xff}}}, + {{{ -165, 171, 33}, 0, { 288, 256}, {0x00, 0x5a, 0x00, 0xff}}}, +}; + +// 0x070037F0 - 0x07003830 +static const Vtx intro_seg7_vertex_070037F0[] = { + {{{ -165, 171, 33}, 0, { 288, 256}, {0x00, 0xbb, 0x00, 0xff}}}, + {{{ -257, 180, 27}, 0, { 288, 288}, {0x00, 0xbb, 0x00, 0xff}}}, + {{{ -190, 150, 28}, 0, { 320, 256}, {0x00, 0xbb, 0x00, 0xff}}}, + {{{ -290, 156, 24}, 0, { 320, 288}, {0x00, 0xbb, 0x00, 0xff}}}, +}; + +// 0x07003830 - 0x07003870 +static const Vtx intro_seg7_vertex_07003830[] = { + {{{ -213, 286, -51}, 0, { 256, 256}, {0x00, 0x4b, 0x00, 0xff}}}, + {{{ -290, 156, 24}, 0, { 320, 288}, {0x00, 0x4b, 0x00, 0xff}}}, + {{{ -202, 276, -29}, 0, { 256, 256}, {0x00, 0x4b, 0x00, 0xff}}}, + {{{ -257, 180, 27}, 0, { 288, 288}, {0x00, 0x4b, 0x00, 0xff}}}, +}; + +// 0x07003870 - 0x070038B0 +static const Vtx intro_seg7_vertex_07003870[] = { + {{{ -366, 60, 81}, 0, { 320, 320}, {0x00, 0x54, 0x00, 0xff}}}, + {{{ -341, 60, 99}, 0, { 352, 288}, {0x00, 0x54, 0x00, 0xff}}}, + {{{ -190, 150, 28}, 0, { 320, 256}, {0x00, 0x54, 0x00, 0xff}}}, + {{{ -195, 134, 55}, 0, { 320, 256}, {0x00, 0x54, 0x00, 0xff}}}, +}; + +// 0x070038B0 - 0x07003910 +static const Vtx intro_seg7_vertex_070038B0[] = { + {{{ 82, -110, 183}, 0, { 416, 192}, {0x00, 0xa6, 0x00, 0xff}}}, + {{{ 144, 218, -12}, 0, { 288, 160}, {0x00, 0xa6, 0x00, 0xff}}}, + {{{ 64, -85, 187}, 0, { 384, 192}, {0x00, 0xa6, 0x00, 0xff}}}, + {{{ 144, 218, -12}, 0, { 288, 160}, {0x00, 0xa6, 0x00, 0xff}}}, + {{{ 116, 212, 8}, 0, { 288, 192}, {0x00, 0xa6, 0x00, 0xff}}}, + {{{ 64, -85, 187}, 0, { 384, 192}, {0x00, 0xa6, 0x00, 0xff}}}, +}; + +// 0x07003910 - 0x07003950 +static const Vtx intro_seg7_vertex_07003910[] = { + {{{ 82, -110, 183}, 0, { 416, 192}, {0x00, 0xa4, 0x00, 0xff}}}, + {{{ 64, -85, 187}, 0, { 384, 192}, {0x00, 0xa4, 0x00, 0xff}}}, + {{{ -153, -107, 181}, 0, { 416, 256}, {0x00, 0xa4, 0x00, 0xff}}}, + {{{ -128, -83, 186}, 0, { 384, 256}, {0x00, 0xa4, 0x00, 0xff}}}, +}; + +// 0x07003950 - 0x07003980 +static const Vtx intro_seg7_vertex_07003950[] = { + {{{ -133, -29, 132}, 0, { 384, 256}, {0x00, 0x4b, 0x00, 0xff}}}, + {{{ -153, -107, 181}, 0, { 416, 256}, {0x00, 0x4b, 0x00, 0xff}}}, + {{{ -128, -83, 186}, 0, { 384, 256}, {0x00, 0x4b, 0x00, 0xff}}}, +}; + +// 0x07003980 - 0x070039B0 +static const Vtx intro_seg7_vertex_07003980[] = { + {{{ -47, 92, 60}, 0, { 320, 224}, {0x00, 0x79, 0x00, 0xff}}}, + {{{ -93, 41, 111}, 0, { 352, 224}, {0x00, 0x79, 0x00, 0xff}}}, + {{{ -41, 34, 115}, 0, { 352, 224}, {0x00, 0x79, 0x00, 0xff}}}, +}; + +// 0x070039B0 - 0x070039E0 +static const Vtx intro_seg7_vertex_070039B0[] = { + {{{ -47, 92, 60}, 0, { 320, 224}, {0x00, 0x5a, 0x00, 0xff}}}, + {{{ -41, 34, 115}, 0, { 352, 224}, {0x00, 0x5a, 0x00, 0xff}}}, + {{{ -11, 126, 60}, 0, { 320, 224}, {0x00, 0x5a, 0x00, 0xff}}}, +}; + +// 0x070039E0 - 0x07003A10 +static const Vtx intro_seg7_vertex_070039E0[] = { + {{{ -47, 92, 60}, 0, { 320, 224}, {0x00, 0xa9, 0x00, 0xff}}}, + {{{ -11, 126, 60}, 0, { 320, 224}, {0x00, 0xa9, 0x00, 0xff}}}, + {{{ -52, 135, 54}, 0, { 320, 224}, {0x00, 0xa9, 0x00, 0xff}}}, +}; + +// 0x07003A10 - 0x07003A40 +static const Vtx intro_seg7_vertex_07003A10[] = { + {{{ -133, -29, 132}, 0, { 384, 256}, {0x00, 0xa6, 0x00, 0xff}}}, + {{{ -47, 92, 60}, 0, { 320, 224}, {0x00, 0xa6, 0x00, 0xff}}}, + {{{ -133, -6, 139}, 0, { 352, 256}, {0x00, 0xa6, 0x00, 0xff}}}, +}; + +// 0x07003A40 - 0x07003A70 +static const Vtx intro_seg7_vertex_07003A40[] = { + {{{ -47, 92, 60}, 0, { 320, 224}, {0x00, 0xa6, 0x00, 0xff}}}, + {{{ -52, 135, 54}, 0, { 320, 224}, {0x00, 0xa6, 0x00, 0xff}}}, + {{{ -133, -6, 139}, 0, { 352, 256}, {0x00, 0xa6, 0x00, 0xff}}}, +}; + +// 0x07003A70 - 0x07003AA0 +static const Vtx intro_seg7_vertex_07003A70[] = { + {{{ -47, 92, 60}, 0, { 320, 224}, {0x00, 0xa6, 0x00, 0xff}}}, + {{{ -132, -31, 133}, 0, { 384, 256}, {0x00, 0xa6, 0x00, 0xff}}}, + {{{ -93, 41, 111}, 0, { 352, 224}, {0x00, 0xa6, 0x00, 0xff}}}, +}; + +// 0x07003AA0 - 0x07003AD0 +static const Vtx intro_seg7_vertex_07003AA0[] = { + {{{ -133, -29, 132}, 0, { 384, 256}, {0x00, 0x4b, 0x00, 0xff}}}, + {{{ -128, -83, 186}, 0, { 384, 256}, {0x00, 0x4b, 0x00, 0xff}}}, + {{{ -93, 41, 111}, 0, { 352, 224}, {0x00, 0x4b, 0x00, 0xff}}}, +}; + +// 0x07003AD0 - 0x07003B10 +static const Vtx intro_seg7_vertex_07003AD0[] = { + {{{ -269, -128, 192}, 0, { 416, 288}, {0x00, 0xbb, 0x00, 0xff}}}, + {{{ -133, -29, 132}, 0, { 384, 256}, {0x00, 0xbb, 0x00, 0xff}}}, + {{{ -260, -92, 191}, 0, { 384, 288}, {0x00, 0xbb, 0x00, 0xff}}}, + {{{ -133, -6, 139}, 0, { 352, 256}, {0x00, 0xbb, 0x00, 0xff}}}, +}; + +// 0x07003B10 - 0x07003B50 +static const Vtx intro_seg7_vertex_07003B10[] = { + {{{ -366, 60, 81}, 0, { 320, 320}, {0x00, 0x5a, 0x00, 0xff}}}, + {{{ -269, -128, 192}, 0, { 416, 288}, {0x00, 0x5a, 0x00, 0xff}}}, + {{{ -341, 60, 99}, 0, { 352, 288}, {0x00, 0x5a, 0x00, 0xff}}}, + {{{ -260, -92, 191}, 0, { 384, 288}, {0x00, 0x5a, 0x00, 0xff}}}, +}; + +// 0x07003B50 - 0x07003C30 +static const Vtx intro_seg7_vertex_07003B50[] = { + {{{ 69, 291, -38}, 0, { 256, 192}, {0x00, 0xf1, 0x00, 0xff}}}, + {{{ -72, 307, -47}, 0, { 256, 224}, {0x00, 0xf1, 0x00, 0xff}}}, + {{{ 32, 233, -3}, 0, { 288, 192}, {0x00, 0xf1, 0x00, 0xff}}}, + {{{ -93, 259, -19}, 0, { 256, 224}, {0x00, 0xf1, 0x00, 0xff}}}, + {{{ -52, 135, 54}, 0, { 320, 224}, {0x00, 0xf1, 0x00, 0xff}}}, + {{{ -11, 126, 60}, 0, { 320, 224}, {0x00, 0xf1, 0x00, 0xff}}}, + {{{ 116, 212, 8}, 0, { 288, 192}, {0x00, 0xf1, 0x00, 0xff}}}, + {{{ -257, 180, 27}, 0, { 288, 288}, {0x00, 0xf1, 0x00, 0xff}}}, + {{{ -165, 171, 33}, 0, { 288, 256}, {0x00, 0xf1, 0x00, 0xff}}}, + {{{ -202, 276, -29}, 0, { 256, 256}, {0x00, 0xf1, 0x00, 0xff}}}, + {{{ -195, 134, 55}, 0, { 320, 256}, {0x00, 0xf1, 0x00, 0xff}}}, + {{{ -260, -92, 191}, 0, { 384, 288}, {0x00, 0xf1, 0x00, 0xff}}}, + {{{ -133, -6, 139}, 0, { 352, 256}, {0x00, 0xf1, 0x00, 0xff}}}, + {{{ -341, 60, 99}, 0, { 352, 288}, {0x00, 0xf1, 0x00, 0xff}}}, +}; + +// 0x07003C30 - 0x07003CD0 +static const Vtx intro_seg7_vertex_07003C30[] = { + {{{ -341, 60, 99}, 0, { 352, 288}, {0x00, 0xf1, 0x00, 0xff}}}, + {{{ -133, -6, 139}, 0, { 352, 256}, {0x00, 0xf1, 0x00, 0xff}}}, + {{{ -195, 134, 55}, 0, { 320, 256}, {0x00, 0xf1, 0x00, 0xff}}}, + {{{ -52, 135, 54}, 0, { 320, 224}, {0x00, 0xf1, 0x00, 0xff}}}, + {{{ -41, 34, 115}, 0, { 352, 224}, {0x00, 0xf1, 0x00, 0xff}}}, + {{{ 116, 212, 8}, 0, { 288, 192}, {0x00, 0xf1, 0x00, 0xff}}}, + {{{ -11, 126, 60}, 0, { 320, 224}, {0x00, 0xf1, 0x00, 0xff}}}, + {{{ -128, -83, 186}, 0, { 384, 256}, {0x00, 0xf1, 0x00, 0xff}}}, + {{{ 64, -85, 187}, 0, { 384, 192}, {0x00, 0xf1, 0x00, 0xff}}}, + {{{ -93, 41, 111}, 0, { 352, 224}, {0x00, 0xf1, 0x00, 0xff}}}, +}; + +// 0x07003CD0 - 0x07003D10 +static const Vtx intro_seg7_vertex_07003CD0[] = { + {{{ -743, 372, -86}, 0, { 224, 384}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ -366, 340, -67}, 0, { 224, 288}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ -762, 384, -108}, 0, { 192, 384}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ -340, 348, -86}, 0, { 224, 288}, {0x16, 0x27, 0x9e, 0xff}}}, +}; + +// 0x07003D10 - 0x07003D50 +static const Vtx intro_seg7_vertex_07003D10[] = { + {{{ -340, 348, -86}, 0, { 224, 288}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -366, 340, -67}, 0, { 224, 288}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -392, 177, 14}, 0, { 288, 288}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -416, 170, 33}, 0, { 288, 320}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07003D50 - 0x07003D90 +static const Vtx intro_seg7_vertex_07003D50[] = { + {{{ -416, 170, 33}, 0, { 288, 320}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ -352, 159, 40}, 0, { 288, 288}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ -392, 177, 14}, 0, { 288, 288}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ -330, 165, 21}, 0, { 288, 288}, {0x16, 0x27, 0x9e, 0xff}}}, +}; + +// 0x07003D90 - 0x07003DD0 +static const Vtx intro_seg7_vertex_07003D90[] = { + {{{ -388, -113, 185}, 0, { 416, 320}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -330, 165, 21}, 0, { 288, 288}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -405, -91, 190}, 0, { 384, 320}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -352, 159, 40}, 0, { 288, 288}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07003DD0 - 0x07003E10 +static const Vtx intro_seg7_vertex_07003DD0[] = { + {{{ -594, -160, 213}, 0, { 416, 384}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -388, -113, 185}, 0, { 416, 320}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -583, -130, 213}, 0, { 416, 352}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -405, -91, 190}, 0, { 384, 320}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07003E10 - 0x07003E40 +static const Vtx intro_seg7_vertex_07003E10[] = { + {{{ -748, 54, 94}, 0, { 320, 384}, {0x13, 0x50, 0x8c, 0xff}}}, + {{{ -735, 79, 88}, 0, { 320, 384}, {0x13, 0x50, 0x8c, 0xff}}}, + {{{ -762, 61, 82}, 0, { 320, 416}, {0x13, 0x50, 0x8c, 0xff}}}, +}; + +// 0x07003E40 - 0x07003E80 +static const Vtx intro_seg7_vertex_07003E40[] = { + {{{ -514, 102, 74}, 0, { 320, 352}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -735, 79, 88}, 0, { 320, 384}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -544, 74, 81}, 0, { 320, 352}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -748, 54, 94}, 0, { 320, 384}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07003E80 - 0x07003EB0 +static const Vtx intro_seg7_vertex_07003E80[] = { + {{{ -514, 102, 74}, 0, { 320, 352}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ -544, 74, 81}, 0, { 320, 352}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ -510, 5, 132}, 0, { 352, 352}, {0x12, 0x20, 0x81, 0xff}}}, +}; + +// 0x07003EB0 - 0x07003EE0 +static const Vtx intro_seg7_vertex_07003EB0[] = { + {{{ -551, 5, 115}, 0, { 352, 352}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ -510, 5, 132}, 0, { 352, 352}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ -544, 74, 81}, 0, { 320, 352}, {0x12, 0x20, 0x81, 0xff}}}, +}; + +// 0x07003EE0 - 0x07003F10 +static const Vtx intro_seg7_vertex_07003EE0[] = { + {{{ -510, 5, 132}, 0, { 352, 352}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ -551, 5, 115}, 0, { 352, 352}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ -574, -5, 139}, 0, { 352, 352}, {0x12, 0x20, 0x81, 0xff}}}, +}; + +// 0x07003F10 - 0x07003F40 +static const Vtx intro_seg7_vertex_07003F10[] = { + {{{ -574, -5, 139}, 0, { 352, 352}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -551, 5, 115}, 0, { 352, 352}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -575, 61, 98}, 0, { 320, 352}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07003F40 - 0x07003F70 +static const Vtx intro_seg7_vertex_07003F40[] = { + {{{ -575, 61, 98}, 0, { 320, 352}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -551, 5, 115}, 0, { 352, 352}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -544, 74, 81}, 0, { 320, 352}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07003F70 - 0x07003FC0 +static const Vtx intro_seg7_vertex_07003F70[] = { + {{{ -868, -118, 188}, 0, { 416, 448}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -664, -64, 156}, 0, { 384, 384}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -850, -86, 187}, 0, { 384, 416}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -574, -5, 139}, 0, { 352, 352}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -663, -45, 157}, 0, { 384, 384}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07003FC0 - 0x07004010 +static const Vtx intro_seg7_vertex_07003FC0[] = { + {{{ -583, -130, 213}, 0, { 416, 352}, {0x13, 0x50, 0x8c, 0xff}}}, + {{{ -637, -46, 163}, 0, { 384, 384}, {0x13, 0x50, 0x8c, 0xff}}}, + {{{ -663, -45, 157}, 0, { 384, 384}, {0x13, 0x50, 0x8c, 0xff}}}, + {{{ -594, -160, 213}, 0, { 416, 384}, {0x13, 0x50, 0x8c, 0xff}}}, + {{{ -664, -64, 156}, 0, { 384, 384}, {0x13, 0x50, 0x8c, 0xff}}}, +}; + +// 0x07004010 - 0x07004050 +static const Vtx intro_seg7_vertex_07004010[] = { + {{{ -637, -46, 163}, 0, { 384, 384}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ -510, 5, 132}, 0, { 352, 352}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ -574, -5, 139}, 0, { 352, 352}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ -663, -45, 157}, 0, { 384, 384}, {0x12, 0x20, 0x81, 0xff}}}, +}; + +// 0x07004050 - 0x07004090 +static const Vtx intro_seg7_vertex_07004050[] = { + {{{ -864, 48, 90}, 0, { 320, 416}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ -844, 36, 114}, 0, { 352, 416}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ -762, 61, 82}, 0, { 320, 416}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ -748, 54, 94}, 0, { 320, 384}, {0x16, 0x27, 0x9e, 0xff}}}, +}; + +// 0x07004090 - 0x070040D0 +static const Vtx intro_seg7_vertex_07004090[] = { + {{{ -844, 36, 114}, 0, { 352, 416}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ -575, 61, 98}, 0, { 320, 352}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ -748, 54, 94}, 0, { 320, 384}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ -544, 74, 81}, 0, { 320, 352}, {0x16, 0x27, 0x9e, 0xff}}}, +}; + +// 0x070040D0 - 0x07004110 +static const Vtx intro_seg7_vertex_070040D0[] = { + {{{ -733, 215, -8}, 0, { 288, 384}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ -716, 209, 10}, 0, { 288, 384}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ -623, 210, -5}, 0, { 288, 352}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ -642, 211, 9}, 0, { 288, 352}, {0x16, 0x27, 0x9e, 0xff}}}, +}; + +// 0x07004110 - 0x07004150 +static const Vtx intro_seg7_vertex_07004110[] = { + {{{ -619, 175, 31}, 0, { 288, 352}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -613, 195, 3}, 0, { 288, 352}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -642, 211, 9}, 0, { 288, 352}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -623, 210, -5}, 0, { 288, 352}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07004150 - 0x07004190 +static const Vtx intro_seg7_vertex_07004150[] = { + {{{ -619, 175, 31}, 0, { 288, 352}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ -521, 175, 31}, 0, { 288, 352}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ -613, 195, 3}, 0, { 288, 352}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ -557, 199, 1}, 0, { 288, 352}, {0x16, 0x27, 0x9e, 0xff}}}, +}; + +// 0x07004190 - 0x070041C0 +static const Vtx intro_seg7_vertex_07004190[] = { + {{{ -557, 199, 1}, 0, { 288, 352}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ -521, 175, 31}, 0, { 288, 352}, {0x12, 0x20, 0x81, 0xff}}}, + {{{ -505, 240, -8}, 0, { 256, 320}, {0x12, 0x20, 0x81, 0xff}}}, +}; + +// 0x070041C0 - 0x070041F0 +static const Vtx intro_seg7_vertex_070041C0[] = { + {{{ -623, 210, -5}, 0, { 288, 352}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ -613, 195, 3}, 0, { 288, 352}, {0x16, 0x27, 0x9e, 0xff}}}, + {{{ -557, 199, 1}, 0, { 288, 352}, {0x16, 0x27, 0x9e, 0xff}}}, +}; + +// 0x070041F0 - 0x07004250 +static const Vtx intro_seg7_vertex_070041F0[] = { + {{{ -772, 213, -9}, 0, { 288, 416}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -733, 215, -8}, 0, { 288, 384}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -745, 243, -9}, 0, { 256, 384}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -623, 210, -5}, 0, { 288, 352}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -505, 240, -8}, 0, { 256, 320}, {0x20, 0x39, 0xe5, 0xff}}}, + {{{ -557, 199, 1}, 0, { 288, 352}, {0x20, 0x39, 0xe5, 0xff}}}, +}; + +// 0x07004250 - 0x07004290 +static const Vtx intro_seg7_vertex_07004250[] = { + {{{ -762, 384, -108}, 0, { 192, 384}, {0x10, 0x1c, 0x73, 0xff}}}, + {{{ -772, 213, -9}, 0, { 288, 416}, {0x10, 0x1c, 0x73, 0xff}}}, + {{{ -743, 372, -86}, 0, { 224, 384}, {0x10, 0x1c, 0x73, 0xff}}}, + {{{ -745, 243, -9}, 0, { 256, 384}, {0x10, 0x1c, 0x73, 0xff}}}, +}; + +// 0x07004290 - 0x070042D0 +static const Vtx intro_seg7_vertex_07004290[] = { + {{{ -733, 215, -8}, 0, { 288, 384}, {0x10, 0x73, 0x73, 0xff}}}, + {{{ -762, 61, 82}, 0, { 320, 416}, {0x10, 0x73, 0x73, 0xff}}}, + {{{ -716, 209, 10}, 0, { 288, 384}, {0x10, 0x73, 0x73, 0xff}}}, + {{{ -735, 79, 88}, 0, { 320, 384}, {0x10, 0x73, 0x73, 0xff}}}, +}; + +// 0x070042D0 - 0x07004310 +static const Vtx intro_seg7_vertex_070042D0[] = { + {{{ -868, -118, 188}, 0, { 416, 448}, {0x10, 0x73, 0x73, 0xff}}}, + {{{ -850, -86, 187}, 0, { 384, 416}, {0x10, 0x73, 0x73, 0xff}}}, + {{{ -864, 48, 90}, 0, { 320, 416}, {0x10, 0x73, 0x73, 0xff}}}, + {{{ -844, 36, 114}, 0, { 352, 416}, {0x10, 0x73, 0x73, 0xff}}}, +}; + +// 0x07004310 - 0x070043F0 +static const Vtx intro_seg7_vertex_07004310[] = { + {{{ -735, 79, 88}, 0, { 320, 384}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ -514, 102, 74}, 0, { 320, 352}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ -716, 209, 10}, 0, { 288, 384}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ -510, 5, 132}, 0, { 352, 352}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ -352, 159, 40}, 0, { 288, 288}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ -416, 170, 33}, 0, { 288, 320}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ -521, 175, 31}, 0, { 288, 352}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ -619, 175, 31}, 0, { 288, 352}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ -642, 211, 9}, 0, { 288, 352}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ -637, -46, 163}, 0, { 384, 384}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ -583, -130, 213}, 0, { 416, 352}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ -405, -91, 190}, 0, { 384, 320}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ -366, 340, -67}, 0, { 224, 288}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ -505, 240, -8}, 0, { 256, 320}, {0x65, 0x7f, 0xff, 0xff}}}, +}; + +// 0x070043F0 - 0x07004430 +static const Vtx intro_seg7_vertex_070043F0[] = { + {{{ -743, 372, -86}, 0, { 224, 384}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ -745, 243, -9}, 0, { 256, 384}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ -366, 340, -67}, 0, { 224, 288}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ -505, 240, -8}, 0, { 256, 320}, {0x65, 0x7f, 0xff, 0xff}}}, +}; + +// 0x07004430 - 0x07004470 +static const Vtx intro_seg7_vertex_07004430[] = { + {{{ -850, -86, 187}, 0, { 384, 416}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ -574, -5, 139}, 0, { 352, 352}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ -844, 36, 114}, 0, { 352, 416}, {0x65, 0x7f, 0xff, 0xff}}}, + {{{ -575, 61, 98}, 0, { 320, 352}, {0x65, 0x7f, 0xff, 0xff}}}, +}; + +// 0x07004470 - 0x070044B0 +static const Vtx intro_seg7_vertex_07004470[] = { + {{{ 589, 669, -648}, 0, { -1408, -640}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 589, 815, -404}, 0, { -1408, -640}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 593, 630, -624}, 0, { -1344, -608}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 593, 775, -380}, 0, { -1344, -608}, {0xc0, 0xc0, 0xc0, 0xff}}}, +}; + +// 0x070044B0 - 0x070044F0 +static const Vtx intro_seg7_vertex_070044B0[] = { + {{{ 425, 820, -407}, 0, { -1536, -416}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 589, 815, -404}, 0, { -1408, -640}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 425, 674, -651}, 0, { -1536, -416}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 589, 669, -648}, 0, { -1408, -640}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x070044F0 - 0x07004530 +static const Vtx intro_seg7_vertex_070044F0[] = { + {{{ 681, 636, -628}, 0, { -1280, -768}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 681, 781, -384}, 0, { -1280, -768}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 669, 486, -538}, 0, { -1024, -608}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 669, 631, -295}, 0, { -1024, -608}, {0xc0, 0xc0, 0xc0, 0xff}}}, +}; + +// 0x07004530 - 0x07004570 +static const Vtx intro_seg7_vertex_07004530[] = { + {{{ 593, 630, -624}, 0, { -1344, -608}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 593, 775, -380}, 0, { -1344, -608}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 681, 636, -628}, 0, { -1280, -768}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 681, 781, -384}, 0, { -1280, -768}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07004570 - 0x070045B0 +static const Vtx intro_seg7_vertex_07004570[] = { + {{{ 669, 631, -295}, 0, { -1024, -608}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 661, 633, -296}, 0, { -1024, -608}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 669, 486, -538}, 0, { -1024, -608}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 660, 488, -540}, 0, { -1024, -608}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x070045B0 - 0x070045F0 +static const Vtx intro_seg7_vertex_070045B0[] = { + {{{ 676, 438, -510}, 0, { -928, -576}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 676, 583, -267}, 0, { -928, -576}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 682, 308, -432}, 0, { -704, -480}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 682, 453, -190}, 0, { -704, -480}, {0xc0, 0xc0, 0xc0, 0xff}}}, +}; + +// 0x070045F0 - 0x07004630 +static const Vtx intro_seg7_vertex_070045F0[] = { + {{{ 671, 450, -517}, 0, { -960, -576}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 671, 595, -274}, 0, { -960, -576}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 661, 438, -510}, 0, { -960, -544}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 661, 583, -267}, 0, { -960, -544}, {0xc0, 0xc0, 0xc0, 0xff}}}, +}; + +// 0x07004630 - 0x07004670 +static const Vtx intro_seg7_vertex_07004630[] = { + {{{ 661, 583, -267}, 0, { -960, -544}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 676, 583, -267}, 0, { -928, -576}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 661, 438, -510}, 0, { -960, -544}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 676, 438, -510}, 0, { -928, -576}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07004670 - 0x070046B0 +static const Vtx intro_seg7_vertex_07004670[] = { + {{{ 660, 488, -540}, 0, { -1024, -608}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 661, 633, -296}, 0, { -1024, -608}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 671, 450, -517}, 0, { -960, -576}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 671, 595, -274}, 0, { -960, -576}, {0xc0, 0xc0, 0xc0, 0xff}}}, +}; + +// 0x070046B0 - 0x070046F0 +static const Vtx intro_seg7_vertex_070046B0[] = { + {{{ 655, 304, -429}, 0, { -736, -416}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 655, 448, -187}, 0, { -736, -416}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 672, 208, -372}, 0, { -544, -352}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 672, 352, -130}, 0, { -544, -352}, {0xc0, 0xc0, 0xc0, 0xff}}}, +}; + +// 0x070046F0 - 0x07004730 +static const Vtx intro_seg7_vertex_070046F0[] = { + {{{ 682, 308, -432}, 0, { -704, -480}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ 682, 453, -190}, 0, { -704, -480}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ 655, 304, -429}, 0, { -736, -416}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ 655, 448, -187}, 0, { -736, -416}, {0x95, 0x95, 0x95, 0xff}}}, +}; + +// 0x07004730 - 0x07004770 +static const Vtx intro_seg7_vertex_07004730[] = { + {{{ 672, 208, -372}, 0, { -544, -352}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ 672, 352, -130}, 0, { -544, -352}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ 469, 206, -371}, 0, { -704, -64}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ 469, 350, -129}, 0, { -704, -64}, {0x95, 0x95, 0x95, 0xff}}}, +}; + +// 0x07004770 - 0x070047B0 +static const Vtx intro_seg7_vertex_07004770[] = { + {{{ 469, 206, -371}, 0, { -704, -64}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ 469, 350, -129}, 0, { -704, -64}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ 357, 206, -371}, 0, { -800, 64}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ 356, 350, -129}, 0, { -800, 64}, {0x95, 0x95, 0x95, 0xff}}}, +}; + +// 0x070047B0 - 0x070047F0 +static const Vtx intro_seg7_vertex_070047B0[] = { + {{{ 357, 206, -371}, 0, { -800, 64}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 356, 350, -129}, 0, { -800, 64}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 353, 189, -361}, 0, { -768, 96}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 353, 333, -119}, 0, { -768, 96}, {0xc0, 0xc0, 0xc0, 0xff}}}, +}; + +// 0x070047F0 - 0x07004830 +static const Vtx intro_seg7_vertex_070047F0[] = { + {{{ 246, 468, -528}, 0, { -1312, 0}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ 222, 615, -286}, 0, { -1344, 32}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ 222, 471, -529}, 0, { -1344, 32}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ 246, 613, -285}, 0, { -1344, 0}, {0x95, 0x95, 0x95, 0xff}}}, +}; + +// 0x07004830 - 0x07004870 +static const Vtx intro_seg7_vertex_07004830[] = { + {{{ 222, 471, -529}, 0, { -1344, 32}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 222, 615, -286}, 0, { -1344, 32}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 228, 597, -604}, 0, { -1568, -64}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 228, 742, -361}, 0, { -1568, -64}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07004870 - 0x070048B0 +static const Vtx intro_seg7_vertex_07004870[] = { + {{{ 353, 333, -119}, 0, { -768, 96}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 114, 399, -158}, 0, { -1056, 384}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 353, 189, -361}, 0, { -768, 96}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 114, 255, -400}, 0, { -1056, 384}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x070048B0 - 0x070048F0 +static const Vtx intro_seg7_vertex_070048B0[] = { + {{{ 114, 399, -158}, 0, { -1056, 384}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 240, 583, -267}, 0, { -1280, 32}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 114, 255, -400}, 0, { -1056, 384}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 240, 439, -510}, 0, { -1280, 32}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x070048F0 - 0x07004930 +static const Vtx intro_seg7_vertex_070048F0[] = { + {{{ 240, 439, -510}, 0, { -1280, 32}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 240, 583, -267}, 0, { -1280, 32}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 246, 468, -528}, 0, { -1312, 0}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 246, 613, -285}, 0, { -1344, 0}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07004930 - 0x07004970 +static const Vtx intro_seg7_vertex_07004930[] = { + {{{ 228, 597, -604}, 0, { -1568, -64}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 228, 742, -361}, 0, { -1568, -64}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 265, 600, -606}, 0, { -1536, -96}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 265, 745, -363}, 0, { -1536, -96}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07004970 - 0x070049B0 +static const Vtx intro_seg7_vertex_07004970[] = { + {{{ 265, 745, -363}, 0, { -1536, -96}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 246, 778, -382}, 0, { -1600, -96}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 265, 600, -606}, 0, { -1536, -96}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 246, 633, -626}, 0, { -1600, -96}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x070049B0 - 0x070049F0 +static const Vtx intro_seg7_vertex_070049B0[] = { + {{{ 246, 633, -626}, 0, { -1600, -96}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 246, 778, -382}, 0, { -1600, -96}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 425, 674, -651}, 0, { -1536, -416}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 425, 820, -407}, 0, { -1536, -416}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x070049F0 - 0x07004A30 +static const Vtx intro_seg7_vertex_070049F0[] = { + {{{ 178, 718, -677}, 0, { -1792, -96}, {0x60, 0x60, 0x60, 0xff}}}, + {{{ 178, 864, -433}, 0, { -1792, -96}, {0x60, 0x60, 0x60, 0xff}}}, + {{{ 308, 621, -619}, 0, { -1536, -192}, {0x60, 0x60, 0x60, 0xff}}}, + {{{ 308, 766, -375}, 0, { -1536, -192}, {0x60, 0x60, 0x60, 0xff}}}, +}; + +// 0x07004A30 - 0x07004A70 +static const Vtx intro_seg7_vertex_07004A30[] = { + {{{ 220, 521, -559}, 0, { -1440, 0}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 220, 666, -316}, 0, { -1440, 0}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 61, 582, -596}, 0, { -1664, 192}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 61, 727, -352}, 0, { -1664, 192}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07004A70 - 0x07004AB0 +static const Vtx intro_seg7_vertex_07004A70[] = { + {{{ 308, 766, -375}, 0, { -1536, -192}, {0xd1, 0xd1, 0xd1, 0xff}}}, + {{{ 220, 666, -316}, 0, { -1440, 0}, {0xd1, 0xd1, 0xd1, 0xff}}}, + {{{ 308, 621, -619}, 0, { -1536, -192}, {0xd1, 0xd1, 0xd1, 0xff}}}, + {{{ 220, 521, -559}, 0, { -1440, 0}, {0xd1, 0xd1, 0xd1, 0xff}}}, +}; + +// 0x07004AB0 - 0x07004AF0 +static const Vtx intro_seg7_vertex_07004AB0[] = { + {{{ 61, 582, -596}, 0, { -1664, 192}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 61, 727, -352}, 0, { -1664, 192}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 178, 718, -677}, 0, { -1792, -96}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 178, 864, -433}, 0, { -1792, -96}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07004AF0 - 0x07004B30 +static const Vtx intro_seg7_vertex_07004AF0[] = { + {{{ 132, 613, -614}, 0, { -1664, 32}, {0x60, 0x60, 0x60, 0xff}}}, + {{{ 132, 758, -370}, 0, { -1664, 32}, {0x60, 0x60, 0x60, 0xff}}}, + {{{ 266, 491, -541}, 0, { -1344, 0}, {0x60, 0x60, 0x60, 0xff}}}, + {{{ 266, 636, -298}, 0, { -1344, 0}, {0x60, 0x60, 0x60, 0xff}}}, +}; + +// 0x07004B30 - 0x07004B70 +static const Vtx intro_seg7_vertex_07004B30[] = { + {{{ 171, 386, -479}, 0, { -1248, 192}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 171, 531, -236}, 0, { -1248, 192}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 32, 463, -524}, 0, { -1472, 320}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 32, 607, -281}, 0, { -1472, 320}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07004B70 - 0x07004BB0 +static const Vtx intro_seg7_vertex_07004B70[] = { + {{{ 266, 636, -298}, 0, { -1344, 0}, {0xd1, 0xd1, 0xd1, 0xff}}}, + {{{ 171, 531, -236}, 0, { -1248, 192}, {0xd1, 0xd1, 0xd1, 0xff}}}, + {{{ 266, 491, -541}, 0, { -1344, 0}, {0xd1, 0xd1, 0xd1, 0xff}}}, + {{{ 171, 386, -479}, 0, { -1248, 192}, {0xd1, 0xd1, 0xd1, 0xff}}}, +}; + +// 0x07004BB0 - 0x07004BF0 +static const Vtx intro_seg7_vertex_07004BB0[] = { + {{{ 32, 463, -524}, 0, { -1472, 320}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 32, 607, -281}, 0, { -1472, 320}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 132, 613, -614}, 0, { -1664, 32}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 132, 758, -370}, 0, { -1664, 32}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07004BF0 - 0x07004C30 +static const Vtx intro_seg7_vertex_07004BF0[] = { + {{{ 83, 451, -517}, 0, { -1440, 256}, {0x60, 0x60, 0x60, 0xff}}}, + {{{ 83, 596, -274}, 0, { -1440, 256}, {0x60, 0x60, 0x60, 0xff}}}, + {{{ 256, 401, -487}, 0, { -1216, 64}, {0x60, 0x60, 0x60, 0xff}}}, + {{{ 256, 545, -245}, 0, { -1216, 64}, {0x60, 0x60, 0x60, 0xff}}}, +}; + +// 0x07004C30 - 0x07004C70 +static const Vtx intro_seg7_vertex_07004C30[] = { + {{{ 134, 192, -362}, 0, { -960, 416}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 134, 336, -121}, 0, { -960, 416}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -55, 321, -439}, 0, { -1312, 576}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -55, 465, -197}, 0, { -1312, 576}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07004C70 - 0x07004CB0 +static const Vtx intro_seg7_vertex_07004C70[] = { + {{{ 256, 545, -245}, 0, { -1216, 64}, {0xd1, 0xd1, 0xd1, 0xff}}}, + {{{ 134, 336, -121}, 0, { -960, 416}, {0xd1, 0xd1, 0xd1, 0xff}}}, + {{{ 256, 401, -487}, 0, { -1216, 64}, {0xd1, 0xd1, 0xd1, 0xff}}}, + {{{ 134, 192, -362}, 0, { -960, 416}, {0xd1, 0xd1, 0xd1, 0xff}}}, +}; + +// 0x07004CB0 - 0x07004CF0 +static const Vtx intro_seg7_vertex_07004CB0[] = { + {{{ -55, 321, -439}, 0, { -1312, 576}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -55, 465, -197}, 0, { -1312, 576}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 83, 451, -517}, 0, { -1440, 256}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 83, 596, -274}, 0, { -1440, 256}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07004CF0 - 0x07004D30 +static const Vtx intro_seg7_vertex_07004CF0[] = { + {{{ -362, 706, -670}, 0, { -2208, 704}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ -354, 779, -382}, 0, { -2080, 736}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ -355, 633, -626}, 0, { -2080, 736}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ -361, 851, -425}, 0, { -2208, 704}, {0xc0, 0xc0, 0xc0, 0xff}}}, +}; + +// 0x07004D30 - 0x07004D70 +static const Vtx intro_seg7_vertex_07004D30[] = { + {{{ -296, 215, -376}, 0, { -1312, 1024}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -292, 464, -197}, 0, { -1504, 928}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -293, 320, -439}, 0, { -1504, 928}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -295, 359, -134}, 0, { -1312, 1024}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07004D70 - 0x07004DB0 +static const Vtx intro_seg7_vertex_07004D70[] = { + {{{ -279, 640, -631}, 0, { -2016, 640}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -279, 785, -386}, 0, { -2016, 640}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -271, 695, -663}, 0, { -2112, 576}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -270, 840, -419}, 0, { -2112, 576}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07004DB0 - 0x07004E10 +static const Vtx intro_seg7_vertex_07004DB0[] = { + {{{ -326, 636, -628}, 0, { -2048, 704}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -355, 633, -626}, 0, { -2080, 736}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -336, 780, -383}, 0, { -2080, 704}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -279, 785, -386}, 0, { -2016, 640}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -279, 640, -631}, 0, { -2016, 640}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -354, 779, -382}, 0, { -2080, 736}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07004E10 - 0x07004E50 +static const Vtx intro_seg7_vertex_07004E10[] = { + {{{ 2, 630, -624}, 0, { -1792, 224}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 3, 775, -380}, 0, { -1792, 224}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 12, 317, -437}, 0, { -1248, 480}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 13, 461, -195}, 0, { -1248, 480}, {0xc0, 0xc0, 0xc0, 0xff}}}, +}; + +// 0x07004E50 - 0x07004E90 +static const Vtx intro_seg7_vertex_07004E50[] = { + {{{ -97, 694, -662}, 0, { -1984, 320}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ -97, 839, -418}, 0, { -1984, 320}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ -100, 633, -626}, 0, { -1888, 384}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ -99, 778, -382}, 0, { -1888, 384}, {0xc0, 0xc0, 0xc0, 0xff}}}, +}; + +// 0x07004E90 - 0x07004ED0 +static const Vtx intro_seg7_vertex_07004E90[] = { + {{{ -271, 695, -663}, 0, { -2112, 576}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -270, 840, -419}, 0, { -2112, 576}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -97, 694, -662}, 0, { -1984, 320}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -97, 839, -418}, 0, { -1984, 320}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07004ED0 - 0x07004F10 +static const Vtx intro_seg7_vertex_07004ED0[] = { + {{{ -100, 633, -626}, 0, { -1888, 384}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -99, 778, -382}, 0, { -1888, 384}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 2, 630, -624}, 0, { -1792, 224}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 3, 775, -380}, 0, { -1792, 224}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07004F10 - 0x07004F50 +static const Vtx intro_seg7_vertex_07004F10[] = { + {{{ -83, 314, -436}, 0, { -1312, 640}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ -82, 459, -193}, 0, { -1312, 640}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ -84, 210, -373}, 0, { -1152, 736}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ -83, 354, -131}, 0, { -1152, 736}, {0xc0, 0xc0, 0xc0, 0xff}}}, +}; + +// 0x07004F50 - 0x07004F90 +static const Vtx intro_seg7_vertex_07004F50[] = { + {{{ 13, 461, -195}, 0, { -1248, 480}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ -82, 459, -193}, 0, { -1312, 640}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ 12, 317, -437}, 0, { -1248, 480}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ -83, 314, -436}, 0, { -1312, 640}, {0x95, 0x95, 0x95, 0xff}}}, +}; + +// 0x07004F90 - 0x07004FD0 +static const Vtx intro_seg7_vertex_07004F90[] = { + {{{ -83, 354, -131}, 0, { -1152, 736}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ -295, 359, -134}, 0, { -1312, 1024}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ -84, 210, -373}, 0, { -1152, 736}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ -296, 215, -376}, 0, { -1312, 1024}, {0x95, 0x95, 0x95, 0xff}}}, +}; + +// 0x07004FD0 - 0x07005010 +static const Vtx intro_seg7_vertex_07004FD0[] = { + {{{ -576, 324, -441}, 0, { -1728, 1344}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ -580, 466, -197}, 0, { -1728, 1376}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ -581, 321, -440}, 0, { -1728, 1376}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ -576, 468, -199}, 0, { -1728, 1344}, {0x95, 0x95, 0x95, 0xff}}}, +}; + +// 0x07005010 - 0x07005050 +static const Vtx intro_seg7_vertex_07005010[] = { + {{{ -593, 222, -380}, 0, { -1568, 1472}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -592, 366, -139}, 0, { -1568, 1472}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -576, 324, -441}, 0, { -1728, 1344}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -576, 468, -199}, 0, { -1728, 1344}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005050 - 0x07005090 +static const Vtx intro_seg7_vertex_07005050[] = { + {{{ -292, 464, -197}, 0, { -1504, 928}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ -361, 478, -205}, 0, { -1568, 1024}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ -293, 320, -439}, 0, { -1504, 928}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ -364, 334, -447}, 0, { -1568, 1024}, {0x95, 0x95, 0x95, 0xff}}}, +}; + +// 0x07005090 - 0x070050D0 +static const Vtx intro_seg7_vertex_07005090[] = { + {{{ -357, 362, -136}, 0, { -1376, 1120}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ -592, 366, -139}, 0, { -1568, 1472}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ -357, 218, -378}, 0, { -1376, 1120}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ -593, 222, -380}, 0, { -1568, 1472}, {0x95, 0x95, 0x95, 0xff}}}, +}; + +// 0x070050D0 - 0x07005110 +static const Vtx intro_seg7_vertex_070050D0[] = { + {{{ -361, 478, -205}, 0, { -1568, 1024}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ -357, 362, -136}, 0, { -1376, 1120}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ -364, 334, -447}, 0, { -1568, 1024}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ -357, 218, -378}, 0, { -1376, 1120}, {0xc0, 0xc0, 0xc0, 0xff}}}, +}; + +// 0x07005110 - 0x07005150 +static const Vtx intro_seg7_vertex_07005110[] = { + {{{ -612, 506, -551}, 0, { -2048, 1248}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -612, 651, -307}, 0, { -2048, 1248}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -575, 643, -632}, 0, { -2272, 1056}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -574, 788, -388}, 0, { -2272, 1056}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005150 - 0x07005190 +static const Vtx intro_seg7_vertex_07005150[] = { + {{{ -642, 487, -539}, 0, { -2048, 1312}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -641, 632, -296}, 0, { -2048, 1312}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -604, 504, -549}, 0, { -2048, 1248}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -603, 649, -306}, 0, { -2048, 1216}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005190 - 0x070051D0 +static const Vtx intro_seg7_vertex_07005190[] = { + {{{ -580, 466, -197}, 0, { -1728, 1376}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -641, 632, -296}, 0, { -2048, 1312}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -581, 321, -440}, 0, { -1728, 1376}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -642, 487, -539}, 0, { -2048, 1312}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x070051D0 - 0x07005210 +static const Vtx intro_seg7_vertex_070051D0[] = { + {{{ -603, 649, -306}, 0, { -2048, 1216}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ -612, 651, -307}, 0, { -2048, 1248}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ -604, 504, -549}, 0, { -2048, 1248}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ -612, 506, -551}, 0, { -2048, 1248}, {0x95, 0x95, 0x95, 0xff}}}, +}; + +// 0x07005210 - 0x07005250 +static const Vtx intro_seg7_vertex_07005210[] = { + {{{ -542, 641, -631}, 0, { -2240, 1024}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -547, 803, -397}, 0, { -2272, 1024}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -548, 658, -641}, 0, { -2272, 1024}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -541, 786, -387}, 0, { -2240, 1024}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005250 - 0x07005290 +static const Vtx intro_seg7_vertex_07005250[] = { + {{{ -575, 643, -632}, 0, { -2272, 1056}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -574, 788, -388}, 0, { -2272, 1056}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -542, 641, -631}, 0, { -2240, 1024}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -541, 786, -387}, 0, { -2240, 1024}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005290 - 0x070052D0 +static const Vtx intro_seg7_vertex_07005290[] = { + {{{ -547, 803, -397}, 0, { -2272, 1024}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -361, 851, -425}, 0, { -2208, 704}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -548, 658, -641}, 0, { -2272, 1024}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -362, 706, -670}, 0, { -2208, 704}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x070052D0 - 0x07005310 +static const Vtx intro_seg7_vertex_070052D0[] = { + {{{ 593, 100, -307}, 0, { -448, -160}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 593, 243, -67}, 0, { -448, -160}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 644, 179, -355}, 0, { -512, -288}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 644, 322, -115}, 0, { -544, -288}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005310 - 0x07005350 +static const Vtx intro_seg7_vertex_07005310[] = { + {{{ 904, -92, -192}, 0, { 96, -448}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ 812, 77, 31}, 0, { 0, -320}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ 811, -65, -208}, 0, { 0, -320}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ 904, 50, 47}, 0, { 96, -448}, {0x95, 0x95, 0x95, 0xff}}}, +}; + +// 0x07005350 - 0x07005390 +static const Vtx intro_seg7_vertex_07005350[] = { + {{{ 833, 176, -353}, 0, { -384, -576}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 833, 319, -113}, 0, { -384, -576}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 817, 128, -324}, 0, { -320, -512}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 817, 271, -84}, 0, { -320, -512}, {0xc0, 0xc0, 0xc0, 0xff}}}, +}; + +// 0x07005390 - 0x070053D0 +static const Vtx intro_seg7_vertex_07005390[] = { + {{{ 644, 322, -115}, 0, { -544, -288}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 833, 176, -353}, 0, { -384, -576}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 644, 179, -355}, 0, { -512, -288}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 833, 319, -113}, 0, { -384, -576}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x070053D0 - 0x07005410 +static const Vtx intro_seg7_vertex_070053D0[] = { + {{{ 817, 271, -84}, 0, { -320, -512}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 952, 278, -88}, 0, { -224, -704}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 817, 128, -324}, 0, { -320, -512}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 952, 135, -328}, 0, { -224, -704}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005410 - 0x07005450 +static const Vtx intro_seg7_vertex_07005410[] = { + {{{ 952, 135, -328}, 0, { -224, -704}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 952, 278, -88}, 0, { -224, -704}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 904, -92, -192}, 0, { 96, -448}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 904, 50, 47}, 0, { 96, -448}, {0xc0, 0xc0, 0xc0, 0xff}}}, +}; + +// 0x07005450 - 0x07005490 +static const Vtx intro_seg7_vertex_07005450[] = { + {{{ 514, 174, -26}, 0, { -384, 0}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 593, 243, -67}, 0, { -448, -160}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 514, 31, -266}, 0, { -384, 0}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 593, 100, -307}, 0, { -448, -160}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005490 - 0x070054D0 +static const Vtx intro_seg7_vertex_07005490[] = { + {{{ 514, 174, -26}, 0, { -384, 0}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 514, 31, -266}, 0, { -384, 0}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 593, 42, 52}, 0, { -96, 0}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 593, -100, -187}, 0, { -96, 0}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x070054D0 - 0x07005510 +static const Vtx intro_seg7_vertex_070054D0[] = { + {{{ 593, -100, -187}, 0, { -96, 0}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 585, -125, -172}, 0, { -64, 32}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 593, 42, 52}, 0, { -96, 0}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 585, 17, 67}, 0, { -64, 32}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005510 - 0x07005550 +static const Vtx intro_seg7_vertex_07005510[] = { + {{{ 585, -125, -172}, 0, { -64, 32}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 444, -262, -90}, 0, { 32, 352}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 585, 17, 67}, 0, { -64, 32}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 444, -120, 149}, 0, { 32, 352}, {0x4a, 0x4a, 0x4a, 0x00}}}, +}; + +// 0x07005550 - 0x07005590 +static const Vtx intro_seg7_vertex_07005550[] = { + {{{ 444, -262, -90}, 0, { 32, 352}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 628, -353, -35}, 0, { 320, 192}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 444, -120, 149}, 0, { 32, 352}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 626, -211, 204}, 0, { 320, 192}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005590 - 0x070055D0 +static const Vtx intro_seg7_vertex_07005590[] = { + {{{ 678, -286, -75}, 0, { 256, 32}, {0xd1, 0xd1, 0xd1, 0xff}}}, + {{{ 678, -144, 164}, 0, { 256, 32}, {0xd1, 0xd1, 0xd1, 0xff}}}, + {{{ 628, -353, -35}, 0, { 320, 192}, {0xd1, 0xd1, 0xd1, 0xff}}}, + {{{ 626, -211, 204}, 0, { 320, 192}, {0xd1, 0xd1, 0xd1, 0xff}}}, +}; + +// 0x070055D0 - 0x07005610 +static const Vtx intro_seg7_vertex_070055D0[] = { + {{{ 678, -286, -75}, 0, { 256, 32}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 811, -381, -19}, 0, { 512, -32}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 678, -144, 164}, 0, { 256, 32}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 812, -238, 220}, 0, { 512, -32}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005610 - 0x07005650 +static const Vtx intro_seg7_vertex_07005610[] = { + {{{ 1041, -223, -114}, 0, { 448, -512}, {0xd1, 0xd1, 0xd1, 0xff}}}, + {{{ 1041, -80, 125}, 0, { 416, -512}, {0xd1, 0xd1, 0xd1, 0xff}}}, + {{{ 811, -381, -19}, 0, { 512, -32}, {0xd1, 0xd1, 0xd1, 0xff}}}, + {{{ 812, -238, 220}, 0, { 512, -32}, {0xd1, 0xd1, 0xd1, 0xff}}}, +}; + +// 0x07005650 - 0x07005690 +static const Vtx intro_seg7_vertex_07005650[] = { + {{{ 811, -123, -173}, 0, { 96, -256}, {0x5e, 0x5e, 0x5e, 0xff}}}, + {{{ 811, 18, 66}, 0, { 96, -256}, {0x5e, 0x5e, 0x5e, 0xff}}}, + {{{ 1041, -223, -114}, 0, { 448, -512}, {0x5e, 0x5e, 0x5e, 0xff}}}, + {{{ 1041, -80, 125}, 0, { 416, -512}, {0x5e, 0x5e, 0x5e, 0xff}}}, +}; + +// 0x07005690 - 0x070056D0 +static const Vtx intro_seg7_vertex_07005690[] = { + {{{ 812, 77, 31}, 0, { 0, -320}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 811, 18, 66}, 0, { 96, -256}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 811, -65, -208}, 0, { 0, -320}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 811, -123, -173}, 0, { 96, -256}, {0xc0, 0xc0, 0xc0, 0xff}}}, +}; + +// 0x070056D0 - 0x07005710 +static const Vtx intro_seg7_vertex_070056D0[] = { + {{{ 585, 1, -248}, 0, { -256, -32}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 528, 54, 44}, 0, { -160, 96}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 528, -88, -194}, 0, { -160, 96}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 585, 144, -8}, 0, { -288, -32}, {0xc0, 0xc0, 0xc0, 0xff}}}, +}; + +// 0x07005710 - 0x07005750 +static const Vtx intro_seg7_vertex_07005710[] = { + {{{ 528, -88, -194}, 0, { -160, 96}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 528, 54, 44}, 0, { -160, 96}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 579, -184, -137}, 0, { 0, 96}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 579, -41, 102}, 0, { 0, 96}, {0xc0, 0xc0, 0xc0, 0xff}}}, +}; + +// 0x07005750 - 0x07005790 +static const Vtx intro_seg7_vertex_07005750[] = { + {{{ 571, 149, -11}, 0, { -288, -32}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 585, 144, -8}, 0, { -288, -32}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 572, 7, -251}, 0, { -288, -32}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 585, 1, -248}, 0, { -256, -32}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005790 - 0x070057D0 +static const Vtx intro_seg7_vertex_07005790[] = { + {{{ 579, -41, 102}, 0, { 0, 96}, {0x9a, 0x9a, 0x9a, 0xff}}}, + {{{ 507, -59, 113}, 0, { 0, 224}, {0x9a, 0x9a, 0x9a, 0xff}}}, + {{{ 579, -184, -137}, 0, { 0, 96}, {0x9a, 0x9a, 0x9a, 0xff}}}, + {{{ 512, -201, -127}, 0, { 0, 224}, {0x9a, 0x9a, 0x9a, 0xff}}}, +}; + +// 0x070057D0 - 0x07005810 +static const Vtx intro_seg7_vertex_070057D0[] = { + {{{ 512, -201, -127}, 0, { 0, 224}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 507, -59, 113}, 0, { 0, 224}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 531, -310, -61}, 0, { 192, 288}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 531, -167, 178}, 0, { 192, 288}, {0xc0, 0xc0, 0xc0, 0xff}}}, +}; + +// 0x07005810 - 0x07005850 +static const Vtx intro_seg7_vertex_07005810[] = { + {{{ 531, -167, 178}, 0, { 192, 288}, {0x9a, 0x9a, 0x9a, 0xff}}}, + {{{ 170, -153, 169}, 0, { -96, 800}, {0x9a, 0x9a, 0x9a, 0xff}}}, + {{{ 531, -310, -61}, 0, { 192, 288}, {0x9a, 0x9a, 0x9a, 0xff}}}, + {{{ 170, -296, -70}, 0, { -96, 800}, {0x9a, 0x9a, 0x9a, 0xff}}}, +}; + +// 0x07005850 - 0x07005890 +static const Vtx intro_seg7_vertex_07005850[] = { + {{{ 170, -153, 169}, 0, { -96, 800}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 151, 276, -87}, 0, { -832, 448}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 170, -296, -70}, 0, { -96, 800}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 151, 133, -327}, 0, { -832, 448}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005890 - 0x070058D0 +static const Vtx intro_seg7_vertex_07005890[] = { + {{{ 151, 276, -87}, 0, { -832, 448}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 605, 348, -130}, 0, { -608, -256}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 151, 133, -327}, 0, { -832, 448}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 605, 205, -370}, 0, { -608, -256}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x070058D0 - 0x07005910 +static const Vtx intro_seg7_vertex_070058D0[] = { + {{{ 571, 149, -11}, 0, { -288, -32}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 572, 7, -251}, 0, { -288, -32}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 605, 205, -370}, 0, { -608, -256}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 605, 348, -130}, 0, { -608, -256}, {0xc0, 0xc0, 0xc0, 0xff}}}, +}; + +// 0x07005910 - 0x07005970 +static const Vtx intro_seg7_vertex_07005910[] = { + {{{ -789, 181, -29}, 0, { -1408, 1920}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -782, 384, -149}, 0, { -1760, 1728}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -789, 39, -268}, 0, { -1408, 1920}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -789, 39, -268}, 0, { -1408, 1920}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -782, 384, -149}, 0, { -1760, 1728}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -782, 242, -390}, 0, { -1760, 1728}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005970 - 0x070059B0 +static const Vtx intro_seg7_vertex_07005970[] = { + {{{ -303, 20, -257}, 0, { -992, 1216}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ -368, -147, 164}, 0, { -512, 1600}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ -368, -288, -72}, 0, { -512, 1600}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ -303, 162, -18}, 0, { -992, 1216}, {0xc0, 0xc0, 0xc0, 0xff}}}, +}; + +// 0x070059B0 - 0x070059F0 +static const Vtx intro_seg7_vertex_070059B0[] = { + {{{ -312, 205, -368}, 0, { -1312, 1056}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ -363, 173, -25}, 0, { -1056, 1312}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ -363, 31, -263}, 0, { -1056, 1312}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ -312, 348, -128}, 0, { -1312, 1056}, {0xc0, 0xc0, 0xc0, 0xff}}}, +}; + +// 0x070059F0 - 0x07005A30 +static const Vtx intro_seg7_vertex_070059F0[] = { + {{{ -363, 173, -25}, 0, { -1056, 1312}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -303, 162, -18}, 0, { -992, 1216}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -363, 31, -263}, 0, { -1056, 1312}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -303, 20, -257}, 0, { -992, 1216}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005A30 - 0x07005A60 +static const Vtx intro_seg7_vertex_07005A30[] = { + {{{ -782, 384, -149}, 0, { -1760, 1728}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -312, 348, -128}, 0, { -1312, 1056}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -782, 242, -390}, 0, { -1760, 1728}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005A60 - 0x07005A90 +static const Vtx intro_seg7_vertex_07005A60[] = { + {{{ -312, 348, -128}, 0, { -1312, 1056}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -312, 205, -368}, 0, { -1312, 1056}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -782, 242, -390}, 0, { -1760, 1728}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005A90 - 0x07005AF0 +static const Vtx intro_seg7_vertex_07005A90[] = { + {{{ -746, 185, -32}, 0, { -1376, 1856}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -756, 42, -270}, 0, { -1376, 1888}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -775, 51, 46}, 0, { -1184, 2016}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -777, -89, -192}, 0, { -1184, 2016}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -775, 51, 46}, 0, { -1184, 2016}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -756, 42, -270}, 0, { -1376, 1888}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005AF0 - 0x07005B50 +static const Vtx intro_seg7_vertex_07005AF0[] = { + {{{ -746, 185, -32}, 0, { -1376, 1856}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ -789, 181, -29}, 0, { -1408, 1920}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ -756, 42, -270}, 0, { -1376, 1888}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ -789, 39, -268}, 0, { -1408, 1920}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ -756, 42, -270}, 0, { -1376, 1888}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ -789, 181, -29}, 0, { -1408, 1920}, {0x95, 0x95, 0x95, 0xff}}}, +}; + +// 0x07005B50 - 0x07005B90 +static const Vtx intro_seg7_vertex_07005B50[] = { + {{{ -775, 51, 46}, 0, { -1184, 2016}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -777, -89, -192}, 0, { -1184, 2016}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -888, 45, 50}, 0, { -1248, 2176}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -890, -95, -188}, 0, { -1248, 2208}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005B90 - 0x07005BD0 +static const Vtx intro_seg7_vertex_07005B90[] = { + {{{ -888, 45, 50}, 0, { -1248, 2176}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -890, -95, -188}, 0, { -1248, 2208}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -900, -313, -57}, 0, { -896, 2400}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -898, -173, 180}, 0, { -896, 2400}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005BD0 - 0x07005C10 +static const Vtx intro_seg7_vertex_07005BD0[] = { + {{{ -604, -199, 194}, 0, { -608, 1984}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -667, -97, 135}, 0, { -832, 1984}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -604, -340, -41}, 0, { -608, 1984}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -668, -238, -102}, 0, { -832, 1984}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005C10 - 0x07005C50 +static const Vtx intro_seg7_vertex_07005C10[] = { + {{{ -667, -97, 135}, 0, { -832, 1984}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ -898, -173, 180}, 0, { -896, 2400}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ -668, -238, -102}, 0, { -832, 1984}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ -900, -313, -57}, 0, { -896, 2400}, {0x95, 0x95, 0x95, 0xff}}}, +}; + +// 0x07005C50 - 0x07005C90 +static const Vtx intro_seg7_vertex_07005C50[] = { + {{{ -368, -288, -72}, 0, { -512, 1600}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ -368, -147, 164}, 0, { -512, 1600}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ -604, -340, -41}, 0, { -608, 1984}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ -604, -199, 194}, 0, { -608, 1984}, {0xc0, 0xc0, 0xc0, 0xff}}}, +}; + +// 0x07005C90 - 0x07005CD0 +static const Vtx intro_seg7_vertex_07005C90[] = { + {{{ 101, -291, -73}, 0, { -160, 896}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ 101, -148, 166}, 0, { -160, 896}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ -182, -288, -75}, 0, { -384, 1312}, {0x95, 0x95, 0x95, 0xff}}}, + {{{ -182, -145, 164}, 0, { -384, 1312}, {0x95, 0x95, 0x95, 0xff}}}, +}; + +// 0x07005CD0 - 0x07005D10 +static const Vtx intro_seg7_vertex_07005CD0[] = { + {{{ -154, -231, -109}, 0, { -448, 1216}, {0xd1, 0xd1, 0xd1, 0xff}}}, + {{{ -276, -175, 182}, 0, { -416, 1472}, {0xd1, 0xd1, 0xd1, 0xff}}}, + {{{ -276, -318, -57}, 0, { -416, 1472}, {0xd1, 0xd1, 0xd1, 0xff}}}, + {{{ -151, -80, 125}, 0, { -480, 1216}, {0xd1, 0xd1, 0xd1, 0xff}}}, +}; + +// 0x07005D10 - 0x07005D50 +static const Vtx intro_seg7_vertex_07005D10[] = { + {{{ 164, 69, -289}, 0, { -704, 480}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 164, 212, -49}, 0, { -704, 480}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 101, -291, -73}, 0, { -160, 896}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 101, -148, 166}, 0, { -160, 896}, {0xc0, 0xc0, 0xc0, 0xff}}}, +}; + +// 0x07005D50 - 0x07005D90 +static const Vtx intro_seg7_vertex_07005D50[] = { + {{{ 95, 87, -299}, 0, { -800, 576}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 164, 212, -49}, 0, { -704, 480}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 164, 69, -289}, 0, { -704, 480}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 95, 230, -60}, 0, { -800, 576}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005D90 - 0x07005DD0 +static const Vtx intro_seg7_vertex_07005D90[] = { + {{{ 137, 295, -99}, 0, { -864, 448}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 95, 230, -60}, 0, { -800, 576}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 137, 153, -339}, 0, { -864, 448}, {0xc0, 0xc0, 0xc0, 0xff}}}, + {{{ 95, 87, -299}, 0, { -800, 576}, {0xc0, 0xc0, 0xc0, 0xff}}}, +}; + +// 0x07005DD0 - 0x07005E10 +static const Vtx intro_seg7_vertex_07005DD0[] = { + {{{ 137, 295, -99}, 0, { -864, 448}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 137, 153, -339}, 0, { -864, 448}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -100, 178, -354}, 0, { -1120, 768}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -100, 321, -114}, 0, { -1120, 768}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005E10 - 0x07005E50 +static const Vtx intro_seg7_vertex_07005E10[] = { + {{{ -121, 275, -87}, 0, { -1056, 864}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -100, 321, -114}, 0, { -1120, 768}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -100, 178, -354}, 0, { -1120, 768}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -121, 132, -326}, 0, { -1056, 864}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005E50 - 0x07005E90 +static const Vtx intro_seg7_vertex_07005E50[] = { + {{{ -226, 291, -96}, 0, { -1152, 992}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -121, 275, -87}, 0, { -1056, 864}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -121, 132, -326}, 0, { -1056, 864}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -226, 148, -336}, 0, { -1152, 992}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005E90 - 0x07005ED0 +static const Vtx intro_seg7_vertex_07005E90[] = { + {{{ -322, 124, 3}, 0, { -960, 1280}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -226, 291, -96}, 0, { -1152, 992}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -226, 148, -336}, 0, { -1152, 992}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -322, -18, -236}, 0, { -960, 1280}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005ED0 - 0x07005F10 +static const Vtx intro_seg7_vertex_07005ED0[] = { + {{{ -238, 118, 6}, 0, { -864, 1152}, {0xd1, 0xd1, 0xd1, 0xff}}}, + {{{ -322, 124, 3}, 0, { -960, 1280}, {0xd1, 0xd1, 0xd1, 0xff}}}, + {{{ -233, -16, -237}, 0, { -896, 1152}, {0xd1, 0xd1, 0xd1, 0xff}}}, + {{{ -322, -18, -236}, 0, { -960, 1280}, {0xd1, 0xd1, 0xd1, 0xff}}}, +}; + +// 0x07005F10 - 0x07005F50 +static const Vtx intro_seg7_vertex_07005F10[] = { + {{{ -396, 49, 48}, 0, { -864, 1472}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -238, 118, 6}, 0, { -864, 1152}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -233, -16, -237}, 0, { -896, 1152}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -396, -93, -191}, 0, { -864, 1472}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005F50 - 0x07005F90 +static const Vtx intro_seg7_vertex_07005F50[] = { + {{{ -276, -175, 182}, 0, { -416, 1472}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -396, 49, 48}, 0, { -864, 1472}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -396, -93, -191}, 0, { -864, 1472}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -276, -318, -57}, 0, { -416, 1472}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005F90 - 0x07005FD0 +static const Vtx intro_seg7_vertex_07005F90[] = { + {{{ -151, -80, 125}, 0, { -480, 1216}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -154, -231, -109}, 0, { -448, 1216}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -182, -145, 164}, 0, { -384, 1312}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -182, -288, -75}, 0, { -384, 1312}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07005FD0 - 0x07006010 +static const Vtx intro_seg7_vertex_07005FD0[] = { + {{{ -312, 348, -128}, 0, { -1312, 1056}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -782, 384, -149}, 0, { -1760, 1728}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -340, 348, -86}, 0, { -1312, 1120}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -762, 384, -108}, 0, { -1696, 1728}, {0x73, 0x73, 0x73, 0xff}}}, +}; + +// 0x07006010 - 0x07006050 +static const Vtx intro_seg7_vertex_07006010[] = { + {{{ -782, 384, -149}, 0, { -1760, 1728}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -789, 181, -29}, 0, { -1408, 1920}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -762, 384, -108}, 0, { -1696, 1728}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -772, 213, -9}, 0, { -1408, 1888}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07006050 - 0x07006090 +static const Vtx intro_seg7_vertex_07006050[] = { + {{{ -789, 181, -29}, 0, { -1408, 1920}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ -746, 185, -32}, 0, { -1376, 1856}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ -772, 213, -9}, 0, { -1408, 1888}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ -733, 215, -8}, 0, { -1408, 1824}, {0xf0, 0xf0, 0xf0, 0xff}}}, +}; + +// 0x07006090 - 0x070060D0 +static const Vtx intro_seg7_vertex_07006090[] = { + {{{ -733, 215, -8}, 0, { -1408, 1824}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -746, 185, -32}, 0, { -1376, 1856}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -762, 61, 82}, 0, { -1152, 2016}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -775, 51, 46}, 0, { -1184, 2016}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x070060D0 - 0x07006120 +static const Vtx intro_seg7_vertex_070060D0[] = { + {{{ -762, 61, 82}, 0, { -1152, 2016}, {0xff, 0xff, 0xff, 0x01}}}, + {{{ -775, 51, 46}, 0, { -1184, 2016}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -762, 61, 82}, 0, { -1152, 2016}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -864, 48, 90}, 0, { -1216, 2176}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -888, 45, 50}, 0, { -1248, 2176}, {0x73, 0x73, 0x73, 0xff}}}, +}; + +// 0x07006120 - 0x07006160 +static const Vtx intro_seg7_vertex_07006120[] = { + {{{ -898, -173, 180}, 0, { -896, 2400}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -868, -118, 188}, 0, { -928, 2336}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -888, 45, 50}, 0, { -1248, 2176}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -864, 48, 90}, 0, { -1216, 2176}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07006160 - 0x070061A0 +static const Vtx intro_seg7_vertex_07006160[] = { + {{{ -604, -199, 194}, 0, { -608, 1984}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ -368, -147, 164}, 0, { -512, 1600}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ -594, -160, 213}, 0, { -640, 1952}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ -388, -113, 185}, 0, { -576, 1600}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x070061A0 - 0x070061E0 +static const Vtx intro_seg7_vertex_070061A0[] = { + {{{ -303, 162, -18}, 0, { -992, 1216}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ -330, 165, 21}, 0, { -992, 1280}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ -368, -147, 164}, 0, { -512, 1600}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ -388, -113, 185}, 0, { -576, 1600}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x070061E0 - 0x07006220 +static const Vtx intro_seg7_vertex_070061E0[] = { + {{{ -392, 177, 14}, 0, { -1056, 1344}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -330, 165, 21}, 0, { -992, 1280}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -363, 173, -25}, 0, { -1056, 1312}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -303, 162, -18}, 0, { -992, 1216}, {0x73, 0x73, 0x73, 0xff}}}, +}; + +// 0x07006220 - 0x07006260 +static const Vtx intro_seg7_vertex_07006220[] = { + {{{ -312, 348, -128}, 0, { -1312, 1056}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ -340, 348, -86}, 0, { -1312, 1120}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ -363, 173, -25}, 0, { -1056, 1312}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ -392, 177, 14}, 0, { -1056, 1344}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x07006260 - 0x070062A0 +static const Vtx intro_seg7_vertex_07006260[] = { + {{{ -898, -173, 180}, 0, { -896, 2400}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ -667, -97, 135}, 0, { -832, 1984}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ -868, -118, 188}, 0, { -928, 2336}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ -664, -64, 156}, 0, { -864, 1984}, {0xf0, 0xf0, 0xf0, 0xff}}}, +}; + +// 0x070062A0 - 0x070062E0 +static const Vtx intro_seg7_vertex_070062A0[] = { + {{{ -664, -64, 156}, 0, { -864, 1984}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -667, -97, 135}, 0, { -832, 1984}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -594, -160, 213}, 0, { -640, 1952}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -604, -199, 194}, 0, { -608, 1984}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x070062E0 - 0x07006320 +static const Vtx intro_seg7_vertex_070062E0[] = { + {{{ 137, 295, -99}, 0, { -864, 448}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -100, 321, -114}, 0, { -1120, 768}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 98, 302, -60}, 0, { -896, 512}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -85, 319, -74}, 0, { -1056, 768}, {0x73, 0x73, 0x73, 0xff}}}, +}; + +// 0x07006320 - 0x07006360 +static const Vtx intro_seg7_vertex_07006320[] = { + {{{ -100, 321, -114}, 0, { -1120, 768}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -121, 275, -87}, 0, { -1056, 864}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -85, 319, -74}, 0, { -1056, 768}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -110, 272, -42}, 0, { -992, 864}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07006360 - 0x070063A0 +static const Vtx intro_seg7_vertex_07006360[] = { + {{{ 137, 295, -99}, 0, { -864, 448}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 98, 302, -60}, 0, { -896, 512}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 95, 230, -60}, 0, { -800, 576}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 59, 241, -21}, 0, { -800, 640}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x070063A0 - 0x070063E0 +static const Vtx intro_seg7_vertex_070063A0[] = { + {{{ 59, 241, -21}, 0, { -800, 640}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 144, 218, -12}, 0, { -704, 512}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 95, 230, -60}, 0, { -800, 576}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 164, 212, -49}, 0, { -704, 480}, {0x73, 0x73, 0x73, 0xff}}}, +}; + +// 0x070063E0 - 0x07006420 +static const Vtx intro_seg7_vertex_070063E0[] = { + {{{ 101, -148, 166}, 0, { -160, 896}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 164, 212, -49}, 0, { -704, 480}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 82, -110, 183}, 0, { -192, 896}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 144, 218, -12}, 0, { -704, 512}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x07006420 - 0x07006460 +static const Vtx intro_seg7_vertex_07006420[] = { + {{{ -182, -145, 164}, 0, { -384, 1312}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ 101, -148, 166}, 0, { -160, 896}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ -153, -107, 181}, 0, { -384, 1248}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ 82, -110, 183}, 0, { -192, 896}, {0xf0, 0xf0, 0xf0, 0xff}}}, +}; + +// 0x07006460 - 0x070064A0 +static const Vtx intro_seg7_vertex_07006460[] = { + {{{ -133, -29, 132}, 0, { -512, 1152}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -151, -80, 125}, 0, { -480, 1216}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -153, -107, 181}, 0, { -384, 1248}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -182, -145, 164}, 0, { -384, 1312}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x070064A0 - 0x070064E0 +static const Vtx intro_seg7_vertex_070064A0[] = { + {{{ -133, -29, 132}, 0, { -512, 1152}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ -269, -128, 192}, 0, { -448, 1440}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ -151, -80, 125}, 0, { -480, 1216}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ -276, -175, 182}, 0, { -416, 1472}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x070064E0 - 0x07006520 +static const Vtx intro_seg7_vertex_070064E0[] = { + {{{ -366, 60, 81}, 0, { -832, 1408}, {0x7d, 0x7d, 0x7d, 0xff}}}, + {{{ -396, 49, 48}, 0, { -864, 1472}, {0x7d, 0x7d, 0x7d, 0xff}}}, + {{{ -269, -128, 192}, 0, { -448, 1440}, {0x7d, 0x7d, 0x7d, 0xff}}}, + {{{ -276, -175, 182}, 0, { -416, 1472}, {0x7d, 0x7d, 0x7d, 0xff}}}, +}; + +// 0x07006520 - 0x07006560 +static const Vtx intro_seg7_vertex_07006520[] = { + {{{ -190, 150, 28}, 0, { -864, 1088}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -238, 118, 6}, 0, { -864, 1152}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -366, 60, 81}, 0, { -832, 1408}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -396, 49, 48}, 0, { -864, 1472}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07006560 - 0x070065A0 +static const Vtx intro_seg7_vertex_07006560[] = { + {{{ -190, 150, 28}, 0, { -864, 1088}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ -290, 156, 24}, 0, { -960, 1216}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ -238, 118, 6}, 0, { -864, 1152}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ -322, 124, 3}, 0, { -960, 1280}, {0xf0, 0xf0, 0xf0, 0xff}}}, +}; + +// 0x070065A0 - 0x070065E0 +static const Vtx intro_seg7_vertex_070065A0[] = { + {{{ -213, 286, -51}, 0, { -1120, 992}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -226, 291, -96}, 0, { -1152, 992}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -290, 156, 24}, 0, { -960, 1216}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -322, 124, 3}, 0, { -960, 1280}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x070065E0 - 0x07006620 +static const Vtx intro_seg7_vertex_070065E0[] = { + {{{ -110, 272, -42}, 0, { -992, 864}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -121, 275, -87}, 0, { -1056, 864}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -213, 286, -51}, 0, { -1120, 992}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -226, 291, -96}, 0, { -1152, 992}, {0x73, 0x73, 0x73, 0xff}}}, +}; + +// 0x07006620 - 0x07006660 +static const Vtx intro_seg7_vertex_07006620[] = { + {{{ 605, 348, -130}, 0, { -608, -256}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 151, 276, -87}, 0, { -832, 448}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 578, 342, -86}, 0, { -576, -192}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 175, 281, -51}, 0, { -800, 416}, {0x73, 0x73, 0x73, 0xff}}}, +}; + +// 0x07006660 - 0x070066A0 +static const Vtx intro_seg7_vertex_07006660[] = { + {{{ 175, 281, -51}, 0, { -800, 416}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 151, 276, -87}, 0, { -832, 448}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 191, -117, 186}, 0, { -96, 768}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 170, -153, 169}, 0, { -96, 800}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x070066A0 - 0x070066E0 +static const Vtx intro_seg7_vertex_070066A0[] = { + {{{ 531, -167, 178}, 0, { 192, 288}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ 499, -126, 196}, 0, { 128, 320}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ 170, -153, 169}, 0, { -96, 800}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ 191, -117, 186}, 0, { -96, 768}, {0xf0, 0xf0, 0xf0, 0xff}}}, +}; + +// 0x070066E0 - 0x07006720 +static const Vtx intro_seg7_vertex_070066E0[] = { + {{{ 480, -27, 130}, 0, { -32, 256}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 507, -59, 113}, 0, { 0, 224}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 499, -126, 196}, 0, { 128, 320}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 531, -167, 178}, 0, { 192, 288}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x07006720 - 0x07006760 +static const Vtx intro_seg7_vertex_07006720[] = { + {{{ 579, -41, 102}, 0, { 0, 96}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 507, -59, 113}, 0, { 0, 224}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 545, -8, 124}, 0, { 0, 128}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 480, -27, 130}, 0, { -32, 256}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x07006760 - 0x070067A0 +static const Vtx intro_seg7_vertex_07006760[] = { + {{{ 579, -41, 102}, 0, { 0, 96}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 528, 54, 44}, 0, { -160, 96}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 545, -8, 124}, 0, { 0, 128}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 494, 73, 70}, 0, { -192, 128}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x070067A0 - 0x070067E0 +static const Vtx intro_seg7_vertex_070067A0[] = { + {{{ 585, 144, -8}, 0, { -288, -32}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 552, 151, 28}, 0, { -288, 0}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 528, 54, 44}, 0, { -160, 96}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 494, 73, 70}, 0, { -192, 128}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x070067E0 - 0x07006820 +static const Vtx intro_seg7_vertex_070067E0[] = { + {{{ 585, 144, -8}, 0, { -288, -32}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 552, 151, 28}, 0, { -288, 0}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 571, 149, -11}, 0, { -288, -32}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 551, 176, 13}, 0, { -320, 0}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x07006820 - 0x07006860 +static const Vtx intro_seg7_vertex_07006820[] = { + {{{ 605, 348, -130}, 0, { -608, -256}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 578, 342, -86}, 0, { -576, -192}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 571, 149, -11}, 0, { -288, -32}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 551, 176, 13}, 0, { -320, 0}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x07006860 - 0x070068A0 +static const Vtx intro_seg7_vertex_07006860[] = { + {{{ 952, 278, -88}, 0, { -224, -704}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 817, 271, -84}, 0, { -320, -512}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 930, 277, -49}, 0, { -192, -672}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 790, 270, -45}, 0, { -288, -448}, {0x73, 0x73, 0x73, 0xff}}}, +}; + +// 0x070068A0 - 0x070068E0 +static const Vtx intro_seg7_vertex_070068A0[] = { + {{{ 833, 319, -113}, 0, { -384, -576}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 806, 317, -73}, 0, { -352, -512}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 817, 271, -84}, 0, { -320, -512}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 790, 270, -45}, 0, { -288, -448}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x070068E0 - 0x07006920 +static const Vtx intro_seg7_vertex_070068E0[] = { + {{{ 833, 319, -113}, 0, { -384, -576}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 644, 322, -115}, 0, { -544, -288}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 806, 317, -73}, 0, { -352, -512}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 658, 317, -73}, 0, { -480, -288}, {0x73, 0x73, 0x73, 0xff}}}, +}; + +// 0x07006920 - 0x07006960 +static const Vtx intro_seg7_vertex_07006920[] = { + {{{ 644, 322, -115}, 0, { -544, -288}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 593, 243, -67}, 0, { -448, -160}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 658, 317, -73}, 0, { -480, -288}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 619, 247, -31}, 0, { -384, -160}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07006960 - 0x070069A0 +static const Vtx intro_seg7_vertex_07006960[] = { + {{{ 514, 174, -26}, 0, { -384, 0}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 541, 186, 5}, 0, { -352, 0}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 593, 243, -67}, 0, { -448, -160}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 619, 247, -31}, 0, { -384, -160}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x070069A0 - 0x070069E0 +static const Vtx intro_seg7_vertex_070069A0[] = { + {{{ 514, 174, -26}, 0, { -384, 0}, {0x80, 0x80, 0x80, 0xff}}}, + {{{ 593, 42, 52}, 0, { -96, 0}, {0x80, 0x80, 0x80, 0xff}}}, + {{{ 541, 186, 5}, 0, { -352, 0}, {0x80, 0x80, 0x80, 0xff}}}, + {{{ 611, 67, 74}, 0, { -96, 0}, {0x80, 0x80, 0x80, 0xff}}}, +}; + +// 0x070069E0 - 0x07006A20 +static const Vtx intro_seg7_vertex_070069E0[] = { + {{{ 611, 67, 74}, 0, { -96, 0}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 593, 42, 52}, 0, { -96, 0}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 610, 30, 96}, 0, { -32, 0}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 585, 17, 67}, 0, { -64, 32}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07006A20 - 0x07006A60 +static const Vtx intro_seg7_vertex_07006A20[] = { + {{{ 610, 30, 96}, 0, { -32, 0}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 585, 17, 67}, 0, { -64, 32}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 482, -98, 173}, 0, { 64, 320}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 444, -120, 149}, 0, { 32, 352}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07006A60 - 0x07006AA0 +static const Vtx intro_seg7_vertex_07006A60[] = { + {{{ 444, -120, 149}, 0, { 32, 352}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 626, -211, 204}, 0, { 320, 192}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 482, -98, 173}, 0, { 64, 320}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 619, -170, 215}, 0, { 288, 160}, {0x73, 0x73, 0x73, 0xff}}}, +}; + +// 0x07006AA0 - 0x07006AE0 +static const Vtx intro_seg7_vertex_07006AA0[] = { + {{{ 668, -97, 172}, 0, { 192, 32}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 619, -170, 215}, 0, { 288, 160}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 678, -144, 164}, 0, { 256, 32}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 626, -211, 204}, 0, { 320, 192}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x07006AE0 - 0x07006B20 +static const Vtx intro_seg7_vertex_07006AE0[] = { + {{{ 668, -97, 172}, 0, { 192, 32}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 678, -144, 164}, 0, { 256, 32}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 810, -196, 234}, 0, { 480, -64}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 812, -238, 220}, 0, { 512, -32}, {0x73, 0x73, 0x73, 0xff}}}, +}; + +// 0x07006B20 - 0x07006B60 +static const Vtx intro_seg7_vertex_07006B20[] = { + {{{ 1041, -80, 125}, 0, { 416, -512}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 994, -64, 156}, 0, { 384, -448}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 812, -238, 220}, 0, { 512, -32}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 810, -196, 234}, 0, { 480, -64}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x07006B60 - 0x07006BA0 +static const Vtx intro_seg7_vertex_07006B60[] = { + {{{ 1041, -80, 125}, 0, { 416, -512}, {0xbb, 0xbb, 0xbb, 0xff}}}, + {{{ 811, 18, 66}, 0, { 96, -256}, {0xbb, 0xbb, 0xbb, 0xff}}}, + {{{ 994, -64, 156}, 0, { 384, -448}, {0xbb, 0xbb, 0xbb, 0xff}}}, + {{{ 789, 26, 98}, 0, { 96, -224}, {0xbb, 0xbb, 0xbb, 0xff}}}, +}; + +// 0x07006BA0 - 0x07006BE0 +static const Vtx intro_seg7_vertex_07006BA0[] = { + {{{ 786, 118, 44}, 0, { -32, -320}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 789, 26, 98}, 0, { 96, -224}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 812, 77, 31}, 0, { 0, -320}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 811, 18, 66}, 0, { 96, -256}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x07006BE0 - 0x07006C20 +static const Vtx intro_seg7_vertex_07006BE0[] = { + {{{ 786, 118, 44}, 0, { -32, -320}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ 812, 77, 31}, 0, { 0, -320}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ 887, 92, 62}, 0, { 64, -416}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ 904, 50, 47}, 0, { 96, -448}, {0xf0, 0xf0, 0xf0, 0xff}}}, +}; + +// 0x07006C20 - 0x07006C60 +static const Vtx intro_seg7_vertex_07006C20[] = { + {{{ 952, 278, -88}, 0, { -224, -704}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 930, 277, -49}, 0, { -192, -672}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 904, 50, 47}, 0, { 96, -448}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 887, 92, 62}, 0, { 64, -416}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x07006C60 - 0x07006CA0 +static const Vtx intro_seg7_vertex_07006C60[] = { + {{{ -97, 839, -418}, 0, { -1984, 320}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -270, 840, -419}, 0, { -2112, 576}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -115, 837, -380}, 0, { -1952, 352}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -257, 840, -381}, 0, { -2080, 576}, {0x73, 0x73, 0x73, 0xff}}}, +}; + +// 0x07006CA0 - 0x07006CE0 +static const Vtx intro_seg7_vertex_07006CA0[] = { + {{{ -270, 840, -419}, 0, { -2112, 576}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -279, 785, -386}, 0, { -2016, 640}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -257, 840, -381}, 0, { -2080, 576}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -261, 785, -349}, 0, { -1984, 608}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07006CE0 - 0x07006D20 +static const Vtx intro_seg7_vertex_07006CE0[] = { + {{{ -261, 785, -349}, 0, { -1984, 608}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -279, 785, -386}, 0, { -2016, 640}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -340, 779, -346}, 0, { -2048, 736}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -336, 780, -383}, 0, { -2080, 704}, {0x73, 0x73, 0x73, 0xff}}}, +}; + +// 0x07006D20 - 0x07006D60 +static const Vtx intro_seg7_vertex_07006D20[] = { + {{{ -371, 778, -345}, 0, { -2048, 800}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -340, 779, -346}, 0, { -2048, 736}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -354, 779, -382}, 0, { -2080, 736}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -336, 780, -383}, 0, { -2080, 704}, {0x73, 0x73, 0x73, 0xff}}}, +}; + +// 0x07006D60 - 0x07006DA0 +static const Vtx intro_seg7_vertex_07006D60[] = { + {{{ -361, 851, -425}, 0, { -2208, 704}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ -387, 844, -382}, 0, { -2176, 768}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ -354, 779, -382}, 0, { -2080, 736}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ -371, 778, -345}, 0, { -2048, 800}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x07006DA0 - 0x07006DE0 +static const Vtx intro_seg7_vertex_07006DA0[] = { + {{{ -361, 851, -425}, 0, { -2208, 704}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -547, 803, -397}, 0, { -2272, 1024}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -387, 844, -382}, 0, { -2176, 768}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -515, 811, -362}, 0, { -2240, 960}, {0x73, 0x73, 0x73, 0xff}}}, +}; + +// 0x07006DE0 - 0x07006E20 +static const Vtx intro_seg7_vertex_07006DE0[] = { + {{{ -547, 803, -397}, 0, { -2272, 1024}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -541, 786, -387}, 0, { -2240, 1024}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -515, 811, -362}, 0, { -2240, 960}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -504, 781, -347}, 0, { -2176, 992}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07006E20 - 0x07006E60 +static const Vtx intro_seg7_vertex_07006E20[] = { + {{{ -504, 781, -347}, 0, { -2176, 992}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -541, 786, -387}, 0, { -2240, 1024}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -556, 784, -347}, 0, { -2208, 1056}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -574, 788, -388}, 0, { -2272, 1056}, {0x73, 0x73, 0x73, 0xff}}}, +}; + +// 0x07006E60 - 0x07006EA0 +static const Vtx intro_seg7_vertex_07006E60[] = { + {{{ -612, 651, -307}, 0, { -2048, 1248}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -582, 680, -287}, 0, { -2048, 1184}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -574, 788, -388}, 0, { -2272, 1056}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -556, 784, -347}, 0, { -2208, 1056}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07006EA0 - 0x07006EE0 +static const Vtx intro_seg7_vertex_07006EA0[] = { + {{{ -612, 651, -307}, 0, { -2048, 1248}, {0xdd, 0xdd, 0xdd, 0xff}}}, + {{{ -603, 649, -306}, 0, { -2048, 1216}, {0xdd, 0xdd, 0xdd, 0xff}}}, + {{{ -582, 680, -287}, 0, { -2048, 1184}, {0xdd, 0xdd, 0xdd, 0xff}}}, + {{{ -537, 670, -281}, 0, { -2016, 1120}, {0xdd, 0xdd, 0xdd, 0xff}}}, +}; + +// 0x07006EE0 - 0x07006F20 +static const Vtx intro_seg7_vertex_07006EE0[] = { + {{{ -537, 670, -281}, 0, { -2016, 1120}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -603, 649, -306}, 0, { -2048, 1216}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -610, 638, -260}, 0, { -2016, 1280}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -641, 632, -296}, 0, { -2048, 1312}, {0x73, 0x73, 0x73, 0xff}}}, +}; + +// 0x07006F20 - 0x07006F60 +static const Vtx intro_seg7_vertex_07006F20[] = { + {{{ -580, 466, -197}, 0, { -1728, 1376}, {0x7d, 0x7d, 0x7d, 0xff}}}, + {{{ -568, 515, -189}, 0, { -1760, 1312}, {0x7d, 0x7d, 0x7d, 0xff}}}, + {{{ -641, 632, -296}, 0, { -2048, 1312}, {0x7d, 0x7d, 0x7d, 0xff}}}, + {{{ -610, 638, -260}, 0, { -2016, 1280}, {0x7d, 0x7d, 0x7d, 0xff}}}, +}; + +// 0x07006F60 - 0x07006FA0 +static const Vtx intro_seg7_vertex_07006F60[] = { + {{{ -580, 466, -197}, 0, { -1728, 1376}, {0xdd, 0xdd, 0xdd, 0xff}}}, + {{{ -576, 468, -199}, 0, { -1728, 1344}, {0xdd, 0xdd, 0xdd, 0xff}}}, + {{{ -568, 515, -189}, 0, { -1760, 1312}, {0xdd, 0xdd, 0xdd, 0xff}}}, + {{{ -540, 534, -201}, 0, { -1792, 1248}, {0xdd, 0xdd, 0xdd, 0xff}}}, +}; + +// 0x07006FA0 - 0x07006FE0 +static const Vtx intro_seg7_vertex_07006FA0[] = { + {{{ -540, 534, -201}, 0, { -1792, 1248}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -576, 468, -199}, 0, { -1728, 1344}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -566, 406, -122}, 0, { -1600, 1408}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -592, 366, -139}, 0, { -1568, 1472}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07006FE0 - 0x07007020 +static const Vtx intro_seg7_vertex_07006FE0[] = { + {{{ -592, 366, -139}, 0, { -1568, 1472}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ -357, 362, -136}, 0, { -1376, 1120}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ -566, 406, -122}, 0, { -1600, 1408}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ -379, 401, -121}, 0, { -1440, 1152}, {0xf0, 0xf0, 0xf0, 0xff}}}, +}; + +// 0x07007020 - 0x07007060 +static const Vtx intro_seg7_vertex_07007020[] = { + {{{ -380, 504, -183}, 0, { -1600, 1056}, {0xff, 0xff, 0xfe, 0x00}}}, + {{{ -379, 401, -121}, 0, { -1440, 1152}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ -361, 478, -205}, 0, { -1568, 1024}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ -357, 362, -136}, 0, { -1376, 1120}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x07007060 - 0x070070A0 +static const Vtx intro_seg7_vertex_07007060[] = { + {{{ -380, 504, -183}, 0, { -1600, 1056}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ -361, 478, -205}, 0, { -1568, 1024}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ -268, 502, -182}, 0, { -1504, 896}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ -292, 464, -197}, 0, { -1504, 928}, {0xf0, 0xf0, 0xf0, 0xff}}}, +}; + +// 0x070070A0 - 0x070070E0 +static const Vtx intro_seg7_vertex_070070A0[] = { + {{{ -268, 502, -182}, 0, { -1504, 896}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -292, 464, -197}, 0, { -1504, 928}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -272, 396, -118}, 0, { -1344, 992}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -295, 359, -134}, 0, { -1312, 1024}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x070070E0 - 0x07007120 +static const Vtx intro_seg7_vertex_070070E0[] = { + {{{ -272, 396, -118}, 0, { -1344, 992}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ -295, 359, -134}, 0, { -1312, 1024}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ -106, 391, -116}, 0, { -1216, 736}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ -83, 354, -131}, 0, { -1152, 736}, {0xf0, 0xf0, 0xf0, 0xff}}}, +}; + +// 0x07007120 - 0x07007160 +static const Vtx intro_seg7_vertex_07007120[] = { + {{{ -108, 493, -177}, 0, { -1376, 640}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ -106, 391, -116}, 0, { -1216, 736}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ -82, 459, -193}, 0, { -1312, 640}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ -83, 354, -131}, 0, { -1152, 736}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x07007160 - 0x070071A0 +static const Vtx intro_seg7_vertex_07007160[] = { + {{{ -108, 493, -177}, 0, { -1376, 640}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ -82, 459, -193}, 0, { -1312, 640}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ -9, 498, -179}, 0, { -1312, 512}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ 13, 461, -195}, 0, { -1248, 480}, {0xf0, 0xf0, 0xf0, 0xff}}}, +}; + +// 0x070071A0 - 0x070071E0 +static const Vtx intro_seg7_vertex_070071A0[] = { + {{{ -17, 773, -339}, 0, { -1760, 256}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ -9, 498, -179}, 0, { -1312, 512}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 3, 775, -380}, 0, { -1792, 224}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 13, 461, -195}, 0, { -1248, 480}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x070071E0 - 0x07007220 +static const Vtx intro_seg7_vertex_070071E0[] = { + {{{ -116, 775, -343}, 0, { -1856, 416}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -17, 773, -339}, 0, { -1760, 256}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ -99, 778, -382}, 0, { -1888, 384}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 3, 775, -380}, 0, { -1792, 224}, {0x73, 0x73, 0x73, 0xff}}}, +}; + +// 0x07007220 - 0x07007260 +static const Vtx intro_seg7_vertex_07007220[] = { + {{{ -116, 775, -343}, 0, { -1856, 416}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ -99, 778, -382}, 0, { -1888, 384}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ -115, 837, -380}, 0, { -1952, 352}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ -97, 839, -418}, 0, { -1984, 320}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x07007260 - 0x070072A0 +static const Vtx intro_seg7_vertex_07007260[] = { + {{{ 589, 815, -404}, 0, { -1408, -640}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 425, 820, -407}, 0, { -1536, -416}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 571, 814, -363}, 0, { -1376, -608}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 427, 812, -365}, 0, { -1504, -384}, {0x73, 0x73, 0x73, 0xff}}}, +}; + +// 0x070072A0 - 0x070072E0 +static const Vtx intro_seg7_vertex_070072A0[] = { + {{{ 246, 778, -382}, 0, { -1600, -96}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 276, 781, -348}, 0, { -1568, -128}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 425, 820, -407}, 0, { -1536, -416}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 427, 812, -365}, 0, { -1504, -384}, {0x73, 0x73, 0x73, 0xff}}}, +}; + +// 0x070072E0 - 0x07007320 +static const Vtx intro_seg7_vertex_070072E0[] = { + {{{ 246, 778, -382}, 0, { -1600, -96}, {0xaa, 0xaa, 0xaa, 0xff}}}, + {{{ 265, 745, -363}, 0, { -1536, -96}, {0xaa, 0xaa, 0xaa, 0xff}}}, + {{{ 276, 781, -348}, 0, { -1568, -128}, {0xaa, 0xaa, 0xaa, 0xff}}}, + {{{ 302, 744, -325}, 0, { -1472, -160}, {0xaa, 0xaa, 0xaa, 0xff}}}, +}; + +// 0x07007320 - 0x07007360 +static const Vtx intro_seg7_vertex_07007320[] = { + {{{ 302, 744, -325}, 0, { -1472, -160}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 265, 745, -363}, 0, { -1536, -96}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 247, 742, -321}, 0, { -1504, -64}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 228, 742, -361}, 0, { -1568, -64}, {0x73, 0x73, 0x73, 0xff}}}, +}; + +// 0x07007360 - 0x070073A0 +static const Vtx intro_seg7_vertex_07007360[] = { + {{{ 222, 615, -286}, 0, { -1344, 32}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 248, 650, -269}, 0, { -1376, 0}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 228, 742, -361}, 0, { -1568, -64}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 247, 742, -321}, 0, { -1504, -64}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x070073A0 - 0x070073E0 +static const Vtx intro_seg7_vertex_070073A0[] = { + {{{ 274, 649, -268}, 0, { -1344, -32}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ 248, 650, -269}, 0, { -1376, 0}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ 246, 613, -285}, 0, { -1344, 0}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ 222, 615, -286}, 0, { -1344, 32}, {0xf0, 0xf0, 0xf0, 0xff}}}, +}; + +// 0x070073E0 - 0x07007420 +static const Vtx intro_seg7_vertex_070073E0[] = { + {{{ 274, 649, -268}, 0, { -1344, -32}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 246, 613, -285}, 0, { -1344, 0}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 261, 594, -236}, 0, { -1248, 0}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 240, 583, -267}, 0, { -1280, 32}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07007420 - 0x07007460 +static const Vtx intro_seg7_vertex_07007420[] = { + {{{ 114, 399, -158}, 0, { -1056, 384}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 141, 425, -137}, 0, { -1056, 352}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 240, 583, -267}, 0, { -1280, 32}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 261, 594, -236}, 0, { -1248, 0}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x07007460 - 0x070074A0 +static const Vtx intro_seg7_vertex_07007460[] = { + {{{ 114, 399, -158}, 0, { -1056, 384}, {0xcc, 0xcc, 0xcc, 0xff}}}, + {{{ 353, 333, -119}, 0, { -768, 96}, {0xcc, 0xcc, 0xcc, 0xff}}}, + {{{ 141, 425, -137}, 0, { -1056, 352}, {0xcc, 0xcc, 0xcc, 0xff}}}, + {{{ 338, 374, -106}, 0, { -832, 96}, {0xcc, 0xcc, 0xcc, 0xff}}}, +}; + +// 0x070074A0 - 0x070074E0 +static const Vtx intro_seg7_vertex_070074A0[] = { + {{{ 353, 333, -119}, 0, { -768, 96}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 356, 350, -129}, 0, { -800, 64}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 338, 374, -106}, 0, { -832, 96}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 347, 390, -115}, 0, { -832, 64}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x070074E0 - 0x07007520 +static const Vtx intro_seg7_vertex_070074E0[] = { + {{{ 347, 390, -115}, 0, { -832, 64}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ 356, 350, -129}, 0, { -800, 64}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ 642, 392, -117}, 0, { -608, -352}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ 672, 352, -130}, 0, { -544, -352}, {0xf0, 0xf0, 0xf0, 0xff}}}, +}; + +// 0x07007520 - 0x07007560 +static const Vtx intro_seg7_vertex_07007520[] = { + {{{ 627, 482, -170}, 0, { -768, -384}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 642, 392, -117}, 0, { -608, -352}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 655, 448, -187}, 0, { -736, -416}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 672, 352, -130}, 0, { -544, -352}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x07007560 - 0x070075A0 +static const Vtx intro_seg7_vertex_07007560[] = { + {{{ 676, 583, -267}, 0, { -928, -576}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 652, 577, -226}, 0, { -928, -512}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 682, 453, -190}, 0, { -704, -480}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 658, 486, -172}, 0, { -768, -448}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x070075A0 - 0x070075E0 +static const Vtx intro_seg7_vertex_070075A0[] = { + {{{ 627, 482, -170}, 0, { -768, -384}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ 655, 448, -187}, 0, { -736, -416}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ 658, 486, -172}, 0, { -768, -448}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ 682, 453, -190}, 0, { -704, -480}, {0xf0, 0xf0, 0xf0, 0xff}}}, +}; + +// 0x070075E0 - 0x07007620 +static const Vtx intro_seg7_vertex_070075E0[] = { + {{{ 618, 578, -227}, 0, { -960, -480}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 652, 577, -226}, 0, { -928, -512}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 661, 583, -267}, 0, { -960, -544}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 676, 583, -267}, 0, { -928, -576}, {0x73, 0x73, 0x73, 0xff}}}, +}; + +// 0x07007620 - 0x07007660 +static const Vtx intro_seg7_vertex_07007620[] = { + {{{ 671, 595, -274}, 0, { -960, -576}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 646, 614, -248}, 0, { -992, -544}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 661, 583, -267}, 0, { -960, -544}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 618, 578, -227}, 0, { -960, -480}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x07007660 - 0x070076A0 +static const Vtx intro_seg7_vertex_07007660[] = { + {{{ 637, 664, -277}, 0, { -1088, -576}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 646, 614, -248}, 0, { -992, -544}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 661, 633, -296}, 0, { -1024, -608}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 671, 595, -274}, 0, { -960, -576}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x070076A0 - 0x070076E0 +static const Vtx intro_seg7_vertex_070076A0[] = { + {{{ 669, 631, -295}, 0, { -1024, -608}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ 647, 662, -276}, 0, { -1056, -576}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ 661, 633, -296}, 0, { -1024, -608}, {0xf0, 0xf0, 0xf0, 0xff}}}, + {{{ 637, 664, -277}, 0, { -1088, -576}, {0xf0, 0xf0, 0xf0, 0xff}}}, +}; + +// 0x070076E0 - 0x07007720 +static const Vtx intro_seg7_vertex_070076E0[] = { + {{{ 681, 781, -384}, 0, { -1280, -768}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 653, 778, -348}, 0, { -1248, -704}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 669, 631, -295}, 0, { -1024, -608}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 647, 662, -276}, 0, { -1056, -576}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x07007720 - 0x07007760 +static const Vtx intro_seg7_vertex_07007720[] = { + {{{ 573, 772, -341}, 0, { -1312, -576}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 653, 778, -348}, 0, { -1248, -704}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 593, 775, -380}, 0, { -1344, -608}, {0x73, 0x73, 0x73, 0xff}}}, + {{{ 681, 781, -384}, 0, { -1280, -768}, {0x73, 0x73, 0x73, 0xff}}}, +}; + +// 0x07007760 - 0x070077A0 +static const Vtx intro_seg7_vertex_07007760[] = { + {{{ 589, 815, -404}, 0, { -1408, -640}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 571, 814, -363}, 0, { -1376, -608}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 593, 775, -380}, 0, { -1344, -608}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 573, 772, -341}, 0, { -1312, -576}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x070077A0 - 0x070077E0 +static const Vtx intro_seg7_vertex_070077A0[] = { + {{{ 178, 864, -433}, 0, { -1792, -96}, {0xaa, 0xaa, 0xaa, 0xff}}}, + {{{ 180, 850, -387}, 0, { -1760, -64}, {0xaa, 0xaa, 0xaa, 0xff}}}, + {{{ 308, 766, -375}, 0, { -1536, -192}, {0xaa, 0xaa, 0xaa, 0xff}}}, + {{{ 278, 778, -345}, 0, { -1568, -128}, {0xaa, 0xaa, 0xaa, 0xff}}}, +}; + +// 0x070077E0 - 0x07007820 +static const Vtx intro_seg7_vertex_070077E0[] = { + {{{ 308, 766, -375}, 0, { -1536, -192}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 278, 778, -345}, 0, { -1568, -128}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 220, 666, -316}, 0, { -1440, 0}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 213, 700, -299}, 0, { -1472, 0}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x07007820 - 0x07007860 +static const Vtx intro_seg7_vertex_07007820[] = { + {{{ 213, 700, -299}, 0, { -1472, 0}, {0xa7, 0x91, 0x7b, 0xff}}}, + {{{ 94, 750, -328}, 0, { -1664, 128}, {0xa7, 0x91, 0x7b, 0xff}}}, + {{{ 220, 666, -316}, 0, { -1440, 0}, {0xa7, 0x91, 0x7b, 0xff}}}, + {{{ 61, 727, -352}, 0, { -1664, 192}, {0xa7, 0x91, 0x7b, 0xff}}}, +}; + +// 0x07007860 - 0x070078A0 +static const Vtx intro_seg7_vertex_07007860[] = { + {{{ 94, 750, -328}, 0, { -1664, 128}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 180, 850, -387}, 0, { -1760, -64}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 61, 727, -352}, 0, { -1664, 192}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 178, 864, -433}, 0, { -1792, -96}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x070078A0 - 0x070078E0 +static const Vtx intro_seg7_vertex_070078A0[] = { + {{{ 132, 758, -370}, 0, { -1664, 32}, {0xaa, 0xaa, 0xaa, 0xff}}}, + {{{ 134, 738, -321}, 0, { -1600, 64}, {0xaa, 0xaa, 0xaa, 0xff}}}, + {{{ 266, 636, -298}, 0, { -1344, 0}, {0xaa, 0xaa, 0xaa, 0xff}}}, + {{{ 245, 652, -270}, 0, { -1376, 0}, {0xaa, 0xaa, 0xaa, 0xff}}}, +}; + +// 0x070078E0 - 0x07007920 +static const Vtx intro_seg7_vertex_070078E0[] = { + {{{ 171, 531, -236}, 0, { -1248, 192}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 266, 636, -298}, 0, { -1344, 0}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 170, 568, -221}, 0, { -1280, 160}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 245, 652, -270}, 0, { -1376, 0}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x07007920 - 0x07007960 +static const Vtx intro_seg7_vertex_07007920[] = { + {{{ 170, 568, -221}, 0, { -1280, 160}, {0xa7, 0x91, 0x7b, 0xff}}}, + {{{ 61, 631, -258}, 0, { -1472, 288}, {0xa7, 0x91, 0x7b, 0xff}}}, + {{{ 171, 531, -236}, 0, { -1248, 192}, {0xa7, 0x91, 0x7b, 0xff}}}, + {{{ 32, 607, -281}, 0, { -1472, 320}, {0xa7, 0x91, 0x7b, 0xff}}}, +}; + +// 0x07007960 - 0x070079A0 +static const Vtx intro_seg7_vertex_07007960[] = { + {{{ 61, 631, -258}, 0, { -1472, 288}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 134, 738, -321}, 0, { -1600, 64}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 32, 607, -281}, 0, { -1472, 320}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 132, 758, -370}, 0, { -1664, 32}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +// 0x070079A0 - 0x070079E0 +static const Vtx intro_seg7_vertex_070079A0[] = { + {{{ 256, 545, -245}, 0, { -1216, 64}, {0xaa, 0xaa, 0xaa, 0xff}}}, + {{{ 83, 596, -274}, 0, { -1440, 256}, {0xaa, 0xaa, 0xaa, 0xff}}}, + {{{ 224, 552, -211}, 0, { -1216, 96}, {0xaa, 0xaa, 0xaa, 0xff}}}, + {{{ 89, 593, -236}, 0, { -1376, 256}, {0xaa, 0xaa, 0xaa, 0xff}}}, +}; + +// 0x070079E0 - 0x07007A20 +static const Vtx intro_seg7_vertex_070079E0[] = { + {{{ 134, 336, -121}, 0, { -960, 416}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 256, 545, -245}, 0, { -1216, 64}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 126, 383, -111}, 0, { -992, 416}, {0xff, 0xff, 0xfe, 0xff}}}, + {{{ 224, 552, -211}, 0, { -1216, 96}, {0xff, 0xff, 0xfe, 0xff}}}, +}; + +// 0x07007A20 - 0x07007A60 +static const Vtx intro_seg7_vertex_07007A20[] = { + {{{ 134, 336, -121}, 0, { -960, 416}, {0xa7, 0x91, 0x7b, 0xff}}}, + {{{ 126, 383, -111}, 0, { -992, 416}, {0xa7, 0x91, 0x7b, 0xff}}}, + {{{ -55, 465, -197}, 0, { -1312, 576}, {0xa7, 0x91, 0x7b, 0xff}}}, + {{{ -28, 486, -172}, 0, { -1312, 544}, {0xa7, 0x91, 0x7b, 0xff}}}, +}; + +// 0x07007A60 - 0x07007AA0 +static const Vtx intro_seg7_vertex_07007A60[] = { + {{{ -55, 465, -197}, 0, { -1312, 576}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ -28, 486, -172}, 0, { -1312, 544}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 83, 596, -274}, 0, { -1440, 256}, {0x4a, 0x4a, 0x4a, 0xff}}}, + {{{ 89, 593, -236}, 0, { -1376, 256}, {0x4a, 0x4a, 0x4a, 0xff}}}, +}; + +#else + // 0x07000000 - 0x07000100 static const Vtx intro_seg7_vertex_07000000[] = { {{{ 498, -74, 90}, 0, { 760, 796}, {0x00, 0xf1, 0x00, 0xff}}}, @@ -2575,20 +6404,1500 @@ static const Vtx intro_seg7_vertex_07007DF0[] = { {{{ 733, 462, -217}, 0, { 0, 0}, {0xa8, 0x95, 0x37, 0xff}}}, {{{ 733, 512, -246}, 0, { 0, 0}, {0xa8, 0x95, 0x37, 0xff}}}, }; +#endif // 0x07007EA0 - 0x07007EA2 -ALIGNED8 static const Texture intro_seg7_texture_07007EA0[] = { +ALIGNED8 static const Texture intro_seg7_texture_0[] = { #include "levels/intro/0.rgba16.inc.c" }; // 0x070086A0 - 0x070086A2 -ALIGNED8 static const Texture intro_seg7_texture_070086A0[] = { +ALIGNED8 static const Texture intro_seg7_texture_1[] = { #include "levels/intro/1.rgba16.inc.c" }; +#if defined(VERSION_CN) +// 0x07008AA0 - 0x0700A398 +static const Gfx intro_seg7_dl_07008AA0[] = { + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, intro_seg7_texture_1), + gsDPLoadSync(), + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)), + gsSPVertex(intro_seg7_vertex_07000000, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000030, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000060, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000090, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070000C0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070000F0, 5, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 4, 2, 0), + gsSPVertex(intro_seg7_vertex_07000140, 5, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 1, 4, 0), + gsSPVertex(intro_seg7_vertex_07000190, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070001D0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07000210, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07000250, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000280, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070002B0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070002E0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000310, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000340, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000370, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070003A0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070003D0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 1, 0, 0), + gsSPVertex(intro_seg7_vertex_07000410, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07000450, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07000490, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070004D0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07000510, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07000550, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07000590, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070005C0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070005F0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000620, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000650, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000680, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070006B0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070006E0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07000720, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000750, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000780, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070007B0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070007E0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000810, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000840, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000870, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070008A0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070008D0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000900, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07000940, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 0, 2, 0), + gsSPVertex(intro_seg7_vertex_07000980, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070009C0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07000A00, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07000A40, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07000A80, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07000AC0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000AF0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000B20, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000B50, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000B80, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000BB0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000BE0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000C10, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000C40, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000C70, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000CA0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000CD0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000D00, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000D30, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07000D60, 16, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSP1Triangle(3, 4, 2, 0), + gsSP1Triangle(2, 4, 5, 0), + gsSP1Triangle(6, 7, 4, 0), + gsSP1Triangle(7, 8, 4, 0), + gsSP1Triangle(8, 9, 4, 0), + gsSP1Triangle(4, 9, 5, 0), + gsSP1Triangle(10, 11, 12, 0), + gsSP1Triangle(12, 11, 13, 0), + gsSP1Triangle(14, 5, 11, 0), + gsSP1Triangle(5, 15, 11, 0), + gsSP1Triangle(11, 15, 13, 0), + gsSPVertex(intro_seg7_vertex_07000E60, 15, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSP1Triangle(4, 5, 6, 0), + gsSP1Triangle(6, 5, 7, 0), + gsSP1Triangle(7, 5, 8, 0), + gsSP1Triangle(9, 10, 5, 0), + gsSP1Triangle(5, 10, 8, 0), + gsSP1Triangle(8, 10, 11, 0), + gsSP1Triangle(12, 13, 14, 0), + gsSPVertex(intro_seg7_vertex_07000F50, 16, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 4, 1, 0), + gsSP1Triangle(1, 4, 2, 0), + gsSP1Triangle(4, 5, 2, 0), + gsSP1Triangle(2, 5, 6, 0), + gsSP1Triangle(7, 8, 9, 0), + gsSP1Triangle(8, 10, 11, 0), + gsSP1Triangle(11, 12, 8, 0), + gsSP1Triangle(13, 14, 15, 0), + gsSPVertex(intro_seg7_vertex_07001050, 14, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSP1Triangle(4, 5, 1, 0), + gsSP1Triangle(1, 5, 6, 0), + gsSP1Triangle(6, 7, 1, 0), + gsSP1Triangle(8, 9, 10, 0), + gsSP1Triangle(11, 12, 13, 0), + gsSPVertex(intro_seg7_vertex_07001130, 15, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSP1Triangle(2, 3, 4, 0), + gsSP1Triangle(5, 6, 0, 0), + gsSP1Triangle(0, 6, 1, 0), + gsSP1Triangle(1, 6, 7, 0), + gsSP1Triangle(7, 6, 8, 0), + gsSP1Triangle(8, 6, 9, 0), + gsSP1Triangle(6, 10, 9, 0), + gsSP1Triangle(3, 7, 11, 0), + gsSP1Triangle(11, 7, 12, 0), + gsSP1Triangle(12, 7, 8, 0), + gsSP1Triangle(13, 9, 14, 0), + gsSPVertex(intro_seg7_vertex_07001220, 5, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSP1Triangle(4, 2, 3, 0), + gsSPVertex(intro_seg7_vertex_07001270, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_070012B0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 1, 0, 0), + gsSPVertex(intro_seg7_vertex_070012F0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07001330, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07001370, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070013B0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_070013F0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07001430, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07001470, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070014B0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070014F0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07001530, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07001570, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 0, 2, 0), + gsSPVertex(intro_seg7_vertex_070015B0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070015F0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07001630, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07001670, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070016A0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070016D0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07001700, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07001730, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07001760, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07001790, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_070017D0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07001810, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07001850, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07001890, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070018D0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07001910, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 1, 0, 0), + gsSPVertex(intro_seg7_vertex_07001950, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07001990, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070019D0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07001A10, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 1, 0, 0), + gsSPVertex(intro_seg7_vertex_07001A50, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07001A90, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07001AC0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07001AF0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07001B20, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07001B60, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07001BA0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07001BE0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07001C10, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07001C40, 5, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 4, 0), + gsSPVertex(intro_seg7_vertex_07001C90, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07001CC0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07001CF0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07001D20, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 1, 0, 0), + gsSPVertex(intro_seg7_vertex_07001D60, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07001D90, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07001DD0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07001E10, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07001E50, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07001E80, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07001EB0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07001EE0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07001F10, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07001F40, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07001F70, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07001FA0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07001FD0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07002000, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07002030, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07002060, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07002090, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070020C0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070020F0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07002120, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07002150, 15, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSP1Triangle(4, 5, 1, 0), + gsSP1Triangle(5, 6, 1, 0), + gsSP1Triangle(1, 6, 3, 0), + gsSP1Triangle(7, 3, 8, 0), + gsSP1Triangle(8, 3, 9, 0), + gsSP1Triangle(9, 3, 10, 0), + gsSP1Triangle(10, 3, 11, 0), + gsSP1Triangle(11, 3, 12, 0), + gsSP1Triangle(3, 6, 12, 0), + gsSP1Triangle(12, 6, 13, 0), + gsSP1Triangle(6, 14, 13, 0), + gsSPVertex(intro_seg7_vertex_07002240, 16, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSP1Triangle(4, 2, 5, 0), + gsSP1Triangle(6, 7, 8, 0), + gsSP1Triangle(7, 9, 8, 0), + gsSP1Triangle(10, 8, 11, 0), + gsSP1Triangle(11, 8, 12, 0), + gsSP1Triangle(8, 9, 12, 0), + gsSP1Triangle(13, 14, 9, 0), + gsSP1Triangle(9, 14, 15, 0), + gsSPVertex(intro_seg7_vertex_07002340, 14, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSP1Triangle(4, 5, 6, 0), + gsSP1Triangle(7, 8, 5, 0), + gsSP1Triangle(8, 9, 5, 0), + gsSP1Triangle(5, 10, 6, 0), + gsSP1Triangle(10, 5, 11, 0), + gsSP1Triangle(5, 9, 11, 0), + gsSP1Triangle(12, 6, 13, 0), + gsSP1Triangle(6, 10, 13, 0), + gsSPVertex(intro_seg7_vertex_07002420, 16, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 4, 1, 0), + gsSP1Triangle(4, 5, 1, 0), + gsSP1Triangle(3, 6, 4, 0), + gsSP1Triangle(4, 6, 7, 0), + gsSP1Triangle(7, 6, 8, 0), + gsSP1Triangle(6, 9, 8, 0), + gsSP1Triangle(10, 7, 8, 0), + gsSP1Triangle(11, 5, 12, 0), + gsSP1Triangle(5, 10, 12, 0), + gsSP1Triangle(13, 14, 15, 0), + gsSPVertex(intro_seg7_vertex_07002520, 11, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 4, 1, 0), + gsSP1Triangle(1, 4, 2, 0), + gsSP1Triangle(4, 5, 2, 0), + gsSP1Triangle(2, 5, 6, 0), + gsSP1Triangle(7, 6, 8, 0), + gsSP1Triangle(6, 5, 8, 0), + gsSP1Triangle(5, 9, 8, 0), + gsSP1Triangle(8, 9, 10, 0), + gsSPVertex(intro_seg7_vertex_070025D0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07002610, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07002650, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07002690, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070026D0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07002710, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07002740, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07002770, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070027A0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070027D0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07002800, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07002830, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07002860, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07002890, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070028C0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070028F0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07002920, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07002950, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07002980, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070029B0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070029E0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07002A10, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07002A40, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07002A70, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07002AB0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07002AF0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 0, 2, 0), + gsSPVertex(intro_seg7_vertex_07002B30, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07002B70, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07002BB0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 1, 0, 0), + gsSPVertex(intro_seg7_vertex_07002BF0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07002C30, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07002C70, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07002CB0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07002CF0, 13, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSP1Triangle(4, 2, 3, 0), + gsSP1Triangle(5, 6, 7, 0), + gsSP1Triangle(6, 4, 7, 0), + gsSP1Triangle(8, 7, 9, 0), + gsSP1Triangle(9, 7, 10, 0), + gsSP1Triangle(10, 7, 11, 0), + gsSP1Triangle(11, 7, 12, 0), + gsSP1Triangle(7, 4, 12, 0), + gsSP1Triangle(12, 4, 3, 0), + gsSPVertex(intro_seg7_vertex_07002DC0, 9, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSP1Triangle(4, 5, 1, 0), + gsSP1Triangle(5, 6, 1, 0), + gsSP1Triangle(1, 6, 3, 0), + gsSP1Triangle(6, 7, 3, 0), + gsSP1Triangle(7, 8, 3, 0), + gsSPVertex(intro_seg7_vertex_07002E50, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07002E90, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07002ED0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07002F00, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07002F30, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07002F60, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07002F90, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07002FC0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07003000, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07003040, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07003080, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070030C0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 0, 2, 0), + gsSPVertex(intro_seg7_vertex_07003100, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07003140, 16, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSP1Triangle(0, 4, 1, 0), + gsSP1Triangle(4, 5, 1, 0), + gsSP1Triangle(5, 6, 1, 0), + gsSP1Triangle(6, 3, 1, 0), + gsSP1Triangle(7, 8, 9, 0), + gsSP1Triangle(8, 10, 9, 0), + gsSP1Triangle(10, 8, 11, 0), + gsSP1Triangle(8, 7, 11, 0), + gsSP1Triangle(6, 12, 3, 0), + gsSP1Triangle(12, 6, 5, 0), + gsSP1Triangle(13, 14, 12, 0), + gsSP1Triangle(12, 14, 3, 0), + gsSP1Triangle(12, 15, 13, 0), + gsSPVertex(intro_seg7_vertex_07003240, 15, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 0, 3, 0), + gsSP1Triangle(4, 5, 6, 0), + gsSP1Triangle(6, 5, 7, 0), + gsSP1Triangle(2, 1, 8, 0), + gsSP1Triangle(8, 1, 3, 0), + gsSP1Triangle(9, 5, 4, 0), + gsSP1Triangle(10, 11, 5, 0), + gsSP1Triangle(11, 12, 5, 0), + gsSP1Triangle(12, 13, 5, 0), + gsSP1Triangle(7, 5, 14, 0), + gsSP1Triangle(5, 13, 14, 0), + gsSPVertex(intro_seg7_vertex_07003330, 14, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 4, 5, 0), + gsSP1Triangle(6, 3, 7, 0), + gsSP1Triangle(3, 8, 7, 0), + gsSP1Triangle(4, 9, 5, 0), + gsSP1Triangle(10, 4, 2, 0), + gsSP1Triangle(4, 6, 2, 0), + gsSP1Triangle(9, 11, 5, 0), + gsSP1Triangle(5, 11, 8, 0), + gsSP1Triangle(12, 7, 13, 0), + gsSPVertex(intro_seg7_vertex_07003410, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07003440, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07003470, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070034A0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070034D0, 15, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 4, 5, 0), + gsSP1Triangle(6, 7, 8, 0), + gsSP1Triangle(9, 10, 11, 0), + gsSP1Triangle(12, 13, 14, 0), + gsSPVertex(intro_seg7_vertex_070035C0, 12, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 4, 5, 0), + gsSP1Triangle(6, 7, 8, 0), + gsSP1Triangle(9, 10, 11, 0), + gsSPVertex(intro_seg7_vertex_07003680, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070036C0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 1, 0, 0), + gsSPVertex(intro_seg7_vertex_07003700, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07003740, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07003780, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070037C0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070037F0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07003830, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07003870, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070038B0, 6, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 4, 5, 0), + gsSPVertex(intro_seg7_vertex_07003910, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07003950, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07003980, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070039B0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070039E0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07003A10, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07003A40, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07003A70, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07003AA0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07003AD0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07003B10, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07003B50, 14, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSP1Triangle(3, 4, 2, 0), + gsSP1Triangle(4, 5, 2, 0), + gsSP1Triangle(5, 6, 2, 0), + gsSP1Triangle(7, 8, 9, 0), + gsSP1Triangle(9, 8, 3, 0), + gsSP1Triangle(10, 4, 8, 0), + gsSP1Triangle(8, 4, 3, 0), + gsSP1Triangle(11, 12, 13, 0), + gsSPVertex(intro_seg7_vertex_07003C30, 10, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSP1Triangle(4, 5, 6, 0), + gsSP1Triangle(7, 8, 9, 0), + gsSP1Triangle(9, 8, 4, 0), + gsSP1Triangle(8, 5, 4, 0), + gsSPVertex(intro_seg7_vertex_07003CD0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07003D10, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07003D50, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07003D90, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07003DD0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07003E10, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07003E40, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07003E80, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07003EB0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07003EE0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07003F10, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07003F40, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07003F70, 5, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 4, 0), + gsSP1Triangle(4, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07003FC0, 5, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 0, 4, 0), + gsSP1Triangle(4, 0, 2, 0), + gsSPVertex(intro_seg7_vertex_07004010, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 0, 2, 0), + gsSPVertex(intro_seg7_vertex_07004050, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07004090, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070040D0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07004110, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004150, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07004190, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070041C0, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_070041F0, 6, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSP1Triangle(4, 2, 5, 0), + gsSP1Triangle(2, 3, 5, 0), + gsSPVertex(intro_seg7_vertex_07004250, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004290, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070042D0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07004310, 14, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 4, 1, 0), + gsSP1Triangle(4, 5, 1, 0), + gsSP1Triangle(5, 6, 1, 0), + gsSP1Triangle(6, 7, 1, 0), + gsSP1Triangle(1, 7, 2, 0), + gsSP1Triangle(7, 8, 2, 0), + gsSP1Triangle(9, 10, 3, 0), + gsSP1Triangle(10, 11, 3, 0), + gsSP1Triangle(11, 4, 3, 0), + gsSP1Triangle(12, 13, 5, 0), + gsSP1Triangle(13, 6, 5, 0), + gsSPVertex(intro_seg7_vertex_070043F0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004430, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPEndDisplayList(), +}; + +// 0x0700A398 - 0x0700B7E8 +static const Gfx intro_seg7_dl_0700A398[] = { + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, intro_seg7_texture_0), + gsDPLoadSync(), + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)), + gsSPVertex(intro_seg7_vertex_07004470, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070044B0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070044F0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004530, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004570, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070045B0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070045F0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004630, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07004670, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070046B0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070046F0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004730, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004770, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070047B0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070047F0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 1, 0, 0), + gsSPVertex(intro_seg7_vertex_07004830, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004870, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070048B0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070048F0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004930, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004970, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070049B0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070049F0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004A30, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004A70, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004AB0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004AF0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004B30, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004B70, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004BB0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004BF0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004C30, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004C70, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004CB0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004CF0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 1, 0, 0), + gsSPVertex(intro_seg7_vertex_07004D30, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 1, 0, 0), + gsSPVertex(intro_seg7_vertex_07004D70, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004DB0, 6, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 3, 0, 0), + gsSP1Triangle(0, 3, 4, 0), + gsSP1Triangle(5, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07004E10, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004E50, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004E90, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004ED0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004F10, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07004F50, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07004F90, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07004FD0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 1, 0, 0), + gsSPVertex(intro_seg7_vertex_07005010, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07005050, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07005090, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070050D0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07005110, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07005150, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07005190, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070051D0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07005210, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 1, 0, 0), + gsSPVertex(intro_seg7_vertex_07005250, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07005290, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070052D0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07005310, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 1, 0, 0), + gsSPVertex(intro_seg7_vertex_07005350, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07005390, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 1, 0, 0), + gsSPVertex(intro_seg7_vertex_070053D0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07005410, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07005450, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07005490, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_070054D0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07005510, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07005550, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07005590, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070055D0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07005610, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07005650, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07005690, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_070056D0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 1, 0, 0), + gsSPVertex(intro_seg7_vertex_07005710, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07005750, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07005790, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070057D0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07005810, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07005850, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07005890, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070058D0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 0, 2, 0), + gsSPVertex(intro_seg7_vertex_07005910, 6, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 4, 5, 0), + gsSPVertex(intro_seg7_vertex_07005970, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 1, 0, 0), + gsSPVertex(intro_seg7_vertex_070059B0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 1, 0, 0), + gsSPVertex(intro_seg7_vertex_070059F0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07005A30, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07005A60, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPVertex(intro_seg7_vertex_07005A90, 6, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 4, 5, 0), + gsSPVertex(intro_seg7_vertex_07005AF0, 6, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 4, 5, 0), + gsSPVertex(intro_seg7_vertex_07005B50, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07005B90, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 0, 2, 0), + gsSPVertex(intro_seg7_vertex_07005BD0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07005C10, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07005C50, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07005C90, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07005CD0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 1, 0, 0), + gsSPVertex(intro_seg7_vertex_07005D10, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07005D50, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 1, 0, 0), + gsSPVertex(intro_seg7_vertex_07005D90, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07005DD0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 0, 2, 0), + gsSPVertex(intro_seg7_vertex_07005E10, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 0, 2, 0), + gsSPVertex(intro_seg7_vertex_07005E50, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 0, 2, 0), + gsSPVertex(intro_seg7_vertex_07005E90, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 0, 2, 0), + gsSPVertex(intro_seg7_vertex_07005ED0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07005F10, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 0, 2, 0), + gsSPVertex(intro_seg7_vertex_07005F50, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 0, 2, 0), + gsSPVertex(intro_seg7_vertex_07005F90, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07005FD0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07006010, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07006050, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07006090, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070060D0, 5, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSP1Triangle(4, 3, 1, 0), + gsSPVertex(intro_seg7_vertex_07006120, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07006160, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070061A0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070061E0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07006220, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07006260, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070062A0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_070062E0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07006320, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07006360, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070063A0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070063E0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07006420, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07006460, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070064A0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070064E0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07006520, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07006560, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070065A0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_070065E0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07006620, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07006660, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_070066A0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070066E0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07006720, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07006760, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070067A0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070067E0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07006820, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07006860, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_070068A0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070068E0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07006920, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07006960, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070069A0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070069E0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07006A20, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07006A60, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07006AA0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07006AE0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07006B20, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07006B60, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07006BA0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07006BE0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07006C20, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07006C60, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07006CA0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07006CE0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07006D20, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07006D60, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07006DA0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07006DE0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07006E20, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07006E60, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07006EA0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07006EE0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07006F20, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07006F60, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07006FA0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07006FE0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07007020, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07007060, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070070A0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070070E0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07007120, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07007160, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070071A0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_070071E0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07007220, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07007260, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070072A0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070072E0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07007320, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07007360, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070073A0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070073E0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07007420, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07007460, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070074A0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070074E0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07007520, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07007560, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070075A0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070075E0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07007620, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07007660, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070076A0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070076E0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07007720, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07007760, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070077A0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070077E0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_07007820, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07007860, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_070078A0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSPVertex(intro_seg7_vertex_070078E0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07007920, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_07007960, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSPVertex(intro_seg7_vertex_070079A0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_070079E0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07007A20, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPVertex(intro_seg7_vertex_07007A60, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSPEndDisplayList(), +}; + +// 0x0700B7E8 - 0x0700B860 +const Gfx intro_seg7_dl_logo[] = { + gsDPPipeSync(), + gsDPSetCombineMode(G_CC_MODULATEI, G_CC_MODULATEI), + gsSPClearGeometryMode(G_LIGHTING), + gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPTileSync(), + gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD), + gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, (32 - 1) << G_TEXTURE_IMAGE_FRAC, (32 - 1) << G_TEXTURE_IMAGE_FRAC), + gsSPDisplayList(intro_seg7_dl_07008AA0), + gsSPDisplayList(intro_seg7_dl_0700A398), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPPipeSync(), + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + gsSPSetGeometryMode(G_LIGHTING), + gsSPEndDisplayList(), +}; + +#else + // 0x07008EA0 - 0x07009E38 static const Gfx intro_seg7_dl_07008EA0[] = { - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, intro_seg7_texture_070086A0), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, intro_seg7_texture_1), gsDPLoadSync(), gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)), gsSPVertex(intro_seg7_vertex_07000000, 16, 0), @@ -2885,7 +8194,7 @@ static const Gfx intro_seg7_dl_07008EA0[] = { // 0x07009E38 - 0x0700ADC0 static const Gfx intro_seg7_dl_07009E38[] = { - gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, intro_seg7_texture_07007EA0), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, intro_seg7_texture_0), gsDPLoadSync(), gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)), gsSPVertex(intro_seg7_vertex_07003500, 15, 0), @@ -3298,7 +8607,7 @@ static const Gfx intro_seg7_dl_0700ADC0[] = { }; // 0x0700B3A0 - 0x0700B420 -const Gfx intro_seg7_dl_0700B3A0[] = { +const Gfx intro_seg7_dl_logo[] = { gsDPPipeSync(), gsDPSetCombineMode(G_CC_MODULATERGB, G_CC_MODULATERGB), gsSPClearGeometryMode(G_LIGHTING), @@ -3317,16 +8626,38 @@ const Gfx intro_seg7_dl_0700B3A0[] = { gsSPEndDisplayList(), }; -// 0x0700B420 - 0x0700B460 -static const Vtx intro_seg7_vertex_0700B420[] = { +#endif + +#if defined(VERSION_CN) +// 0x0700B860 - 0x0700B8A0 +static const Vtx intro_seg7_vertex_copyright_ique[] = { {{{ 96, 42, -1}, 0, { 0, 512}, {0xff, 0xff, 0xff, 0xff}}}, {{{ 224, 42, -1}, 0, { 4096, 512}, {0xff, 0xff, 0xff, 0xff}}}, {{{ 224, 58, -1}, 0, { 4096, 0}, {0xff, 0xff, 0xff, 0xff}}}, {{{ 96, 58, -1}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}}, }; +// 0x0700B8A0 - 0x0700B8E0 +static const Vtx intro_seg7_vertex_copyright[] = { + {{{ 96, 58, -1}, 0, { 0, 512}, {0xff, 0xff, 0xff, 0xff}}}, + {{{ 224, 58, -1}, 0, { 4096, 512}, {0xff, 0xff, 0xff, 0xff}}}, + {{{ 224, 75, -1}, 0, { 4096, 0}, {0xff, 0xff, 0xff, 0xff}}}, + {{{ 96, 75, -1}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}}, +}; + +#else + +// 0x0700B420 - 0x0700B460 +static const Vtx intro_seg7_vertex_copyright[] = { + {{{ 96, 42, -1}, 0, { 0, 512}, {0xff, 0xff, 0xff, 0xff}}}, + {{{ 224, 42, -1}, 0, { 4096, 512}, {0xff, 0xff, 0xff, 0xff}}}, + {{{ 224, 58, -1}, 0, { 4096, 0}, {0xff, 0xff, 0xff, 0xff}}}, + {{{ 96, 58, -1}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}}, +}; +#endif + // 0x0700B460 - 0x0700B4A0 -static const Vtx intro_seg7_vertex_0700B460[] = { +static const Vtx intro_seg7_vertex_tm[] = { {{{ 268, 180, -1}, 0, { 0, 512}, {0xff, 0xff, 0xff, 0xff}}}, {{{ 284, 180, -1}, 0, { 544, 512}, {0xff, 0xff, 0xff, 0xff}}}, {{{ 284, 196, -1}, 0, { 544, 0}, {0xff, 0xff, 0xff, 0xff}}}, @@ -3335,45 +8666,63 @@ static const Vtx intro_seg7_vertex_0700B460[] = { #if defined(VERSION_EU) || defined(VERSION_SH) // 0x0700B4A0 - 0x0700B4A2 -ALIGNED8 static const Texture intro_seg7_texture_0700B4A0[] = { +ALIGNED8 static const Texture intro_seg7_texture_copyright[] = { #include "levels/intro/2_eu_copyright.rgba16.inc.c" }; +#elif defined(VERSION_CN) +// 0x0700B920 - 0x0700C920 +ALIGNED8 static const Texture intro_seg7_texture_copyright[] = { +#include "levels/intro/2_cn_copyright.rgba16.inc.c" +}; + +// 0x0700C920 - 0x0700D920 +ALIGNED8 static const Texture intro_seg7_texture_copyright_ique[] = { +#include "levels/intro/2_cn_copyright_ique.rgba16.inc.c" +}; + #else // 0x0700B4A0 - 0x0700B4A2 -ALIGNED8 static const Texture intro_seg7_texture_0700B4A0[] = { +ALIGNED8 static const Texture intro_seg7_texture_copyright[] = { #include "levels/intro/2_copyright.rgba16.inc.c" }; #endif #if defined(VERSION_EU) // 0x0700C4A0 - 0x0700D4A0 -ALIGNED8 static const u8 intro_seg7_texture_0700C4A0[] = { +ALIGNED8 static const u8 intro_seg7_texture_tm[] = { #include "levels/intro/3_eu_tm.rgba16.inc.c" }; -#elif defined(VERSION_SH) -ALIGNED8 static const u8 intro_seg7_texture_0700C4A0[] = { + +#elif defined(VERSION_SH) || defined(VERSION_CN) +ALIGNED8 static const u8 intro_seg7_texture_tm[] = { #include "levels/intro/3_sh_tm.rgba16.inc.c" }; + #else // 0x0700C4A0 - 0x0700D4A0 -ALIGNED8 static const Texture intro_seg7_texture_0700C4A0[] = { +ALIGNED8 static const Texture intro_seg7_texture_tm[] = { #include "levels/intro/3_tm.rgba16.inc.c" }; #endif // 0x0700C6A0 - 0x0700C790 -const Gfx intro_seg7_dl_0700C6A0[] = { +const Gfx intro_seg7_dl_copyright[] = { gsDPPipeSync(), gsDPSetCombineMode(G_CC_DECALFADE, G_CC_DECALFADE), gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - - gsDPLoadTextureBlock(intro_seg7_texture_0700B4A0, G_IM_FMT_RGBA, G_IM_SIZ_16b, 128, 16, 0, G_TX_CLAMP, G_TX_CLAMP, 7, 4, G_TX_NOLOD, G_TX_NOLOD), - gsSPVertex(intro_seg7_vertex_0700B420, 4, 0), +#if defined(VERSION_CN) + gsDPLoadTextureBlock(intro_seg7_texture_copyright_ique, G_IM_FMT_RGBA, G_IM_SIZ_16b, 128, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 7, 4, G_TX_NOLOD, G_TX_NOLOD), + gsSPVertex(intro_seg7_vertex_copyright_ique, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(0, 2, 3, 0), +#endif + gsDPLoadTextureBlock(intro_seg7_texture_copyright, G_IM_FMT_RGBA, G_IM_SIZ_16b, 128, 16, 0, G_TX_CLAMP, G_TX_CLAMP, 7, 4, G_TX_NOLOD, G_TX_NOLOD), + gsSPVertex(intro_seg7_vertex_copyright, 4, 0), gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), - gsDPLoadTextureBlock(intro_seg7_texture_0700C4A0, G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 16, 0, G_TX_CLAMP, G_TX_CLAMP, 4, 4, G_TX_NOLOD, G_TX_NOLOD), - gsSPVertex(intro_seg7_vertex_0700B460, 4, 0), + gsDPLoadTextureBlock(intro_seg7_texture_tm, G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 16, 0, G_TX_CLAMP, G_TX_CLAMP, 4, 4, G_TX_NOLOD, G_TX_NOLOD), + gsSPVertex(intro_seg7_vertex_tm, 4, 0), gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), diff --git a/levels/intro/script.c b/levels/intro/script.c index 04b8fc4c..60fe93f3 100644 --- a/levels/intro/script.c +++ b/levels/intro/script.c @@ -21,7 +21,7 @@ const LevelScript level_intro_splash_screen[] = { INIT_LEVEL(), FIXED_LOAD(/*loadAddr*/ _goddardSegmentStart, /*romStart*/ _goddardSegmentRomStart, /*romEnd*/ _goddardSegmentRomEnd), - LOAD_RAW(/*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd), + LOAD_RAW (/*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd), LOAD_MIO0(/*seg*/ 0x07, _intro_segment_7SegmentRomStart, _intro_segment_7SegmentRomEnd), // Load "Super Mario 64" logo @@ -48,7 +48,7 @@ const LevelScript level_intro_mario_head_regular[] = { BLACKOUT(/*active*/ TRUE), FIXED_LOAD(/*loadAddr*/ _goddardSegmentStart, /*romStart*/ _goddardSegmentRomStart, /*romEnd*/ _goddardSegmentRomEnd), LOAD_MARIO_HEAD(/*loadHeadID*/ REGULAR_FACE), - LOAD_RAW(/*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd), + LOAD_RAW (/*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x0A, _title_screen_bg_mio0SegmentRomStart, _title_screen_bg_mio0SegmentRomEnd), ALLOC_LEVEL_POOL(), @@ -73,7 +73,7 @@ const LevelScript level_intro_mario_head_dizzy[] = { BLACKOUT(/*active*/ TRUE), FIXED_LOAD(/*loadAddr*/ _goddardSegmentStart, /*romStart*/ _goddardSegmentRomStart, /*romEnd*/ _goddardSegmentRomEnd), LOAD_MARIO_HEAD(/*loadHeadID*/ DIZZY_FACE), - LOAD_RAW(/*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd), + LOAD_RAW (/*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x0A, _title_screen_bg_mio0SegmentRomStart, _title_screen_bg_mio0SegmentRomEnd), ALLOC_LEVEL_POOL(), @@ -95,9 +95,9 @@ const LevelScript level_intro_mario_head_dizzy[] = { const LevelScript level_intro_entry_4[] = { INIT_LEVEL(), - LOAD_RAW(/*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd), + LOAD_RAW (/*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x0A, _title_screen_bg_mio0SegmentRomStart, _title_screen_bg_mio0SegmentRomEnd), - LOAD_MIO0(/*seg*/ 0x07, _debug_level_select_mio0SegmentRomStart, _debug_level_select_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _debug_level_select_mio0SegmentRomStart, _debug_level_select_mio0SegmentRomEnd), FIXED_LOAD(/*loadAddr*/ _goddardSegmentStart, /*romStart*/ _goddardSegmentRomStart, /*romEnd*/ _goddardSegmentRomEnd), ALLOC_LEVEL_POOL(), diff --git a/levels/jrb/areas/1/geo.inc.c b/levels/jrb/areas/1/geo.inc.c index 2a38df57..de74d6cf 100644 --- a/levels/jrb/areas/1/geo.inc.c +++ b/levels/jrb/areas/1/geo.inc.c @@ -1,39 +1,39 @@ // 0x0E000A18 const GeoLayout jrb_geo_000A18[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND(BACKGROUND_ABOVE_CLOUDS, geo_skybox_main), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 25000, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, jrb_seg7_dl_07002FD0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_07004940), - GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_07004C78), - GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_070058C8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_070069B0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_07007570), - GEO_DISPLAY_LIST(LAYER_ALPHA, jrb_seg7_dl_07007718), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x1201, geo_movtex_draw_water_regions), - GEO_ASM(0x1205, geo_movtex_draw_water_regions), - GEO_RENDER_OBJ(), - GEO_ASM( 14, geo_envfx_main), + GEO_BACKGROUND(BACKGROUND_ABOVE_CLOUDS, geo_skybox_main), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_cannon_circle_base), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 25000, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, jrb_seg7_dl_07002FD0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_07004940), + GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_07004C78), + GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_070058C8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_070069B0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_07007570), + GEO_DISPLAY_LIST(LAYER_ALPHA, jrb_seg7_dl_07007718), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x1201, geo_movtex_draw_water_regions), + GEO_ASM(0x1205, geo_movtex_draw_water_regions), + GEO_RENDER_OBJ(), + GEO_ASM( 14, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_cannon_circle_base), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/jrb/areas/1/macro.inc.c b/levels/jrb/areas/1/macro.inc.c index f183a655..a9e9055d 100644 --- a/levels/jrb/areas/1/macro.inc.c +++ b/levels/jrb/areas/1/macro.inc.c @@ -1,66 +1,66 @@ // 0x0700C4E8 - 0x0700C756 const MacroObject jrb_seg7_area_1_macro_objs[] = { - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 250, /*pos*/ -6325, 1126, 1730, /*behParam*/ DIALOG_060), - MACRO_OBJECT(/*preset*/ macro_coin_ring_vertical, /*yaw*/ 0, /*pos*/ 5060, -4420, 720), - MACRO_OBJECT(/*preset*/ macro_box_metal_cap, /*yaw*/ 0, /*pos*/ 2077, 1832, 7465), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal_flying, /*yaw*/ 0, /*pos*/ -1780, -650, 4200), - MACRO_OBJECT(/*preset*/ macro_floor_switch_hidden_objects, /*yaw*/ 45, /*pos*/ 2260, 1536, 6854), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 45, /*pos*/ 4269, 1336, 4866), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 45, /*pos*/ 4128, 1336, 5007), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 45, /*pos*/ 3400, 1336, 5155), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 45, /*pos*/ 3261, 1336, 5294), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 45, /*pos*/ 3120, 1336, 5435), - MACRO_OBJECT(/*preset*/ macro_seaweed_bundle, /*yaw*/ 0, /*pos*/ 3551, -5120, 2744), - MACRO_OBJECT(/*preset*/ macro_seaweed_bundle, /*yaw*/ 0, /*pos*/ 4201, -5120, 3863), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ -2440, -2980, -4120), - MACRO_OBJECT(/*preset*/ macro_box_metal_cap, /*yaw*/ 0, /*pos*/ 279, -2600, -7340), - MACRO_OBJECT(/*preset*/ macro_seaweed_bundle, /*yaw*/ 0, /*pos*/ 4846, -5119, 1213), - MACRO_OBJECT(/*preset*/ macro_seaweed_bundle, /*yaw*/ 0, /*pos*/ -800, -1023, 4040), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 45, /*pos*/ 3621, 1336, 6529), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 45, /*pos*/ 3485, 1336, 6665), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 45, /*pos*/ 2671, 1336, 6459), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4900, 1800, 4700), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -2535, 2110, 6113), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -1845, -1003, 3518), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -546, 530, 5930), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 648, -490, 4256), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 3642, -5103, 3175), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4400, 2200, 1300), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 5400, 2200, 1300), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 180, /*pos*/ -900, -2966, -2200, /*behParam*/ DIALOG_073), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 80, /*pos*/ -2552, 1331, 6573, /*behParam*/ DIALOG_051), - MACRO_OBJECT(/*preset*/ macro_clam_shell, /*yaw*/ 315, /*pos*/ -1800, -1023, 3500), - MACRO_OBJECT(/*preset*/ macro_clam_shell, /*yaw*/ 225, /*pos*/ -480, 512, 5980), - MACRO_OBJECT(/*preset*/ macro_clam_shell, /*yaw*/ 270, /*pos*/ 700, -511, 4250), - MACRO_OBJECT(/*preset*/ macro_clam_shell, /*yaw*/ 90, /*pos*/ 3600, -5119, 3200), - MACRO_OBJECT(/*preset*/ macro_fish_group, /*yaw*/ 0, /*pos*/ -2523, -246, 4676), - MACRO_OBJECT(/*preset*/ macro_fish_group, /*yaw*/ 0, /*pos*/ 5876, -4738, 3476), - MACRO_OBJECT(/*preset*/ macro_blue_coin_switch, /*yaw*/ 0, /*pos*/ 6011, -2966, -5511), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 5900, -2966, -7347), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 5300, -2966, -7347), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 4700, -2966, -7347), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 4100, -2966, -7347), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 3500, -2966, -7347), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 2900, -2966, -7347), - MACRO_OBJECT(/*preset*/ macro_goomba_triplet_spawner, /*yaw*/ 0, /*pos*/ 3305, -2966, -6147), - MACRO_OBJECT(/*preset*/ macro_coin_line_vertical, /*yaw*/ 0, /*pos*/ 255, 1160, 7633), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal_flying, /*yaw*/ 0, /*pos*/ 51, 960, 2744), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 5060, -4220, 720), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ 5140, -4380, 0, /*behParam*/ 1), - MACRO_OBJECT(/*preset*/ macro_fish_group_2, /*yaw*/ 0, /*pos*/ 4072, -4463, 2027), - MACRO_OBJECT(/*preset*/ macro_fish_group_2, /*yaw*/ 0, /*pos*/ -290, 190, 4645), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ -4235, 1247, 2137, /*behParam*/ 0x00), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 45, /*pos*/ 2536, 1336, 6594), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 45, /*pos*/ 4220, 1536, 5700), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 45, /*pos*/ 3987, 1336, 5148), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 45, /*pos*/ 3280, 1536, 5940), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 45, /*pos*/ 3200, 1536, 6720), - MACRO_OBJECT(/*preset*/ macro_box_metal_cap, /*yaw*/ 0, /*pos*/ -7160, 1340, 2580), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 180, /*pos*/ -6910, 1120, 2380, /*behParam*/ DIALOG_113), - MACRO_OBJECT(/*preset*/ macro_box_three_coins, /*yaw*/ 0, /*pos*/ -5800, 1340, -750), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 670, 3000, 3315), - MACRO_OBJECT(/*preset*/ macro_koopa_shell_underwater, /*yaw*/ 0, /*pos*/ -1480, -1000, 4820), - MACRO_OBJECT(/*preset*/ macro_clam_shell, /*yaw*/ 180, /*pos*/ -1480, -1040, 4820), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 5290, -2966, -4740, /*behParam*/ DIALOG_169), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 250, /*pos*/ -6325, 1126, 1730, /*bhvParam*/ DIALOG_060), + MACRO_OBJECT (/*preset*/ macro_coin_ring_vertical_flying, /*yaw*/ 0, /*pos*/ 5060, -4420, 720), + MACRO_OBJECT (/*preset*/ macro_box_metal_cap, /*yaw*/ 0, /*pos*/ 2077, 1832, 7465), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal_flying, /*yaw*/ 0, /*pos*/ -1780, -650, 4200), + MACRO_OBJECT (/*preset*/ macro_floor_switch_hidden_objects, /*yaw*/ 45, /*pos*/ 2260, 1536, 6854), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 45, /*pos*/ 4269, 1336, 4866), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 45, /*pos*/ 4128, 1336, 5007), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 45, /*pos*/ 3400, 1336, 5155), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 45, /*pos*/ 3261, 1336, 5294), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 45, /*pos*/ 3120, 1336, 5435), + MACRO_OBJECT (/*preset*/ macro_seaweed_bundle, /*yaw*/ 0, /*pos*/ 3551, -5120, 2744), + MACRO_OBJECT (/*preset*/ macro_seaweed_bundle, /*yaw*/ 0, /*pos*/ 4201, -5120, 3863), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ -2440, -2980, -4120), + MACRO_OBJECT (/*preset*/ macro_box_metal_cap, /*yaw*/ 0, /*pos*/ 279, -2600, -7340), + MACRO_OBJECT (/*preset*/ macro_seaweed_bundle, /*yaw*/ 0, /*pos*/ 4846, -5119, 1213), + MACRO_OBJECT (/*preset*/ macro_seaweed_bundle, /*yaw*/ 0, /*pos*/ -800, -1023, 4040), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 45, /*pos*/ 3621, 1336, 6529), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 45, /*pos*/ 3485, 1336, 6665), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 45, /*pos*/ 2671, 1336, 6459), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4900, 1800, 4700), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -2535, 2110, 6113), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -1845, -1003, 3518), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -546, 530, 5930), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 648, -490, 4256), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 3642, -5103, 3175), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4400, 2200, 1300), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 5400, 2200, 1300), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 180, /*pos*/ -900, -2966, -2200, /*bhvParam*/ DIALOG_073), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 80, /*pos*/ -2552, 1331, 6573, /*bhvParam*/ DIALOG_051), + MACRO_OBJECT (/*preset*/ macro_clam_shell, /*yaw*/ 315, /*pos*/ -1800, -1023, 3500), + MACRO_OBJECT (/*preset*/ macro_clam_shell, /*yaw*/ 225, /*pos*/ -480, 512, 5980), + MACRO_OBJECT (/*preset*/ macro_clam_shell, /*yaw*/ 270, /*pos*/ 700, -511, 4250), + MACRO_OBJECT (/*preset*/ macro_clam_shell, /*yaw*/ 90, /*pos*/ 3600, -5119, 3200), + MACRO_OBJECT (/*preset*/ macro_fish_spawner_few_blue, /*yaw*/ 0, /*pos*/ -2523, -246, 4676), + MACRO_OBJECT (/*preset*/ macro_fish_spawner_few_blue, /*yaw*/ 0, /*pos*/ 5876, -4738, 3476), + MACRO_OBJECT (/*preset*/ macro_blue_coin_switch, /*yaw*/ 0, /*pos*/ 6011, -2966, -5511), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 5900, -2966, -7347), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 5300, -2966, -7347), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 4700, -2966, -7347), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 4100, -2966, -7347), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 3500, -2966, -7347), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 2900, -2966, -7347), + MACRO_OBJECT (/*preset*/ macro_goomba_triplet_spawner, /*yaw*/ 0, /*pos*/ 3305, -2966, -6147), + MACRO_OBJECT (/*preset*/ macro_coin_line_vertical_flying, /*yaw*/ 0, /*pos*/ 255, 1160, 7633), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal_flying, /*yaw*/ 0, /*pos*/ 51, 960, 2744), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 5060, -4220, 720), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ 5140, -4380, 0, /*bhvParam*/ 1), + MACRO_OBJECT (/*preset*/ macro_fish_spawner_few_cyan, /*yaw*/ 0, /*pos*/ 4072, -4463, 2027), + MACRO_OBJECT (/*preset*/ macro_fish_spawner_few_cyan, /*yaw*/ 0, /*pos*/ -290, 190, 4645), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ -4235, 1247, 2137, /*bhvParam*/ 0x00), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 45, /*pos*/ 2536, 1336, 6594), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 45, /*pos*/ 4220, 1536, 5700), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 45, /*pos*/ 3987, 1336, 5148), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 45, /*pos*/ 3280, 1536, 5940), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 45, /*pos*/ 3200, 1536, 6720), + MACRO_OBJECT (/*preset*/ macro_box_metal_cap, /*yaw*/ 0, /*pos*/ -7160, 1340, 2580), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 180, /*pos*/ -6910, 1120, 2380, /*bhvParam*/ DIALOG_113), + MACRO_OBJECT (/*preset*/ macro_box_three_coins, /*yaw*/ 0, /*pos*/ -5800, 1340, -750), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 670, 3000, 3315), + MACRO_OBJECT (/*preset*/ macro_koopa_shell_underwater, /*yaw*/ 0, /*pos*/ -1480, -1000, 4820), + MACRO_OBJECT (/*preset*/ macro_clam_shell, /*yaw*/ 180, /*pos*/ -1480, -1040, 4820), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 5290, -2966, -4740, /*bhvParam*/ DIALOG_169), MACRO_OBJECT_END(), }; diff --git a/levels/jrb/areas/2/geo.inc.c b/levels/jrb/areas/2/geo.inc.c index c9a15fb9..5a01901b 100644 --- a/levels/jrb/areas/2/geo.inc.c +++ b/levels/jrb/areas/2/geo.inc.c @@ -1,30 +1,30 @@ // 0x0E000AFC const GeoLayout jrb_geo_000AFC[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND_COLOR(0x0001), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 10000, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_0700EF00), - GEO_DISPLAY_LIST(LAYER_ALPHA, jrb_seg7_dl_0700FE48), - GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_07010548), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x1202, geo_movtex_draw_water_regions), - GEO_RENDER_OBJ(), - GEO_ASM( 2, geo_envfx_main), + GEO_BACKGROUND_COLOR(0x0001), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 10000, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_0700EF00), + GEO_DISPLAY_LIST(LAYER_ALPHA, jrb_seg7_dl_0700FE48), + GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_07010548), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x1202, geo_movtex_draw_water_regions), + GEO_RENDER_OBJ(), + GEO_ASM( 2, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/jrb/areas/2/macro.inc.c b/levels/jrb/areas/2/macro.inc.c index 54c9469e..b97ac5a6 100644 --- a/levels/jrb/areas/2/macro.inc.c +++ b/levels/jrb/areas/2/macro.inc.c @@ -1,5 +1,5 @@ // 0x07011370 - 0x0701137C const MacroObject jrb_seg7_area_2_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_box_star_1, /*yaw*/ 0, /*pos*/ 0, 1600, 3000), + MACRO_OBJECT(/*preset*/ macro_box_star_act_1, /*yaw*/ 0, /*pos*/ 0, 1600, 3000), MACRO_OBJECT_END(), }; diff --git a/levels/jrb/falling_pillar/geo.inc.c b/levels/jrb/falling_pillar/geo.inc.c index c3cf3b40..c5a0c67e 100644 --- a/levels/jrb/falling_pillar/geo.inc.c +++ b/levels/jrb/falling_pillar/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000900 const GeoLayout jrb_geo_000900[] = { - GEO_CULLING_RADIUS(1600), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_0700AE48), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1600), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_0700AE48), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/jrb/falling_pillar_base/geo.inc.c b/levels/jrb/falling_pillar_base/geo.inc.c index e8d430ba..637556f7 100644 --- a/levels/jrb/falling_pillar_base/geo.inc.c +++ b/levels/jrb/falling_pillar_base/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000918 const GeoLayout jrb_geo_000918[] = { - GEO_CULLING_RADIUS(300), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_0700AFB0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(300), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_0700AFB0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/jrb/floating_platform/geo.inc.c b/levels/jrb/floating_platform/geo.inc.c index e297895e..2d42c7bf 100644 --- a/levels/jrb/floating_platform/geo.inc.c +++ b/levels/jrb/floating_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000948 const GeoLayout jrb_geo_000948[] = { - GEO_CULLING_RADIUS(900), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_07007DC8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(900), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_07007DC8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/jrb/leveldata.c b/levels/jrb/leveldata.c index 12cc6b72..1b70f0ac 100644 --- a/levels/jrb/leveldata.c +++ b/levels/jrb/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "dialog_ids.h" diff --git a/levels/jrb/rock/geo.inc.c b/levels/jrb/rock/geo.inc.c index c406320d..1a500ba6 100644 --- a/levels/jrb/rock/geo.inc.c +++ b/levels/jrb/rock/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000930 const GeoLayout jrb_geo_000930[] = { - GEO_CULLING_RADIUS(1100), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_07007AC8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1100), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_07007AC8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/jrb/script.c b/levels/jrb/script.c index 75402867..c7769fe9 100644 --- a/levels/jrb/script.c +++ b/levels/jrb/script.c @@ -16,95 +16,95 @@ #include "levels/jrb/header.h" static const LevelScript script_func_local_1[] = { - OBJECT_WITH_ACTS(/*model*/ MODEL_JRB_SUNKEN_SHIP, /*pos*/ 2385, 3589, 3727, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSunkenShipPart, /*acts*/ ACT_1), - OBJECT_WITH_ACTS(/*model*/ MODEL_JRB_SUNKEN_SHIP_BACK, /*pos*/ 2385, 3589, 3727, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSunkenShipPart, /*acts*/ ACT_1), - OBJECT_WITH_ACTS(/*model*/ MODEL_JRB_SHIP_LEFT_HALF_PART, /*pos*/ 5385, -5520, 2428, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSunkenShipPart2, /*acts*/ ACT_1), - OBJECT_WITH_ACTS(/*model*/ MODEL_JRB_SHIP_RIGHT_HALF_PART, /*pos*/ 5385, -5520, 2428, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSunkenShipPart2, /*acts*/ ACT_1), - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 5385, -5520, 2428, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvInSunkenShip, /*acts*/ ACT_1), - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 5385, -5520, 2428, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvInSunkenShip2, /*acts*/ ACT_1), - OBJECT_WITH_ACTS(/*model*/ MODEL_JRB_SHIP_LEFT_HALF_PART, /*pos*/ 4880, 820, 2375, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvShipPart3, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_JRB_SHIP_BACK_LEFT_PART, /*pos*/ 4880, 820, 2375, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvShipPart3, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_JRB_SHIP_RIGHT_HALF_PART, /*pos*/ 4880, 820, 2375, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvShipPart3, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_JRB_SHIP_BACK_RIGHT_PART, /*pos*/ 4880, 820, 2375, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvShipPart3, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 4880, 820, 2375, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvInSunkenShip3, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_JRB_SLIDING_BOX, /*pos*/ 4668, 1434, 2916, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvJrbSlidingBox, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_UNAGI, /*pos*/ 6048, -5381, 1154, /*angle*/ 0, 340, 0, /*behParam*/ 0x00000000, /*beh*/ bhvUnagi, /*acts*/ ACT_1), - OBJECT_WITH_ACTS(/*model*/ MODEL_UNAGI, /*pos*/ 8270, -3130, 1846, /*angle*/ 0, 285, 0, /*behParam*/ 0x01010000, /*beh*/ bhvUnagi, /*acts*/ ACT_2), - OBJECT_WITH_ACTS(/*model*/ MODEL_UNAGI, /*pos*/ 6048, -5381, 1154, /*angle*/ 0, 340, 0, /*behParam*/ 0x02020000, /*beh*/ bhvUnagi, /*acts*/ ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 4988, -5221, 2473, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvJetStream, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1800, -2812, -2100, /*angle*/ 0, 0, 0, /*behParam*/ 0x02000000, /*beh*/ bhvTreasureChestsJrb), - OBJECT_WITH_ACTS(/*model*/ MODEL_BOBOMB_BUDDY, /*pos*/ -1956, 1331, 6500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBobombBuddyOpensCannon, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_JRB_SUNKEN_SHIP, /*pos*/ 2385, 3589, 3727, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvSunkenShipPart, /*acts*/ ACT_1), + OBJECT_WITH_ACTS(/*model*/ MODEL_JRB_SUNKEN_SHIP_BACK, /*pos*/ 2385, 3589, 3727, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvSunkenShipPart, /*acts*/ ACT_1), + OBJECT_WITH_ACTS(/*model*/ MODEL_JRB_SHIP_LEFT_HALF_PART, /*pos*/ 5385, -5520, 2428, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvSunkenShipPart2, /*acts*/ ACT_1), + OBJECT_WITH_ACTS(/*model*/ MODEL_JRB_SHIP_RIGHT_HALF_PART, /*pos*/ 5385, -5520, 2428, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvSunkenShipPart2, /*acts*/ ACT_1), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 5385, -5520, 2428, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvInSunkenShip, /*acts*/ ACT_1), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 5385, -5520, 2428, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvInSunkenShip2, /*acts*/ ACT_1), + OBJECT_WITH_ACTS(/*model*/ MODEL_JRB_SHIP_LEFT_HALF_PART, /*pos*/ 4880, 820, 2375, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvShipPart3, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_JRB_SHIP_BACK_LEFT_PART, /*pos*/ 4880, 820, 2375, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvShipPart3, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_JRB_SHIP_RIGHT_HALF_PART, /*pos*/ 4880, 820, 2375, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvShipPart3, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_JRB_SHIP_BACK_RIGHT_PART, /*pos*/ 4880, 820, 2375, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvShipPart3, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 4880, 820, 2375, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvInSunkenShip3, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_JRB_SLIDING_BOX, /*pos*/ 4668, 1434, 2916, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvJRBSlidingBox, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_UNAGI, /*pos*/ 6048, -5381, 1154, /*angle*/ 0, 340, 0, /*bhvParam*/ 0, /*bhv*/ bhvUnagi, /*acts*/ ACT_1), + OBJECT_WITH_ACTS(/*model*/ MODEL_UNAGI, /*pos*/ 8270, -3130, 1846, /*angle*/ 0, 285, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_2) | BPARAM2(0x01), /*bhv*/ bhvUnagi, /*acts*/ ACT_2), + OBJECT_WITH_ACTS(/*model*/ MODEL_UNAGI, /*pos*/ 6048, -5381, 1154, /*angle*/ 0, 340, 0, /*bhvParam*/ BPARAM1(0x02) | BPARAM2(0x02), /*bhv*/ bhvUnagi, /*acts*/ ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 4988, -5221, 2473, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvJetStream, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT (/*model*/ MODEL_NONE, /*pos*/ -1800, -2812, -2100, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_3), /*bhv*/ bhvTreasureChestsJRB), + OBJECT_WITH_ACTS(/*model*/ MODEL_BOBOMB_BUDDY, /*pos*/ -1956, 1331, 6500, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBobombBuddyOpensCannon, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), RETURN(), }; static const LevelScript script_func_local_2[] = { - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 1834, -2556, -7090, /*angle*/ 0, 194, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ -2005, -2556, -3506, /*angle*/ 0, 135, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 1578, -2556, -5554, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 42, -2556, -6578, /*angle*/ 0, 135, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ -981, -2556, -5298, /*angle*/ 0, 255, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ -6549, 1536, 4343, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 1322, -2556, -3506, /*angle*/ 0, 165, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 6442, -2556, -6322, /*angle*/ 0, 135, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 3882, -2556, -5042, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 1497, 1741, 7810, /*angle*/ 0, 14, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ -3978, 1536, -85, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ -5228, 1230, 2106, /*angle*/ 0, 323, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ -7481, 1536, 185, /*angle*/ 0, 149, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ -5749, 1536, -1113, /*angle*/ 0, 255, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ -5332, 1434, 1023, /*angle*/ 0, 315, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ -815, -613, 3556, /*angle*/ 0, 315, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ -3429, 819, 4948, /*angle*/ 0, 284, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ -1940, 410, 2377, /*angle*/ 0, 194, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ -1798, -716, 4330, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ -845, 922, 7668, /*angle*/ 0, 315, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 6741, -2886, 3556, /*angle*/ 0, 135, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 255, -101, 4719, /*angle*/ 0, 45, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 1787, -306, 5133, /*angle*/ 0, 315, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 1079, -613, 2299, /*angle*/ 0, 75, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 2931, -1697, 980, /*angle*/ 0, 315, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 3036, -4709, 4027, /*angle*/ 0, 315, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 4222, -1125, 7083, /*angle*/ 0, 104, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 6650, -613, 4941, /*angle*/ 0, 315, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 5764, -4709, 4427, /*angle*/ 0, 315, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 3693, -4709, 856, /*angle*/ 0, 135, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 7981, 410, 2704, /*angle*/ 0, 165, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 2917, -3046, 4818, /*angle*/ 0, 241, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 5896, -393, -123, /*angle*/ 0, 315, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRockSolid), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 53, 2355, 2724, /*angle*/ 0, 0, 0, /*behParam*/ 0x00290000, /*beh*/ bhvPoleGrabbing), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 659, 2560, 3314, /*angle*/ 0, 0, 0, /*behParam*/ 0x00290000, /*beh*/ bhvPoleGrabbing), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1087, 2150, 3798, /*angle*/ 0, 0, 0, /*behParam*/ 0x00290000, /*beh*/ bhvPoleGrabbing), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2535, 1075, 6113, /*angle*/ 0, 0, 0, /*behParam*/ 0x00610000, /*beh*/ bhvPoleGrabbing), - OBJECT(/*model*/ MODEL_JRB_FALLING_PILLAR, /*pos*/ 2078, -2863, -4696, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFallingPillar), - OBJECT(/*model*/ MODEL_JRB_FALLING_PILLAR, /*pos*/ -1403, -2863, -4696, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFallingPillar), - OBJECT(/*model*/ MODEL_JRB_FALLING_PILLAR, /*pos*/ -1096, -2863, -3262, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFallingPillar), - OBJECT(/*model*/ MODEL_JRB_FALLING_PILLAR, /*pos*/ 337, -2863, -5106, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFallingPillar), - OBJECT(/*model*/ MODEL_JRB_FALLING_PILLAR, /*pos*/ 2078, -2863, -6232, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFallingPillar), - OBJECT(/*model*/ MODEL_JRB_FALLING_PILLAR, /*pos*/ 4330, -2863, -5618, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFallingPillar), - OBJECT(/*model*/ MODEL_JRB_FALLING_PILLAR_BASE, /*pos*/ 2078, -2966, -4696, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPillarBase), - OBJECT(/*model*/ MODEL_JRB_FALLING_PILLAR_BASE, /*pos*/ -1403, -2966, -4696, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPillarBase), - OBJECT(/*model*/ MODEL_JRB_FALLING_PILLAR_BASE, /*pos*/ -1096, -2966, -3262, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPillarBase), - OBJECT(/*model*/ MODEL_JRB_FALLING_PILLAR_BASE, /*pos*/ 337, -2966, -5106, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPillarBase), - OBJECT(/*model*/ MODEL_JRB_FALLING_PILLAR_BASE, /*pos*/ 2078, -2966, -6232, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPillarBase), - OBJECT(/*model*/ MODEL_JRB_FALLING_PILLAR_BASE, /*pos*/ 4330, -2966, -5618, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPillarBase), - OBJECT(/*model*/ MODEL_JRB_FLOATING_PLATFORM, /*pos*/ -1059, 1025, 7072, /*angle*/ 0, 247, 0, /*behParam*/ 0x00000000, /*beh*/ bhvJrbFloatingPlatform), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4236, 1044, 2136, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvInsideCannon), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 1834, -2556, -7090, /*angle*/ 0, 194, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ -2005, -2556, -3506, /*angle*/ 0, 135, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 1578, -2556, -5554, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 42, -2556, -6578, /*angle*/ 0, 135, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ -981, -2556, -5298, /*angle*/ 0, 255, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ -6549, 1536, 4343, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 1322, -2556, -3506, /*angle*/ 0, 165, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 6442, -2556, -6322, /*angle*/ 0, 135, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 3882, -2556, -5042, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 1497, 1741, 7810, /*angle*/ 0, 14, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ -3978, 1536, -85, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ -5228, 1230, 2106, /*angle*/ 0, 323, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ -7481, 1536, 185, /*angle*/ 0, 149, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ -5749, 1536, -1113, /*angle*/ 0, 255, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ -5332, 1434, 1023, /*angle*/ 0, 315, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ -815, -613, 3556, /*angle*/ 0, 315, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ -3429, 819, 4948, /*angle*/ 0, 284, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ -1940, 410, 2377, /*angle*/ 0, 194, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ -1798, -716, 4330, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ -845, 922, 7668, /*angle*/ 0, 315, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 6741, -2886, 3556, /*angle*/ 0, 135, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 255, -101, 4719, /*angle*/ 0, 45, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 1787, -306, 5133, /*angle*/ 0, 315, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 1079, -613, 2299, /*angle*/ 0, 75, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 2931, -1697, 980, /*angle*/ 0, 315, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 3036, -4709, 4027, /*angle*/ 0, 315, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 4222, -1125, 7083, /*angle*/ 0, 104, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 6650, -613, 4941, /*angle*/ 0, 315, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 5764, -4709, 4427, /*angle*/ 0, 315, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 3693, -4709, 856, /*angle*/ 0, 135, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 7981, 410, 2704, /*angle*/ 0, 165, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 2917, -3046, 4818, /*angle*/ 0, 241, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_JRB_ROCK, /*pos*/ 5896, -393, -123, /*angle*/ 0, 315, 0, /*bhvParam*/ 0, /*bhv*/ bhvRockSolid), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 53, 2355, 2724, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(41), /*bhv*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 659, 2560, 3314, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(41), /*bhv*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1087, 2150, 3798, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(41), /*bhv*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2535, 1075, 6113, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(97), /*bhv*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_JRB_FALLING_PILLAR, /*pos*/ 2078, -2863, -4696, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvFallingPillar), + OBJECT(/*model*/ MODEL_JRB_FALLING_PILLAR, /*pos*/ -1403, -2863, -4696, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvFallingPillar), + OBJECT(/*model*/ MODEL_JRB_FALLING_PILLAR, /*pos*/ -1096, -2863, -3262, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvFallingPillar), + OBJECT(/*model*/ MODEL_JRB_FALLING_PILLAR, /*pos*/ 337, -2863, -5106, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvFallingPillar), + OBJECT(/*model*/ MODEL_JRB_FALLING_PILLAR, /*pos*/ 2078, -2863, -6232, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvFallingPillar), + OBJECT(/*model*/ MODEL_JRB_FALLING_PILLAR, /*pos*/ 4330, -2863, -5618, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvFallingPillar), + OBJECT(/*model*/ MODEL_JRB_FALLING_PILLAR_BASE, /*pos*/ 2078, -2966, -4696, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvPillarBase), + OBJECT(/*model*/ MODEL_JRB_FALLING_PILLAR_BASE, /*pos*/ -1403, -2966, -4696, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvPillarBase), + OBJECT(/*model*/ MODEL_JRB_FALLING_PILLAR_BASE, /*pos*/ -1096, -2966, -3262, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvPillarBase), + OBJECT(/*model*/ MODEL_JRB_FALLING_PILLAR_BASE, /*pos*/ 337, -2966, -5106, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvPillarBase), + OBJECT(/*model*/ MODEL_JRB_FALLING_PILLAR_BASE, /*pos*/ 2078, -2966, -6232, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvPillarBase), + OBJECT(/*model*/ MODEL_JRB_FALLING_PILLAR_BASE, /*pos*/ 4330, -2966, -5618, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvPillarBase), + OBJECT(/*model*/ MODEL_JRB_FLOATING_PLATFORM, /*pos*/ -1059, 1025, 7072, /*angle*/ 0, 247, 0, /*bhvParam*/ 0, /*bhv*/ bhvJRBFloatingPlatform), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4236, 1044, 2136, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvInsideCannon), RETURN(), }; static const LevelScript script_func_local_3[] = { - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 4900, 2400, 800, /*angle*/ 0, 0, 0, /*behParam*/ 0x03000000, /*beh*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 4900, 2400, 800, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_4), /*bhv*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), #if defined(VERSION_JP) || defined(VERSION_SH) - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 1540, 2160, 2130, /*angle*/ 0, 0, 0, /*behParam*/ 0x04000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 1540, 2160, 2130, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_5), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), #else - OBJECT_WITH_ACTS(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 1540, 2160, 2130, /*angle*/ 0, 0, 0, /*behParam*/ 0x04080000, /*beh*/ bhvExclamationBox, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 1540, 2160, 2130, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_5) | BPARAM2(EXCLAMATION_BOX_BP_STAR_ACT_1), /*bhv*/ bhvExclamationBox, /*acts*/ ALL_ACTS), #endif - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 5000, -4800, 2500, /*angle*/ 0, 0, 0, /*behParam*/ 0x05000000, /*beh*/ bhvStar, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 5000, -4800, 2500, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_6), /*bhv*/ bhvStar, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), RETURN(), }; static const LevelScript script_func_local_4[] = { - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 400, -350, -2700, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTreasureChestsShip), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 400, -350, -2700, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvTreasureChestsShip), RETURN(), }; @@ -114,18 +114,18 @@ static const LevelScript script_func_local_5[] = { const LevelScript level_jrb_entry[] = { INIT_LEVEL(), - LOAD_MIO0( /*seg*/ 0x07, _jrb_segment_7SegmentRomStart, _jrb_segment_7SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0B, _effect_mio0SegmentRomStart, _effect_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _jrb_segment_7SegmentRomStart, _jrb_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0B, _effect_mio0SegmentRomStart, _effect_mio0SegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _water_mio0SegmentRomStart, _water_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0A, _clouds_skybox_mio0SegmentRomStart, _clouds_skybox_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x05, _group4_mio0SegmentRomStart, _group4_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0C, _group4_geoSegmentRomStart, _group4_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x06, _group13_mio0SegmentRomStart, _group13_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0D, _group13_geoSegmentRomStart, _group13_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0A, _clouds_skybox_mio0SegmentRomStart, _clouds_skybox_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x05, _group4_mio0SegmentRomStart, _group4_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0C, _group4_geoSegmentRomStart, _group4_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x06, _group13_mio0SegmentRomStart, _group13_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0D, _group13_geoSegmentRomStart, _group13_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_1), JUMP_LINK(script_func_global_5), JUMP_LINK(script_func_global_14), @@ -142,11 +142,11 @@ const LevelScript level_jrb_entry[] = { LOAD_MODEL_FROM_GEO(MODEL_JRB_FLOATING_PLATFORM, jrb_geo_000948), AREA(/*index*/ 1, jrb_geo_000A18), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6750, 2126, 1482, /*angle*/ 0, 90, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvSpinAirborneWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_JRB, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF3, /*destLevel*/ LEVEL_JRB, /*destArea*/ 0x02, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x35, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x67, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6750, 2126, 1482, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvSpinAirborneWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_JRB, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_WARP_FLOOR, /*destLevel*/ LEVEL_JRB, /*destArea*/ 2, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_35, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_67, /*flags*/ WARP_NO_CHECKPOINT), WHIRLPOOL(/*unk2*/ 0, /*unk3*/ 3, /*pos*/ 4979, -5222, 2482, /*strength*/ -30), JUMP_LINK(script_func_local_1), JUMP_LINK(script_func_local_2), @@ -158,10 +158,10 @@ const LevelScript level_jrb_entry[] = { END_AREA(), AREA(/*index*/ 2, jrb_geo_000AFC), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 928, 1050, -1248, /*angle*/ 0, 180, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvSwimmingWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_JRB, /*destArea*/ 0x02, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x35, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x67, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 928, 1050, -1248, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvSwimmingWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_JRB, /*destArea*/ 2, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_35, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_67, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_4), JUMP_LINK(script_func_local_5), TERRAIN(/*terrainData*/ jrb_seg7_area_2_collision), diff --git a/levels/jrb/sliding_box/geo.inc.c b/levels/jrb/sliding_box/geo.inc.c index 74d85b91..edd36ba6 100644 --- a/levels/jrb/sliding_box/geo.inc.c +++ b/levels/jrb/sliding_box/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000960 const GeoLayout jrb_geo_000960[] = { - GEO_CULLING_RADIUS(300), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_070080F8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(300), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_070080F8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/jrb/wooden_ship/geo.inc.c b/levels/jrb/wooden_ship/geo.inc.c index 80b97ded..abae94b9 100644 --- a/levels/jrb/wooden_ship/geo.inc.c +++ b/levels/jrb/wooden_ship/geo.inc.c @@ -1,55 +1,55 @@ // 0x0E000978 const GeoLayout jrb_geo_000978[] = { - GEO_CULLING_RADIUS(5000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_07008FD8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(5000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_07008FD8), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000990 const GeoLayout jrb_geo_000990[] = { - GEO_CULLING_RADIUS(5000), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_update_layer_transparency), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, jrb_seg7_dl_070090B0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(5000), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_update_layer_transparency), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, jrb_seg7_dl_070090B0), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E0009B0 const GeoLayout jrb_geo_0009B0[] = { - GEO_CULLING_RADIUS(5000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_07009A58), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(5000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_07009A58), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E0009C8 const GeoLayout jrb_geo_0009C8[] = { - GEO_CULLING_RADIUS(5000), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_update_layer_transparency), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, jrb_seg7_dl_07009B30), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(5000), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_update_layer_transparency), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, jrb_seg7_dl_07009B30), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E0009E8 const GeoLayout jrb_geo_0009E8[] = { - GEO_CULLING_RADIUS(5000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_0700A608), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(5000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_0700A608), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000A00 const GeoLayout jrb_geo_000A00[] = { - GEO_CULLING_RADIUS(5000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_0700AC68), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(5000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_0700AC68), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/level_defines.h b/levels/level_defines.h index c14f2523..19959a90 100644 --- a/levels/level_defines.h +++ b/levels/level_defines.h @@ -20,15 +20,15 @@ STUB_LEVEL( "", LEVEL_UNKNOWN_1, COURSE_NONE, 20000, 0x00, 0x00, 0x00, _, _) STUB_LEVEL( "", LEVEL_UNKNOWN_2, COURSE_NONE, 20000, 0x00, 0x00, 0x00, _, _) STUB_LEVEL( "", LEVEL_UNKNOWN_3, COURSE_NONE, 20000, 0x00, 0x00, 0x00, _, _) -DEFINE_LEVEL("TERESA OBAKE", LEVEL_BBH, COURSE_BBH, bbh, spooky, 28000, 0x28, 0x28, 0x28, sDynBbh, sCamBBH) +DEFINE_LEVEL("TERESA OBAKE", LEVEL_BBH, COURSE_BBH, bbh, spooky, 28000, 0x28, 0x28, 0x28, sDynBBH, sCamBBH) DEFINE_LEVEL("YYAMA1 % YSLD1", LEVEL_CCM, COURSE_CCM, ccm, snow, 17000, 0x10, 0x38, 0x38, _, sCamCCM) DEFINE_LEVEL("SELECT ROOM", LEVEL_CASTLE, COURSE_NONE, castle_inside, inside, 20000, 0x20, 0x20, 0x30, _, sCamCastle) -DEFINE_LEVEL("HORROR DUNGEON", LEVEL_HMC, COURSE_HMC, hmc, cave, 16000, 0x28, 0x28, 0x28, sDynHmc, sCamHMC) +DEFINE_LEVEL("HORROR DUNGEON", LEVEL_HMC, COURSE_HMC, hmc, cave, 16000, 0x28, 0x28, 0x28, sDynHMC, sCamHMC) DEFINE_LEVEL("SABAKU % PYRMD", LEVEL_SSL, COURSE_SSL, ssl, generic, 15000, 0x08, 0x30, 0x30, _, sCamSSL) DEFINE_LEVEL("BATTLE FIELD", LEVEL_BOB, COURSE_BOB, bob, generic, 15000, 0x08, 0x08, 0x08, _, _) DEFINE_LEVEL("YUKIYAMA2", LEVEL_SL, COURSE_SL, sl, snow, 14000, 0x10, 0x28, 0x28, _, sCamSL) -DEFINE_LEVEL("POOL KAI", LEVEL_WDW, COURSE_WDW, wdw, grass, 17000, 0x10, 0x18, 0x18, sDynWdw, _) -DEFINE_LEVEL("WTDG % TINBOTU", LEVEL_JRB, COURSE_JRB, jrb, water, 20000, 0x10, 0x18, 0x18, sDynJrb, _) +DEFINE_LEVEL("POOL KAI", LEVEL_WDW, COURSE_WDW, wdw, grass, 17000, 0x10, 0x18, 0x18, sDynWDW, _) +DEFINE_LEVEL("WTDG % TINBOTU", LEVEL_JRB, COURSE_JRB, jrb, water, 20000, 0x10, 0x18, 0x18, sDynJRB, _) DEFINE_LEVEL("BIG WORLD", LEVEL_THI, COURSE_THI, thi, grass, 20000, 0x0c, 0x0c, 0x20, _, sCamTHI) DEFINE_LEVEL("CLOCK TOWER", LEVEL_TTC, COURSE_TTC, ttc, machine, 18000, 0x18, 0x18, 0x18, _, _) DEFINE_LEVEL("RAINBOW CRUISE", LEVEL_RR, COURSE_RR, rr, sky, 20000, 0x20, 0x20, 0x20, _, sCamRR) @@ -39,7 +39,7 @@ DEFINE_LEVEL("EXT2 TIKA LAVA", LEVEL_BITFS, COURSE_BITFS, bitfs, DEFINE_LEVEL("EXT9 SUISOU", LEVEL_SA, COURSE_SA, sa, inside, 20000, 0x10, 0x10, 0x10, _, _) DEFINE_LEVEL("EXT3 HEAVEN", LEVEL_BITS, COURSE_BITS, bits, sky, 16000, 0x28, 0x28, 0x28, _, _) DEFINE_LEVEL("FIREB1 % INVLC", LEVEL_LLL, COURSE_LLL, lll, fire, 22000, 0x08, 0x30, 0x30, _, _) -DEFINE_LEVEL("WATER LAND", LEVEL_DDD, COURSE_DDD, ddd, water, 17000, 0x10, 0x20, 0x20, sDynDdd, _) +DEFINE_LEVEL("WATER LAND", LEVEL_DDD, COURSE_DDD, ddd, water, 17000, 0x10, 0x20, 0x20, sDynDDD, _) DEFINE_LEVEL("MOUNTAIN", LEVEL_WF, COURSE_WF, wf, grass, 13000, 0x08, 0x08, 0x08, _, _) DEFINE_LEVEL("ENDING", LEVEL_ENDING, COURSE_CAKE_END, ending, generic, 20000, 0x00, 0x00, 0x00, _, _) DEFINE_LEVEL("URANIWA", LEVEL_CASTLE_COURTYARD, COURSE_NONE, castle_courtyard, outside, 20000, 0x08, 0x08, 0x08, _, _) diff --git a/levels/lll/areas/1/10/geo.inc.c b/levels/lll/areas/1/10/geo.inc.c index 6d58c3e9..b26d352e 100644 --- a/levels/lll/areas/1/10/geo.inc.c +++ b/levels/lll/areas/1/10/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000A78 const GeoLayout lll_geo_000A78[] = { - GEO_CULLING_RADIUS(1300), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_070165C8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1300), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_070165C8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/areas/1/11/geo.inc.c b/levels/lll/areas/1/11/geo.inc.c index 16e66037..e3be5ee6 100644 --- a/levels/lll/areas/1/11/geo.inc.c +++ b/levels/lll/areas/1/11/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000A90 const GeoLayout lll_geo_000A90[] = { - GEO_CULLING_RADIUS(1000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07016B00), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07016B00), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/areas/1/12/geo.inc.c b/levels/lll/areas/1/12/geo.inc.c index 6f3599ce..257b5fc4 100644 --- a/levels/lll/areas/1/12/geo.inc.c +++ b/levels/lll/areas/1/12/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000AA8 const GeoLayout lll_geo_000AA8[] = { - GEO_CULLING_RADIUS(900), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_070174E0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(900), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_070174E0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/areas/1/13/geo.inc.c b/levels/lll/areas/1/13/geo.inc.c index 0947c8ec..5b69a54f 100644 --- a/levels/lll/areas/1/13/geo.inc.c +++ b/levels/lll/areas/1/13/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000AC0 const GeoLayout lll_geo_000AC0[] = { - GEO_CULLING_RADIUS(1000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_070178A8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_070178A8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/areas/1/14/geo.inc.c b/levels/lll/areas/1/14/geo.inc.c index 13c7d3bf..614e0283 100644 --- a/levels/lll/areas/1/14/geo.inc.c +++ b/levels/lll/areas/1/14/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000AD8 const GeoLayout lll_geo_000AD8[] = { - GEO_CULLING_RADIUS(500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07017B50), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07017B50), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/areas/1/15/geo.inc.c b/levels/lll/areas/1/15/geo.inc.c index a1c367a8..75a70364 100644 --- a/levels/lll/areas/1/15/geo.inc.c +++ b/levels/lll/areas/1/15/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000AF0 const GeoLayout lll_geo_000AF0[] = { - GEO_CULLING_RADIUS(500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, lll_seg7_dl_07017F40), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, lll_seg7_dl_07017F40), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/areas/1/4/geo.inc.c b/levels/lll/areas/1/4/geo.inc.c index 7e78e075..252e8e64 100644 --- a/levels/lll/areas/1/4/geo.inc.c +++ b/levels/lll/areas/1/4/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0009E0 const GeoLayout lll_geo_0009E0[] = { - GEO_CULLING_RADIUS(1700), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07013D28), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1700), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07013D28), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/areas/1/5/geo.inc.c b/levels/lll/areas/1/5/geo.inc.c index 47192964..351992a2 100644 --- a/levels/lll/areas/1/5/geo.inc.c +++ b/levels/lll/areas/1/5/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0009F8 const GeoLayout lll_geo_0009F8[] = { - GEO_CULLING_RADIUS(2200), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07014788), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2200), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07014788), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/areas/1/6/geo.inc.c b/levels/lll/areas/1/6/geo.inc.c index e98b6def..3d65f937 100644 --- a/levels/lll/areas/1/6/geo.inc.c +++ b/levels/lll/areas/1/6/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000A10 const GeoLayout lll_geo_000A10[] = { - GEO_CULLING_RADIUS(1200), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07014BD8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1200), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07014BD8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/areas/1/7/geo.inc.c b/levels/lll/areas/1/7/geo.inc.c index 58c344f9..844a7473 100644 --- a/levels/lll/areas/1/7/geo.inc.c +++ b/levels/lll/areas/1/7/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000A28 const GeoLayout lll_geo_000A28[] = { - GEO_CULLING_RADIUS(2000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07015458), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07015458), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/areas/1/8/geo.inc.c b/levels/lll/areas/1/8/geo.inc.c index 8f353dac..ff4b716a 100644 --- a/levels/lll/areas/1/8/geo.inc.c +++ b/levels/lll/areas/1/8/geo.inc.c @@ -1,9 +1,9 @@ // 0x0E000A40 const GeoLayout lll_geo_000A40[] = { - GEO_CULLING_RADIUS(1700), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07015C88), - GEO_DISPLAY_LIST(LAYER_ALPHA, lll_seg7_dl_07015E20), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1700), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07015C88), + GEO_DISPLAY_LIST(LAYER_ALPHA, lll_seg7_dl_07015E20), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/areas/1/9/geo.inc.c b/levels/lll/areas/1/9/geo.inc.c index 7ab21641..87eb9b75 100644 --- a/levels/lll/areas/1/9/geo.inc.c +++ b/levels/lll/areas/1/9/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000A60 const GeoLayout lll_geo_000A60[] = { - GEO_CULLING_RADIUS(1500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07016250), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07016250), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/areas/1/geo.inc.c b/levels/lll/areas/1/geo.inc.c index 865cdc96..dd76b9a4 100644 --- a/levels/lll/areas/1/geo.inc.c +++ b/levels/lll/areas/1/geo.inc.c @@ -1,30 +1,30 @@ // 0x0E000E00 const GeoLayout lll_geo_000E00[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND(BACKGROUND_FLAMING_SKY, geo_skybox_main), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(64, 100, 20000, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(1, 0, 2000, 6000, 0, 0, -8192, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_070134E0), - GEO_DISPLAY_LIST(LAYER_ALPHA, lll_seg7_dl_070138F8), - GEO_DISPLAY_LIST(LAYER_ALPHA, lll_seg7_dl_070137C0), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x2201, geo_movtex_draw_nocolor), - GEO_RENDER_OBJ(), - GEO_ASM( 12, geo_envfx_main), + GEO_BACKGROUND(BACKGROUND_FLAMING_SKY, geo_skybox_main), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(64, 100, 20000, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(1, 0, 2000, 6000, 0, 0, -8192, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_070134E0), + GEO_DISPLAY_LIST(LAYER_ALPHA, lll_seg7_dl_070138F8), + GEO_DISPLAY_LIST(LAYER_ALPHA, lll_seg7_dl_070137C0), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x2201, geo_movtex_draw_nocolor), + GEO_RENDER_OBJ(), + GEO_ASM( 12, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/areas/1/macro.inc.c b/levels/lll/areas/1/macro.inc.c index f4813073..c5c951f4 100644 --- a/levels/lll/areas/1/macro.inc.c +++ b/levels/lll/areas/1/macro.inc.c @@ -1,55 +1,55 @@ // 0x0701CE18 - 0x0701D018 const MacroObject lll_seg7_area_1_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5800, 220, 250), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5100, 220, 250), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5100, 220, 1000), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -4400, 220, 1000), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -4400, 220, 1750), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5100, 220, 1750), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5800, 220, 1750), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5800, 220, 1000), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -3728, 154, 6057, /*behParam*/ DIALOG_068), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 315, /*pos*/ 1350, 154, 5942, /*behParam*/ DIALOG_016), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal_flying, /*yaw*/ 0, /*pos*/ -5760, 100, 3040), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ -5100, 540, -4070, /*behParam*/ 4), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -5400, 320, -4070), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -4800, 320, -4070), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -5100, 320, -3770), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -5100, 320, -4370), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal_flying, /*yaw*/ 90, /*pos*/ -1920, 50, -4120), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 3300, 50, -2692), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 3330, 50, -3700), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 4340, 50, -3700), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 4340, 50, -2692), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 0, 200, 1200), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 1200, 200, 0), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -1200, 200, 0), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 0, 307, -2085), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal_flying, /*yaw*/ 90, /*pos*/ 3000, 50, 520), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ 7160, 320, 1400), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ 3800, 320, -5600), - MACRO_OBJECT(/*preset*/ macro_mr_i, /*yaw*/ 0, /*pos*/ 6673, 154, -3060), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ 6673, 154, -3060), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 45, /*pos*/ 6300, 755, -6580), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 6326, 686, -6580), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 0, 46, -7400), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -3133, 230, -2126), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -3320, 161, -1860), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -3346, 70, -1486), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2760, 113, -2260), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2440, 67, -2286), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -2333, 653, 886), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal_flying, /*yaw*/ 0, /*pos*/ -1960, 38, 3693), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -6966, 41, 3906), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -6806, 188, 4653), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -6033, 70, 4973), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -6780, 275, -6766), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -3980, 154, 6057, /*behParam*/ DIALOG_086), - MACRO_OBJECT(/*preset*/ macro_jumping_box, /*yaw*/ 0, /*pos*/ 4170, 154, -1940), - MACRO_OBJECT(/*preset*/ macro_flamethrower, /*yaw*/ 0, /*pos*/ 1400, -20, 3720), - MACRO_OBJECT(/*preset*/ macro_flamethrower, /*yaw*/ 0, /*pos*/ 7100, -20, 3420), - MACRO_OBJECT(/*preset*/ macro_flamethrower, /*yaw*/ 0, /*pos*/ 7300, -20, 5160), - MACRO_OBJECT(/*preset*/ macro_flamethrower, /*yaw*/ 0, /*pos*/ 7100, -20, 5700), - MACRO_OBJECT(/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ -5900, 460, 6400), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5800, 220, 250), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5100, 220, 250), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5100, 220, 1000), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -4400, 220, 1000), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -4400, 220, 1750), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5100, 220, 1750), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5800, 220, 1750), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5800, 220, 1000), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -3728, 154, 6057, /*bhvParam*/ DIALOG_068), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 315, /*pos*/ 1350, 154, 5942, /*bhvParam*/ DIALOG_016), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal_flying, /*yaw*/ 0, /*pos*/ -5760, 100, 3040), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ -5100, 540, -4070, /*bhvParam*/ 4), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -5400, 320, -4070), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -4800, 320, -4070), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -5100, 320, -3770), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -5100, 320, -4370), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal_flying, /*yaw*/ 90, /*pos*/ -1920, 50, -4120), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 3300, 50, -2692), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 3330, 50, -3700), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 4340, 50, -3700), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 4340, 50, -2692), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 0, 200, 1200), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 1200, 200, 0), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -1200, 200, 0), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 0, 307, -2085), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal_flying, /*yaw*/ 90, /*pos*/ 3000, 50, 520), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ 7160, 320, 1400), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ 3800, 320, -5600), + MACRO_OBJECT (/*preset*/ macro_mr_i, /*yaw*/ 0, /*pos*/ 6673, 154, -3060), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ 6673, 154, -3060), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 45, /*pos*/ 6300, 755, -6580), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 6326, 686, -6580), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 0, 46, -7400), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -3133, 230, -2126), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -3320, 161, -1860), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -3346, 70, -1486), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2760, 113, -2260), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2440, 67, -2286), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -2333, 653, 886), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal_flying, /*yaw*/ 0, /*pos*/ -1960, 38, 3693), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -6966, 41, 3906), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -6806, 188, 4653), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -6033, 70, 4973), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -6780, 275, -6766), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -3980, 154, 6057, /*bhvParam*/ DIALOG_086), + MACRO_OBJECT (/*preset*/ macro_jumping_box, /*yaw*/ 0, /*pos*/ 4170, 154, -1940), + MACRO_OBJECT (/*preset*/ macro_flamethrower, /*yaw*/ 0, /*pos*/ 1400, -20, 3720), + MACRO_OBJECT (/*preset*/ macro_flamethrower, /*yaw*/ 0, /*pos*/ 7100, -20, 3420), + MACRO_OBJECT (/*preset*/ macro_flamethrower, /*yaw*/ 0, /*pos*/ 7300, -20, 5160), + MACRO_OBJECT (/*preset*/ macro_flamethrower, /*yaw*/ 0, /*pos*/ 7100, -20, 5700), + MACRO_OBJECT (/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ -5900, 460, 6400), MACRO_OBJECT_END(), }; diff --git a/levels/lll/areas/2/geo.inc.c b/levels/lll/areas/2/geo.inc.c index a12fc825..ea8da767 100644 --- a/levels/lll/areas/2/geo.inc.c +++ b/levels/lll/areas/2/geo.inc.c @@ -1,33 +1,33 @@ // 0x0E000EC0 const GeoLayout lll_geo_000EC0[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND_COLOR(0x0001), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(2, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_070235C8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07024C18), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_070255D8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07025A48), - GEO_DISPLAY_LIST(LAYER_ALPHA, lll_seg7_dl_07025BD8), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x2202, geo_movtex_draw_nocolor), - GEO_ASM(0x2202, geo_movtex_draw_water_regions), - GEO_RENDER_OBJ(), - GEO_ASM( 0, geo_envfx_main), + GEO_BACKGROUND_COLOR(0x0001), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(2, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_070235C8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07024C18), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_070255D8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07025A48), + GEO_DISPLAY_LIST(LAYER_ALPHA, lll_seg7_dl_07025BD8), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x2202, geo_movtex_draw_nocolor), + GEO_ASM(0x2202, geo_movtex_draw_water_regions), + GEO_RENDER_OBJ(), + GEO_ASM( 0, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/areas/2/macro.inc.c b/levels/lll/areas/2/macro.inc.c index 92590b4d..1c382cb1 100644 --- a/levels/lll/areas/2/macro.inc.c +++ b/levels/lll/areas/2/macro.inc.c @@ -7,8 +7,8 @@ const MacroObject lll_seg7_area_2_macro_objs[] = { MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 2520, 174, -1220), MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 2840, 249, -460), MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 2800, 449, 460), - MACRO_OBJECT(/*preset*/ macro_bully, /*yaw*/ 0, /*pos*/ 1300, 1029, 2300), - MACRO_OBJECT(/*preset*/ macro_bully, /*yaw*/ 0, /*pos*/ -960, 2442, -2610), + MACRO_OBJECT(/*preset*/ macro_small_bully, /*yaw*/ 0, /*pos*/ 1300, 1029, 2300), + MACRO_OBJECT(/*preset*/ macro_small_bully, /*yaw*/ 0, /*pos*/ -960, 2442, -2610), MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 2180, 775, 1720), MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1700, 1029, 2100), MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 940, 1029, 2540), @@ -24,7 +24,7 @@ const MacroObject lll_seg7_area_2_macro_objs[] = { MACRO_OBJECT(/*preset*/ macro_hidden_1up_in_pole, /*yaw*/ 0, /*pos*/ 1078, 4170, -2270), MACRO_OBJECT(/*preset*/ macro_recovery_heart, /*yaw*/ 0, /*pos*/ -1627, 1750, 750), MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 182, 2623, -2529), - MACRO_OBJECT(/*preset*/ macro_bouncing_fireball, /*yaw*/ 25, /*pos*/ 740, 0, -1840), - MACRO_OBJECT(/*preset*/ macro_bouncing_fireball, /*yaw*/ 225, /*pos*/ 1420, 0, -1720), + MACRO_OBJECT(/*preset*/ macro_bouncing_fireball_2, /*yaw*/ 25, /*pos*/ 740, 0, -1840), + MACRO_OBJECT(/*preset*/ macro_bouncing_fireball_2, /*yaw*/ 225, /*pos*/ 1420, 0, -1720), MACRO_OBJECT_END(), }; diff --git a/levels/lll/collapsing_wooden_platform/geo.inc.c b/levels/lll/collapsing_wooden_platform/geo.inc.c index c36cf6dc..892fe7f4 100644 --- a/levels/lll/collapsing_wooden_platform/geo.inc.c +++ b/levels/lll/collapsing_wooden_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000B80 const GeoLayout lll_geo_000B80[] = { - GEO_CULLING_RADIUS(450), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07019160), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(450), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07019160), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/drawbridge_part/geo.inc.c b/levels/lll/drawbridge_part/geo.inc.c index ee552c89..1dbaa365 100644 --- a/levels/lll/drawbridge_part/geo.inc.c +++ b/levels/lll/drawbridge_part/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000B20 const GeoLayout lll_geo_000B20[] = { - GEO_CULLING_RADIUS(850), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07018680), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(850), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07018680), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/leveldata.c b/levels/lll/leveldata.c index 17596093..21f19c12 100644 --- a/levels/lll/leveldata.c +++ b/levels/lll/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "dialog_ids.h" diff --git a/levels/lll/long_wooden_bridge/geo.inc.c b/levels/lll/long_wooden_bridge/geo.inc.c index 359f7b49..a1afd595 100644 --- a/levels/lll/long_wooden_bridge/geo.inc.c +++ b/levels/lll/long_wooden_bridge/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000B98 const GeoLayout lll_geo_000B98[] = { - GEO_CULLING_RADIUS(900), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_070193E0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(900), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_070193E0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/moving_octagonal_mesh_platform/geo.inc.c b/levels/lll/moving_octagonal_mesh_platform/geo.inc.c index 05ac7802..fd532985 100644 --- a/levels/lll/moving_octagonal_mesh_platform/geo.inc.c +++ b/levels/lll/moving_octagonal_mesh_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000B08 const GeoLayout lll_geo_000B08[] = { - GEO_CULLING_RADIUS(550), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, lll_seg7_dl_07018380), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(550), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, lll_seg7_dl_07018380), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/puzzle_piece/geo.inc.c b/levels/lll/puzzle_piece/geo.inc.c index ca199e5c..1655b7ca 100644 --- a/levels/lll/puzzle_piece/geo.inc.c +++ b/levels/lll/puzzle_piece/geo.inc.c @@ -1,139 +1,139 @@ // 0x0E000C10 const GeoLayout lll_geo_000C10[] = { - GEO_CULLING_RADIUS(350), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A388), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(350), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A388), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000C30 const GeoLayout lll_geo_000C30[] = { - GEO_CULLING_RADIUS(350), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A3B8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(350), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A3B8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000C50 const GeoLayout lll_geo_000C50[] = { - GEO_CULLING_RADIUS(350), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A3E8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(350), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A3E8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000C70 const GeoLayout lll_geo_000C70[] = { - GEO_CULLING_RADIUS(350), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A418), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(350), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A418), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000C90 const GeoLayout lll_geo_000C90[] = { - GEO_CULLING_RADIUS(350), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A448), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(350), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A448), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000CB0 const GeoLayout lll_geo_000CB0[] = { - GEO_CULLING_RADIUS(350), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A478), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(350), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A478), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000CD0 const GeoLayout lll_geo_000CD0[] = { - GEO_CULLING_RADIUS(350), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A4A8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(350), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A4A8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000CF0 const GeoLayout lll_geo_000CF0[] = { - GEO_CULLING_RADIUS(350), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A4D8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(350), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A4D8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000D10 const GeoLayout lll_geo_000D10[] = { - GEO_CULLING_RADIUS(350), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A508), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(350), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A508), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000D30 const GeoLayout lll_geo_000D30[] = { - GEO_CULLING_RADIUS(350), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A538), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(350), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A538), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000D50 const GeoLayout lll_geo_000D50[] = { - GEO_CULLING_RADIUS(350), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A568), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(350), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A568), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000D70 const GeoLayout lll_geo_000D70[] = { - GEO_CULLING_RADIUS(350), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A598), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(350), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A598), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000D90 const GeoLayout lll_geo_000D90[] = { - GEO_CULLING_RADIUS(350), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A5C8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(350), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A5C8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000DB0 const GeoLayout lll_geo_000DB0[] = { - GEO_CULLING_RADIUS(350), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A5F8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(350), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A5F8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, lll_seg7_dl_0701A628), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/rolling_log/geo.inc.c b/levels/lll/rolling_log/geo.inc.c index ad1fb7d8..3a5aded9 100644 --- a/levels/lll/rolling_log/geo.inc.c +++ b/levels/lll/rolling_log/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000DE8 const GeoLayout lll_geo_000DE8[] = { - GEO_CULLING_RADIUS(1300), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701AD70), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1300), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701AD70), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/rotating_block_fire_bars/geo.inc.c b/levels/lll/rotating_block_fire_bars/geo.inc.c index 415b2977..32cfec94 100644 --- a/levels/lll/rotating_block_fire_bars/geo.inc.c +++ b/levels/lll/rotating_block_fire_bars/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000B38 const GeoLayout lll_geo_000B38[] = { - GEO_CULLING_RADIUS(500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07018A30), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07018A30), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/rotating_hexagonal_ring/geo.inc.c b/levels/lll/rotating_hexagonal_ring/geo.inc.c index cbacacfe..140ba508 100644 --- a/levels/lll/rotating_hexagonal_ring/geo.inc.c +++ b/levels/lll/rotating_hexagonal_ring/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000BB0 const GeoLayout lll_geo_000BB0[] = { - GEO_CULLING_RADIUS(2100), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07019A08), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2100), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07019A08), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/script.c b/levels/lll/script.c index 1322d6c2..0873972c 100644 --- a/levels/lll/script.c +++ b/levels/lll/script.c @@ -18,118 +18,118 @@ // Unlike most levels, level geometry objects in LLL are defined as regular objects instead of terrain objects. static const LevelScript script_func_local_1[] = { - OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 3840, 0, -5631, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_04, /*pos*/ 4992, 0, -639, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_05, /*pos*/ 7168, 0, 1408, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_06, /*pos*/ 0, 0, 3712, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_07, /*pos*/ -3199, 0, 3456, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_08, /*pos*/ -5119, 0, -2047, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0A, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0B, /*pos*/ 0, 0, 6272, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0C, /*pos*/ 5632, 0, 1408, /*angle*/ 0, 270, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0C, /*pos*/ 2048, 0, 3456, /*angle*/ 0, 180, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0C, /*pos*/ -4607, 0, 3456, /*angle*/ 0, 270, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0C, /*pos*/ -5119, 0, -511, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0D, /*pos*/ 0, 0, -2047, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 3840, 0, -5631, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_04, /*pos*/ 4992, 0, -639, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_05, /*pos*/ 7168, 0, 1408, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_06, /*pos*/ 0, 0, 3712, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_07, /*pos*/ -3199, 0, 3456, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_08, /*pos*/ -5119, 0, -2047, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0A, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0B, /*pos*/ 0, 0, 6272, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0C, /*pos*/ 5632, 0, 1408, /*angle*/ 0, 270, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0C, /*pos*/ 2048, 0, 3456, /*angle*/ 0, 180, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0C, /*pos*/ -4607, 0, 3456, /*angle*/ 0, 270, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0C, /*pos*/ -5119, 0, -511, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0D, /*pos*/ 0, 0, -2047, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), // This behavior differs from the rest in that it actually has collision rather than being purely visual. // A likely explanation is that this object was added in after the collision model was made, and they didn't want // to redo the collision so they just added a new behavior for it. - OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0E, /*pos*/ -5115, 300, -3200, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvLllHexagonalMesh), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0E, /*pos*/ -5115, 300, -3200, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvLLLHexagonalMesh), RETURN(), }; static const LevelScript script_func_local_2[] = { - OBJECT(/*model*/ MODEL_LLL_DRAWBRIDGE_PART, /*pos*/ -1919, 307, 3648, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvLllDrawbridgeSpawner), - OBJECT(/*model*/ MODEL_LLL_ROTATING_BLOCK_FIRE_BARS, /*pos*/ -5119, 307, -4095, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvLllRotatingBlockWithFireBars), - OBJECT(/*model*/ MODEL_LLL_ROTATING_HEXAGONAL_RING, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvLllRotatingHexagonalRing), - OBJECT(/*model*/ MODEL_LLL_SINKING_RECTANGULAR_PLATFORM, /*pos*/ 3968, 0, 1408, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvLllSinkingRectangularPlatform), - OBJECT(/*model*/ MODEL_LLL_SINKING_RECTANGULAR_PLATFORM, /*pos*/ -5759, 0, 3072, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvLllSinkingRectangularPlatform), - OBJECT(/*model*/ MODEL_LLL_SINKING_RECTANGULAR_PLATFORM, /*pos*/ 2816, 0, 512, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvLllSinkingRectangularPlatform), - OBJECT(/*model*/ MODEL_LLL_SINKING_RECTANGULAR_PLATFORM, /*pos*/ -1791, 0, -4095, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvLllSinkingRectangularPlatform), - OBJECT(/*model*/ MODEL_LLL_SINKING_SQUARE_PLATFORMS, /*pos*/ 3840, 0, -3199, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvLllSinkingSquarePlatforms), - OBJECT(/*model*/ MODEL_LLL_TILTING_SQUARE_PLATFORM, /*pos*/ 922, -153, 2150, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvLllTiltingInvertedPyramid), - OBJECT(/*model*/ MODEL_LLL_TILTING_SQUARE_PLATFORM, /*pos*/ 1741, -153, 1741, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvLllTiltingInvertedPyramid), - OBJECT(/*model*/ MODEL_LLL_TILTING_SQUARE_PLATFORM, /*pos*/ 1741, -153, 2560, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvLllTiltingInvertedPyramid), - OBJECT(/*model*/ MODEL_LLL_TILTING_SQUARE_PLATFORM, /*pos*/ 2099, -153, -306, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvLllTiltingInvertedPyramid), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5119, 102, 1024, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvLllBowserPuzzle), + OBJECT(/*model*/ MODEL_LLL_DRAWBRIDGE_PART, /*pos*/ -1919, 307, 3648, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvLLLDrawbridgeSpawner), + OBJECT(/*model*/ MODEL_LLL_ROTATING_BLOCK_FIRE_BARS, /*pos*/ -5119, 307, -4095, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvLLLRotatingBlockWithFireBars), + OBJECT(/*model*/ MODEL_LLL_ROTATING_HEXAGONAL_RING, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvLLLRotatingHexagonalRing), + OBJECT(/*model*/ MODEL_LLL_SINKING_RECTANGULAR_PLATFORM, /*pos*/ 3968, 0, 1408, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvLLLSinkingRectangularPlatform), + OBJECT(/*model*/ MODEL_LLL_SINKING_RECTANGULAR_PLATFORM, /*pos*/ -5759, 0, 3072, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvLLLSinkingRectangularPlatform), + OBJECT(/*model*/ MODEL_LLL_SINKING_RECTANGULAR_PLATFORM, /*pos*/ 2816, 0, 512, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvLLLSinkingRectangularPlatform), + OBJECT(/*model*/ MODEL_LLL_SINKING_RECTANGULAR_PLATFORM, /*pos*/ -1791, 0, -4095, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvLLLSinkingRectangularPlatform), + OBJECT(/*model*/ MODEL_LLL_SINKING_SQUARE_PLATFORMS, /*pos*/ 3840, 0, -3199, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvLLLSinkingSquarePlatforms), + OBJECT(/*model*/ MODEL_LLL_TILTING_SQUARE_PLATFORM, /*pos*/ 922, -153, 2150, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvLLLTiltingInvertedPyramid), + OBJECT(/*model*/ MODEL_LLL_TILTING_SQUARE_PLATFORM, /*pos*/ 1741, -153, 1741, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvLLLTiltingInvertedPyramid), + OBJECT(/*model*/ MODEL_LLL_TILTING_SQUARE_PLATFORM, /*pos*/ 1741, -153, 2560, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvLLLTiltingInvertedPyramid), + OBJECT(/*model*/ MODEL_LLL_TILTING_SQUARE_PLATFORM, /*pos*/ 2099, -153, -306, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvLLLTiltingInvertedPyramid), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5119, 102, 1024, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvLLLBowserPuzzle), RETURN(), }; static const LevelScript script_func_local_3[] = { - OBJECT(/*model*/ MODEL_LLL_MOVING_OCTAGONAL_MESH_PLATFORM, /*pos*/ 1124, 0, -4607, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvLllMovingOctagonalMeshPlatform), - OBJECT(/*model*/ MODEL_LLL_MOVING_OCTAGONAL_MESH_PLATFORM, /*pos*/ 7168, 0, 2432, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvLllMovingOctagonalMeshPlatform), - OBJECT(/*model*/ MODEL_LLL_SINKING_ROCK_BLOCK, /*pos*/ 7168, 0, 7296, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvLllSinkingRockBlock), - OBJECT(/*model*/ MODEL_LLL_ROLLING_LOG, /*pos*/ 6144, 307, 6016, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvLllRollingLog), - OBJECT(/*model*/ MODEL_LLL_ROTATING_HEXAGONAL_PLATFORM, /*pos*/ -5119, 0, -4095, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvLllRotatingHexagonalPlatform), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3583, 0, -4095, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvLllFloatingWoodBridge), + OBJECT(/*model*/ MODEL_LLL_MOVING_OCTAGONAL_MESH_PLATFORM, /*pos*/ 1124, 0, -4607, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvLLLMovingOctagonalMeshPlatform), + OBJECT(/*model*/ MODEL_LLL_MOVING_OCTAGONAL_MESH_PLATFORM, /*pos*/ 7168, 0, 2432, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x01), /*bhv*/ bhvLLLMovingOctagonalMeshPlatform), + OBJECT(/*model*/ MODEL_LLL_SINKING_ROCK_BLOCK, /*pos*/ 7168, 0, 7296, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvLLLSinkingRockBlock), + OBJECT(/*model*/ MODEL_LLL_ROLLING_LOG, /*pos*/ 6144, 307, 6016, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvLLLRollingLog), + OBJECT(/*model*/ MODEL_LLL_ROTATING_HEXAGONAL_PLATFORM, /*pos*/ -5119, 0, -4095, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvLLLRotatingHexagonalPlatform), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3583, 0, -4095, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvLLLFloatingWoodBridge), RETURN(), }; static const LevelScript script_func_local_4[] = { - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3199, 307, 3456, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMrI), - OBJECT(/*model*/ MODEL_BULLY_BOSS, /*pos*/ 0, 307, -4385, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBigBully), - OBJECT(/*model*/ MODEL_BULLY_BOSS, /*pos*/ 4046, 2234, -5521, /*angle*/ 0, 0, 0, /*behParam*/ 0x01000000, /*beh*/ bhvBigBullyWithMinions), - OBJECT(/*model*/ MODEL_BULLY, /*pos*/ -5119, 307, -2482, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSmallBully), - OBJECT(/*model*/ MODEL_BULLY, /*pos*/ 0, 307, 3712, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSmallBully), - OBJECT(/*model*/ MODEL_BULLY, /*pos*/ 6813, 307, 1613, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSmallBully), - OBJECT(/*model*/ MODEL_BULLY, /*pos*/ 7168, 307, 998, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSmallBully), - OBJECT(/*model*/ MODEL_BULLY, /*pos*/ -5130, 285, -1663, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSmallBully), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 200, -2048, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlamethrower), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 500, 2, 5000, /*angle*/ 0, 270, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBouncingFireball), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -700, 2, 4500, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBouncingFireball), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6300, 2, 2625, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBouncingFireball), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3280, 2, -4854, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBouncingFireball), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5996, 2, -390, /*angle*/ 0, 315, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBouncingFireball), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5423, 2, -1991, /*angle*/ 0, 315, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBouncingFireball), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4921, 2, -1504, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBouncingFireball), - OBJECT_WITH_ACTS(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 1050, 550, 6200, /*angle*/ 0, 0, 0, /*behParam*/ 0x00030000, /*beh*/ bhvExclamationBox, /*acts*/ ACT_5 | ACT_6), + OBJECT (/*model*/ MODEL_NONE, /*pos*/ -3199, 307, 3456, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvMrI), + OBJECT (/*model*/ MODEL_BULLY_BOSS, /*pos*/ 0, 307, -4385, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_1), /*bhv*/ bhvBigBully), + OBJECT (/*model*/ MODEL_BULLY_BOSS, /*pos*/ 4046, 2234, -5521, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_2), /*bhv*/ bhvBigBullyWithMinions), + OBJECT (/*model*/ MODEL_BULLY, /*pos*/ -5119, 307, -2482, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvSmallBully), + OBJECT (/*model*/ MODEL_BULLY, /*pos*/ 0, 307, 3712, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvSmallBully), + OBJECT (/*model*/ MODEL_BULLY, /*pos*/ 6813, 307, 1613, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvSmallBully), + OBJECT (/*model*/ MODEL_BULLY, /*pos*/ 7168, 307, 998, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvSmallBully), + OBJECT (/*model*/ MODEL_BULLY, /*pos*/ -5130, 285, -1663, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvSmallBully), + OBJECT (/*model*/ MODEL_NONE, /*pos*/ 0, 200, -2048, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlamethrower), + OBJECT (/*model*/ MODEL_NONE, /*pos*/ 500, 2, 5000, /*angle*/ 0, 270, 0, /*bhvParam*/ 0, /*bhv*/ bhvBouncingFireball), + OBJECT (/*model*/ MODEL_NONE, /*pos*/ -700, 2, 4500, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvBouncingFireball), + OBJECT (/*model*/ MODEL_NONE, /*pos*/ -6300, 2, 2625, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvBouncingFireball), + OBJECT (/*model*/ MODEL_NONE, /*pos*/ -3280, 2, -4854, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBouncingFireball), + OBJECT (/*model*/ MODEL_NONE, /*pos*/ 5996, 2, -390, /*angle*/ 0, 315, 0, /*bhvParam*/ 0, /*bhv*/ bhvBouncingFireball), + OBJECT (/*model*/ MODEL_NONE, /*pos*/ 5423, 2, -1991, /*angle*/ 0, 315, 0, /*bhvParam*/ 0, /*bhv*/ bhvBouncingFireball), + OBJECT (/*model*/ MODEL_NONE, /*pos*/ 4921, 2, -1504, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvBouncingFireball), + OBJECT_WITH_ACTS(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 1050, 550, 6200, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(EXCLAMATION_BOX_BP_KOOPA_SHELL), /*bhv*/ bhvExclamationBox, /*acts*/ ACT_5 | ACT_6), RETURN(), }; static const LevelScript script_func_local_5[] = { - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ -4400, 350, 250, /*angle*/ 0, 0, 0, /*behParam*/ 0x02000000, /*beh*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 3100, 400, 7900, /*angle*/ 0, 0, 0, /*behParam*/ 0x03000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ -4400, 350, 250, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_3), /*bhv*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 3100, 400, 7900, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_4), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), RETURN(), }; static const LevelScript script_func_local_6[] = { - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 728, 2606, -2754, /*angle*/ 0, 0, 0, /*behParam*/ 0x00380000, /*beh*/ bhvPoleGrabbing), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1043, 2972, -2679, /*angle*/ 0, 0, 0, /*behParam*/ 0x004E0000, /*beh*/ bhvPoleGrabbing), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1078, 3078, -2269, /*angle*/ 0, 0, 0, /*behParam*/ 0x00660000, /*beh*/ bhvPoleGrabbing), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1413, 3222, -2190, /*angle*/ 0, 0, 0, /*behParam*/ 0x00520000, /*beh*/ bhvPoleGrabbing), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 783, 1126, -47, /*angle*/ 0, 0, 0, /*behParam*/ 0x00660000, /*beh*/ bhvPoleGrabbing), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 662, 2150, 708, /*angle*/ 0, 0, 0, /*behParam*/ 0x00660000, /*beh*/ bhvPoleGrabbing), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2943, 476, 10, /*angle*/ 0, 270, 0, /*behParam*/ 0x00020000, /*beh*/ bhvFlamethrower), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2759, 2350, -1108, /*angle*/ 0, 60, 0, /*behParam*/ 0x00020000, /*beh*/ bhvFlamethrower), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2472, 2350, -1605, /*angle*/ 0, 60, 0, /*behParam*/ 0x00020000, /*beh*/ bhvFlamethrower), - OBJECT(/*model*/ MODEL_LLL_VOLCANO_FALLING_TRAP, /*pos*/ -485, 1203, 2933, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvLllVolcanoFallingTrap), - OBJECT(/*model*/ MODEL_LLL_ROTATING_BLOCK_FIRE_BARS, /*pos*/ 417, 2150, 583, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvLllRotatingBlockWithFireBars), - OBJECT(/*model*/ MODEL_CHECKERBOARD_PLATFORM, /*pos*/ -764, 0, 1664, /*angle*/ 0, 180, 0, /*behParam*/ 0x08A50000, /*beh*/ bhvPlatformOnTrack), - OBJECT(/*model*/ MODEL_CHECKERBOARD_PLATFORM, /*pos*/ 184, 980, -1366, /*angle*/ 0, 180, 0, /*behParam*/ 0x08A60000, /*beh*/ bhvPlatformOnTrack), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -26, 103, -2649, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvVolcanoSoundLoop), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 728, 2606, -2754, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(56), /*bhv*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1043, 2972, -2679, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(78), /*bhv*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1078, 3078, -2269, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(102), /*bhv*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1413, 3222, -2190, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(82), /*bhv*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 783, 1126, -47, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(102), /*bhv*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 662, 2150, 708, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(102), /*bhv*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2943, 476, 10, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM2(0x02), /*bhv*/ bhvFlamethrower), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2759, 2350, -1108, /*angle*/ 0, 60, 0, /*bhvParam*/ BPARAM2(0x02), /*bhv*/ bhvFlamethrower), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2472, 2350, -1605, /*angle*/ 0, 60, 0, /*bhvParam*/ BPARAM2(0x02), /*bhv*/ bhvFlamethrower), + OBJECT(/*model*/ MODEL_LLL_VOLCANO_FALLING_TRAP, /*pos*/ -485, 1203, 2933, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvLLLVolcanoFallingTrap), + OBJECT(/*model*/ MODEL_LLL_ROTATING_BLOCK_FIRE_BARS, /*pos*/ 417, 2150, 583, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvLLLRotatingBlockWithFireBars), + OBJECT(/*model*/ MODEL_CHECKERBOARD_PLATFORM, /*pos*/ -764, 0, 1664, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM1(0x08) | BPARAM2(0xA5), /*bhv*/ bhvPlatformOnTrack), + OBJECT(/*model*/ MODEL_CHECKERBOARD_PLATFORM, /*pos*/ 184, 980, -1366, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM1(0x08) | BPARAM2(0xA6), /*bhv*/ bhvPlatformOnTrack), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -26, 103, -2649, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvVolcanoSoundLoop), RETURN(), }; static const LevelScript script_func_local_7[] = { - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 2523, 3850, -901, /*angle*/ 0, 0, 0, /*behParam*/ 0x04000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 1800, 3400, 1450, /*angle*/ 0, 0, 0, /*behParam*/ 0x05000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 2523, 3850, -901, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_5), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 1800, 3400, 1450, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_6), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), RETURN(), }; const LevelScript level_lll_entry[] = { INIT_LEVEL(), - LOAD_MIO0( /*seg*/ 0x07, _lll_segment_7SegmentRomStart, _lll_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _lll_segment_7SegmentRomStart, _lll_segment_7SegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _fire_mio0SegmentRomStart, _fire_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0A, _bitfs_skybox_mio0SegmentRomStart, _bitfs_skybox_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0B, _effect_mio0SegmentRomStart, _effect_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x05, _group2_mio0SegmentRomStart, _group2_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0C, _group2_geoSegmentRomStart, _group2_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x06, _group17_mio0SegmentRomStart, _group17_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0D, _group17_geoSegmentRomStart, _group17_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0A, _bitfs_skybox_mio0SegmentRomStart, _bitfs_skybox_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0B, _effect_mio0SegmentRomStart, _effect_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x05, _group2_mio0SegmentRomStart, _group2_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0C, _group2_geoSegmentRomStart, _group2_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x06, _group17_mio0SegmentRomStart, _group17_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0D, _group17_geoSegmentRomStart, _group17_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_1), JUMP_LINK(script_func_global_3), JUMP_LINK(script_func_global_18), @@ -175,16 +175,16 @@ const LevelScript level_lll_entry[] = { LOAD_MODEL_FROM_GEO(MODEL_LLL_VOLCANO_FALLING_TRAP, lll_geo_000EA8), AREA(/*index*/ 1, lll_geo_000E00), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3839, 1154, 6272, /*angle*/ 0, 90, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvSpinAirborneWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 105, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x190B0000, /*beh*/ bhvWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3200, 11, 3456, /*angle*/ 0, -100, 0, /*behParam*/ 0x000C0000, /*beh*/ bhvFadingWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5888, 154, 6656, /*angle*/ 0, 100, 0, /*behParam*/ 0x000D0000, /*beh*/ bhvFadingWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_LLL, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0B, /*destLevel*/ LEVEL_LLL, /*destArea*/ 0x02, /*destNode*/ 0x0A, /*flags*/ WARP_CHECKPOINT), - WARP_NODE(/*id*/ 0x0C, /*destLevel*/ LEVEL_LLL, /*destArea*/ 0x01, /*destNode*/ 0x0D, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0D, /*destLevel*/ LEVEL_LLL, /*destArea*/ 0x01, /*destNode*/ 0x0C, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x32, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x64, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3839, 1154, 6272, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvSpinAirborneWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 105, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(25) | BPARAM2(WARP_NODE_0B), /*bhv*/ bhvWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3200, 11, 3456, /*angle*/ 0, -100, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0C), /*bhv*/ bhvFadingWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5888, 154, 6656, /*angle*/ 0, 100, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0D), /*bhv*/ bhvFadingWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_LLL, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0B, /*destLevel*/ LEVEL_LLL, /*destArea*/ 2, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0C, /*destLevel*/ LEVEL_LLL, /*destArea*/ 1, /*destNode*/ WARP_NODE_0D, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0D, /*destLevel*/ LEVEL_LLL, /*destArea*/ 1, /*destNode*/ WARP_NODE_0C, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_32, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_64, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_1), JUMP_LINK(script_func_local_2), JUMP_LINK(script_func_local_3), @@ -198,10 +198,10 @@ const LevelScript level_lll_entry[] = { END_AREA(), AREA(/*index*/ 2, lll_geo_000EC0), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -955, 1103, -1029, /*angle*/ 0, 118, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvAirborneWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_LLL, /*destArea*/ 0x02, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x32, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x64, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -955, 1103, -1029, /*angle*/ 0, 118, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvAirborneWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_LLL, /*destArea*/ 2, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_32, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_64, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_6), JUMP_LINK(script_func_local_7), TERRAIN(/*terrainData*/ lll_seg7_area_2_collision), diff --git a/levels/lll/sinking_rectangular_platform/geo.inc.c b/levels/lll/sinking_rectangular_platform/geo.inc.c index 089c47a0..5a9f06ae 100644 --- a/levels/lll/sinking_rectangular_platform/geo.inc.c +++ b/levels/lll/sinking_rectangular_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000BC8 const GeoLayout lll_geo_000BC8[] = { - GEO_CULLING_RADIUS(1400), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07019C08), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1400), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07019C08), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/sinking_rock_block/geo.inc.c b/levels/lll/sinking_rock_block/geo.inc.c index b43d2f76..1ad3d02b 100644 --- a/levels/lll/sinking_rock_block/geo.inc.c +++ b/levels/lll/sinking_rock_block/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000DD0 const GeoLayout lll_geo_000DD0[] = { - GEO_CULLING_RADIUS(600), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A878), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(600), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A878), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/sinking_square_platform/geo.inc.c b/levels/lll/sinking_square_platform/geo.inc.c index b4880439..11645abf 100644 --- a/levels/lll/sinking_square_platform/geo.inc.c +++ b/levels/lll/sinking_square_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000BE0 const GeoLayout lll_geo_000BE0[] = { - GEO_CULLING_RADIUS(1800), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A010), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1800), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A010), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/tilting_square_platform/geo.inc.c b/levels/lll/tilting_square_platform/geo.inc.c index f35d9bbc..df346144 100644 --- a/levels/lll/tilting_square_platform/geo.inc.c +++ b/levels/lll/tilting_square_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000BF8 const GeoLayout lll_geo_000BF8[] = { - GEO_CULLING_RADIUS(800), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A1F0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(800), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_0701A1F0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/volcano_falling_trap/geo.inc.c b/levels/lll/volcano_falling_trap/geo.inc.c index e97a94b4..723a1afd 100644 --- a/levels/lll/volcano_falling_trap/geo.inc.c +++ b/levels/lll/volcano_falling_trap/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000EA8 const GeoLayout lll_geo_000EA8[] = { - GEO_CULLING_RADIUS(900), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07025EC0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(900), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07025EC0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/wooden_float_large/geo.inc.c b/levels/lll/wooden_float_large/geo.inc.c index 0b718c1e..79624c79 100644 --- a/levels/lll/wooden_float_large/geo.inc.c +++ b/levels/lll/wooden_float_large/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000B68 const GeoLayout lll_geo_000B68[] = { - GEO_CULLING_RADIUS(1100), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07018EF8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1100), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07018EF8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/lll/wooden_float_small/geo.inc.c b/levels/lll/wooden_float_small/geo.inc.c index e82d3464..37443cdb 100644 --- a/levels/lll/wooden_float_small/geo.inc.c +++ b/levels/lll/wooden_float_small/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000B50 const GeoLayout lll_geo_000B50[] = { - GEO_CULLING_RADIUS(700), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07018C90), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(700), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07018C90), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/menu/geo.c b/levels/menu/geo.c index 466b85d4..d4d8b4b5 100644 --- a/levels/menu/geo.c +++ b/levels/menu/geo.c @@ -17,182 +17,182 @@ // 0x0E0001D0 const GeoLayout geo_menu_mario_save_button[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 524288), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_mario_save_button_base), - GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_save_button_back), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 524288), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_mario_save_button_base), + GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_save_button_back), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000200 const GeoLayout geo_menu_mario_save_button_fade[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 524288), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_mario_save_button_base), - GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_save_button_fade_back), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 524288), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_mario_save_button_base), + GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_save_button_fade_back), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000230 const GeoLayout geo_menu_mario_new_button[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 524288), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_mario_new_button_base), - GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_save_button_back), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 524288), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_mario_new_button_base), + GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_save_button_back), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000260 const GeoLayout geo_menu_mario_new_button_fade[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 524288), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_mario_new_button_base), - GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_save_button_fade_back), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 524288), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_mario_new_button_base), + GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_save_button_fade_back), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000290 const GeoLayout geo_menu_erase_button[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 524288), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_erase_button), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 524288), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_erase_button), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E0002B8 const GeoLayout geo_menu_copy_button[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 524288), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_copy_button), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 524288), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_copy_button), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E0002E0 const GeoLayout geo_menu_file_button[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 524288), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_file_button), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 524288), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_file_button), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000308 const GeoLayout geo_menu_score_button[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 524288), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_score_button), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 524288), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_score_button), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000330 const GeoLayout geo_menu_sound_button[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 524288), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_sound_button), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 524288), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_sound_button), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000358 const GeoLayout geo_menu_generic_button[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 524288), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_generic_button), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 524288), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, dl_menu_generic_button), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000380 const GeoLayout geo_menu_file_select_strings_and_menu_cursor[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND_COLOR(0x0001), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM(45, 100, 25000), - GEO_OPEN_NODE(), - GEO_CAMERA(0, 0, 0, 1000, 0, 0, 0, 0x00000000), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_RENDER_OBJ(), + GEO_BACKGROUND_COLOR(0x0001), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_file_select_strings_and_menu_cursor), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM(45, 100, 25000), + GEO_OPEN_NODE(), + GEO_CAMERA(0, 0, 0, 1000, 0, 0, 0, 0x00000000), + GEO_OPEN_NODE(), + GEO_RENDER_OBJ(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_file_select_strings_and_menu_cursor), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000408 const GeoLayout geo_menu_act_selector_strings[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND_COLOR(0xFFFF), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM(45, 100, 25000), - GEO_OPEN_NODE(), - GEO_CAMERA(0, 0, 0, 1000, 0, 0, 0, 0x00000000), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_RENDER_OBJ(), + GEO_BACKGROUND_COLOR(0xFFFF), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_act_selector_strings), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM(45, 100, 25000), + GEO_OPEN_NODE(), + GEO_CAMERA(0, 0, 0, 1000, 0, 0, 0, 0x00000000), + GEO_OPEN_NODE(), + GEO_RENDER_OBJ(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_act_selector_strings), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/menu/leveldata.c b/levels/menu/leveldata.c index d5b3e511..383e5e56 100644 --- a/levels/menu/leveldata.c +++ b/levels/menu/leveldata.c @@ -1741,6 +1741,18 @@ ALIGNED8 static const Texture texture_menu_course_lower[] = { #include "levels/menu/main_menu_seg7_eu.0EDA0.rgba16.inc.c" }; +#elif defined(VERSION_CN) + +// 0x070BCE0 - 0x070CCE0 +ALIGNED8 static const Texture texture_menu_course_upper[] = { +#include "levels/menu/main_menu_seg7_cn.0BCE0.rgba16.inc.c" +}; + +// 0x0700CCE0 - 0x0700DCE0 +ALIGNED8 static const Texture texture_menu_course_lower[] = { +#include "levels/menu/main_menu_seg7_cn.0CCE0.rgba16.inc.c" +}; + #else // 0x0700D1A8 - 0x0700E1A8 diff --git a/levels/menu/script.c b/levels/menu/script.c index 25c31f00..14b18e9f 100644 --- a/levels/menu/script.c +++ b/levels/menu/script.c @@ -22,7 +22,7 @@ const LevelScript level_main_menu_entry_1[] = { INIT_LEVEL(), FIXED_LOAD(/*loadAddr*/ _goddardSegmentStart, /*romStart*/ _goddardSegmentRomStart, /*romEnd*/ _goddardSegmentRomEnd), LOAD_MIO0(/*seg*/ 0x07, _menu_segment_7SegmentRomStart, _menu_segment_7SegmentRomEnd), - LOAD_RAW(/*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd), + LOAD_RAW (/*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd), ALLOC_LEVEL_POOL(), LOAD_MODEL_FROM_GEO(MODEL_MAIN_MENU_MARIO_SAVE_BUTTON, geo_menu_mario_save_button), LOAD_MODEL_FROM_GEO(MODEL_MAIN_MENU_RED_ERASE_BUTTON, geo_menu_erase_button), @@ -36,8 +36,8 @@ const LevelScript level_main_menu_entry_1[] = { LOAD_MODEL_FROM_GEO(MODEL_MAIN_MENU_GENERIC_BUTTON, geo_menu_generic_button), AREA(/*index*/ 1, geo_menu_file_select_strings_and_menu_cursor), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 0, -19000, /*angle*/ 0, 0, 0, /*behParam*/ 0x04000000, /*beh*/ bhvMenuButtonManager), - OBJECT(/*model*/ MODEL_MAIN_MENU_YELLOW_FILE_BUTTON, /*pos*/ 0, 0, -19000, /*angle*/ 0, 0, 0, /*behParam*/ 0x04000000, /*beh*/ bhvYellowBackgroundInMenu), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 0, -19000, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(0x04), /*bhv*/ bhvMenuButtonManager), + OBJECT(/*model*/ MODEL_MAIN_MENU_YELLOW_FILE_BUTTON, /*pos*/ 0, 0, -19000, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(0x04), /*bhv*/ bhvYellowBackgroundInMenu), TERRAIN(/*terrainData*/ main_menu_seg7_collision), END_AREA(), @@ -66,7 +66,7 @@ const LevelScript level_main_menu_entry_2[] = { /*13*/ ALLOC_LEVEL_POOL(), /*14*/ AREA(/*index*/ 2, geo_menu_act_selector_strings), - /*16*/ OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, -100, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x04000000, /*beh*/ bhvActSelector), + /*16*/ OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, -100, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(0x04), /*bhv*/ bhvActSelector), /*22*/ TERRAIN(/*terrainData*/ main_menu_seg7_collision), /*24*/ END_AREA(), diff --git a/levels/pss/areas/1/geo.inc.c b/levels/pss/areas/1/geo.inc.c index bf3c5b31..89f45f43 100644 --- a/levels/pss/areas/1/geo.inc.c +++ b/levels/pss/areas/1/geo.inc.c @@ -1,32 +1,32 @@ // 0x0E000100 const GeoLayout pss_geo_000100[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND_COLOR(0x0001), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(9, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, pss_seg7_dl_0700A7C0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, pss_seg7_dl_0700AFA8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, pss_seg7_dl_0700B3F0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, pss_seg7_dl_0700D338), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, pss_seg7_dl_0700DAD8), - 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_envfx_main), + GEO_BACKGROUND_COLOR(0x0001), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(9, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, pss_seg7_dl_0700A7C0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, pss_seg7_dl_0700AFA8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, pss_seg7_dl_0700B3F0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, pss_seg7_dl_0700D338), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, pss_seg7_dl_0700DAD8), + 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_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/pss/areas/1/macro.inc.c b/levels/pss/areas/1/macro.inc.c index f45eab39..931e5fb3 100644 --- a/levels/pss/areas/1/macro.inc.c +++ b/levels/pss/areas/1/macro.inc.c @@ -1,45 +1,45 @@ // 0x07010F00 - 0x0701109C const MacroObject pss_seg7_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -3233, 4688, -5600), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -5636, 4331, -5054), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -5980, 3453, 945), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2870, 2837, 2300), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 3930, 274, 2425), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 5174, 61, 3200), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 5707, -128, 4565), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 5194, -310, 5845), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 3640, -543, 6450), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 2550, -700, 6050), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1821, -921, 4616), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -20, -2542, -6304), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1197, -2929, -4692), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2565, -3268, -3525), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -4909, -3633, -4218), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -6290, -3937, -2545), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 90, /*pos*/ 3580, 6140, -5180, /*behParam*/ DIALOG_149), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 3000, 6180, -5640), - MACRO_OBJECT(/*preset*/ macro_blue_coin_switch, /*yaw*/ 0, /*pos*/ 5423, 6140, -6540), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 780, 5613, -5600), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 2360, 5979, -5600), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 1880, -1440, 60), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 1860, -1760, -1720), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 1860, -1200, 1680), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 1860, -1220, 1700), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 1880, -1460, 80), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 1860, -1820, -1680), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -6380, -4550, 6320), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ -6380, -4500, 5980, /*behParam*/ 4), - MACRO_OBJECT(/*preset*/ macro_1up_sliding, /*yaw*/ 180, /*pos*/ 1847, -961, 3863), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 260, 2580, 2280), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ -880, 2880, 2280), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -809, 5245, -5600), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -2409, 4877, -5600), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -6400, -4146, -590), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -6400, -4335, 1409), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -6400, -4530, 3481), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -4445, 4490, -5536), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -6263, 4150, -4009), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1854, -2132, -4290), - MACRO_OBJECT(/*preset*/ macro_box_star_1, /*yaw*/ 0, /*pos*/ -6385, -4200, 5770), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -3233, 4688, -5600), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -5636, 4331, -5054), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -5980, 3453, 945), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2870, 2837, 2300), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 3930, 274, 2425), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 5174, 61, 3200), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 5707, -128, 4565), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 5194, -310, 5845), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 3640, -543, 6450), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 2550, -700, 6050), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1821, -921, 4616), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -20, -2542, -6304), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1197, -2929, -4692), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2565, -3268, -3525), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -4909, -3633, -4218), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -6290, -3937, -2545), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 90, /*pos*/ 3580, 6140, -5180, /*bhvParam*/ DIALOG_149), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 3000, 6180, -5640), + MACRO_OBJECT (/*preset*/ macro_blue_coin_switch, /*yaw*/ 0, /*pos*/ 5423, 6140, -6540), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 780, 5613, -5600), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 2360, 5979, -5600), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 1880, -1440, 60), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 1860, -1760, -1720), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 1860, -1200, 1680), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 1860, -1220, 1700), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 1880, -1460, 80), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 1860, -1820, -1680), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -6380, -4550, 6320), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ -6380, -4500, 5980, /*bhvParam*/ 4), + MACRO_OBJECT (/*preset*/ macro_1up_sliding, /*yaw*/ 180, /*pos*/ 1847, -961, 3863), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 260, 2580, 2280), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ -880, 2880, 2280), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -809, 5245, -5600), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -2409, 4877, -5600), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -6400, -4146, -590), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -6400, -4335, 1409), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -6400, -4530, 3481), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -4445, 4490, -5536), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -6263, 4150, -4009), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1854, -2132, -4290), + MACRO_OBJECT (/*preset*/ macro_box_star_act_1, /*yaw*/ 0, /*pos*/ -6385, -4200, 5770), MACRO_OBJECT_END(), }; diff --git a/levels/pss/level.yaml b/levels/pss/level.yaml index 38d15cff..a63824e3 100644 --- a/levels/pss/level.yaml +++ b/levels/pss/level.yaml @@ -1,4 +1,4 @@ -# Princess's Secret Slide +# The Princess's Secret Slide short-name: pss full-name: The Princess's Secret Slide texture-file: ["/texture.inc.c"] diff --git a/levels/pss/leveldata.c b/levels/pss/leveldata.c index 8f98eff1..0679e194 100644 --- a/levels/pss/leveldata.c +++ b/levels/pss/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "dialog_ids.h" diff --git a/levels/pss/script.c b/levels/pss/script.c index 3547bf6b..98cc4732 100644 --- a/levels/pss/script.c +++ b/levels/pss/script.c @@ -17,23 +17,23 @@ const LevelScript level_pss_entry[] = { INIT_LEVEL(), - LOAD_MIO0( /*seg*/ 0x07, _pss_segment_7SegmentRomStart, _pss_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _pss_segment_7SegmentRomStart, _pss_segment_7SegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _mountain_mio0SegmentRomStart, _mountain_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x05, _group8_mio0SegmentRomStart, _group8_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0C, _group8_geoSegmentRomStart, _group8_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x05, _group8_mio0SegmentRomStart, _group8_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0C, _group8_geoSegmentRomStart, _group8_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_1), JUMP_LINK(script_func_global_9), AREA(/*index*/ 1, pss_geo_000100), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5632, 6751, -5631, /*angle*/ 0, 270, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvAirborneWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_PSS, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF3, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x20, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x26, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x23, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5632, 6751, -5631, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvAirborneWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_PSS, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_WARP_FLOOR, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_20, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_26, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_23, /*flags*/ WARP_NO_CHECKPOINT), TERRAIN(/*terrainData*/ pss_seg7_collision), MACRO_OBJECTS(/*objList*/ pss_seg7_macro_objs), TERRAIN_TYPE(/*terrainType*/ TERRAIN_SLIDE), diff --git a/levels/rr/areas/1/10/geo.inc.c b/levels/rr/areas/1/10/geo.inc.c index 996fbe7e..626293d5 100644 --- a/levels/rr/areas/1/10/geo.inc.c +++ b/levels/rr/areas/1/10/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000720 const GeoLayout rr_geo_000720[] = { - GEO_CULLING_RADIUS(3000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_0700CA38), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(3000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_0700CA38), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/areas/1/11/geo.inc.c b/levels/rr/areas/1/11/geo.inc.c index 9b0e2c7b..52736877 100644 --- a/levels/rr/areas/1/11/geo.inc.c +++ b/levels/rr/areas/1/11/geo.inc.c @@ -1,9 +1,9 @@ // 0x0E000738 const GeoLayout rr_geo_000738[] = { - GEO_CULLING_RADIUS(4000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_0700DBD8), - GEO_DISPLAY_LIST(LAYER_ALPHA, rr_seg7_dl_0700DE88), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(4000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_0700DBD8), + GEO_DISPLAY_LIST(LAYER_ALPHA, rr_seg7_dl_0700DE88), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/areas/1/12/geo.inc.c b/levels/rr/areas/1/12/geo.inc.c index 6f2c8110..20c3eb73 100644 --- a/levels/rr/areas/1/12/geo.inc.c +++ b/levels/rr/areas/1/12/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000758 const GeoLayout rr_geo_000758[] = { - GEO_CULLING_RADIUS(1500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, rr_seg7_dl_0700E178), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, rr_seg7_dl_0700E178), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/areas/1/13/geo.inc.c b/levels/rr/areas/1/13/geo.inc.c index 8f13231f..6ab534f5 100644 --- a/levels/rr/areas/1/13/geo.inc.c +++ b/levels/rr/areas/1/13/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000770 const GeoLayout rr_geo_000770[] = { - GEO_CULLING_RADIUS(1500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, rr_seg7_dl_0700E830), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, rr_seg7_dl_0700E830), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/areas/1/14/geo.inc.c b/levels/rr/areas/1/14/geo.inc.c index 3ce92369..adaea881 100644 --- a/levels/rr/areas/1/14/geo.inc.c +++ b/levels/rr/areas/1/14/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000788 const GeoLayout rr_geo_000788[] = { - GEO_CULLING_RADIUS(4000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07012758), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(4000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07012758), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/areas/1/15/geo.inc.c b/levels/rr/areas/1/15/geo.inc.c index 70cc96e3..b9c04b03 100644 --- a/levels/rr/areas/1/15/geo.inc.c +++ b/levels/rr/areas/1/15/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0007A0 const GeoLayout rr_geo_0007A0[] = { - GEO_CULLING_RADIUS(3500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07014508), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(3500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07014508), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/areas/1/16/geo.inc.c b/levels/rr/areas/1/16/geo.inc.c index 388c97b2..e598416e 100644 --- a/levels/rr/areas/1/16/geo.inc.c +++ b/levels/rr/areas/1/16/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0007B8 const GeoLayout rr_geo_0007B8[] = { - GEO_CULLING_RADIUS(1600), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07014F30), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1600), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07014F30), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/areas/1/17/geo.inc.c b/levels/rr/areas/1/17/geo.inc.c index 6e3e70a6..a00fa7ee 100644 --- a/levels/rr/areas/1/17/geo.inc.c +++ b/levels/rr/areas/1/17/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0007D0 const GeoLayout rr_geo_0007D0[] = { - GEO_CULLING_RADIUS(3800), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, rr_seg7_dl_070156B8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(3800), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, rr_seg7_dl_070156B8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/areas/1/18/geo.inc.c b/levels/rr/areas/1/18/geo.inc.c index bd0ef753..78110399 100644 --- a/levels/rr/areas/1/18/geo.inc.c +++ b/levels/rr/areas/1/18/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0007E8 const GeoLayout rr_geo_0007E8[] = { - GEO_CULLING_RADIUS(2500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, rr_seg7_dl_07015C68), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, rr_seg7_dl_07015C68), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/areas/1/19/geo.inc.c b/levels/rr/areas/1/19/geo.inc.c index adafe181..cd95bd7a 100644 --- a/levels/rr/areas/1/19/geo.inc.c +++ b/levels/rr/areas/1/19/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000800 const GeoLayout rr_geo_000800[] = { - GEO_CULLING_RADIUS(4500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, rr_seg7_dl_07017530), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(4500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, rr_seg7_dl_07017530), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/areas/1/2/geo.inc.c b/levels/rr/areas/1/2/geo.inc.c index 4cb14b3f..7e9d804e 100644 --- a/levels/rr/areas/1/2/geo.inc.c +++ b/levels/rr/areas/1/2/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000660 const GeoLayout rr_geo_000660[] = { - GEO_CULLING_RADIUS(3000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07002CC8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(3000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07002CC8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/areas/1/20/geo.inc.c b/levels/rr/areas/1/20/geo.inc.c index e733ef1a..59f3caed 100644 --- a/levels/rr/areas/1/20/geo.inc.c +++ b/levels/rr/areas/1/20/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000818 const GeoLayout rr_geo_000818[] = { - GEO_CULLING_RADIUS(5000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, rr_seg7_dl_07018B58), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(5000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, rr_seg7_dl_07018B58), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/areas/1/21/geo.inc.c b/levels/rr/areas/1/21/geo.inc.c index e39b1532..2d868cdf 100644 --- a/levels/rr/areas/1/21/geo.inc.c +++ b/levels/rr/areas/1/21/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000830 const GeoLayout rr_geo_000830[] = { - GEO_CULLING_RADIUS(3000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, rr_seg7_dl_070191A0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(3000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, rr_seg7_dl_070191A0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/areas/1/3/geo.inc.c b/levels/rr/areas/1/3/geo.inc.c index ed48b827..8754f532 100644 --- a/levels/rr/areas/1/3/geo.inc.c +++ b/levels/rr/areas/1/3/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000678 const GeoLayout rr_geo_000678[] = { - GEO_CULLING_RADIUS(1000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, rr_seg7_dl_07002E80), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, rr_seg7_dl_07002E80), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/areas/1/4/geo.inc.c b/levels/rr/areas/1/4/geo.inc.c index ab7e7af4..dc03c32c 100644 --- a/levels/rr/areas/1/4/geo.inc.c +++ b/levels/rr/areas/1/4/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000690 const GeoLayout rr_geo_000690[] = { - GEO_CULLING_RADIUS(3000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07004A98), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(3000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07004A98), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/areas/1/5/geo.inc.c b/levels/rr/areas/1/5/geo.inc.c index 72b66008..28c765da 100644 --- a/levels/rr/areas/1/5/geo.inc.c +++ b/levels/rr/areas/1/5/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0006A8 const GeoLayout rr_geo_0006A8[] = { - GEO_CULLING_RADIUS(3000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07005C80), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(3000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07005C80), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/areas/1/6/geo.inc.c b/levels/rr/areas/1/6/geo.inc.c index 39bdb6ce..c2671555 100644 --- a/levels/rr/areas/1/6/geo.inc.c +++ b/levels/rr/areas/1/6/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0006C0 const GeoLayout rr_geo_0006C0[] = { - GEO_CULLING_RADIUS(3500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07007E60), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(3500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07007E60), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/areas/1/7/geo.inc.c b/levels/rr/areas/1/7/geo.inc.c index d431eead..b10720f3 100644 --- a/levels/rr/areas/1/7/geo.inc.c +++ b/levels/rr/areas/1/7/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0006D8 const GeoLayout rr_geo_0006D8[] = { - GEO_CULLING_RADIUS(3500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07008258), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(3500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07008258), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/areas/1/8/geo.inc.c b/levels/rr/areas/1/8/geo.inc.c index 687312ab..f7edc99e 100644 --- a/levels/rr/areas/1/8/geo.inc.c +++ b/levels/rr/areas/1/8/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0006F0 const GeoLayout rr_geo_0006F0[] = { - GEO_CULLING_RADIUS(2800), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07008E20), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2800), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07008E20), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/areas/1/9/geo.inc.c b/levels/rr/areas/1/9/geo.inc.c index e54eebbe..a6c3446a 100644 --- a/levels/rr/areas/1/9/geo.inc.c +++ b/levels/rr/areas/1/9/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000708 const GeoLayout rr_geo_000708[] = { - GEO_CULLING_RADIUS(4000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_0700BB48), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(4000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_0700BB48), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/areas/1/geo.inc.c b/levels/rr/areas/1/geo.inc.c index f899c995..3225f13b 100644 --- a/levels/rr/areas/1/geo.inc.c +++ b/levels/rr/areas/1/geo.inc.c @@ -1,31 +1,31 @@ // 0x0E0009D0 const GeoLayout rr_geo_0009D0[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND(BACKGROUND_BELOW_CLOUDS, geo_skybox_main), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(14, 0, 2000, 6000, 0, 0, -8000, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - 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_envfx_main), + GEO_BACKGROUND(BACKGROUND_BELOW_CLOUDS, geo_skybox_main), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_cannon_circle_base), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(14, 0, 2000, 6000, 0, 0, -8000, geo_camera_main), + GEO_OPEN_NODE(), + 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_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_cannon_circle_base), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/areas/1/macro.inc.c b/levels/rr/areas/1/macro.inc.c index 1b8bfcca..5a60ab7c 100644 --- a/levels/rr/areas/1/macro.inc.c +++ b/levels/rr/areas/1/macro.inc.c @@ -1,65 +1,65 @@ // 0x0702E9D8 - 0x0702EC3C const MacroObject rr_seg7_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5850, -1000, -50), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -2950, -190, -50), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5850, 1150, 50), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5050, 800, -50), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -4550, 650, -50), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5300, 200, -50), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -3550, 1000, -50), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5800, -400, -50), - MACRO_OBJECT(/*preset*/ macro_bobomb_buddy_opens_cannon, /*yaw*/ 0, /*pos*/ -4200, 1648, 0), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ 5545, 3333, -2345, /*behParam*/ 0xC0), - MACRO_OBJECT(/*preset*/ macro_box_1up, /*yaw*/ 0, /*pos*/ -6750, 2600, -50), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ 6500, -900, 900, /*behParam*/ 1), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ 6500, -1000, 900), - MACRO_OBJECT(/*preset*/ macro_enemy_lakitu, /*yaw*/ 0, /*pos*/ 615, -584, 0), - MACRO_OBJECT(/*preset*/ macro_recovery_heart, /*yaw*/ 0, /*pos*/ -550, -1050, -50), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal_flying, /*yaw*/ 0, /*pos*/ 600, -1040, 1200), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal_flying, /*yaw*/ 0, /*pos*/ 600, -1040, -1300), - MACRO_OBJECT(/*preset*/ macro_recovery_heart, /*yaw*/ 0, /*pos*/ -7071, -1705, -31), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -3295, -1782, 524), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -5872, -1782, 572), - MACRO_OBJECT(/*preset*/ macro_fly_guy, /*yaw*/ 0, /*pos*/ 971, -3059, 4912), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 615, -3275, 5660), - MACRO_OBJECT(/*preset*/ macro_coin_line_vertical, /*yaw*/ 0, /*pos*/ -2203, -3500, 6572), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ -1866, -1116, 4933), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 799, -1446, 6622), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 6666, -1000, 6533), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 3960, -41, -3640), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 5680, 600, -2400), - MACRO_OBJECT(/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ 2560, 1000, -1600), - MACRO_OBJECT(/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ -1440, -1960, 6640), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 5040, 2100, 280), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_in_pole, /*yaw*/ 0, /*pos*/ 3542, 4892, -2371), - MACRO_OBJECT(/*preset*/ macro_enemy_lakitu, /*yaw*/ 0, /*pos*/ 4714, 3507, -2371), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ 3485, 2889, -2057), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ 2628, 2893, -2371), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ 3542, 2923, -2371), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -3342, 3222, -5071), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -7771, 4352, -3871), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -6571, 4000, -2328, /*behParam*/ 1), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal_flying, /*yaw*/ 90, /*pos*/ -6057, 4676, -5242), - MACRO_OBJECT(/*preset*/ macro_chuckya, /*yaw*/ 0, /*pos*/ 5114, 3828, 4028), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -165, 3543, -2352), - MACRO_OBJECT(/*preset*/ macro_coin_line_vertical, /*yaw*/ 0, /*pos*/ 250, 1400, -180), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -735, 2860, -150), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_in_pole, /*yaw*/ 0, /*pos*/ -2175, 2365, -60), - MACRO_OBJECT(/*preset*/ macro_blue_coin_switch, /*yaw*/ 0, /*pos*/ -6930, -1791, 521), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -6500, 1700, 0), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -6200, 1700, 0), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -5900, 1700, 0), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -5600, 1700, 0), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -6750, -1495, 0), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -5300, 1700, 0), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -3233, 1291, -52), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -7338, -2260, 6700), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -7338, -2260, 6350), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -6715, -1900, 6700), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -6715, -1900, 6350), - MACRO_OBJECT(/*preset*/ macro_box_1up_running_away, /*yaw*/ 0, /*pos*/ -4844, -4240, 6622), - MACRO_OBJECT(/*preset*/ macro_box_1up_running_away, /*yaw*/ 0, /*pos*/ -3428, 6770, -5128), - MACRO_OBJECT(/*preset*/ macro_box_star_6, /*yaw*/ 0, /*pos*/ 5000, 4100, 4440), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -6000, -440, -40), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5850, -1000, -50), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -2950, -190, -50), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5850, 1150, 50), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5050, 800, -50), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -4550, 650, -50), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5300, 200, -50), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -3550, 1000, -50), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5800, -400, -50), + MACRO_OBJECT (/*preset*/ macro_bobomb_buddy_opens_cannon_1, /*yaw*/ 0, /*pos*/ -4200, 1648, 0), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ 5545, 3333, -2345, /*bhvParam*/ 0xC0), + MACRO_OBJECT (/*preset*/ macro_box_1up, /*yaw*/ 0, /*pos*/ -6750, 2600, -50), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ 6500, -900, 900, /*bhvParam*/ AMP_BP_ROT_RADIUS_300), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ 6500, -1000, 900), + MACRO_OBJECT (/*preset*/ macro_enemy_lakitu, /*yaw*/ 0, /*pos*/ 615, -584, 0), + MACRO_OBJECT (/*preset*/ macro_recovery_heart, /*yaw*/ 0, /*pos*/ -550, -1050, -50), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal_flying, /*yaw*/ 0, /*pos*/ 600, -1040, 1200), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal_flying, /*yaw*/ 0, /*pos*/ 600, -1040, -1300), + MACRO_OBJECT (/*preset*/ macro_recovery_heart, /*yaw*/ 0, /*pos*/ -7071, -1705, -31), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -3295, -1782, 524), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -5872, -1782, 572), + MACRO_OBJECT (/*preset*/ macro_fly_guy, /*yaw*/ 0, /*pos*/ 971, -3059, 4912), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 615, -3275, 5660), + MACRO_OBJECT (/*preset*/ macro_coin_line_vertical_flying, /*yaw*/ 0, /*pos*/ -2203, -3500, 6572), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ -1866, -1116, 4933), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 799, -1446, 6622), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 6666, -1000, 6533), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 3960, -41, -3640), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 5680, 600, -2400), + MACRO_OBJECT (/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ 2560, 1000, -1600), + MACRO_OBJECT (/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ -1440, -1960, 6640), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 5040, 2100, 280), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_in_pole, /*yaw*/ 0, /*pos*/ 3542, 4892, -2371), + MACRO_OBJECT (/*preset*/ macro_enemy_lakitu, /*yaw*/ 0, /*pos*/ 4714, 3507, -2371), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ 3485, 2889, -2057), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ 2628, 2893, -2371), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ 3542, 2923, -2371), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -3342, 3222, -5071), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -7771, 4352, -3871), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -6571, 4000, -2328, /*bhvParam*/ AMP_BP_ROT_RADIUS_300), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal_flying, /*yaw*/ 90, /*pos*/ -6057, 4676, -5242), + MACRO_OBJECT (/*preset*/ macro_chuckya, /*yaw*/ 0, /*pos*/ 5114, 3828, 4028), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -165, 3543, -2352), + MACRO_OBJECT (/*preset*/ macro_coin_line_vertical_flying, /*yaw*/ 0, /*pos*/ 250, 1400, -180), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -735, 2860, -150), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_in_pole, /*yaw*/ 0, /*pos*/ -2175, 2365, -60), + MACRO_OBJECT (/*preset*/ macro_blue_coin_switch, /*yaw*/ 0, /*pos*/ -6930, -1791, 521), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -6500, 1700, 0), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -6200, 1700, 0), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -5900, 1700, 0), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -5600, 1700, 0), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -6750, -1495, 0), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -5300, 1700, 0), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -3233, 1291, -52), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -7338, -2260, 6700), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -7338, -2260, 6350), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -6715, -1900, 6700), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -6715, -1900, 6350), + MACRO_OBJECT (/*preset*/ macro_box_1up_running_away, /*yaw*/ 0, /*pos*/ -4844, -4240, 6622), + MACRO_OBJECT (/*preset*/ macro_box_1up_running_away, /*yaw*/ 0, /*pos*/ -3428, 6770, -5128), + MACRO_OBJECT (/*preset*/ macro_box_star_act_6, /*yaw*/ 0, /*pos*/ 5000, 4100, 4440), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -6000, -440, -40), MACRO_OBJECT_END(), }; diff --git a/levels/rr/cruiser_wing/geo.inc.c b/levels/rr/cruiser_wing/geo.inc.c index a1bc92ca..439703ec 100644 --- a/levels/rr/cruiser_wing/geo.inc.c +++ b/levels/rr/cruiser_wing/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000890 const GeoLayout rr_geo_000890[] = { - GEO_CULLING_RADIUS(1200), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, rr_seg7_dl_0701A680), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1200), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, rr_seg7_dl_0701A680), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/donut_block/geo.inc.c b/levels/rr/donut_block/geo.inc.c index 30d7caa0..d0948fdf 100644 --- a/levels/rr/donut_block/geo.inc.c +++ b/levels/rr/donut_block/geo.inc.c @@ -1,9 +1,9 @@ // 0x0E000920 const GeoLayout rr_geo_000920[] = { - GEO_CULLING_RADIUS(420), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_0701B848), - GEO_DISPLAY_LIST(LAYER_ALPHA, rr_seg7_dl_0701B980), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(420), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_0701B848), + GEO_DISPLAY_LIST(LAYER_ALPHA, rr_seg7_dl_0701B980), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/elevator_platform/geo.inc.c b/levels/rr/elevator_platform/geo.inc.c index 51552253..87f6381d 100644 --- a/levels/rr/elevator_platform/geo.inc.c +++ b/levels/rr/elevator_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0008F0 const GeoLayout rr_geo_0008F0[] = { - GEO_CULLING_RADIUS(500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_0701B220), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_0701B220), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/flying_carpet/geo.inc.c b/levels/rr/flying_carpet/geo.inc.c index 5adb2999..96f93e12 100644 --- a/levels/rr/flying_carpet/geo.inc.c +++ b/levels/rr/flying_carpet/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000848 const GeoLayout rr_geo_000848[] = { - GEO_CULLING_RADIUS(500), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_exec_flying_carpet_create), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(500), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_exec_flying_carpet_create), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/l_platform/geo.inc.c b/levels/rr/l_platform/geo.inc.c index fe9a7fc2..aab1b2aa 100644 --- a/levels/rr/l_platform/geo.inc.c +++ b/levels/rr/l_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000940 const GeoLayout rr_geo_000940[] = { - GEO_CULLING_RADIUS(1100), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_0701BD08), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1100), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_0701BD08), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/leveldata.c b/levels/rr/leveldata.c index 218f1e34..65515843 100644 --- a/levels/rr/leveldata.c +++ b/levels/rr/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "make_const_nonconst.h" diff --git a/levels/rr/octagonal_platform/geo.inc.c b/levels/rr/octagonal_platform/geo.inc.c index 316eef8c..4a7b9aa0 100644 --- a/levels/rr/octagonal_platform/geo.inc.c +++ b/levels/rr/octagonal_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0008A8 const GeoLayout rr_geo_0008A8[] = { - GEO_CULLING_RADIUS(1300), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_0701AB78), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1300), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_0701AB78), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/pyramid_platform/geo.inc.c b/levels/rr/pyramid_platform/geo.inc.c index 17009629..bc2f21f0 100644 --- a/levels/rr/pyramid_platform/geo.inc.c +++ b/levels/rr/pyramid_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0008D8 const GeoLayout rr_geo_0008D8[] = { - GEO_CULLING_RADIUS(700), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_0701AFA0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(700), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_0701AFA0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/rotating_bridge_platform/geo.inc.c b/levels/rr/rotating_bridge_platform/geo.inc.c index 5706ece9..89eacf47 100644 --- a/levels/rr/rotating_bridge_platform/geo.inc.c +++ b/levels/rr/rotating_bridge_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000878 const GeoLayout rr_geo_000878[] = { - GEO_CULLING_RADIUS(1500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_0701A568), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_0701A568), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/script.c b/levels/rr/script.c index 85f925e1..ac84bce9 100644 --- a/levels/rr/script.c +++ b/levels/rr/script.c @@ -16,69 +16,69 @@ #include "levels/rr/header.h" static const LevelScript script_func_local_1[] = { - OBJECT(/*model*/ MODEL_RR_SLIDING_PLATFORM, /*pos*/ -3400, -2038, 6564, /*angle*/ 0, 0, 0, /*behParam*/ 0x02560000, /*beh*/ bhvSlidingPlatform2), - OBJECT(/*model*/ MODEL_RR_SLIDING_PLATFORM, /*pos*/ -2684, -1423, -36, /*angle*/ 0, 0, 0, /*behParam*/ 0x02590000, /*beh*/ bhvSlidingPlatform2), - OBJECT(/*model*/ MODEL_RR_FLYING_CARPET, /*pos*/ 4571, -1782, 2036, /*angle*/ 0, 180, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPlatformOnTrack), - OBJECT(/*model*/ MODEL_RR_FLYING_CARPET, /*pos*/ 580, -963, -3659, /*angle*/ 0, 180, 0, /*behParam*/ 0x00010000, /*beh*/ bhvPlatformOnTrack), - OBJECT(/*model*/ MODEL_RR_FLYING_CARPET, /*pos*/ 1567, 880, -184, /*angle*/ 0, 180, 0, /*behParam*/ 0x00070000, /*beh*/ bhvPlatformOnTrack), - OBJECT(/*model*/ MODEL_RR_FLYING_CARPET, /*pos*/ 646, 880, -184, /*angle*/ 0, 0, 0, /*behParam*/ 0x00080000, /*beh*/ bhvPlatformOnTrack), - OBJECT(/*model*/ MODEL_RR_OCTAGONAL_PLATFORM, /*pos*/ 644, -1321, -1301, /*angle*/ 0, 180, 0, /*behParam*/ 0x03010000, /*beh*/ bhvOctagonalPlatformRotating), - OBJECT(/*model*/ MODEL_RR_OCTAGONAL_PLATFORM, /*pos*/ 1797, -1321, -56, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvOctagonalPlatformRotating), - OBJECT(/*model*/ MODEL_RR_OCTAGONAL_PLATFORM, /*pos*/ 663, -1321, 1179, /*angle*/ 0, 180, 0, /*behParam*/ 0x03010000, /*beh*/ bhvOctagonalPlatformRotating), - OBJECT(/*model*/ MODEL_RR_OCTAGONAL_PLATFORM, /*pos*/ -502, -1321, -51, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvOctagonalPlatformRotating), - OBJECT(/*model*/ MODEL_RR_ROTATING_BRIDGE_PLATFORM, /*pos*/ 5043, 1342, 300, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvRrRotatingBridgePlatform), - OBJECT(/*model*/ MODEL_RR_CRUISER_WING, /*pos*/ 3473, 2422, -1821, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRrCruiserWing), - OBJECT(/*model*/ MODEL_RR_CRUISER_WING, /*pos*/ 4084, 2431, -2883, /*angle*/ 45, 180, 180, /*behParam*/ 0x00010000, /*beh*/ bhvRrCruiserWing), - OBJECT(/*model*/ MODEL_RR_CRUISER_WING, /*pos*/ 3470, 2420, -2869, /*angle*/ 45, 180, 180, /*behParam*/ 0x00010000, /*beh*/ bhvRrCruiserWing), - OBJECT(/*model*/ MODEL_RR_CRUISER_WING, /*pos*/ 2856, 2410, -2855, /*angle*/ 45, 180, 180, /*behParam*/ 0x00010000, /*beh*/ bhvRrCruiserWing), - OBJECT(/*model*/ MODEL_RR_CRUISER_WING, /*pos*/ 4101, 2435, -1813, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRrCruiserWing), - OBJECT(/*model*/ MODEL_RR_CRUISER_WING, /*pos*/ 2859, 2411, -1834, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRrCruiserWing), - OBJECT(/*model*/ MODEL_RR_SEESAW_PLATFORM, /*pos*/ -6013, -2857, 6564, /*angle*/ 0, 270, 0, /*behParam*/ 0x00050000, /*beh*/ bhvSeesawPlatform), - OBJECT(/*model*/ MODEL_RR_SEESAW_PLATFORM, /*pos*/ 614, -3574, 6564, /*angle*/ 0, 270, 0, /*behParam*/ 0x00050000, /*beh*/ bhvSeesawPlatform), - OBJECT(/*model*/ MODEL_RR_SWINGING_PLATFORM, /*pos*/ -3557, -809, 4619, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSwingPlatform), - OBJECT(/*model*/ MODEL_RR_SWINGING_PLATFORM, /*pos*/ -2213, -2582, 6257, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSwingPlatform), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvDonutPlatformSpawner), - OBJECT(/*model*/ MODEL_RR_ELEVATOR_PLATFORM, /*pos*/ -2684, 1546, -36, /*angle*/ 0, 0, 0, /*behParam*/ 0x00050000, /*beh*/ bhvRrElevatorPlatform), - OBJECT(/*model*/ MODEL_RR_TRICKY_TRIANGLES, /*pos*/ 5862, -1347, 6564, /*angle*/ 0, 0, 0, /*behParam*/ 0x00020000, /*beh*/ bhvAnimatesOnFloorSwitchPress), - OBJECT(/*model*/ MODEL_PURPLE_SWITCH, /*pos*/ 4428, -1936, 6564, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFloorSwitchAnimatesObject), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 614, -2857, 3671, /*angle*/ 0, 0, 0, /*behParam*/ 0x00CC0000, /*beh*/ bhvPoleGrabbing), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 621, -4598, 7362, /*angle*/ 0, 0, 0, /*behParam*/ 0x00750000, /*beh*/ bhvPoleGrabbing), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5119, 3819, 3325, /*angle*/ 0, 0, 0, /*behParam*/ 0x00610000, /*beh*/ bhvPoleGrabbing), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3554, 2891, -2327, /*angle*/ 0, 0, 0, /*behParam*/ 0x00C10000, /*beh*/ bhvPoleGrabbing), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2680, 214, 295, /*angle*/ 0, 0, 0, /*behParam*/ 0x00620000, /*beh*/ bhvPoleGrabbing), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3811, 1033, 295, /*angle*/ 0, 0, 0, /*behParam*/ 0x00620000, /*beh*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_RR_SLIDING_PLATFORM, /*pos*/ -3400, -2038, 6564, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(0x02) | BPARAM2(0x56), /*bhv*/ bhvSlidingPlatform2), + OBJECT(/*model*/ MODEL_RR_SLIDING_PLATFORM, /*pos*/ -2684, -1423, -36, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(0x02) | BPARAM2(0x59), /*bhv*/ bhvSlidingPlatform2), + OBJECT(/*model*/ MODEL_RR_FLYING_CARPET, /*pos*/ 4571, -1782, 2036, /*angle*/ 0, 180, 0, /*bhvParam*/ 0, /*bhv*/ bhvPlatformOnTrack), + OBJECT(/*model*/ MODEL_RR_FLYING_CARPET, /*pos*/ 580, -963, -3659, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(0x01), /*bhv*/ bhvPlatformOnTrack), + OBJECT(/*model*/ MODEL_RR_FLYING_CARPET, /*pos*/ 1567, 880, -184, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(0x07), /*bhv*/ bhvPlatformOnTrack), + OBJECT(/*model*/ MODEL_RR_FLYING_CARPET, /*pos*/ 646, 880, -184, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x08), /*bhv*/ bhvPlatformOnTrack), + OBJECT(/*model*/ MODEL_RR_OCTAGONAL_PLATFORM, /*pos*/ 644, -1321, -1301, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM1(0x03) | BPARAM2(0x01), /*bhv*/ bhvOctagonalPlatformRotating), + OBJECT(/*model*/ MODEL_RR_OCTAGONAL_PLATFORM, /*pos*/ 1797, -1321, -56, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x01), /*bhv*/ bhvOctagonalPlatformRotating), + OBJECT(/*model*/ MODEL_RR_OCTAGONAL_PLATFORM, /*pos*/ 663, -1321, 1179, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM1(0x03) | BPARAM2(0x01), /*bhv*/ bhvOctagonalPlatformRotating), + OBJECT(/*model*/ MODEL_RR_OCTAGONAL_PLATFORM, /*pos*/ -502, -1321, -51, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x01), /*bhv*/ bhvOctagonalPlatformRotating), + OBJECT(/*model*/ MODEL_RR_ROTATING_BRIDGE_PLATFORM, /*pos*/ 5043, 1342, 300, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x01), /*bhv*/ bhvRRRotatingBridgePlatform), + OBJECT(/*model*/ MODEL_RR_CRUISER_WING, /*pos*/ 3473, 2422, -1821, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvRRCruiserWing), + OBJECT(/*model*/ MODEL_RR_CRUISER_WING, /*pos*/ 4084, 2431, -2883, /*angle*/ 45, 180, 180, /*bhvParam*/ BPARAM2(0x01), /*bhv*/ bhvRRCruiserWing), + OBJECT(/*model*/ MODEL_RR_CRUISER_WING, /*pos*/ 3470, 2420, -2869, /*angle*/ 45, 180, 180, /*bhvParam*/ BPARAM2(0x01), /*bhv*/ bhvRRCruiserWing), + OBJECT(/*model*/ MODEL_RR_CRUISER_WING, /*pos*/ 2856, 2410, -2855, /*angle*/ 45, 180, 180, /*bhvParam*/ BPARAM2(0x01), /*bhv*/ bhvRRCruiserWing), + OBJECT(/*model*/ MODEL_RR_CRUISER_WING, /*pos*/ 4101, 2435, -1813, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvRRCruiserWing), + OBJECT(/*model*/ MODEL_RR_CRUISER_WING, /*pos*/ 2859, 2411, -1834, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvRRCruiserWing), + OBJECT(/*model*/ MODEL_RR_SEESAW_PLATFORM, /*pos*/ -6013, -2857, 6564, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM2(0x05), /*bhv*/ bhvSeesawPlatform), + OBJECT(/*model*/ MODEL_RR_SEESAW_PLATFORM, /*pos*/ 614, -3574, 6564, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM2(0x05), /*bhv*/ bhvSeesawPlatform), + OBJECT(/*model*/ MODEL_RR_SWINGING_PLATFORM, /*pos*/ -3557, -809, 4619, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvSwingPlatform), + OBJECT(/*model*/ MODEL_RR_SWINGING_PLATFORM, /*pos*/ -2213, -2582, 6257, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvSwingPlatform), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvDonutPlatformSpawner), + OBJECT(/*model*/ MODEL_RR_ELEVATOR_PLATFORM, /*pos*/ -2684, 1546, -36, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x05), /*bhv*/ bhvRRElevatorPlatform), + OBJECT(/*model*/ MODEL_RR_TRICKY_TRIANGLES, /*pos*/ 5862, -1347, 6564, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x02), /*bhv*/ bhvAnimatesOnFloorSwitchPress), + OBJECT(/*model*/ MODEL_PURPLE_SWITCH, /*pos*/ 4428, -1936, 6564, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFloorSwitchAnimatesObject), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 614, -2857, 3671, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(204), /*bhv*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 621, -4598, 7362, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(117), /*bhv*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5119, 3819, 3325, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(97), /*bhv*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3554, 2891, -2327, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(193), /*bhv*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2680, 214, 295, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(98), /*bhv*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3811, 1033, 295, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(98), /*bhv*/ bhvPoleGrabbing), RETURN(), }; static const LevelScript script_func_local_2[] = { - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5809, -1834, 5719, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlamethrower), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4838, -1015, 4081, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlamethrower), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3301, -1834, 5617, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlamethrower), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 6772, -757, -606, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlamethrower), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4187, 3213, -6630, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlamethrower), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5809, -1834, 5719, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlamethrower), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4838, -1015, 4081, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlamethrower), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3301, -1834, 5617, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlamethrower), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 6772, -757, -606, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlamethrower), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4187, 3213, -6630, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFlamethrower), RETURN(), }; static const LevelScript script_func_local_3[] = { - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 1450, 3400, -2352, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -4200, 6700, -4450, /*angle*/ 0, 0, 0, /*behParam*/ 0x01000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ -5150, -1400, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x02000000, /*beh*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -5850, -700, 4950, /*angle*/ 0, 0, 0, /*behParam*/ 0x03000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 3700, -400, 6600, /*angle*/ 0, 0, 0, /*behParam*/ 0x04000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 1450, 3400, -2352, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_1), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -4200, 6700, -4450, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_2), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ -5150, -1400, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_3), /*bhv*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -5850, -700, 4950, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_4), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 3700, -400, 6600, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_5), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), RETURN(), }; const LevelScript level_rr_entry[] = { INIT_LEVEL(), - LOAD_MIO0( /*seg*/ 0x07, _rr_segment_7SegmentRomStart, _rr_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _rr_segment_7SegmentRomStart, _rr_segment_7SegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _sky_mio0SegmentRomStart, _sky_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0A, _cloud_floor_skybox_mio0SegmentRomStart, _cloud_floor_skybox_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x05, _group11_mio0SegmentRomStart, _group11_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0C, _group11_geoSegmentRomStart, _group11_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0A, _cloud_floor_skybox_mio0SegmentRomStart, _cloud_floor_skybox_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x05, _group11_mio0SegmentRomStart, _group11_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0C, _group11_geoSegmentRomStart, _group11_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_12), JUMP_LINK(script_func_global_1), LOAD_MODEL_FROM_GEO(MODEL_LEVEL_GEOMETRY_03, rr_geo_000660), @@ -119,14 +119,14 @@ const LevelScript level_rr_entry[] = { LOAD_MODEL_FROM_GEO(MODEL_RR_TRICKY_TRIANGLES_FRAME4, rr_geo_0009B8), AREA(/*index*/ 1, rr_geo_0009D0), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2599, -833, 2071, /*angle*/ 0, 90, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvSpinAirborneWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -7092, 2364, -63, /*angle*/ 0, 90, 0, /*behParam*/ 0x000B0000, /*beh*/ bhvFadingWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4213, 3379, -2815, /*angle*/ 0, 180, 0, /*behParam*/ 0x000C0000, /*beh*/ bhvFadingWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_RR, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0B, /*destLevel*/ LEVEL_RR, /*destArea*/ 0x01, /*destNode*/ 0x0C, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0C, /*destLevel*/ LEVEL_RR, /*destArea*/ 0x01, /*destNode*/ 0x0B, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x3A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x6C, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2599, -833, 2071, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvSpinAirborneWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -7092, 2364, -63, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0B), /*bhv*/ bhvFadingWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4213, 3379, -2815, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0C), /*bhv*/ bhvFadingWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_RR, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0B, /*destLevel*/ LEVEL_RR, /*destArea*/ 1, /*destNode*/ WARP_NODE_0C, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0C, /*destLevel*/ LEVEL_RR, /*destArea*/ 1, /*destNode*/ WARP_NODE_0B, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_3A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_6C, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_1), JUMP_LINK(script_func_local_2), JUMP_LINK(script_func_local_3), diff --git a/levels/rr/seesaw_platform/geo.inc.c b/levels/rr/seesaw_platform/geo.inc.c index c38957dc..42f993d3 100644 --- a/levels/rr/seesaw_platform/geo.inc.c +++ b/levels/rr/seesaw_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000908 const GeoLayout rr_geo_000908[] = { - GEO_CULLING_RADIUS(1000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_0701B4C0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_0701B4C0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/sliding_platform/geo.inc.c b/levels/rr/sliding_platform/geo.inc.c index 72c6adf6..df108a48 100644 --- a/levels/rr/sliding_platform/geo.inc.c +++ b/levels/rr/sliding_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0008C0 const GeoLayout rr_geo_0008C0[] = { - GEO_CULLING_RADIUS(700), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_0701ADF8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(700), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_0701ADF8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/swinging_platform/geo.inc.c b/levels/rr/swinging_platform/geo.inc.c index 1b95ff07..34ba530e 100644 --- a/levels/rr/swinging_platform/geo.inc.c +++ b/levels/rr/swinging_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000860 const GeoLayout rr_geo_000860[] = { - GEO_CULLING_RADIUS(1300), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07019AE0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1300), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07019AE0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/tricky_triangles_1/geo.inc.c b/levels/rr/tricky_triangles_1/geo.inc.c index 42a2d262..283e564e 100644 --- a/levels/rr/tricky_triangles_1/geo.inc.c +++ b/levels/rr/tricky_triangles_1/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000958 const GeoLayout rr_geo_000958[] = { - GEO_CULLING_RADIUS(1500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_0701E670), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_0701E670), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/tricky_triangles_2/geo.inc.c b/levels/rr/tricky_triangles_2/geo.inc.c index 09f01b29..a5e0affe 100644 --- a/levels/rr/tricky_triangles_2/geo.inc.c +++ b/levels/rr/tricky_triangles_2/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000970 const GeoLayout rr_geo_000970[] = { - GEO_CULLING_RADIUS(1500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07021100), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07021100), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/tricky_triangles_3/geo.inc.c b/levels/rr/tricky_triangles_3/geo.inc.c index 9dfc3b19..9614d9b6 100644 --- a/levels/rr/tricky_triangles_3/geo.inc.c +++ b/levels/rr/tricky_triangles_3/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000988 const GeoLayout rr_geo_000988[] = { - GEO_CULLING_RADIUS(1500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07023B90), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07023B90), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/tricky_triangles_4/geo.inc.c b/levels/rr/tricky_triangles_4/geo.inc.c index 82f0816f..024c4653 100644 --- a/levels/rr/tricky_triangles_4/geo.inc.c +++ b/levels/rr/tricky_triangles_4/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0009A0 const GeoLayout rr_geo_0009A0[] = { - GEO_CULLING_RADIUS(1500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07026630), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07026630), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/rr/tricky_triangles_5/geo.inc.c b/levels/rr/tricky_triangles_5/geo.inc.c index af1a02e6..bae47244 100644 --- a/levels/rr/tricky_triangles_5/geo.inc.c +++ b/levels/rr/tricky_triangles_5/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0009B8 const GeoLayout rr_geo_0009B8[] = { - GEO_CULLING_RADIUS(1500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07028FA8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, rr_seg7_dl_07028FA8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/sa/areas/1/geo.inc.c b/levels/sa/areas/1/geo.inc.c index 4920f408..702c3009 100644 --- a/levels/sa/areas/1/geo.inc.c +++ b/levels/sa/areas/1/geo.inc.c @@ -1,27 +1,27 @@ // 0x0E000170 const GeoLayout sa_geo_000170[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND(BACKGROUND_BELOW_CLOUDS, geo_skybox_main), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(1, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - 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_envfx_main), + GEO_BACKGROUND(BACKGROUND_BELOW_CLOUDS, geo_skybox_main), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(1, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + 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_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/sa/areas/1/macro.inc.c b/levels/sa/areas/1/macro.inc.c index 99a81020..30d25936 100644 --- a/levels/sa/areas/1/macro.inc.c +++ b/levels/sa/areas/1/macro.inc.c @@ -1,21 +1,21 @@ // 0x07003284 - 0x07003330 const MacroObject sa_seg7_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -2400, -4607, -2400), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -2400, -4607, 2400), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2400, -4607, 2400), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2400, -4607, -2400), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 0, -2200, -1500), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -1500, -2200, 0), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 0, -2200, 1500), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1500, -2200, 0), - MACRO_OBJECT(/*preset*/ macro_fish_group, /*yaw*/ 0, /*pos*/ 1927, -2909, 0), - MACRO_OBJECT(/*preset*/ macro_coin_ring_vertical, /*yaw*/ 90, /*pos*/ 0, -2400, -1500), - MACRO_OBJECT(/*preset*/ macro_coin_ring_vertical, /*yaw*/ 0, /*pos*/ -1500, -2400, 0), - MACRO_OBJECT(/*preset*/ macro_coin_ring_vertical, /*yaw*/ 90, /*pos*/ 0, -2400, 1500), - MACRO_OBJECT(/*preset*/ macro_coin_ring_vertical, /*yaw*/ 0, /*pos*/ 1500, -2400, 0), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 0, -3500, 0), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ 0, -3800, 0, /*behParam*/ 1), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal_flying, /*yaw*/ 0, /*pos*/ 0, -3500, 0), - MACRO_OBJECT(/*preset*/ macro_fish_group_2, /*yaw*/ 0, /*pos*/ -1000, -4080, -1740), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -2400, -4607, -2400), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -2400, -4607, 2400), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2400, -4607, 2400), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2400, -4607, -2400), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 0, -2200, -1500), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -1500, -2200, 0), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 0, -2200, 1500), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1500, -2200, 0), + MACRO_OBJECT (/*preset*/ macro_fish_spawner_few_blue, /*yaw*/ 0, /*pos*/ 1927, -2909, 0), + MACRO_OBJECT (/*preset*/ macro_coin_ring_vertical_flying, /*yaw*/ 90, /*pos*/ 0, -2400, -1500), + MACRO_OBJECT (/*preset*/ macro_coin_ring_vertical_flying, /*yaw*/ 0, /*pos*/ -1500, -2400, 0), + MACRO_OBJECT (/*preset*/ macro_coin_ring_vertical_flying, /*yaw*/ 90, /*pos*/ 0, -2400, 1500), + MACRO_OBJECT (/*preset*/ macro_coin_ring_vertical_flying, /*yaw*/ 0, /*pos*/ 1500, -2400, 0), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 0, -3500, 0), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ 0, -3800, 0, /*bhvParam*/ 1), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal_flying, /*yaw*/ 0, /*pos*/ 0, -3500, 0), + MACRO_OBJECT (/*preset*/ macro_fish_spawner_few_cyan, /*yaw*/ 0, /*pos*/ -1000, -4080, -1740), MACRO_OBJECT_END(), }; diff --git a/levels/sa/leveldata.c b/levels/sa/leveldata.c index a36715ee..09d15e8c 100644 --- a/levels/sa/leveldata.c +++ b/levels/sa/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "make_const_nonconst.h" diff --git a/levels/sa/script.c b/levels/sa/script.c index 264d5825..75c81dbf 100644 --- a/levels/sa/script.c +++ b/levels/sa/script.c @@ -16,36 +16,36 @@ #include "levels/sa/header.h" static const LevelScript script_func_local_1[] = { - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, -1000, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFishSpawner), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, -1000, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00020000, /*beh*/ bhvFishSpawner), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, -1000, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(FISH_SPAWNER_BP_MANY_BLUE), /*bhv*/ bhvFishSpawner), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, -1000, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(FISH_SPAWNER_BP_MANY_CYAN), /*bhv*/ bhvFishSpawner), RETURN(), }; static const LevelScript script_func_local_2[] = { - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, -4250, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenRedCoinStar), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, -4250, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_1), /*bhv*/ bhvHiddenRedCoinStar), RETURN(), }; const LevelScript level_sa_entry[] = { INIT_LEVEL(), - LOAD_MIO0( /*seg*/ 0x07, _sa_segment_7SegmentRomStart, _sa_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _sa_segment_7SegmentRomStart, _sa_segment_7SegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _inside_mio0SegmentRomStart, _inside_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0A, _cloud_floor_skybox_mio0SegmentRomStart, _cloud_floor_skybox_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0B, _effect_mio0SegmentRomStart, _effect_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x05, _group4_mio0SegmentRomStart, _group4_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0C, _group4_geoSegmentRomStart, _group4_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x06, _group13_mio0SegmentRomStart, _group13_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0D, _group13_geoSegmentRomStart, _group13_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0A, _cloud_floor_skybox_mio0SegmentRomStart, _cloud_floor_skybox_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0B, _effect_mio0SegmentRomStart, _effect_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x05, _group4_mio0SegmentRomStart, _group4_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0C, _group4_geoSegmentRomStart, _group4_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x06, _group13_mio0SegmentRomStart, _group13_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0D, _group13_geoSegmentRomStart, _group13_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_5), JUMP_LINK(script_func_global_14), AREA(/*index*/ 1, sa_geo_000170), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, -1535, 0, /*angle*/ 0, 90, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvSwimmingWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_SA, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x27, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x28, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, -1535, 0, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvSwimmingWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_SA, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_27, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_28, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_1), JUMP_LINK(script_func_local_2), TERRAIN(/*terrainData*/ sa_seg7_collision), diff --git a/levels/scripts.c b/levels/scripts.c index 248fb83c..a4d51bcd 100644 --- a/levels/scripts.c +++ b/levels/scripts.c @@ -61,9 +61,9 @@ static const LevelScript script_L5[4]; const LevelScript level_main_scripts_entry[] = { LOAD_MIO0(/*seg*/ 0x04, _group0_mio0SegmentRomStart, _group0_mio0SegmentRomEnd), LOAD_MIO0(/*seg*/ 0x03, _common1_mio0SegmentRomStart, _common1_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x17, _group0_geoSegmentRomStart, _group0_geoSegmentRomEnd), - LOAD_RAW( /*seg*/ 0x16, _common1_geoSegmentRomStart, _common1_geoSegmentRomEnd), - LOAD_RAW( /*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd), + LOAD_RAW (/*seg*/ 0x17, _group0_geoSegmentRomStart, _group0_geoSegmentRomEnd), + LOAD_RAW (/*seg*/ 0x16, _common1_geoSegmentRomStart, _common1_geoSegmentRomEnd), + LOAD_RAW (/*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd), ALLOC_LEVEL_POOL(), LOAD_MODEL_FROM_GEO(MODEL_MARIO, mario_geo), LOAD_MODEL_FROM_GEO(MODEL_SMOKE, smoke_geo), @@ -77,7 +77,7 @@ const LevelScript level_main_scripts_entry[] = { LOAD_MODEL_FROM_GEO(MODEL_STAR, star_geo), LOAD_MODEL_FROM_GEO(MODEL_TRANSPARENT_STAR, transparent_star_geo), LOAD_MODEL_FROM_GEO(MODEL_WOODEN_SIGNPOST, wooden_signpost_geo), - LOAD_MODEL_FROM_DL( MODEL_WHITE_PARTICLE_SMALL, white_particle_small_dl, LAYER_ALPHA), + LOAD_MODEL_FROM_DL (MODEL_WHITE_PARTICLE_SMALL, white_particle_small_dl, LAYER_ALPHA), LOAD_MODEL_FROM_GEO(MODEL_RED_FLAME, red_flame_geo), LOAD_MODEL_FROM_GEO(MODEL_BLUE_FLAME, blue_flame_geo), LOAD_MODEL_FROM_GEO(MODEL_BURN_SMOKE, burn_smoke_geo), @@ -86,13 +86,13 @@ const LevelScript level_main_scripts_entry[] = { LOAD_MODEL_FROM_GEO(MODEL_FISH, fish_geo), LOAD_MODEL_FROM_GEO(MODEL_FISH_SHADOW, fish_shadow_geo), LOAD_MODEL_FROM_GEO(MODEL_SPARKLES_ANIMATION, sparkles_animation_geo), - LOAD_MODEL_FROM_DL( MODEL_SAND_DUST, sand_seg3_dl_0302BCD0, LAYER_ALPHA), + LOAD_MODEL_FROM_DL (MODEL_SAND_DUST, sand_seg3_dl_0302BCD0, LAYER_ALPHA), LOAD_MODEL_FROM_GEO(MODEL_BUTTERFLY, butterfly_geo), LOAD_MODEL_FROM_GEO(MODEL_BURN_SMOKE_UNUSED, burn_smoke_geo), - LOAD_MODEL_FROM_DL( MODEL_PEBBLE, pebble_seg3_dl_0301CB00, LAYER_ALPHA), + LOAD_MODEL_FROM_DL (MODEL_PEBBLE, pebble_seg3_dl_0301CB00, LAYER_ALPHA), LOAD_MODEL_FROM_GEO(MODEL_MIST, mist_geo), LOAD_MODEL_FROM_GEO(MODEL_WHITE_PUFF, white_puff_geo), - LOAD_MODEL_FROM_DL( MODEL_WHITE_PARTICLE_DL, white_particle_dl, LAYER_ALPHA), + LOAD_MODEL_FROM_DL (MODEL_WHITE_PARTICLE_DL, white_particle_dl, LAYER_ALPHA), LOAD_MODEL_FROM_GEO(MODEL_WHITE_PARTICLE, white_particle_geo), LOAD_MODEL_FROM_GEO(MODEL_YELLOW_COIN_NO_SHADOW, yellow_coin_no_shadow_geo), LOAD_MODEL_FROM_GEO(MODEL_BLUE_COIN, blue_coin_geo), @@ -179,20 +179,20 @@ const LevelScript script_func_global_1[] = { LOAD_MODEL_FROM_GEO(MODEL_EXCLAMATION_BOX_OUTLINE, exclamation_box_outline_geo), LOAD_MODEL_FROM_GEO(MODEL_EXCLAMATION_BOX, exclamation_box_geo), LOAD_MODEL_FROM_GEO(MODEL_GOOMBA, goomba_geo), - LOAD_MODEL_FROM_DL( MODEL_EXCLAMATION_POINT, exclamation_box_outline_seg8_dl_08025F08, LAYER_ALPHA), + LOAD_MODEL_FROM_DL (MODEL_EXCLAMATION_POINT, exclamation_box_outline_seg8_dl_08025F08, LAYER_ALPHA), LOAD_MODEL_FROM_GEO(MODEL_KOOPA_SHELL, koopa_shell_geo), LOAD_MODEL_FROM_GEO(MODEL_METAL_BOX, metal_box_geo), - LOAD_MODEL_FROM_DL( MODEL_METAL_BOX_DL, metal_box_dl, LAYER_OPAQUE), + LOAD_MODEL_FROM_DL (MODEL_METAL_BOX_DL, metal_box_dl, LAYER_OPAQUE), LOAD_MODEL_FROM_GEO(MODEL_BLACK_BOBOMB, black_bobomb_geo), LOAD_MODEL_FROM_GEO(MODEL_BOBOMB_BUDDY, bobomb_buddy_geo), - LOAD_MODEL_FROM_DL( MODEL_DL_CANNON_LID, cannon_lid_seg8_dl_080048E0, LAYER_OPAQUE), + LOAD_MODEL_FROM_DL (MODEL_DL_CANNON_LID, cannon_lid_seg8_dl_080048E0, LAYER_OPAQUE), LOAD_MODEL_FROM_GEO(MODEL_BOWLING_BALL, bowling_ball_geo), LOAD_MODEL_FROM_GEO(MODEL_CANNON_BARREL, cannon_barrel_geo), LOAD_MODEL_FROM_GEO(MODEL_CANNON_BASE, cannon_base_geo), LOAD_MODEL_FROM_GEO(MODEL_HEART, heart_geo), LOAD_MODEL_FROM_GEO(MODEL_FLYGUY, flyguy_geo), LOAD_MODEL_FROM_GEO(MODEL_CHUCKYA, chuckya_geo), - LOAD_MODEL_FROM_GEO(MODEL_TRAJECTORY_MARKER_BALL, bowling_ball_track_geo), + LOAD_MODEL_FROM_GEO(MODEL_TRAJECTORY_MARKER_BALL, bowling_ball_track_geo), RETURN(), }; @@ -224,7 +224,7 @@ const LevelScript script_func_global_5[] = { LOAD_MODEL_FROM_GEO(MODEL_MANTA_RAY, manta_seg5_geo_05008D14), LOAD_MODEL_FROM_GEO(MODEL_UNAGI, unagi_geo), LOAD_MODEL_FROM_GEO(MODEL_SUSHI, sushi_geo), - LOAD_MODEL_FROM_DL( MODEL_DL_WHIRLPOOL, whirlpool_seg5_dl_05013CB8, LAYER_TRANSPARENT), + LOAD_MODEL_FROM_DL (MODEL_DL_WHIRLPOOL, whirlpool_seg5_dl_05013CB8, LAYER_TRANSPARENT), LOAD_MODEL_FROM_GEO(MODEL_CLAM_SHELL, clam_shell_geo), RETURN(), }; @@ -240,7 +240,7 @@ const LevelScript script_func_global_6[] = { }; const LevelScript script_func_global_7[] = { - LOAD_MODEL_FROM_DL( MODEL_DL_MONTY_MOLE_HOLE, monty_mole_hole_seg5_dl_05000840, LAYER_TRANSPARENT_DECAL), + LOAD_MODEL_FROM_DL (MODEL_DL_MONTY_MOLE_HOLE, monty_mole_hole_seg5_dl_05000840, LAYER_TRANSPARENT_DECAL), LOAD_MODEL_FROM_GEO(MODEL_MONTY_MOLE, monty_mole_geo), LOAD_MODEL_FROM_GEO(MODEL_UKIKI, ukiki_geo), LOAD_MODEL_FROM_GEO(MODEL_FWOOSH, fwoosh_geo), @@ -256,15 +256,15 @@ const LevelScript script_func_global_8[] = { }; const LevelScript script_func_global_9[] = { - LOAD_MODEL_FROM_DL( MODEL_CAP_SWITCH_EXCLAMATION, cap_switch_exclamation_seg5_dl_05002E00, LAYER_ALPHA), + LOAD_MODEL_FROM_DL (MODEL_CAP_SWITCH_EXCLAMATION, cap_switch_exclamation_seg5_dl_05002E00, LAYER_ALPHA), LOAD_MODEL_FROM_GEO(MODEL_CAP_SWITCH, cap_switch_geo), - LOAD_MODEL_FROM_DL( MODEL_CAP_SWITCH_BASE, cap_switch_base_seg5_dl_05003120, LAYER_OPAQUE), + LOAD_MODEL_FROM_DL (MODEL_CAP_SWITCH_BASE, cap_switch_base_seg5_dl_05003120, LAYER_OPAQUE), RETURN(), }; const LevelScript script_func_global_10[] = { LOAD_MODEL_FROM_GEO(MODEL_BOO, boo_geo), - LOAD_MODEL_FROM_GEO(MODEL_BETA_BOO_KEY, small_key_geo), + LOAD_MODEL_FROM_GEO(MODEL_BETA_BOO_KEY, small_key_geo), LOAD_MODEL_FROM_GEO(MODEL_HAUNTED_CHAIR, haunted_chair_geo), LOAD_MODEL_FROM_GEO(MODEL_MAD_PIANO, mad_piano_geo), LOAD_MODEL_FROM_GEO(MODEL_BOOKEND_PART, bookend_part_geo), diff --git a/levels/sl/areas/1/geo.inc.c b/levels/sl/areas/1/geo.inc.c index 0631851d..58461634 100644 --- a/levels/sl/areas/1/geo.inc.c +++ b/levels/sl/areas/1/geo.inc.c @@ -1,38 +1,38 @@ // 0x0E0003A8 const GeoLayout sl_geo_0003A8[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND(BACKGROUND_SNOW_MOUNTAINS, geo_skybox_main), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(16, 0, 2000, 6000, 0, 4400, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, sl_seg7_dl_07005478), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sl_seg7_dl_070056B0), - GEO_DISPLAY_LIST(LAYER_OPAQUE, sl_seg7_dl_070073D0), - GEO_DISPLAY_LIST(LAYER_ALPHA, sl_seg7_dl_07007880), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sl_seg7_dl_070088B0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, sl_seg7_dl_07008D58), - GEO_DISPLAY_LIST(LAYER_OPAQUE, sl_seg7_dl_0700A5A0), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x1001, geo_movtex_draw_water_regions), - GEO_RENDER_OBJ(), - GEO_ASM( 1, geo_envfx_main), + GEO_BACKGROUND(BACKGROUND_SNOW_MOUNTAINS, geo_skybox_main), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_cannon_circle_base), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(16, 0, 2000, 6000, 0, 4400, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, sl_seg7_dl_07005478), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sl_seg7_dl_070056B0), + GEO_DISPLAY_LIST(LAYER_OPAQUE, sl_seg7_dl_070073D0), + GEO_DISPLAY_LIST(LAYER_ALPHA, sl_seg7_dl_07007880), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sl_seg7_dl_070088B0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, sl_seg7_dl_07008D58), + GEO_DISPLAY_LIST(LAYER_OPAQUE, sl_seg7_dl_0700A5A0), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x1001, geo_movtex_draw_water_regions), + GEO_RENDER_OBJ(), + GEO_ASM( 1, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_cannon_circle_base), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/sl/areas/1/macro.inc.c b/levels/sl/areas/1/macro.inc.c index d75dac18..6b414b4c 100644 --- a/levels/sl/areas/1/macro.inc.c +++ b/levels/sl/areas/1/macro.inc.c @@ -1,51 +1,51 @@ // 0x0700ED94 - 0x0700EF6C const MacroObject sl_seg7_area_1_macro_objs[] = { - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 90, /*pos*/ 4086, 1024, 400, /*behParam*/ DIALOG_086), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1285, 2210, 385), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1728, 2560, -671), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1371, 2188, -500), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1814, 3174, 114), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 28, 3328, 1885), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -228, 3482, 1742), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ 4483, 821, 1168, /*behParam*/ 0x80), - MACRO_OBJECT(/*preset*/ macro_mr_blizzard, /*yaw*/ 0, /*pos*/ -3452, 1110, -3364), - MACRO_OBJECT(/*preset*/ macro_mr_blizzard, /*yaw*/ 0, /*pos*/ 5422, 1065, -1288), - MACRO_OBJECT(/*preset*/ macro_mr_blizzard, /*yaw*/ 0, /*pos*/ -6533, 2048, -2444), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4750, 1061, -5230), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 416, 1050, -4522), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -6560, 2040, -5080), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -6760, 2040, -1360), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -6880, 1857, 1000), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -4211, 1092, -4723), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -6271, 1390, 4764), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -529, 1050, -5329), - MACRO_OBJECT(/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ -3760, 1120, 1240), - MACRO_OBJECT(/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ 3840, 1240, -5280), - MACRO_OBJECT(/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ -3440, 1400, -40), - MACRO_OBJECT(/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ 400, 1060, 5860), - MACRO_OBJECT(/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ 880, 1080, 4860), - MACRO_OBJECT(/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ 1400, 1080, 3860), - MACRO_OBJECT(/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ 3400, 1660, -2920), - MACRO_OBJECT(/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ -3171, 1075, -4765), - MACRO_OBJECT(/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ -4241, 1009, -3834), - MACRO_OBJECT(/*preset*/ macro_box_koopa_shell, /*yaw*/ 0, /*pos*/ -5450, 1300, 5900), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ 4060, 900, -2940, /*behParam*/ 0), - MACRO_OBJECT(/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ -4096, 1125, 3062), - MACRO_OBJECT(/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ -4536, 1125, 3782), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 65, /*pos*/ -660, 2120, 1340), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -1520, 1040, 940), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -1340, 1280, 1020), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -1180, 1520, 1120), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 295, /*pos*/ -835, 1125, -3856, /*behParam*/ DIALOG_061), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 180, /*pos*/ -5050, 1020, 6026, /*behParam*/ DIALOG_016), - MACRO_OBJECT(/*preset*/ macro_fly_guy, /*yaw*/ 0, /*pos*/ 2766, 1522, -3633), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 135, /*pos*/ -3600, 1024, -800, /*behParam*/ DIALOG_148), - MACRO_OBJECT(/*preset*/ macro_moneybag, /*yaw*/ 0, /*pos*/ 2440, 1024, 4840), - MACRO_OBJECT(/*preset*/ macro_moneybag, /*yaw*/ 0, /*pos*/ -2400, 1177, -4200), - MACRO_OBJECT(/*preset*/ macro_box_1up_running_away, /*yaw*/ 0, /*pos*/ -3380, 1360, -4140), - MACRO_OBJECT(/*preset*/ macro_box_star_4, /*yaw*/ 0, /*pos*/ -4700, 1300, 5850), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 2909, 1024, 4245), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 3418, 1024, 3554), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_in_pole, /*yaw*/ 0, /*pos*/ 0, 5420, 0), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 90, /*pos*/ 4086, 1024, 400, /*bhvParam*/ DIALOG_086), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1285, 2210, 385), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1728, 2560, -671), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1371, 2188, -500), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1814, 3174, 114), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 28, 3328, 1885), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -228, 3482, 1742), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ 4483, 821, 1168, /*bhvParam*/ 0x80), + MACRO_OBJECT (/*preset*/ macro_mr_blizzard_1, /*yaw*/ 0, /*pos*/ -3452, 1110, -3364), + MACRO_OBJECT (/*preset*/ macro_mr_blizzard_1, /*yaw*/ 0, /*pos*/ 5422, 1065, -1288), + MACRO_OBJECT (/*preset*/ macro_mr_blizzard_1, /*yaw*/ 0, /*pos*/ -6533, 2048, -2444), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4750, 1061, -5230), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 416, 1050, -4522), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -6560, 2040, -5080), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -6760, 2040, -1360), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -6880, 1857, 1000), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -4211, 1092, -4723), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -6271, 1390, 4764), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -529, 1050, -5329), + MACRO_OBJECT (/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ -3760, 1120, 1240), + MACRO_OBJECT (/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ 3840, 1240, -5280), + MACRO_OBJECT (/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ -3440, 1400, -40), + MACRO_OBJECT (/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ 400, 1060, 5860), + MACRO_OBJECT (/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ 880, 1080, 4860), + MACRO_OBJECT (/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ 1400, 1080, 3860), + MACRO_OBJECT (/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ 3400, 1660, -2920), + MACRO_OBJECT (/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ -3171, 1075, -4765), + MACRO_OBJECT (/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ -4241, 1009, -3834), + MACRO_OBJECT (/*preset*/ macro_box_koopa_shell, /*yaw*/ 0, /*pos*/ -5450, 1300, 5900), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ 4060, 900, -2940, /*bhvParam*/ AMP_BP_ROT_RADIUS_200), + MACRO_OBJECT (/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ -4096, 1125, 3062), + MACRO_OBJECT (/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ -4536, 1125, 3782), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 65, /*pos*/ -660, 2120, 1340), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -1520, 1040, 940), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -1340, 1280, 1020), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -1180, 1520, 1120), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 295, /*pos*/ -835, 1125, -3856, /*bhvParam*/ DIALOG_061), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 180, /*pos*/ -5050, 1020, 6026, /*bhvParam*/ DIALOG_016), + MACRO_OBJECT (/*preset*/ macro_fly_guy, /*yaw*/ 0, /*pos*/ 2766, 1522, -3633), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 135, /*pos*/ -3600, 1024, -800, /*bhvParam*/ DIALOG_148), + MACRO_OBJECT (/*preset*/ macro_moneybag, /*yaw*/ 0, /*pos*/ 2440, 1024, 4840), + MACRO_OBJECT (/*preset*/ macro_moneybag, /*yaw*/ 0, /*pos*/ -2400, 1177, -4200), + MACRO_OBJECT (/*preset*/ macro_box_1up_running_away, /*yaw*/ 0, /*pos*/ -3380, 1360, -4140), + MACRO_OBJECT (/*preset*/ macro_box_star_act_4, /*yaw*/ 0, /*pos*/ -4700, 1300, 5850), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 2909, 1024, 4245), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 3418, 1024, 3554), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_in_pole, /*yaw*/ 0, /*pos*/ 0, 5420, 0), MACRO_OBJECT_END(), }; diff --git a/levels/sl/areas/2/geo.inc.c b/levels/sl/areas/2/geo.inc.c index 1cef0cad..dca91dc1 100644 --- a/levels/sl/areas/2/geo.inc.c +++ b/levels/sl/areas/2/geo.inc.c @@ -1,29 +1,29 @@ // 0x0E000484 const GeoLayout sl_geo_000484[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND_COLOR(0x0001), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(4, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, sl_seg7_dl_0700BAE8), - GEO_DISPLAY_LIST(LAYER_OPAQUE, sl_seg7_dl_0700BCF8), - 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_envfx_main), + GEO_BACKGROUND_COLOR(0x0001), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(4, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, sl_seg7_dl_0700BAE8), + GEO_DISPLAY_LIST(LAYER_OPAQUE, sl_seg7_dl_0700BCF8), + 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_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/sl/areas/2/macro.inc.c b/levels/sl/areas/2/macro.inc.c index 7603edc1..7ca9b3f3 100644 --- a/levels/sl/areas/2/macro.inc.c +++ b/levels/sl/areas/2/macro.inc.c @@ -7,7 +7,7 @@ const MacroObject sl_seg7_area_2_macro_objs[] = { MACRO_OBJECT(/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ 1600, 80, -800), MACRO_OBJECT(/*preset*/ macro_box_vanish_cap, /*yaw*/ 0, /*pos*/ 1660, 300, -1720), MACRO_OBJECT(/*preset*/ macro_box_three_coins, /*yaw*/ 0, /*pos*/ -720, 300, -1740), - MACRO_OBJECT(/*preset*/ macro_bobomb_buddy_opens_cannon, /*yaw*/ 0, /*pos*/ -1400, 0, -1740), + MACRO_OBJECT(/*preset*/ macro_bobomb_buddy_opens_cannon_1, /*yaw*/ 0, /*pos*/ -1400, 0, -1740), MACRO_OBJECT(/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ -20, 0, 960), MACRO_OBJECT(/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ 320, 0, -1220), MACRO_OBJECT(/*preset*/ macro_spindrift, /*yaw*/ 0, /*pos*/ -860, 40, 2040), diff --git a/levels/sl/leveldata.c b/levels/sl/leveldata.c index c7132a5a..d96a6a9c 100644 --- a/levels/sl/leveldata.c +++ b/levels/sl/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "dialog_ids.h" diff --git a/levels/sl/script.c b/levels/sl/script.c index 47e1338c..350940ec 100644 --- a/levels/sl/script.c +++ b/levels/sl/script.c @@ -17,69 +17,69 @@ static const LevelScript script_func_local_1[] = { - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 700, 4500, 690, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 4350, 1350, 4350, /*angle*/ 0, 0, 0, /*behParam*/ 0x02000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 5000, 1200, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x04000000, /*beh*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 700, 4500, 690, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_1), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 4350, 1350, 4350, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_3), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 5000, 1200, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_5), /*bhv*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), RETURN(), }; static const LevelScript script_func_local_2[] = { - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 977, 1024, 2075, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSnowMoundSpawn), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 977, 1024, 2075, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvSnowMoundSpawn), RETURN(), }; static const LevelScript script_func_local_3[] = { - 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), + OBJECT(/*model*/ MODEL_PENGUIN, /*pos*/ 1715, 3328, 518, /*angle*/ 0, -51, 0, /*bhvParam*/ 0, /*bhv*/ bhvSLWalkingPenguin), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 700, 3428, 700, /*angle*/ 0, 30, 0, /*bhvParam*/ 0, /*bhv*/ bhvSLSnowmanWind), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 480, 2300, 1370, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvIgloo), + OBJECT(/*model*/ MODEL_BIG_CHILL_BULLY, /*pos*/ 315, 1331, -4852, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_2), /*bhv*/ bhvBigChillBully), + OBJECT(/*model*/ MODEL_MR_BLIZZARD_HIDDEN, /*pos*/ 2954, 970, 750, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(MR_BLIZZARD_STYPE_CAP), /*bhv*/ bhvMrBlizzard), RETURN(), }; static const LevelScript script_func_local_4[] = { - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 0, 500, 1000, /*angle*/ 0, 0, 0, /*behParam*/ 0x05000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 0, 500, 1000, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_6), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), RETURN(), }; const LevelScript level_sl_entry[] = { INIT_LEVEL(), - LOAD_MIO0( /*seg*/ 0x07, _sl_segment_7SegmentRomStart, _sl_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _sl_segment_7SegmentRomStart, _sl_segment_7SegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _snow_mio0SegmentRomStart, _snow_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0B, _effect_mio0SegmentRomStart, _effect_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0A, _ccm_skybox_mio0SegmentRomStart, _ccm_skybox_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x05, _group7_mio0SegmentRomStart, _group7_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0C, _group7_geoSegmentRomStart, _group7_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x06, _group16_mio0SegmentRomStart, _group16_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0D, _group16_geoSegmentRomStart, _group16_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0B, _effect_mio0SegmentRomStart, _effect_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0A, _ccm_skybox_mio0SegmentRomStart, _ccm_skybox_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x05, _group7_mio0SegmentRomStart, _group7_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0C, _group7_geoSegmentRomStart, _group7_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x06, _group16_mio0SegmentRomStart, _group16_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0D, _group16_geoSegmentRomStart, _group16_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_1), JUMP_LINK(script_func_global_8), JUMP_LINK(script_func_global_17), - LOAD_MODEL_FROM_GEO(MODEL_SL_SNOW_TRIANGLE, sl_geo_000390), - LOAD_MODEL_FROM_GEO(MODEL_SL_CRACKED_ICE, sl_geo_000360), - LOAD_MODEL_FROM_GEO(MODEL_SL_CRACKED_ICE_CHUNK, sl_geo_000378), - LOAD_MODEL_FROM_GEO(MODEL_SL_SNOW_TREE, snow_tree_geo), + LOAD_MODEL_FROM_GEO(MODEL_SL_SNOW_TRIANGLE, sl_geo_000390), + LOAD_MODEL_FROM_GEO(MODEL_SL_CRACKED_ICE, sl_geo_000360), + LOAD_MODEL_FROM_GEO(MODEL_SL_CRACKED_ICE_CHUNK, sl_geo_000378), + LOAD_MODEL_FROM_GEO(MODEL_SL_SNOW_TREE, snow_tree_geo), AREA(/*index*/ 1, sl_geo_0003A8), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5541, 2024, 443, /*angle*/ 0, 270, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvSpinAirborneWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 257, 2150, 1399, /*angle*/ 0, 290, 0, /*behParam*/ 0x000B0000, /*beh*/ bhvInstantActiveWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 569, 2150, 1336, /*angle*/ 0, 0, 0, /*behParam*/ 0x060C0000, /*beh*/ bhvWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5468, 1056, -5400, /*angle*/ 0, -20, 0, /*behParam*/ 0x000D0000, /*beh*/ bhvFadingWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3698, 1024, -1237, /*angle*/ 0, 6, 0, /*behParam*/ 0x000E0000, /*beh*/ bhvFadingWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_SL, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0B, /*destLevel*/ LEVEL_SL, /*destArea*/ 0x01, /*destNode*/ 0x0B, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0C, /*destLevel*/ LEVEL_SL, /*destArea*/ 0x02, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0D, /*destLevel*/ LEVEL_SL, /*destArea*/ 0x01, /*destNode*/ 0x0E, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0E, /*destLevel*/ LEVEL_SL, /*destArea*/ 0x01, /*destNode*/ 0x0D, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5541, 2024, 443, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvSpinAirborneWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 257, 2150, 1399, /*angle*/ 0, 290, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0B), /*bhv*/ bhvInstantActiveWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 569, 2150, 1336, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(6) | BPARAM2(WARP_NODE_0C), /*bhv*/ bhvWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 5468, 1056, -5400, /*angle*/ 0, -20, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0D), /*bhv*/ bhvFadingWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3698, 1024, -1237, /*angle*/ 0, 6, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0E), /*bhv*/ bhvFadingWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_SL, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0B, /*destLevel*/ LEVEL_SL, /*destArea*/ 1, /*destNode*/ WARP_NODE_0B, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0C, /*destLevel*/ LEVEL_SL, /*destArea*/ 2, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0D, /*destLevel*/ LEVEL_SL, /*destArea*/ 1, /*destNode*/ WARP_NODE_0E, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0E, /*destLevel*/ LEVEL_SL, /*destArea*/ 1, /*destNode*/ WARP_NODE_0D, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_1), JUMP_LINK(script_func_local_2), JUMP_LINK(script_func_local_3), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x36, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x68, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_36, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_68, /*flags*/ WARP_NO_CHECKPOINT), TERRAIN(/*terrainData*/ sl_seg7_area_1_collision), MACRO_OBJECTS(/*objList*/ sl_seg7_area_1_macro_objs), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0000, /*seq*/ SEQ_LEVEL_SNOW), @@ -87,13 +87,13 @@ const LevelScript level_sl_entry[] = { END_AREA(), AREA(/*index*/ 2, sl_geo_000484), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 0, 2867, /*angle*/ 0, 180, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvInstantActiveWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 0, 3277, /*angle*/ 0, 0, 0, /*behParam*/ 0x140B0000, /*beh*/ bhvWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_SL, /*destArea*/ 0x02, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0B, /*destLevel*/ LEVEL_SL, /*destArea*/ 0x01, /*destNode*/ 0x0B, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 0, 2867, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvInstantActiveWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 0, 3277, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(20) | BPARAM2(WARP_NODE_0B), /*bhv*/ bhvWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_SL, /*destArea*/ 2, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0B, /*destLevel*/ LEVEL_SL, /*destArea*/ 1, /*destNode*/ WARP_NODE_0B, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_4), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x36, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x68, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_36, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_68, /*flags*/ WARP_NO_CHECKPOINT), TERRAIN(/*terrainData*/ sl_seg7_area_2_collision), MACRO_OBJECTS(/*objList*/ sl_seg7_area_2_macro_objs), SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0004, /*seq*/ SEQ_LEVEL_UNDERGROUND), diff --git a/levels/sl/snow_mound/geo.inc.c b/levels/sl/snow_mound/geo.inc.c index 28e4fd8c..c74ae7fe 100644 --- a/levels/sl/snow_mound/geo.inc.c +++ b/levels/sl/snow_mound/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000390 const GeoLayout sl_geo_000390[] = { - GEO_CULLING_RADIUS(350), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, sl_seg7_dl_0700A780), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(350), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, sl_seg7_dl_0700A780), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/sl/unused_cracked_ice/geo.inc.c b/levels/sl/unused_cracked_ice/geo.inc.c index 05360563..c0a64378 100644 --- a/levels/sl/unused_cracked_ice/geo.inc.c +++ b/levels/sl/unused_cracked_ice/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000360 const GeoLayout sl_geo_000360[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sl_seg7_dl_0700A890), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sl_seg7_dl_0700A890), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/sl/unused_ice_shard/geo.inc.c b/levels/sl/unused_ice_shard/geo.inc.c index debe7590..25abf0fd 100644 --- a/levels/sl/unused_ice_shard/geo.inc.c +++ b/levels/sl/unused_ice_shard/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000378 const GeoLayout sl_geo_000378[] = { - GEO_NODE_START(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sl_seg7_dl_0700A980), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sl_seg7_dl_0700A980), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ssl/areas/1/5/geo.inc.c b/levels/ssl/areas/1/5/geo.inc.c index b03677ac..2a46f94e 100644 --- a/levels/ssl/areas/1/5/geo.inc.c +++ b/levels/ssl/areas/1/5/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0005C0 const GeoLayout ssl_geo_0005C0[] = { - GEO_CULLING_RADIUS(2000), - GEO_OPEN_NODE(), - GEO_ASM(0x801, geo_movtex_draw_colored_2_no_update), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2000), + GEO_OPEN_NODE(), + GEO_ASM(0x801, geo_movtex_draw_colored_2_no_update), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ssl/areas/1/geo.inc.c b/levels/ssl/areas/1/geo.inc.c index 08ca9015..3ed05798 100644 --- a/levels/ssl/areas/1/geo.inc.c +++ b/levels/ssl/areas/1/geo.inc.c @@ -1,40 +1,40 @@ // 0x0E000648 const GeoLayout ssl_geo_000648[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND(BACKGROUND_DESERT, geo_skybox_main), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(1, 0, 2000, 6000, -2048, 0, -1024, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ssl_seg7_dl_07009F48), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ssl_seg7_dl_0700BA78), - GEO_DISPLAY_LIST(LAYER_ALPHA, ssl_seg7_dl_0700BC18), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, ssl_seg7_dl_0700BD00), - GEO_ASM(0x0801, geo_movtex_update_horizontal), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0801, geo_movtex_draw_water_regions), - GEO_ASM(0x0851, geo_movtex_draw_water_regions), - GEO_ASM(0x0801, geo_movtex_draw_colored), - GEO_ASM(0x0802, geo_movtex_draw_colored), - GEO_ASM(0x0803, geo_movtex_draw_colored), - GEO_RENDER_OBJ(), - GEO_ASM( 0, geo_envfx_main), + GEO_BACKGROUND(BACKGROUND_DESERT, geo_skybox_main), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_cannon_circle_base), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(1, 0, 2000, 6000, -2048, 0, -1024, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ssl_seg7_dl_07009F48), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ssl_seg7_dl_0700BA78), + GEO_DISPLAY_LIST(LAYER_ALPHA, ssl_seg7_dl_0700BC18), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, ssl_seg7_dl_0700BD00), + GEO_ASM(0x0801, geo_movtex_update_horizontal), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x0801, geo_movtex_draw_water_regions), + GEO_ASM(0x0851, geo_movtex_draw_water_regions), + GEO_ASM(0x0801, geo_movtex_draw_colored), + GEO_ASM(0x0802, geo_movtex_draw_colored), + GEO_ASM(0x0803, geo_movtex_draw_colored), + GEO_RENDER_OBJ(), + GEO_ASM( 0, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_cannon_circle_base), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ssl/areas/1/macro.inc.c b/levels/ssl/areas/1/macro.inc.c index 79def1ee..f0f1fc06 100644 --- a/levels/ssl/areas/1/macro.inc.c +++ b/levels/ssl/areas/1/macro.inc.c @@ -1,50 +1,50 @@ // 0x07012424 - 0x070125F2 const MacroObject ssl_seg7_area_1_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ 6068, 51, 2800), - MACRO_OBJECT(/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ 5535, 51, 3377), - MACRO_OBJECT(/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ 5980, 51, 3911), - MACRO_OBJECT(/*preset*/ macro_pokey, /*yaw*/ 0, /*pos*/ 4602, 40, 4622), - MACRO_OBJECT(/*preset*/ macro_pokey, /*yaw*/ 0, /*pos*/ 5057, 143, 256), - MACRO_OBJECT(/*preset*/ macro_pokey, /*yaw*/ 0, /*pos*/ -6858, 8, -3711), - MACRO_OBJECT(/*preset*/ macro_pokey, /*yaw*/ 0, /*pos*/ -5372, 64, 3083), - MACRO_OBJECT(/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ 5900, 51, 4400), - MACRO_OBJECT(/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ 5900, 51, 2311), - MACRO_OBJECT(/*preset*/ macro_bobomb_buddy_opens_cannon, /*yaw*/ 0, /*pos*/ -5990, 0, -3871), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -5869, 1200, -2535), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -5896, 1200, 773), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 1800, 1200, 800), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 1805, 1200, -2536), - MACRO_OBJECT(/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ 6900, 350, -5400), - MACRO_OBJECT(/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ -3000, 500, 800), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ 6863, 0, -6860, /*behParam*/ 0xC0), - MACRO_OBJECT(/*preset*/ macro_breakable_box_small, /*yaw*/ 0, /*pos*/ 5900, 50, 3440), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -4500, 1500, -3500), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -4500, 1500, 1500), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 500, 1500, -3500), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 500, 1500, 1500), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 3380, 10, -4900), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5270, -170, -6780), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -7450, 10, 7560), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 5900, 70, 2311), - MACRO_OBJECT(/*preset*/ macro_box_koopa_shell, /*yaw*/ 0, /*pos*/ 5840, 940, 2500), - MACRO_OBJECT(/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ 5860, 940, 4180), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 5702, 614, 2974, /*behParam*/ DIALOG_016), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -3260, 256, 800, /*behParam*/ DIALOG_032), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_in_pole, /*yaw*/ 0, /*pos*/ -6000, 600, -4800), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -250, 0, 4200), - MACRO_OBJECT(/*preset*/ macro_fly_guy, /*yaw*/ 0, /*pos*/ 3500, 149, 5600), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ 3800, 0, 6000), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ 1750, 0, 6450), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -5920, 200, -920), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -386, 512, -2228), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ -2290, 787, -2180), - MACRO_OBJECT(/*preset*/ macro_fire_fly_guy, /*yaw*/ 0, /*pos*/ 1440, 800, -960), - MACRO_OBJECT(/*preset*/ macro_fire_fly_guy, /*yaw*/ 0, /*pos*/ -3400, 1160, -1120), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -5125, 135, -3138), - MACRO_OBJECT(/*preset*/ macro_jumping_box, /*yaw*/ 0, /*pos*/ 1120, 0, 6480), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 5757, 230, 5761), - MACRO_OBJECT(/*preset*/ macro_jumping_box, /*yaw*/ 0, /*pos*/ -5200, 0, 1700), - MACRO_OBJECT(/*preset*/ macro_box_1up_running_away, /*yaw*/ 0, /*pos*/ -1200, 500, 800), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 5130, 26, -370, /*behParam*/ DIALOG_157), + MACRO_OBJECT (/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ 6068, 51, 2800), + MACRO_OBJECT (/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ 5535, 51, 3377), + MACRO_OBJECT (/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ 5980, 51, 3911), + MACRO_OBJECT (/*preset*/ macro_pokey_1, /*yaw*/ 0, /*pos*/ 4602, 40, 4622), + MACRO_OBJECT (/*preset*/ macro_pokey_1, /*yaw*/ 0, /*pos*/ 5057, 143, 256), + MACRO_OBJECT (/*preset*/ macro_pokey_1, /*yaw*/ 0, /*pos*/ -6858, 8, -3711), + MACRO_OBJECT (/*preset*/ macro_pokey_1, /*yaw*/ 0, /*pos*/ -5372, 64, 3083), + MACRO_OBJECT (/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ 5900, 51, 4400), + MACRO_OBJECT (/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ 5900, 51, 2311), + MACRO_OBJECT (/*preset*/ macro_bobomb_buddy_opens_cannon_1, /*yaw*/ 0, /*pos*/ -5990, 0, -3871), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -5869, 1200, -2535), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -5896, 1200, 773), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 1800, 1200, 800), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 1805, 1200, -2536), + MACRO_OBJECT (/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ 6900, 350, -5400), + MACRO_OBJECT (/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ -3000, 500, 800), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ 6863, 0, -6860, /*bhvParam*/ 0xC0), + MACRO_OBJECT (/*preset*/ macro_breakable_box_small, /*yaw*/ 0, /*pos*/ 5900, 50, 3440), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -4500, 1500, -3500), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -4500, 1500, 1500), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 500, 1500, -3500), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 500, 1500, 1500), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 3380, 10, -4900), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5270, -170, -6780), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -7450, 10, 7560), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 5900, 70, 2311), + MACRO_OBJECT (/*preset*/ macro_box_koopa_shell, /*yaw*/ 0, /*pos*/ 5840, 940, 2500), + MACRO_OBJECT (/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ 5860, 940, 4180), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 5702, 614, 2974, /*bhvParam*/ DIALOG_016), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -3260, 256, 800, /*bhvParam*/ DIALOG_032), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_in_pole, /*yaw*/ 0, /*pos*/ -6000, 600, -4800), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -250, 0, 4200), + MACRO_OBJECT (/*preset*/ macro_fly_guy, /*yaw*/ 0, /*pos*/ 3500, 149, 5600), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ 3800, 0, 6000), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ 1750, 0, 6450), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -5920, 200, -920), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -386, 512, -2228), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ -2290, 787, -2180), + MACRO_OBJECT (/*preset*/ macro_fire_fly_guy, /*yaw*/ 0, /*pos*/ 1440, 800, -960), + MACRO_OBJECT (/*preset*/ macro_fire_fly_guy, /*yaw*/ 0, /*pos*/ -3400, 1160, -1120), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -5125, 135, -3138), + MACRO_OBJECT (/*preset*/ macro_jumping_box, /*yaw*/ 0, /*pos*/ 1120, 0, 6480), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 5757, 230, 5761), + MACRO_OBJECT (/*preset*/ macro_jumping_box, /*yaw*/ 0, /*pos*/ -5200, 0, 1700), + MACRO_OBJECT (/*preset*/ macro_box_1up_running_away, /*yaw*/ 0, /*pos*/ -1200, 500, 800), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 5130, 26, -370, /*bhvParam*/ DIALOG_157), MACRO_OBJECT_END(), }; diff --git a/levels/ssl/areas/2/4/geo.inc.c b/levels/ssl/areas/2/4/geo.inc.c index 090dd8cd..46157eba 100644 --- a/levels/ssl/areas/2/4/geo.inc.c +++ b/levels/ssl/areas/2/4/geo.inc.c @@ -1,15 +1,15 @@ // 0x0E0005D8 const GeoLayout ssl_geo_0005D8[] = { - GEO_CULLING_RADIUS(2000), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-1000, 4000), - GEO_OPEN_NODE(), - GEO_ASM(0x802, geo_movtex_draw_colored_2_no_update), - GEO_CLOSE_NODE(), - GEO_RENDER_RANGE(4000, 12800), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ssl_dl_pyramid_quicksand_pit_static), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2000), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-1000, 4000), + GEO_OPEN_NODE(), + GEO_ASM(0x802, geo_movtex_draw_colored_2_no_update), + GEO_CLOSE_NODE(), + GEO_RENDER_RANGE(4000, 12800), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ssl_dl_pyramid_quicksand_pit_static), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ssl/areas/2/geo.inc.c b/levels/ssl/areas/2/geo.inc.c index f421c32f..b01fa947 100644 --- a/levels/ssl/areas/2/geo.inc.c +++ b/levels/ssl/areas/2/geo.inc.c @@ -1,33 +1,33 @@ // 0x0E0007CC const GeoLayout ssl_geo_0007CC[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND_COLOR(0x0001), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(4, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ssl_seg7_dl_0701EE80), - GEO_DISPLAY_LIST(LAYER_ALPHA, ssl_seg7_dl_0701F920), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, ssl_seg7_dl_0701FCE0), - GEO_ASM(0x802, geo_movtex_update_horizontal), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x801, geo_movtex_draw_nocolor), - GEO_ASM(0x802, geo_movtex_draw_nocolor), - GEO_ASM(0x803, geo_movtex_draw_nocolor), - GEO_RENDER_OBJ(), - GEO_ASM( 0, geo_envfx_main), + GEO_BACKGROUND_COLOR(0x0001), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(4, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ssl_seg7_dl_0701EE80), + GEO_DISPLAY_LIST(LAYER_ALPHA, ssl_seg7_dl_0701F920), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, ssl_seg7_dl_0701FCE0), + GEO_ASM(0x802, geo_movtex_update_horizontal), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x801, geo_movtex_draw_nocolor), + GEO_ASM(0x802, geo_movtex_draw_nocolor), + GEO_ASM(0x803, geo_movtex_draw_nocolor), + GEO_RENDER_OBJ(), + GEO_ASM( 0, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ssl/areas/2/macro.inc.c b/levels/ssl/areas/2/macro.inc.c index 86d06d6c..31b43094 100644 --- a/levels/ssl/areas/2/macro.inc.c +++ b/levels/ssl/areas/2/macro.inc.c @@ -1,54 +1,54 @@ // 0x07027CD4 - 0x07027ECA const MacroObject ssl_seg7_area_2_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ 3263, 778, 3157), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ 2196, 640, -3329, /*behParam*/ DIALOG_043), - MACRO_OBJECT(/*preset*/ macro_box_1up, /*yaw*/ 0, /*pos*/ -3536, 252, -3705), - MACRO_OBJECT(/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ 3389, 0, -1978), - MACRO_OBJECT(/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ -3638, 0, 1928), - MACRO_OBJECT(/*preset*/ macro_box_1up, /*yaw*/ 0, /*pos*/ -1242, 252, -3957), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1873, 0, -3495), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1200, 0, -3495), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ 3056, 736, -3267, /*behParam*/ 1), - MACRO_OBJECT(/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ 3263, 652, 2200), - MACRO_OBJECT(/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ 3431, 673, -1373), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal_flying, /*yaw*/ 90, /*pos*/ -2, 1774, 2794), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal_flying, /*yaw*/ 0, /*pos*/ 2694, 850, -2889), - MACRO_OBJECT(/*preset*/ macro_recovery_heart, /*yaw*/ 0, /*pos*/ -400, 1978, -2250), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 736, 2652, -2250), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 736, 2546, -2250), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 1368, 3263, -2250), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 1368, 3135, -2250), - MACRO_OBJECT(/*preset*/ macro_homing_amp, /*yaw*/ 0, /*pos*/ 1621, 3368, -1142), - MACRO_OBJECT(/*preset*/ macro_homing_amp, /*yaw*/ 0, /*pos*/ 1621, 3389, 478), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ -210, 4521, -994), - MACRO_OBJECT(/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ -2100, 0, 3316), - MACRO_OBJECT(/*preset*/ macro_blue_coin_switch, /*yaw*/ 0, /*pos*/ -719, 0, 4772), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 0, 0, 2381), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 0, 100, 2381), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 0, 200, 2381), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 2064, -81, -1901), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 2569, -81, -2022), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 2698, -81, -2535), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 2698, -81, -3049), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ 1940, -81, -1360, /*behParam*/ 4), - MACRO_OBJECT(/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ -260, 2940, -600), - MACRO_OBJECT(/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ 260, 1967, -600), - MACRO_OBJECT(/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ -1940, 1229, -600), - MACRO_OBJECT(/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ -1940, 1229, 2320), - MACRO_OBJECT(/*preset*/ macro_coin_line_vertical, /*yaw*/ 0, /*pos*/ 290, 4479, -940), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -3560, 0, -4065, /*behParam*/ DIALOG_103), - MACRO_OBJECT(/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ 260, 3913, -600), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -260, 2950, -600), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 260, 1977, -600), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -1940, 1239, -600), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -1940, 1239, 2320), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 260, 3923, -600), - MACRO_OBJECT(/*preset*/ macro_goomba_triplet_spawner, /*yaw*/ 0, /*pos*/ 3181, 0, 3587), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -3350, 980, -1240), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 2870, 1050, -2640), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2047, 1664, 3076), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2047, 1536, 2870), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1840, 1357, 3076), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1840, 1408, 2870), + MACRO_OBJECT (/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ 3263, 778, 3157), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ 2196, 640, -3329, /*bhvParam*/ DIALOG_043), + MACRO_OBJECT (/*preset*/ macro_box_1up, /*yaw*/ 0, /*pos*/ -3536, 252, -3705), + MACRO_OBJECT (/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ 3389, 0, -1978), + MACRO_OBJECT (/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ -3638, 0, 1928), + MACRO_OBJECT (/*preset*/ macro_box_1up, /*yaw*/ 0, /*pos*/ -1242, 252, -3957), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1873, 0, -3495), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 1200, 0, -3495), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ 3056, 736, -3267, /*bhvParam*/ AMP_BP_ROT_RADIUS_300), + MACRO_OBJECT (/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ 3263, 652, 2200), + MACRO_OBJECT (/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ 3431, 673, -1373), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal_flying, /*yaw*/ 90, /*pos*/ -2, 1774, 2794), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal_flying, /*yaw*/ 0, /*pos*/ 2694, 850, -2889), + MACRO_OBJECT (/*preset*/ macro_recovery_heart, /*yaw*/ 0, /*pos*/ -400, 1978, -2250), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 736, 2652, -2250), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 736, 2546, -2250), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 1368, 3263, -2250), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 1368, 3135, -2250), + MACRO_OBJECT (/*preset*/ macro_homing_amp, /*yaw*/ 0, /*pos*/ 1621, 3368, -1142), + MACRO_OBJECT (/*preset*/ macro_homing_amp, /*yaw*/ 0, /*pos*/ 1621, 3389, 478), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ -210, 4521, -994), + MACRO_OBJECT (/*preset*/ macro_goomba, /*yaw*/ 0, /*pos*/ -2100, 0, 3316), + MACRO_OBJECT (/*preset*/ macro_blue_coin_switch, /*yaw*/ 0, /*pos*/ -719, 0, 4772), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 0, 0, 2381), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 0, 100, 2381), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 0, 200, 2381), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 2064, -81, -1901), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 2569, -81, -2022), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 2698, -81, -2535), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 2698, -81, -3049), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ 1940, -81, -1360, /*bhvParam*/ 4), + MACRO_OBJECT (/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ -260, 2940, -600), + MACRO_OBJECT (/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ 260, 1967, -600), + MACRO_OBJECT (/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ -1940, 1229, -600), + MACRO_OBJECT (/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ -1940, 1229, 2320), + MACRO_OBJECT (/*preset*/ macro_coin_line_vertical_flying, /*yaw*/ 0, /*pos*/ 290, 4479, -940), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -3560, 0, -4065, /*bhvParam*/ DIALOG_103), + MACRO_OBJECT (/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ 260, 3913, -600), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -260, 2950, -600), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 260, 1977, -600), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -1940, 1239, -600), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -1940, 1239, 2320), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 260, 3923, -600), + MACRO_OBJECT (/*preset*/ macro_goomba_triplet_spawner, /*yaw*/ 0, /*pos*/ 3181, 0, 3587), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -3350, 980, -1240), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 2870, 1050, -2640), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2047, 1664, 3076), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2047, 1536, 2870), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1840, 1357, 3076), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1840, 1408, 2870), MACRO_OBJECT_END(), }; diff --git a/levels/ssl/areas/3/geo.inc.c b/levels/ssl/areas/3/geo.inc.c index ab01ed2b..109b815b 100644 --- a/levels/ssl/areas/3/geo.inc.c +++ b/levels/ssl/areas/3/geo.inc.c @@ -1,27 +1,27 @@ // 0x0E00088C const GeoLayout ssl_geo_00088C[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND_COLOR(0x0001), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(4, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - 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_envfx_main), + GEO_BACKGROUND_COLOR(0x0001), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(4, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + 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_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ssl/eyerok_col/geo.inc.c b/levels/ssl/eyerok_col/geo.inc.c index 9bebe774..f5021fea 100644 --- a/levels/ssl/eyerok_col/geo.inc.c +++ b/levels/ssl/eyerok_col/geo.inc.c @@ -1,2 +1 @@ // Blank File - diff --git a/levels/ssl/grindel/geo.inc.c b/levels/ssl/grindel/geo.inc.c index e89f37fe..200d59b9 100644 --- a/levels/ssl/grindel/geo.inc.c +++ b/levels/ssl/grindel/geo.inc.c @@ -1,12 +1,12 @@ // 0x0E000734 const GeoLayout ssl_geo_000734[] = { - GEO_CULLING_RADIUS(700), - GEO_OPEN_NODE(), - GEO_SHADOW(SHADOW_SQUARE_SCALABLE, 0xB4, 550), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ssl_seg7_dl_070220A8), - GEO_DISPLAY_LIST(LAYER_ALPHA, ssl_seg7_dl_070221E8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(700), + GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_SQUARE_SCALABLE, 0xB4, 550), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ssl_seg7_dl_070220A8), + GEO_DISPLAY_LIST(LAYER_ALPHA, ssl_seg7_dl_070221E8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ssl/leveldata.c b/levels/ssl/leveldata.c index 78808757..077e18d5 100644 --- a/levels/ssl/leveldata.c +++ b/levels/ssl/leveldata.c @@ -1,12 +1,13 @@ #include #include +#include "sm64.h" #include "dialog_ids.h" #include "level_misc_macros.h" #include "macros.h" -#include "macro_preset_names.h" +#include "macro_presets.h" #include "moving_texture_macros.h" -#include "special_preset_names.h" +#include "special_presets.h" #include "surface_terrains.h" #include "textures.h" #include "types.h" diff --git a/levels/ssl/moving_pyramid_wall/geo.inc.c b/levels/ssl/moving_pyramid_wall/geo.inc.c index a15f0eb1..05fc1ee9 100644 --- a/levels/ssl/moving_pyramid_wall/geo.inc.c +++ b/levels/ssl/moving_pyramid_wall/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000794 const GeoLayout ssl_geo_000794[] = { - GEO_CULLING_RADIUS(700), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ssl_seg7_dl_07022CF8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(700), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ssl_seg7_dl_07022CF8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ssl/pyramid_elevator/geo.inc.c b/levels/ssl/pyramid_elevator/geo.inc.c index 50c862fc..f899c262 100644 --- a/levels/ssl/pyramid_elevator/geo.inc.c +++ b/levels/ssl/pyramid_elevator/geo.inc.c @@ -1,9 +1,9 @@ // 0x0E0007AC const GeoLayout ssl_geo_0007AC[] = { - GEO_CULLING_RADIUS(900), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ssl_seg7_dl_070233A8), - GEO_DISPLAY_LIST(LAYER_ALPHA, ssl_seg7_dl_070235C0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(900), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ssl_seg7_dl_070233A8), + GEO_DISPLAY_LIST(LAYER_ALPHA, ssl_seg7_dl_070235C0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ssl/pyramid_top/geo.inc.c b/levels/ssl/pyramid_top/geo.inc.c index 5adf3d7f..92e28d62 100644 --- a/levels/ssl/pyramid_top/geo.inc.c +++ b/levels/ssl/pyramid_top/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000618 const GeoLayout ssl_geo_000618[] = { - GEO_CULLING_RADIUS(1000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ssl_seg7_dl_0700BF18), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ssl_seg7_dl_0700BF18), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ssl/script.c b/levels/ssl/script.c index 65aec751..37f2eac9 100644 --- a/levels/ssl/script.c +++ b/levels/ssl/script.c @@ -16,68 +16,68 @@ #include "levels/ssl/header.h" static const LevelScript script_func_local_1[] = { - OBJECT(/*model*/ MODEL_SSL_PYRAMID_TOP, /*pos*/ -2047, 1536, -1023, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPyramidTop), + OBJECT(/*model*/ MODEL_SSL_PYRAMID_TOP, /*pos*/ -2047, 1536, -1023, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvPyramidTop), RETURN(), }; static const LevelScript script_func_local_2[] = { - OBJECT(/*model*/ MODEL_SSL_TOX_BOX, /*pos*/ -1284, 0, -5895, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvToxBox), - OBJECT(/*model*/ MODEL_SSL_TOX_BOX, /*pos*/ 1283, 0, -4865, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvToxBox), - OBJECT(/*model*/ MODEL_SSL_TOX_BOX, /*pos*/ 4873, 0, -3335, /*angle*/ 0, 0, 0, /*behParam*/ 0x00020000, /*beh*/ bhvToxBox), - OBJECT(/*model*/ MODEL_TWEESTER, /*pos*/ -3600, -200, 2940, /*angle*/ 0, 0, 0, /*behParam*/ 0x00120000, /*beh*/ bhvTweester), - OBJECT_WITH_ACTS(/*model*/ MODEL_TWEESTER, /*pos*/ 1017, -200, 3832, /*angle*/ 0, 0, 0, /*behParam*/ 0x00190000, /*beh*/ bhvTweester, /*acts*/ ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_TWEESTER, /*pos*/ 3066, -200, 400, /*angle*/ 0, 0, 0, /*behParam*/ 0x00190000, /*beh*/ bhvTweester, /*acts*/ ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_KLEPTO, /*pos*/ 2200, 1174, -2820, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvKlepto, /*acts*/ ACT_1), - OBJECT_WITH_ACTS(/*model*/ MODEL_KLEPTO, /*pos*/ -5963, 573, -4784, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvKlepto, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT (/*model*/ MODEL_SSL_TOX_BOX, /*pos*/ -1284, 0, -5895, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(TOX_BOX_BP_MOVEMENT_PATTERN_1), /*bhv*/ bhvToxBox), + OBJECT (/*model*/ MODEL_SSL_TOX_BOX, /*pos*/ 1283, 0, -4865, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(TOX_BOX_BP_MOVEMENT_PATTERN_2), /*bhv*/ bhvToxBox), + OBJECT (/*model*/ MODEL_SSL_TOX_BOX, /*pos*/ 4873, 0, -3335, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(TOX_BOX_BP_MOVEMENT_PATTERN_3), /*bhv*/ bhvToxBox), + OBJECT (/*model*/ MODEL_TWEESTER, /*pos*/ -3600, -200, 2940, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x12), /*bhv*/ bhvTweester), + OBJECT_WITH_ACTS(/*model*/ MODEL_TWEESTER, /*pos*/ 1017, -200, 3832, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x19), /*bhv*/ bhvTweester, /*acts*/ ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_TWEESTER, /*pos*/ 3066, -200, 400, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x19), /*bhv*/ bhvTweester, /*acts*/ ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_KLEPTO, /*pos*/ 2200, 1174, -2820, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_1) | BPARAM2(0x01), /*bhv*/ bhvKlepto, /*acts*/ ACT_1), + OBJECT_WITH_ACTS(/*model*/ MODEL_KLEPTO, /*pos*/ -5963, 573, -4784, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvKlepto, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), RETURN(), }; static const LevelScript script_func_local_3[] = { - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -2050, 1200, -580, /*angle*/ 0, 0, 0, /*behParam*/ 0x01000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 6000, 800, 3500, /*angle*/ 0, 0, 0, /*behParam*/ 0x04000000, /*beh*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -2050, 1200, -580, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_2), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 6000, 800, 3500, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_5), /*bhv*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), RETURN(), }; static const LevelScript script_func_local_4[] = { - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2867, 640, 2867, /*angle*/ 0, 0, 0, /*behParam*/ 0x004D0000, /*beh*/ bhvPoleGrabbing), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 3200, 1331, /*angle*/ 0, 0, 0, /*behParam*/ 0x005C0000, /*beh*/ bhvPoleGrabbing), - OBJECT(/*model*/ MODEL_SSL_GRINDEL, /*pos*/ 3297, 0, 95, /*angle*/ 0, 0, 0, /*behParam*/ 0x001C0000, /*beh*/ bhvGrindel), - OBJECT(/*model*/ MODEL_SSL_GRINDEL, /*pos*/ -870, 3840, 105, /*angle*/ 0, 180, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHorizontalGrindel), - OBJECT(/*model*/ MODEL_SSL_GRINDEL, /*pos*/ -3362, 0, -1385, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHorizontalGrindel), - OBJECT(/*model*/ MODEL_SSL_SPINDEL, /*pos*/ -2458, 2109, -1430, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSpindel), - OBJECT(/*model*/ MODEL_SSL_MOVING_PYRAMID_WALL, /*pos*/ 858, 1927, -2307, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSslMovingPyramidWall), - OBJECT(/*model*/ MODEL_SSL_MOVING_PYRAMID_WALL, /*pos*/ 730, 1927, -2307, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvSslMovingPyramidWall), - OBJECT(/*model*/ MODEL_SSL_MOVING_PYRAMID_WALL, /*pos*/ 1473, 2567, -2307, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvSslMovingPyramidWall), - OBJECT(/*model*/ MODEL_SSL_MOVING_PYRAMID_WALL, /*pos*/ 1345, 2567, -2307, /*angle*/ 0, 0, 0, /*behParam*/ 0x00020000, /*beh*/ bhvSslMovingPyramidWall), - OBJECT(/*model*/ MODEL_SSL_PYRAMID_ELEVATOR, /*pos*/ 0, 4966, 256, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPyramidElevator), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1198, -133, 2396, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSandSoundLoop), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 7, 1229, -708, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSandSoundLoop), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 7, 4317, -708, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSandSoundLoop), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2867, 640, 2867, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(77), /*bhv*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 3200, 1331, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(92), /*bhv*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_SSL_GRINDEL, /*pos*/ 3297, 0, 95, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(28), /*bhv*/ bhvGrindel), + OBJECT(/*model*/ MODEL_SSL_GRINDEL, /*pos*/ -870, 3840, 105, /*angle*/ 0, 180, 0, /*bhvParam*/ 0, /*bhv*/ bhvHorizontalGrindel), + OBJECT(/*model*/ MODEL_SSL_GRINDEL, /*pos*/ -3362, 0, -1385, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvHorizontalGrindel), + OBJECT(/*model*/ MODEL_SSL_SPINDEL, /*pos*/ -2458, 2109, -1430, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvSpindel), + OBJECT(/*model*/ MODEL_SSL_MOVING_PYRAMID_WALL, /*pos*/ 858, 1927, -2307, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(PYRAMID_WALL_BP_POSITION_HIGH), /*bhv*/ bhvSSLMovingPyramidWall), + OBJECT(/*model*/ MODEL_SSL_MOVING_PYRAMID_WALL, /*pos*/ 730, 1927, -2307, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(PYRAMID_WALL_BP_POSITION_MIDDLE), /*bhv*/ bhvSSLMovingPyramidWall), + OBJECT(/*model*/ MODEL_SSL_MOVING_PYRAMID_WALL, /*pos*/ 1473, 2567, -2307, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(PYRAMID_WALL_BP_POSITION_MIDDLE), /*bhv*/ bhvSSLMovingPyramidWall), + OBJECT(/*model*/ MODEL_SSL_MOVING_PYRAMID_WALL, /*pos*/ 1345, 2567, -2307, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(PYRAMID_WALL_BP_POSITION_LOW), /*bhv*/ bhvSSLMovingPyramidWall), + OBJECT(/*model*/ MODEL_SSL_PYRAMID_ELEVATOR, /*pos*/ 0, 4966, 256, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvPyramidElevator), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1198, -133, 2396, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvSandSoundLoop), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 7, 1229, -708, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvSandSoundLoop), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 7, 4317, -708, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvSandSoundLoop), RETURN(), }; static const LevelScript script_func_local_5[] = { - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 500, 5050, -500, /*angle*/ 0, 0, 0, /*behParam*/ 0x02000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 900, 1400, 2350, /*angle*/ 0, 0, 0, /*behParam*/ 0x05040000, /*beh*/ bhvHiddenStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 500, 5050, -500, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_3), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 900, 1400, 2350, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_6) | BPARAM2(0x04), /*bhv*/ bhvHiddenStar, /*acts*/ ALL_ACTS), RETURN(), }; static const LevelScript script_func_local_6[] = { - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, -1534, -3693, /*angle*/ 0, 0, 0, /*behParam*/ 0x03000000, /*beh*/ bhvEyerokBoss), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, -1534, -3693, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_4), /*bhv*/ bhvEyerokBoss), RETURN(), }; const LevelScript level_ssl_entry[] = { INIT_LEVEL(), - LOAD_MIO0( /*seg*/ 0x07, _ssl_segment_7SegmentRomStart, _ssl_segment_7SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0A, _ssl_skybox_mio0SegmentRomStart, _ssl_skybox_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _ssl_segment_7SegmentRomStart, _ssl_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0A, _ssl_skybox_mio0SegmentRomStart, _ssl_skybox_mio0SegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _generic_mio0SegmentRomStart, _generic_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x05, _group5_mio0SegmentRomStart, _group5_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0C, _group5_geoSegmentRomStart, _group5_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x05, _group5_mio0SegmentRomStart, _group5_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0C, _group5_geoSegmentRomStart, _group5_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_1), JUMP_LINK(script_func_global_6), LOAD_MODEL_FROM_GEO(MODEL_SSL_PALM_TREE, palm_tree_geo), @@ -91,18 +91,18 @@ const LevelScript level_ssl_entry[] = { LOAD_MODEL_FROM_GEO(MODEL_SSL_TOX_BOX, ssl_geo_000630), AREA(/*index*/ 1, ssl_geo_000648), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 653, 1038, 6566, /*angle*/ 0, 90, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvSpinAirborneWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2048, 0, 56, /*angle*/ 0, 0, 0, /*behParam*/ 0x00140000, /*beh*/ bhvWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2048, 768, -1024, /*angle*/ 0, 0, 0, /*behParam*/ 0x0F1E0000, /*beh*/ bhvWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 6930, 0, -4871, /*angle*/ 0, 159, 0, /*behParam*/ 0x001F0000, /*beh*/ bhvFadingWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5943, 0, -4903, /*angle*/ 0, 49, 0, /*behParam*/ 0x00200000, /*beh*/ bhvFadingWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_SSL, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x14, /*destLevel*/ LEVEL_SSL, /*destArea*/ 0x02, /*destNode*/ 0x0A, /*flags*/ WARP_CHECKPOINT), - WARP_NODE(/*id*/ 0x1E, /*destLevel*/ LEVEL_SSL, /*destArea*/ 0x02, /*destNode*/ 0x14, /*flags*/ WARP_CHECKPOINT), - WARP_NODE(/*id*/ 0x1F, /*destLevel*/ LEVEL_SSL, /*destArea*/ 0x01, /*destNode*/ 0x20, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x20, /*destLevel*/ LEVEL_SSL, /*destArea*/ 0x01, /*destNode*/ 0x1F, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x33, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x65, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 653, 1038, 6566, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvSpinAirborneWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2048, 0, 56, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WARP_NODE_14), /*bhv*/ bhvWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2048, 768, -1024, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(15) | BPARAM2(WARP_NODE_1E), /*bhv*/ bhvWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 6930, 0, -4871, /*angle*/ 0, 159, 0, /*bhvParam*/ BPARAM2(WARP_NODE_1F), /*bhv*/ bhvFadingWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5943, 0, -4903, /*angle*/ 0, 49, 0, /*bhvParam*/ BPARAM2(WARP_NODE_20), /*bhv*/ bhvFadingWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_SSL, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_14, /*destLevel*/ LEVEL_SSL, /*destArea*/ 2, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_1E, /*destLevel*/ LEVEL_SSL, /*destArea*/ 2, /*destNode*/ WARP_NODE_14, /*flags*/ WARP_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_1F, /*destLevel*/ LEVEL_SSL, /*destArea*/ 1, /*destNode*/ WARP_NODE_20, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_20, /*destLevel*/ LEVEL_SSL, /*destArea*/ 1, /*destNode*/ WARP_NODE_1F, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_33, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_65, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_1), JUMP_LINK(script_func_local_2), JUMP_LINK(script_func_local_3), @@ -113,16 +113,16 @@ const LevelScript level_ssl_entry[] = { END_AREA(), AREA(/*index*/ 2, ssl_geo_0007CC), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 300, 6451, /*angle*/ 0, 180, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvAirborneWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 5500, 256, /*angle*/ 0, 180, 0, /*behParam*/ 0x00140000, /*beh*/ bhvAirborneWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3070, 1280, 2900, /*angle*/ 0, 180, 0, /*behParam*/ 0x00150000, /*beh*/ bhvFadingWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2546, 1150, -2647, /*angle*/ 0, 78, 0, /*behParam*/ 0x00160000, /*beh*/ bhvFadingWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_SSL, /*destArea*/ 0x02, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x14, /*destLevel*/ LEVEL_SSL, /*destArea*/ 0x02, /*destNode*/ 0x14, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x15, /*destLevel*/ LEVEL_SSL, /*destArea*/ 0x02, /*destNode*/ 0x16, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x16, /*destLevel*/ LEVEL_SSL, /*destArea*/ 0x02, /*destNode*/ 0x15, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x33, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x65, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 300, 6451, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvAirborneWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 5500, 256, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_14), /*bhv*/ bhvAirborneWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3070, 1280, 2900, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_15), /*bhv*/ bhvFadingWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2546, 1150, -2647, /*angle*/ 0, 78, 0, /*bhvParam*/ BPARAM2(WARP_NODE_16), /*bhv*/ bhvFadingWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_SSL, /*destArea*/ 2, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_14, /*destLevel*/ LEVEL_SSL, /*destArea*/ 2, /*destNode*/ WARP_NODE_14, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_15, /*destLevel*/ LEVEL_SSL, /*destArea*/ 2, /*destNode*/ WARP_NODE_16, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_16, /*destLevel*/ LEVEL_SSL, /*destArea*/ 2, /*destNode*/ WARP_NODE_15, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_33, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_65, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_4), JUMP_LINK(script_func_local_5), INSTANT_WARP(/*index*/ 3, /*destArea*/ 3, /*displace*/ 0, 0, 0), @@ -133,8 +133,8 @@ const LevelScript level_ssl_entry[] = { END_AREA(), AREA(/*index*/ 3, ssl_geo_00088C), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x33, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x65, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_33, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 3, /*destNode*/ WARP_NODE_65, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_6), TERRAIN(/*terrainData*/ ssl_seg7_area_3_collision), MACRO_OBJECTS(/*objList*/ ssl_seg7_area_3_macro_objs), diff --git a/levels/ssl/spindel/geo.inc.c b/levels/ssl/spindel/geo.inc.c index d2f28d5d..331284b3 100644 --- a/levels/ssl/spindel/geo.inc.c +++ b/levels/ssl/spindel/geo.inc.c @@ -1,12 +1,12 @@ // 0x0E000764 const GeoLayout ssl_geo_000764[] = { - GEO_CULLING_RADIUS(550), - GEO_OPEN_NODE(), - GEO_SHADOW(0x00 + SHADOW_RECTANGLE_HARDCODED_OFFSET, 0xB4, 0), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ssl_seg7_dl_070228A8), - GEO_DISPLAY_LIST(LAYER_ALPHA, ssl_seg7_dl_070229E8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(550), + GEO_OPEN_NODE(), + GEO_SHADOW(0x00 + SHADOW_RECTANGLE_HARDCODED_OFFSET, 0xB4, 0), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ssl_seg7_dl_070228A8), + GEO_DISPLAY_LIST(LAYER_ALPHA, ssl_seg7_dl_070229E8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ssl/tox_box/geo.inc.c b/levels/ssl/tox_box/geo.inc.c index e7b9f68b..fd0a6da6 100644 --- a/levels/ssl/tox_box/geo.inc.c +++ b/levels/ssl/tox_box/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000630 const GeoLayout ssl_geo_000630[] = { - GEO_CULLING_RADIUS(4000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ssl_seg7_dl_0700FCE0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(4000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ssl_seg7_dl_0700FCE0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/thi/areas/1/6/geo.inc.c b/levels/thi/areas/1/6/geo.inc.c index 0e4f9125..38c5345a 100644 --- a/levels/thi/areas/1/6/geo.inc.c +++ b/levels/thi/areas/1/6/geo.inc.c @@ -1,20 +1,20 @@ // 0x0E0005B0 const GeoLayout thi_geo_0005B0[] = { - GEO_CULLING_RADIUS(300), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, thi_seg7_dl_07007648), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(300), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, thi_seg7_dl_07007648), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E0005C8 const GeoLayout thi_geo_0005C8[] = { - GEO_CULLING_RADIUS(300), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 19660), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, thi_seg7_dl_07007648), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(300), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 19660), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, thi_seg7_dl_07007648), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/thi/areas/1/7/geo.inc.c b/levels/thi/areas/1/7/geo.inc.c index 7efb9612..4f80264e 100644 --- a/levels/thi/areas/1/7/geo.inc.c +++ b/levels/thi/areas/1/7/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0005F0 const GeoLayout thi_geo_0005F0[] = { - GEO_CULLING_RADIUS(1200), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, thi_seg7_dl_07007930), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1200), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, thi_seg7_dl_07007930), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/thi/areas/1/geo.inc.c b/levels/thi/areas/1/geo.inc.c index d08e130b..36ed1983 100644 --- a/levels/thi/areas/1/geo.inc.c +++ b/levels/thi/areas/1/geo.inc.c @@ -1,36 +1,36 @@ // 0x0E000608 const GeoLayout thi_geo_000608[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND(BACKGROUND_OCEAN_SKY, geo_skybox_main), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(1, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, thi_seg7_dl_07005260), - GEO_DISPLAY_LIST(LAYER_OPAQUE, thi_seg7_dl_07006968), - GEO_DISPLAY_LIST(LAYER_ALPHA, thi_seg7_dl_07007008), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, thi_seg7_dl_070072E8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, thi_seg7_dl_070073C0), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x1301, geo_movtex_draw_water_regions), - GEO_RENDER_OBJ(), - GEO_ASM( 0, geo_envfx_main), + GEO_BACKGROUND(BACKGROUND_OCEAN_SKY, geo_skybox_main), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_cannon_circle_base), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(1, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, thi_seg7_dl_07005260), + GEO_DISPLAY_LIST(LAYER_OPAQUE, thi_seg7_dl_07006968), + GEO_DISPLAY_LIST(LAYER_ALPHA, thi_seg7_dl_07007008), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, thi_seg7_dl_070072E8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, thi_seg7_dl_070073C0), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x1301, geo_movtex_draw_water_regions), + GEO_RENDER_OBJ(), + GEO_ASM( 0, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_cannon_circle_base), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/thi/areas/1/macro.inc.c b/levels/thi/areas/1/macro.inc.c index e622e4db..22d77b3b 100644 --- a/levels/thi/areas/1/macro.inc.c +++ b/levels/thi/areas/1/macro.inc.c @@ -1,44 +1,44 @@ // 0x0700DD50 - 0x0700DEE2 const MacroObject thi_seg7_area_1_macro_objs[] = { - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ 6656, -2832, 6964, /*behParam*/ 0x80), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 870, -502, 2828), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_in_pole, /*yaw*/ 0, /*pos*/ 4800, -110, 2250), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 90, /*pos*/ 6728, -2559, 1561, /*behParam*/ DIALOG_091), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ -66, -1637, -4944), - MACRO_OBJECT(/*preset*/ macro_huge_goomba, /*yaw*/ 0, /*pos*/ 7069, -1535, -4758), - MACRO_OBJECT(/*preset*/ macro_huge_goomba, /*yaw*/ 0, /*pos*/ 7177, -1535, -3522), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 5711, -1677, -2944), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1200, -1540, 1150), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -250, -1540, 1150), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -1200, -1540, 1150), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -250, -1550, 1150), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ -777, -1544, 1233, /*behParam*/ 2), - MACRO_OBJECT(/*preset*/ macro_huge_goomba, /*yaw*/ 0, /*pos*/ 4600, -1544, 3455), - MACRO_OBJECT(/*preset*/ macro_huge_goomba, /*yaw*/ 0, /*pos*/ 3444, -522, 3011), - MACRO_OBJECT(/*preset*/ macro_huge_goomba, /*yaw*/ 0, /*pos*/ -3622, -511, 3100), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -4911, -395, -1433), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 199, 2233, 433), - MACRO_OBJECT(/*preset*/ macro_huge_goomba, /*yaw*/ 0, /*pos*/ -3177, 1255, -2366), - MACRO_OBJECT(/*preset*/ macro_chuckya, /*yaw*/ 0, /*pos*/ -1800, 2233, -322), - MACRO_OBJECT(/*preset*/ macro_fish_group, /*yaw*/ 0, /*pos*/ -6222, -3400, -1455), - MACRO_OBJECT(/*preset*/ macro_enemy_lakitu, /*yaw*/ 0, /*pos*/ -1905, -2223, 6541), - MACRO_OBJECT(/*preset*/ macro_fire_fly_guy, /*yaw*/ 0, /*pos*/ -1911, 0, -5822), - MACRO_OBJECT(/*preset*/ macro_fire_fly_guy, /*yaw*/ 0, /*pos*/ 6493, -2186, 5189), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -6000, -3566, -1320), - MACRO_OBJECT(/*preset*/ macro_fish_group, /*yaw*/ 0, /*pos*/ -6550, -3450, 4100), - MACRO_OBJECT(/*preset*/ macro_fish_group, /*yaw*/ 0, /*pos*/ -1750, -3450, 7800), - MACRO_OBJECT(/*preset*/ macro_fish_group, /*yaw*/ 0, /*pos*/ 1950, -3500, 7600), - MACRO_OBJECT(/*preset*/ macro_box_1up_running_away, /*yaw*/ 0, /*pos*/ -5712, -2190, 1100), - MACRO_OBJECT(/*preset*/ macro_box_1up_running_away, /*yaw*/ 0, /*pos*/ 6022, -1722, -633), - MACRO_OBJECT(/*preset*/ macro_wooden_post, /*yaw*/ 0, /*pos*/ -5822, -2969, 5822), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 90, /*pos*/ -886, -2559, 6655, /*behParam*/ DIALOG_165), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -2370, -511, 2320, /*behParam*/ DIALOG_166), - MACRO_OBJECT(/*preset*/ macro_box_star_2, /*yaw*/ 0, /*pos*/ 2600, 3500, -2400), - MACRO_OBJECT(/*preset*/ macro_huge_goomba, /*yaw*/ 0, /*pos*/ -3180, -511, 2080), - MACRO_OBJECT(/*preset*/ macro_fly_guy, /*yaw*/ 0, /*pos*/ -300, -2340, 3940), - MACRO_OBJECT(/*preset*/ macro_wooden_post, /*yaw*/ 0, /*pos*/ -520, -2560, 6660), - MACRO_OBJECT(/*preset*/ macro_koopa, /*yaw*/ 0, /*pos*/ -800, -2236, 3080), - MACRO_OBJECT(/*preset*/ macro_butterfly_triplet, /*yaw*/ 0, /*pos*/ -3111, -511, 2400), - MACRO_OBJECT(/*preset*/ macro_butterfly_triplet, /*yaw*/ 0, /*pos*/ 4844, -533, 2266), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ 6656, -2832, 6964, /*bhvParam*/ 0x80), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 870, -502, 2828), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_in_pole, /*yaw*/ 0, /*pos*/ 4800, -110, 2250), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 90, /*pos*/ 6728, -2559, 1561, /*bhvParam*/ DIALOG_091), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ -66, -1637, -4944), + MACRO_OBJECT (/*preset*/ macro_huge_goomba, /*yaw*/ 0, /*pos*/ 7069, -1535, -4758), + MACRO_OBJECT (/*preset*/ macro_huge_goomba, /*yaw*/ 0, /*pos*/ 7177, -1535, -3522), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 5711, -1677, -2944), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -1200, -1540, 1150), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -250, -1540, 1150), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -1200, -1540, 1150), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -250, -1550, 1150), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ -777, -1544, 1233, /*bhvParam*/ 2), + MACRO_OBJECT (/*preset*/ macro_huge_goomba, /*yaw*/ 0, /*pos*/ 4600, -1544, 3455), + MACRO_OBJECT (/*preset*/ macro_huge_goomba, /*yaw*/ 0, /*pos*/ 3444, -522, 3011), + MACRO_OBJECT (/*preset*/ macro_huge_goomba, /*yaw*/ 0, /*pos*/ -3622, -511, 3100), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -4911, -395, -1433), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 199, 2233, 433), + MACRO_OBJECT (/*preset*/ macro_huge_goomba, /*yaw*/ 0, /*pos*/ -3177, 1255, -2366), + MACRO_OBJECT (/*preset*/ macro_chuckya, /*yaw*/ 0, /*pos*/ -1800, 2233, -322), + MACRO_OBJECT (/*preset*/ macro_fish_spawner_few_blue, /*yaw*/ 0, /*pos*/ -6222, -3400, -1455), + MACRO_OBJECT (/*preset*/ macro_enemy_lakitu, /*yaw*/ 0, /*pos*/ -1905, -2223, 6541), + MACRO_OBJECT (/*preset*/ macro_fire_fly_guy, /*yaw*/ 0, /*pos*/ -1911, 0, -5822), + MACRO_OBJECT (/*preset*/ macro_fire_fly_guy, /*yaw*/ 0, /*pos*/ 6493, -2186, 5189), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -6000, -3566, -1320), + MACRO_OBJECT (/*preset*/ macro_fish_spawner_few_blue, /*yaw*/ 0, /*pos*/ -6550, -3450, 4100), + MACRO_OBJECT (/*preset*/ macro_fish_spawner_few_blue, /*yaw*/ 0, /*pos*/ -1750, -3450, 7800), + MACRO_OBJECT (/*preset*/ macro_fish_spawner_few_blue, /*yaw*/ 0, /*pos*/ 1950, -3500, 7600), + MACRO_OBJECT (/*preset*/ macro_box_1up_running_away, /*yaw*/ 0, /*pos*/ -5712, -2190, 1100), + MACRO_OBJECT (/*preset*/ macro_box_1up_running_away, /*yaw*/ 0, /*pos*/ 6022, -1722, -633), + MACRO_OBJECT (/*preset*/ macro_wooden_post_1, /*yaw*/ 0, /*pos*/ -5822, -2969, 5822), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 90, /*pos*/ -886, -2559, 6655, /*bhvParam*/ DIALOG_165), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -2370, -511, 2320, /*bhvParam*/ DIALOG_166), + MACRO_OBJECT (/*preset*/ macro_box_star_act_2, /*yaw*/ 0, /*pos*/ 2600, 3500, -2400), + MACRO_OBJECT (/*preset*/ macro_huge_goomba, /*yaw*/ 0, /*pos*/ -3180, -511, 2080), + MACRO_OBJECT (/*preset*/ macro_fly_guy, /*yaw*/ 0, /*pos*/ -300, -2340, 3940), + MACRO_OBJECT (/*preset*/ macro_wooden_post_1, /*yaw*/ 0, /*pos*/ -520, -2560, 6660), + MACRO_OBJECT (/*preset*/ macro_koopa, /*yaw*/ 0, /*pos*/ -800, -2236, 3080), + MACRO_OBJECT (/*preset*/ macro_butterfly_triplet, /*yaw*/ 0, /*pos*/ -3111, -511, 2400), + MACRO_OBJECT (/*preset*/ macro_butterfly_triplet, /*yaw*/ 0, /*pos*/ 4844, -533, 2266), MACRO_OBJECT_END(), }; diff --git a/levels/thi/areas/2/geo.inc.c b/levels/thi/areas/2/geo.inc.c index eefb7455..36e62092 100644 --- a/levels/thi/areas/2/geo.inc.c +++ b/levels/thi/areas/2/geo.inc.c @@ -2,36 +2,36 @@ // 0x0E0006D4 const GeoLayout thi_geo_0006D4[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND(BACKGROUND_OCEAN_SKY, geo_skybox_main), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(1, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_SCALE(0x00, 19660), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, thi_seg7_dl_07005260), - GEO_DISPLAY_LIST(LAYER_OPAQUE, thi_seg7_dl_07006968), - GEO_DISPLAY_LIST(LAYER_ALPHA, thi_seg7_dl_07007008), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, thi_seg7_dl_070072E8), - GEO_CLOSE_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, thi_seg7_dl_07007538), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x1302, geo_movtex_draw_water_regions), - GEO_RENDER_OBJ(), - GEO_ASM( 0, geo_envfx_main), + GEO_BACKGROUND(BACKGROUND_OCEAN_SKY, geo_skybox_main), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(1, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 19660), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, thi_seg7_dl_07005260), + GEO_DISPLAY_LIST(LAYER_OPAQUE, thi_seg7_dl_07006968), + GEO_DISPLAY_LIST(LAYER_ALPHA, thi_seg7_dl_07007008), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, thi_seg7_dl_070072E8), + GEO_CLOSE_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, thi_seg7_dl_07007538), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x1302, geo_movtex_draw_water_regions), + GEO_RENDER_OBJ(), + GEO_ASM( 0, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/thi/areas/2/macro.inc.c b/levels/thi/areas/2/macro.inc.c index a825abe4..ba92e291 100644 --- a/levels/thi/areas/2/macro.inc.c +++ b/levels/thi/areas/2/macro.inc.c @@ -1,37 +1,37 @@ // 0x0700DEE4 - 0x0700E18E const MacroObject thi_seg7_area_2_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_bobomb_buddy_opens_cannon, /*yaw*/ 0, /*pos*/ 1902, -767, 1318), + MACRO_OBJECT(/*preset*/ macro_bobomb_buddy_opens_cannon_1, /*yaw*/ 0, /*pos*/ 1902, -767, 1318), MACRO_OBJECT(/*preset*/ macro_floor_switch_hidden_objects, /*yaw*/ 0, /*pos*/ -1380, -766, -1770), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ -1140, -970, -1920), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ -1140, -970, -1720), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ -940, -970, -1920), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ -940, -970, -1720), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ -340, -970, -2120), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ -340, -970, -1920), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ -540, -970, -1920), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ -740, -970, -1920), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ -540, -970, -1720), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ -140, -970, -2120), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 40, -970, -2520), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ -740, -970, -1720), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ -140, -970, -2320), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 40, -970, -2320), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 40, -970, -3120), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ -140, -970, -2720), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ -140, -970, -3320), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 40, -970, -3320), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ -140, -970, -2520), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 40, -970, -2720), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ -140, -970, -3120), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 40, -970, -2920), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ -140, -970, -2920), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ -40, -970, -3720), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 40, -970, -3520), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ -140, -970, -3520), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ -140, -970, -1920), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 40, -970, -2120), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ -340, -970, -1720), - MACRO_OBJECT(/*preset*/ macro_fire_piranha_plant, /*yaw*/ 0, /*pos*/ -1837, -613, -1214), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ -1140, -970, -1920), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ -1140, -970, -1720), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ -940, -970, -1920), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ -940, -970, -1720), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ -340, -970, -2120), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ -340, -970, -1920), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ -540, -970, -1920), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ -740, -970, -1920), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ -540, -970, -1720), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ -140, -970, -2120), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 40, -970, -2520), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ -740, -970, -1720), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ -140, -970, -2320), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 40, -970, -2320), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 40, -970, -3120), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ -140, -970, -2720), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ -140, -970, -3320), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 40, -970, -3320), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ -140, -970, -2520), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 40, -970, -2720), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ -140, -970, -3120), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 40, -970, -2920), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ -140, -970, -2920), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ -40, -970, -3720), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 40, -970, -3520), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ -140, -970, -3520), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ -140, -970, -1920), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 40, -970, -2120), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ -340, -970, -1720), + MACRO_OBJECT(/*preset*/ macro_fire_piranha_plant_1, /*yaw*/ 0, /*pos*/ -1837, -613, -1214), MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 29, 666, 148), MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 266, -162, 829), MACRO_OBJECT(/*preset*/ macro_tiny_goomba, /*yaw*/ 0, /*pos*/ 1881, -778, 1614), @@ -51,7 +51,7 @@ const MacroObject thi_seg7_area_2_macro_objs[] = { MACRO_OBJECT(/*preset*/ macro_box_three_coins, /*yaw*/ 0, /*pos*/ 1849, -325, -183), MACRO_OBJECT(/*preset*/ macro_tiny_goomba, /*yaw*/ 0, /*pos*/ 1033, -162, 916), MACRO_OBJECT(/*preset*/ macro_tiny_goomba, /*yaw*/ 0, /*pos*/ -550, 666, -150), - MACRO_OBJECT(/*preset*/ macro_fish_group, /*yaw*/ 0, /*pos*/ 383, -1022, 2133), + MACRO_OBJECT(/*preset*/ macro_fish_spawner_few_blue, /*yaw*/ 0, /*pos*/ 383, -1022, 2133), MACRO_OBJECT(/*preset*/ macro_tiny_goomba, /*yaw*/ 0, /*pos*/ 2133, -767, 466), MACRO_OBJECT(/*preset*/ macro_tiny_goomba, /*yaw*/ 0, /*pos*/ -1033, -153, 1050), MACRO_OBJECT(/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ 1980, -880, 2100), @@ -64,9 +64,9 @@ const MacroObject thi_seg7_area_2_macro_objs[] = { MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -2133, -770, 296), MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -160, -608, 666), MACRO_OBJECT(/*preset*/ macro_butterfly_triplet, /*yaw*/ 0, /*pos*/ -1693, -890, 1746), - MACRO_OBJECT(/*preset*/ macro_thi_koopa_the_quick, /*yaw*/ 0, /*pos*/ -600, -153, 800), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ -40, -970, -3920), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 280, -640, -4140), + MACRO_OBJECT(/*preset*/ macro_koopa_tiny, /*yaw*/ 0, /*pos*/ -600, -153, 800), + MACRO_OBJECT(/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ -40, -970, -3920), + MACRO_OBJECT(/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 280, -640, -4140), MACRO_OBJECT(/*preset*/ macro_tiny_goomba, /*yaw*/ 0, /*pos*/ -2020, -890, 1720), MACRO_OBJECT_END(), }; diff --git a/levels/thi/areas/3/geo.inc.c b/levels/thi/areas/3/geo.inc.c index e3a6ebaa..3c362125 100644 --- a/levels/thi/areas/3/geo.inc.c +++ b/levels/thi/areas/3/geo.inc.c @@ -1,29 +1,29 @@ // 0x0E00079C const GeoLayout thi_geo_00079C[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND_COLOR(0x0001), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, thi_seg7_dl_07007C20), - GEO_DISPLAY_LIST(LAYER_OPAQUE, thi_seg7_dl_07009670), - 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_envfx_main), + GEO_BACKGROUND_COLOR(0x0001), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, thi_seg7_dl_07007C20), + GEO_DISPLAY_LIST(LAYER_OPAQUE, thi_seg7_dl_07009670), + 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_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/thi/leveldata.c b/levels/thi/leveldata.c index f00bbf30..661da4c5 100644 --- a/levels/thi/leveldata.c +++ b/levels/thi/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "dialog_ids.h" diff --git a/levels/thi/script.c b/levels/thi/script.c index dcddbc4e..b2bda1aa 100644 --- a/levels/thi/script.c +++ b/levels/thi/script.c @@ -20,76 +20,76 @@ static const LevelScript script_func_local_1[] = { }; static const LevelScript script_func_local_2[] = { - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 0, -700, -4500, /*angle*/ 0, 0, 0, /*behParam*/ 0x03000000, /*beh*/ bhvHiddenStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 0, -700, -4500, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_4), /*bhv*/ bhvHiddenStar, /*acts*/ ALL_ACTS), RETURN(), }; static const LevelScript script_func_local_3[] = { - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ -1800, 800, -1500, /*angle*/ 0, 0, 0, /*behParam*/ 0x04000000, /*beh*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), - OBJECT(/*model*/ MODEL_WIGGLER_HEAD, /*pos*/ 17, 1843, -62, /*angle*/ 0, 0, 0, /*behParam*/ 0x05000000, /*beh*/ bhvWigglerHead), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ -1800, 800, -1500, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_5), /*bhv*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), + OBJECT (/*model*/ MODEL_WIGGLER_HEAD, /*pos*/ 17, 1843, -62, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_6), /*bhv*/ bhvWigglerHead), RETURN(), }; static const LevelScript script_func_local_4[] = { - OBJECT_WITH_ACTS(/*model*/ MODEL_KOOPA_WITH_SHELL, /*pos*/ -1900, -511, 2400, /*angle*/ 0, -30, 0, /*behParam*/ 0x02030000, /*beh*/ bhvKoopa, /*acts*/ ACT_3), - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 7400, -1537, -6300, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvKoopaRaceEndpoint, /*acts*/ ACT_3), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6556, -2969, 6565, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvGoombaTripletSpawner), - OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ 6517, -2559, 4327, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvGoomba), - OBJECT(/*model*/ MODEL_PIRANHA_PLANT, /*pos*/ -6336, -2047, -3861, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvFirePiranhaPlant), - OBJECT(/*model*/ MODEL_PIRANHA_PLANT, /*pos*/ -5740, -2047, -6578, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvFirePiranhaPlant), - OBJECT(/*model*/ MODEL_PIRANHA_PLANT, /*pos*/ -6481, -2047, -5998, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvFirePiranhaPlant), - OBJECT(/*model*/ MODEL_PIRANHA_PLANT, /*pos*/ -5577, -2047, -4961, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvFirePiranhaPlant), - OBJECT(/*model*/ MODEL_PIRANHA_PLANT, /*pos*/ -6865, -2047, -4568, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvFirePiranhaPlant), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4413, 204, -2140, /*angle*/ 0, 0, 0, /*behParam*/ 0x00030000, /*beh*/ bhvThiBowlingBallSpawner), - OBJECT(/*model*/ MODEL_BUBBA, /*pos*/ -6241, -3300, -716, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBubba), - OBJECT(/*model*/ MODEL_BUBBA, /*pos*/ 1624, -3300, 8142, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBubba), + OBJECT_WITH_ACTS(/*model*/ MODEL_KOOPA_WITH_SHELL, /*pos*/ -1900, -511, 2400, /*angle*/ 0, -30, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_3) | BPARAM2(KOOPA_BP_KOOPA_THE_QUICK_THI), /*bhv*/ bhvKoopa, /*acts*/ ACT_3), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 7400, -1537, -6300, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvKoopaRaceEndpoint, /*acts*/ ACT_3), + OBJECT (/*model*/ MODEL_NONE, /*pos*/ -6556, -2969, 6565, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(GOOMBA_TRIPLET_SPAWNER_BP_EXTRA_GOOMBAS(0) | GOOMBA_SIZE_HUGE), /*bhv*/ bhvGoombaTripletSpawner), + OBJECT (/*model*/ MODEL_GOOMBA, /*pos*/ 6517, -2559, 4327, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(GOOMBA_SIZE_HUGE), /*bhv*/ bhvGoomba), + OBJECT (/*model*/ MODEL_PIRANHA_PLANT, /*pos*/ -6336, -2047, -3861, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_1) | BPARAM2(0x01), /*bhv*/ bhvFirePiranhaPlant), + OBJECT (/*model*/ MODEL_PIRANHA_PLANT, /*pos*/ -5740, -2047, -6578, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_1) | BPARAM2(0x01), /*bhv*/ bhvFirePiranhaPlant), + OBJECT (/*model*/ MODEL_PIRANHA_PLANT, /*pos*/ -6481, -2047, -5998, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_1) | BPARAM2(0x01), /*bhv*/ bhvFirePiranhaPlant), + OBJECT (/*model*/ MODEL_PIRANHA_PLANT, /*pos*/ -5577, -2047, -4961, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_1) | BPARAM2(0x01), /*bhv*/ bhvFirePiranhaPlant), + OBJECT (/*model*/ MODEL_PIRANHA_PLANT, /*pos*/ -6865, -2047, -4568, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_1) | BPARAM2(0x01), /*bhv*/ bhvFirePiranhaPlant), + OBJECT (/*model*/ MODEL_NONE, /*pos*/ -4413, 204, -2140, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(BBALL_BP_STYPE_THI_LARGE), /*bhv*/ bhvTHIBowlingBallSpawner), + OBJECT (/*model*/ MODEL_BUBBA, /*pos*/ -6241, -3300, -716, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBubba), + OBJECT (/*model*/ MODEL_BUBBA, /*pos*/ 1624, -3300, 8142, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBubba), RETURN(), }; static const LevelScript script_func_local_5[] = { - OBJECT(/*model*/ MODEL_THI_HUGE_ISLAND_TOP, /*pos*/ 0, 3891, -1533, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvThiHugeIslandTop), + OBJECT(/*model*/ MODEL_THI_HUGE_ISLAND_TOP, /*pos*/ 0, 3891, -1533, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvTHIHugeIslandTop), RETURN(), }; static const LevelScript script_func_local_6[] = { - OBJECT(/*model*/ MODEL_THI_TINY_ISLAND_TOP, /*pos*/ 0, 1167, -460, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvThiTinyIslandTop), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1382, 80, -649, /*angle*/ 0, 0, 0, /*behParam*/ 0x00040000, /*beh*/ bhvThiBowlingBallSpawner), + OBJECT(/*model*/ MODEL_THI_TINY_ISLAND_TOP, /*pos*/ 0, 1167, -460, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvTHITinyIslandTop), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1382, 80, -649, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(BBALL_BP_STYPE_THI_SMALL), /*bhv*/ bhvTHIBowlingBallSpawner), RETURN(), }; static const LevelScript script_func_local_7[] = { - OBJECT(/*model*/ MODEL_THI_WARP_PIPE, /*pos*/ 6656, -1536, -5632, /*angle*/ 0, 0, 0, /*behParam*/ 0x00320000, /*beh*/ bhvWarpPipe), - OBJECT(/*model*/ MODEL_THI_WARP_PIPE, /*pos*/ -5888, -2048, -5888, /*angle*/ 0, 0, 0, /*behParam*/ 0x00330000, /*beh*/ bhvWarpPipe), - OBJECT(/*model*/ MODEL_THI_WARP_PIPE, /*pos*/ -3072, 512, -3840, /*angle*/ 0, 0, 0, /*behParam*/ 0x00340000, /*beh*/ bhvWarpPipe), - WARP_NODE(/*id*/ 0x32, /*destLevel*/ LEVEL_THI, /*destArea*/ 0x02, /*destNode*/ 0x32, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x33, /*destLevel*/ LEVEL_THI, /*destArea*/ 0x02, /*destNode*/ 0x33, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x34, /*destLevel*/ LEVEL_THI, /*destArea*/ 0x02, /*destNode*/ 0x34, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_THI_WARP_PIPE, /*pos*/ 6656, -1536, -5632, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WARP_NODE_32), /*bhv*/ bhvWarpPipe), + OBJECT(/*model*/ MODEL_THI_WARP_PIPE, /*pos*/ -5888, -2048, -5888, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WARP_NODE_33), /*bhv*/ bhvWarpPipe), + OBJECT(/*model*/ MODEL_THI_WARP_PIPE, /*pos*/ -3072, 512, -3840, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WARP_NODE_34), /*bhv*/ bhvWarpPipe), + WARP_NODE(/*id*/ WARP_NODE_32, /*destLevel*/ LEVEL_THI, /*destArea*/ 2, /*destNode*/ WARP_NODE_32, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_33, /*destLevel*/ LEVEL_THI, /*destArea*/ 2, /*destNode*/ WARP_NODE_33, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_34, /*destLevel*/ LEVEL_THI, /*destArea*/ 2, /*destNode*/ WARP_NODE_34, /*flags*/ WARP_NO_CHECKPOINT), RETURN(), }; static const LevelScript script_func_local_8[] = { - OBJECT(/*model*/ MODEL_THI_WARP_PIPE, /*pos*/ 1997, -461, -1690, /*angle*/ 0, 0, 0, /*behParam*/ 0x00320000, /*beh*/ bhvWarpPipe), - OBJECT(/*model*/ MODEL_THI_WARP_PIPE, /*pos*/ -1766, -614, -1766, /*angle*/ 0, 0, 0, /*behParam*/ 0x00330000, /*beh*/ bhvWarpPipe), - OBJECT(/*model*/ MODEL_THI_WARP_PIPE, /*pos*/ -922, 154, -1152, /*angle*/ 0, 0, 0, /*behParam*/ 0x00340000, /*beh*/ bhvWarpPipe), - WARP_NODE(/*id*/ 0x32, /*destLevel*/ LEVEL_THI, /*destArea*/ 0x01, /*destNode*/ 0x32, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x33, /*destLevel*/ LEVEL_THI, /*destArea*/ 0x01, /*destNode*/ 0x33, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x34, /*destLevel*/ LEVEL_THI, /*destArea*/ 0x01, /*destNode*/ 0x34, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_THI_WARP_PIPE, /*pos*/ 1997, -461, -1690, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WARP_NODE_32), /*bhv*/ bhvWarpPipe), + OBJECT(/*model*/ MODEL_THI_WARP_PIPE, /*pos*/ -1766, -614, -1766, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WARP_NODE_33), /*bhv*/ bhvWarpPipe), + OBJECT(/*model*/ MODEL_THI_WARP_PIPE, /*pos*/ -922, 154, -1152, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WARP_NODE_34), /*bhv*/ bhvWarpPipe), + WARP_NODE(/*id*/ WARP_NODE_32, /*destLevel*/ LEVEL_THI, /*destArea*/ 1, /*destNode*/ WARP_NODE_32, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_33, /*destLevel*/ LEVEL_THI, /*destArea*/ 1, /*destNode*/ WARP_NODE_33, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_34, /*destLevel*/ LEVEL_THI, /*destArea*/ 1, /*destNode*/ WARP_NODE_34, /*flags*/ WARP_NO_CHECKPOINT), RETURN(), }; const LevelScript level_thi_entry[] = { INIT_LEVEL(), - LOAD_MIO0( /*seg*/ 0x07, _thi_segment_7SegmentRomStart, _thi_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _thi_segment_7SegmentRomStart, _thi_segment_7SegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _grass_mio0SegmentRomStart, _grass_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0A, _water_skybox_mio0SegmentRomStart, _water_skybox_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x05, _group11_mio0SegmentRomStart, _group11_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0C, _group11_geoSegmentRomStart, _group11_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x06, _group14_mio0SegmentRomStart, _group14_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0D, _group14_geoSegmentRomStart, _group14_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0A, _water_skybox_mio0SegmentRomStart, _water_skybox_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x05, _group11_mio0SegmentRomStart, _group11_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0C, _group11_geoSegmentRomStart, _group11_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x06, _group14_mio0SegmentRomStart, _group14_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0D, _group14_geoSegmentRomStart, _group14_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_1), JUMP_LINK(script_func_global_12), JUMP_LINK(script_func_global_15), @@ -100,16 +100,16 @@ const LevelScript level_thi_entry[] = { LOAD_MODEL_FROM_GEO(MODEL_THI_TINY_ISLAND_TOP, thi_geo_0005C8), AREA(/*index*/ 1, thi_geo_000608), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -7372, -1969, 7373, /*angle*/ 0, 149, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvSpinAirborneWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 410, -512, 922, /*angle*/ 0, 0, 0, /*behParam*/ 0x000B0000, /*beh*/ bhvInstantActiveWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 410, -512, 717, /*angle*/ 0, 0, 0, /*behParam*/ 0x050C0000, /*beh*/ bhvWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 3170, -1570, /*angle*/ 0, 0, 0, /*behParam*/ 0x0A0D0000, /*beh*/ bhvWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_THI, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0B, /*destLevel*/ LEVEL_THI, /*destArea*/ 0x01, /*destNode*/ 0x0B, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0C, /*destLevel*/ LEVEL_THI, /*destArea*/ 0x03, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0D, /*destLevel*/ LEVEL_THI, /*destArea*/ 0x03, /*destNode*/ 0x0B, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x37, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x69, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -7372, -1969, 7373, /*angle*/ 0, 149, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvSpinAirborneWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 410, -512, 922, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0B), /*bhv*/ bhvInstantActiveWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 410, -512, 717, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(5) | BPARAM2(WARP_NODE_0C), /*bhv*/ bhvWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 3170, -1570, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(10) | BPARAM2(WARP_NODE_0D), /*bhv*/ bhvWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_THI, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0B, /*destLevel*/ LEVEL_THI, /*destArea*/ 1, /*destNode*/ WARP_NODE_0B, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0C, /*destLevel*/ LEVEL_THI, /*destArea*/ 3, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0D, /*destLevel*/ LEVEL_THI, /*destArea*/ 3, /*destNode*/ WARP_NODE_0B, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_37, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_69, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_7), JUMP_LINK(script_func_local_1), JUMP_LINK(script_func_local_5), @@ -121,14 +121,14 @@ const LevelScript level_thi_entry[] = { END_AREA(), AREA(/*index*/ 2, thi_geo_0006D4), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2211, 110, 2212, /*angle*/ 0, 149, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvSpinAirborneWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 280, -767, -4180, /*angle*/ 0, 0, 0, /*behParam*/ 0x000B0000, /*beh*/ bhvFadingWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1638, 0, -1988, /*angle*/ 0, -126, 0, /*behParam*/ 0x000C0000, /*beh*/ bhvFadingWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_THI, /*destArea*/ 0x02, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0B, /*destLevel*/ LEVEL_THI, /*destArea*/ 0x02, /*destNode*/ 0x0C, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0C, /*destLevel*/ LEVEL_THI, /*destArea*/ 0x02, /*destNode*/ 0x0B, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x33, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x65, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2211, 110, 2212, /*angle*/ 0, 149, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvSpinAirborneWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 280, -767, -4180, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0B), /*bhv*/ bhvFadingWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1638, 0, -1988, /*angle*/ 0, -126, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0C), /*bhv*/ bhvFadingWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_THI, /*destArea*/ 2, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0B, /*destLevel*/ LEVEL_THI, /*destArea*/ 2, /*destNode*/ WARP_NODE_0C, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0C, /*destLevel*/ LEVEL_THI, /*destArea*/ 2, /*destNode*/ WARP_NODE_0B, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_33, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_65, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_8), JUMP_LINK(script_func_local_2), JUMP_LINK(script_func_local_6), @@ -139,14 +139,14 @@ const LevelScript level_thi_entry[] = { END_AREA(), AREA(/*index*/ 3, thi_geo_00079C), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 512, 1024, 2150, /*angle*/ 0, 180, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvInstantActiveWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 3277, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x000B0000, /*beh*/ bhvAirborneWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 512, 1024, 2355, /*angle*/ 0, 0, 0, /*behParam*/ 0x050C0000, /*beh*/ bhvWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_THI, /*destArea*/ 0x03, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0B, /*destLevel*/ LEVEL_THI, /*destArea*/ 0x03, /*destNode*/ 0x0B, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0C, /*destLevel*/ LEVEL_THI, /*destArea*/ 0x01, /*destNode*/ 0x0B, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x37, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x69, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 512, 1024, 2150, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvInstantActiveWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 3277, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0B), /*bhv*/ bhvAirborneWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 512, 1024, 2355, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(5) | BPARAM2(WARP_NODE_0C), /*bhv*/ bhvWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_THI, /*destArea*/ 3, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0B, /*destLevel*/ LEVEL_THI, /*destArea*/ 3, /*destNode*/ WARP_NODE_0B, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0C, /*destLevel*/ LEVEL_THI, /*destArea*/ 1, /*destNode*/ WARP_NODE_0B, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_37, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_69, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_3), TERRAIN(/*terrainData*/ thi_seg7_area_3_collision), MACRO_OBJECTS(/*objList*/ thi_seg7_area_3_macro_objs), diff --git a/levels/totwc/areas/1/geo.inc.c b/levels/totwc/areas/1/geo.inc.c index 57c11e95..690cc294 100644 --- a/levels/totwc/areas/1/geo.inc.c +++ b/levels/totwc/areas/1/geo.inc.c @@ -1,28 +1,28 @@ // 0x0E000188 const GeoLayout totwc_geo_000188[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND(BACKGROUND_BELOW_CLOUDS, geo_skybox_main), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 25000, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, totwc_seg7_dl_07005D28), - 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_envfx_main), + GEO_BACKGROUND(BACKGROUND_BELOW_CLOUDS, geo_skybox_main), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 25000, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, totwc_seg7_dl_07005D28), + 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_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/totwc/areas/1/macro.inc.c b/levels/totwc/areas/1/macro.inc.c index fc788a92..aa6b48d5 100644 --- a/levels/totwc/areas/1/macro.inc.c +++ b/levels/totwc/areas/1/macro.inc.c @@ -1,32 +1,32 @@ // 0x070088AC - 0x070089C6 const MacroObject totwc_seg7_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ 0, -1760, -600), - MACRO_OBJECT(/*preset*/ macro_coin_ring_vertical, /*yaw*/ 90, /*pos*/ 0, -1000, 3000), - MACRO_OBJECT(/*preset*/ macro_coin_ring_vertical, /*yaw*/ 0, /*pos*/ -3500, -200, 0), - MACRO_OBJECT(/*preset*/ macro_coin_ring_vertical, /*yaw*/ 0, /*pos*/ 4500, 1400, 0), - MACRO_OBJECT(/*preset*/ macro_coin_ring_vertical, /*yaw*/ 90, /*pos*/ 0, 600, -4000), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -100, 800, -4000), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -3500, 0, 100), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 100, -800, 3000), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4500, 1600, -100), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 100, 800, -4000), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -3500, 0, -100), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -100, -800, 3000), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4500, 1600, 100), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 2913, 1200, -2941), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 3954, 1400, -1817), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 1554, 1000, -3680), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -2657, 400, -2742), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -1485, 600, -3628), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -3231, 200, -1514), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -2197, -400, 2142), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -3056, -200, 1310), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -1144, -600, 2742), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 3680, 1800, 1439), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 2080, 2000, 2080), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 920, 2200, 1920), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -40, 2400, 1520), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -960, 2600, 1040), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -1760, 2800, 600), + MACRO_OBJECT(/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ 0, -1760, -600), + MACRO_OBJECT(/*preset*/ macro_coin_ring_vertical_flying, /*yaw*/ 90, /*pos*/ 0, -1000, 3000), + MACRO_OBJECT(/*preset*/ macro_coin_ring_vertical_flying, /*yaw*/ 0, /*pos*/ -3500, -200, 0), + MACRO_OBJECT(/*preset*/ macro_coin_ring_vertical_flying, /*yaw*/ 0, /*pos*/ 4500, 1400, 0), + MACRO_OBJECT(/*preset*/ macro_coin_ring_vertical_flying, /*yaw*/ 90, /*pos*/ 0, 600, -4000), + MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -100, 800, -4000), + MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -3500, 0, 100), + MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 100, -800, 3000), + MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4500, 1600, -100), + MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 100, 800, -4000), + MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -3500, 0, -100), + MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -100, -800, 3000), + MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4500, 1600, 100), + MACRO_OBJECT(/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 2913, 1200, -2941), + MACRO_OBJECT(/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 3954, 1400, -1817), + MACRO_OBJECT(/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 1554, 1000, -3680), + MACRO_OBJECT(/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -2657, 400, -2742), + MACRO_OBJECT(/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -1485, 600, -3628), + MACRO_OBJECT(/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -3231, 200, -1514), + MACRO_OBJECT(/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -2197, -400, 2142), + MACRO_OBJECT(/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -3056, -200, 1310), + MACRO_OBJECT(/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -1144, -600, 2742), + MACRO_OBJECT(/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 3680, 1800, 1439), + MACRO_OBJECT(/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 2080, 2000, 2080), + MACRO_OBJECT(/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 920, 2200, 1920), + MACRO_OBJECT(/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -40, 2400, 1520), + MACRO_OBJECT(/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -960, 2600, 1040), + MACRO_OBJECT(/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -1760, 2800, 600), MACRO_OBJECT_END(), }; diff --git a/levels/totwc/cloud/geo.inc.c b/levels/totwc/cloud/geo.inc.c index 6f6888e5..24451f5c 100644 --- a/levels/totwc/cloud/geo.inc.c +++ b/levels/totwc/cloud/geo.inc.c @@ -1,11 +1,11 @@ // 0x0E000160 const GeoLayout totwc_geo_000160[] = { - GEO_CULLING_RADIUS(2000), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, totwc_seg7_dl_070079A8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2000), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, totwc_seg7_dl_070079A8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/totwc/leveldata.c b/levels/totwc/leveldata.c index 910f4e23..b300a991 100644 --- a/levels/totwc/leveldata.c +++ b/levels/totwc/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "make_const_nonconst.h" diff --git a/levels/totwc/script.c b/levels/totwc/script.c index d0172c76..7664baae 100644 --- a/levels/totwc/script.c +++ b/levels/totwc/script.c @@ -17,36 +17,36 @@ #include "levels/totwc/header.h" static const LevelScript script_func_local_1[] = { - OBJECT(/*model*/ MODEL_CAP_SWITCH, /*pos*/ 0, -2047, 10, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvCapSwitch), + OBJECT(/*model*/ MODEL_CAP_SWITCH, /*pos*/ 0, -2047, 10, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvCapSwitch), RETURN(), }; static const LevelScript script_func_local_2[] = { - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 800, -1700, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenRedCoinStar), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 800, -1700, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_1), /*bhv*/ bhvHiddenRedCoinStar), RETURN(), }; const LevelScript level_totwc_entry[] = { INIT_LEVEL(), - LOAD_MIO0( /*seg*/ 0x07, _totwc_segment_7SegmentRomStart, _totwc_segment_7SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0A, _cloud_floor_skybox_mio0SegmentRomStart, _cloud_floor_skybox_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _totwc_segment_7SegmentRomStart, _totwc_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0A, _cloud_floor_skybox_mio0SegmentRomStart, _cloud_floor_skybox_mio0SegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _sky_mio0SegmentRomStart, _sky_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x05, _group8_mio0SegmentRomStart, _group8_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0C, _group8_geoSegmentRomStart, _group8_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x05, _group8_mio0SegmentRomStart, _group8_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0C, _group8_geoSegmentRomStart, _group8_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_1), JUMP_LINK(script_func_global_9), LOAD_MODEL_FROM_GEO(MODEL_LEVEL_GEOMETRY_03, totwc_geo_000160), AREA(/*index*/ 1, totwc_geo_000188), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4095, 2935, 0, /*angle*/ 0, 90, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvFlyingWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_TOTWC, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF3, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x20, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x26, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x23, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -4095, 2935, 0, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvFlyingWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_TOTWC, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_WARP_FLOOR, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_20, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_26, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_23, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_2), JUMP_LINK(script_func_local_1), TERRAIN(/*terrainData*/ totwc_seg7_collision), diff --git a/levels/ttc/areas/1/geo.inc.c b/levels/ttc/areas/1/geo.inc.c index 9773fc7b..06f9dd77 100644 --- a/levels/ttc/areas/1/geo.inc.c +++ b/levels/ttc/areas/1/geo.inc.c @@ -1,31 +1,31 @@ // 0x0E0003B8 const GeoLayout ttc_geo_0003B8[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND_COLOR(0xC7FF), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(2, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x1400, geo_movtex_update_horizontal), - GEO_ASM(0x1401, geo_movtex_update_horizontal), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_0700AD38), - 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_envfx_main), + GEO_BACKGROUND_COLOR(0xC7FF), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(2, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x1400, geo_movtex_update_horizontal), + GEO_ASM(0x1401, geo_movtex_update_horizontal), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_0700AD38), + 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_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttc/areas/1/macro.inc.c b/levels/ttc/areas/1/macro.inc.c index 93db79e8..24768926 100644 --- a/levels/ttc/areas/1/macro.inc.c +++ b/levels/ttc/areas/1/macro.inc.c @@ -1,114 +1,114 @@ // 0x07015B24 - 0x07015F72 const MacroObject ttc_seg7_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_ttc_rotating_cube, /*yaw*/ 45, /*pos*/ -1032, -3291, 1070), - MACRO_OBJECT(/*preset*/ macro_ttc_rotating_cube, /*yaw*/ 90, /*pos*/ -1881, 1767, -446), - MACRO_OBJECT(/*preset*/ macro_ttc_rotating_cube, /*yaw*/ 90, /*pos*/ -1870, 2068, 362), - MACRO_OBJECT(/*preset*/ macro_ttc_rotating_cube, /*yaw*/ 225, /*pos*/ -770, -4361, -423), - MACRO_OBJECT(/*preset*/ macro_ttc_rotating_cube, /*yaw*/ 135, /*pos*/ -1314, -3691, 788), - MACRO_OBJECT(/*preset*/ macro_ttc_rotating_cube, /*yaw*/ 135, /*pos*/ -1314, -2892, 1353), - MACRO_OBJECT(/*preset*/ macro_ttc_rotating_prism, /*yaw*/ 315, /*pos*/ 780, 5767, -1027), - MACRO_OBJECT(/*preset*/ macro_ttc_rotating_prism, /*yaw*/ 315, /*pos*/ 1063, 5562, -744), - MACRO_OBJECT(/*preset*/ macro_ttc_pendulum, /*yaw*/ 45, /*pos*/ -1350, 748, -1208), - MACRO_OBJECT(/*preset*/ macro_ttc_pendulum, /*yaw*/ 45, /*pos*/ -690, 901, -910), - MACRO_OBJECT(/*preset*/ macro_ttc_pendulum, /*yaw*/ 45, /*pos*/ -1389, -3030, -1028), - MACRO_OBJECT(/*preset*/ macro_ttc_pendulum, /*yaw*/ 45, /*pos*/ 937, -3867, -1041), - MACRO_OBJECT(/*preset*/ macro_ttc_large_treadmill, /*yaw*/ 135, /*pos*/ -139, -4408, -1056), - MACRO_OBJECT(/*preset*/ macro_ttc_small_treadmill, /*yaw*/ 90, /*pos*/ 618, 3656, 148), - MACRO_OBJECT(/*preset*/ macro_ttc_small_treadmill, /*yaw*/ 270, /*pos*/ 963, 3297, 608), - MACRO_OBJECT(/*preset*/ macro_ttc_small_treadmill, /*yaw*/ 90, /*pos*/ 1306, 2939, 1069), - MACRO_OBJECT(/*preset*/ macro_ttc_small_treadmill, /*yaw*/ 315, /*pos*/ -1179, -1453, -792), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_ttc_push_block, /*yaw*/ 180, /*pos*/ 174, 1248, 2040, /*behParam*/ 2), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_ttc_push_block, /*yaw*/ 45, /*pos*/ -1321, 1490, -1563, /*behParam*/ 0), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_ttc_push_block, /*yaw*/ 45, /*pos*/ -1076, 1730, -1808, /*behParam*/ 5), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_ttc_push_block, /*yaw*/ 45, /*pos*/ -1319, 1970, -1564, /*behParam*/ 10), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_ttc_push_block, /*yaw*/ 180, /*pos*/ -517, 3175, 2040, /*behParam*/ 0), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_ttc_push_block, /*yaw*/ 180, /*pos*/ -170, 1248, 2040, /*behParam*/ 1), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_ttc_push_block, /*yaw*/ 180, /*pos*/ -515, 1248, 2040, /*behParam*/ 0), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_ttc_push_block, /*yaw*/ 0, /*pos*/ -175, -1351, -2039, /*behParam*/ 0), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_ttc_push_block, /*yaw*/ 180, /*pos*/ -515, -2590, 2040, /*behParam*/ 0), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_ttc_push_block, /*yaw*/ 180, /*pos*/ 518, 3175, 2040, /*behParam*/ 3), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_ttc_push_block, /*yaw*/ 180, /*pos*/ -171, 3175, 2040, /*behParam*/ 1), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_ttc_push_block, /*yaw*/ 180, /*pos*/ 174, 3175, 2040, /*behParam*/ 2), - MACRO_OBJECT(/*preset*/ macro_ttc_rotating_hexagon, /*yaw*/ 0, /*pos*/ 1490, -2088, -873), - MACRO_OBJECT(/*preset*/ macro_ttc_rotating_hexagon, /*yaw*/ 0, /*pos*/ -708, -1606, -1589), - MACRO_OBJECT(/*preset*/ macro_ttc_rotating_hexagon, /*yaw*/ 0, /*pos*/ 954, -1627, -1448), - MACRO_OBJECT(/*preset*/ macro_ttc_rotating_hexagon, /*yaw*/ 0, /*pos*/ 1215, -1781, -1215), - MACRO_OBJECT(/*preset*/ macro_ttc_rotating_hexagon, /*yaw*/ 0, /*pos*/ 1052, -1934, -769), - MACRO_OBJECT(/*preset*/ macro_ttc_rotating_triangle, /*yaw*/ 225, /*pos*/ -620, 1229, 1233), - MACRO_OBJECT(/*preset*/ macro_ttc_rotating_triangle, /*yaw*/ 315, /*pos*/ 1050, -19, -1037), - MACRO_OBJECT(/*preset*/ macro_ttc_pit_block, /*yaw*/ 315, /*pos*/ -1100, -71, -1030), - MACRO_OBJECT(/*preset*/ macro_ttc_clock_hand, /*yaw*/ 225, /*pos*/ 0, 6011, 0), - MACRO_OBJECT(/*preset*/ macro_ttc_clock_hand, /*yaw*/ 45, /*pos*/ 0, -2487, 0), - MACRO_OBJECT(/*preset*/ macro_ttc_spinner, /*yaw*/ 135, /*pos*/ 1102, -3619, 1682), - MACRO_OBJECT(/*preset*/ macro_ttc_spinner, /*yaw*/ 90, /*pos*/ 424, -3312, 1959), - MACRO_OBJECT(/*preset*/ macro_ttc_spinner, /*yaw*/ 135, /*pos*/ 1102, -3004, 1682), - MACRO_OBJECT(/*preset*/ macro_ttc_spinner, /*yaw*/ 135, /*pos*/ 1584, -2697, 1200), - MACRO_OBJECT(/*preset*/ macro_ttc_spinner, /*yaw*/ 135, /*pos*/ 1582, -3619, 1203), - MACRO_OBJECT(/*preset*/ macro_ttc_spinner, /*yaw*/ 135, /*pos*/ -762, 4347, 1047), - MACRO_OBJECT(/*preset*/ macro_ttc_spinner, /*yaw*/ 90, /*pos*/ 424, -3926, 1959), - MACRO_OBJECT(/*preset*/ macro_ttc_spinner, /*yaw*/ 135, /*pos*/ 1102, -4233, 1682), - MACRO_OBJECT(/*preset*/ macro_ttc_spinner, /*yaw*/ 135, /*pos*/ 1102, -4848, 1682), - MACRO_OBJECT(/*preset*/ macro_ttc_spinner, /*yaw*/ 90, /*pos*/ 424, -4540, 1959), - MACRO_OBJECT(/*preset*/ macro_ttc_spinner, /*yaw*/ 315, /*pos*/ -1037, 4244, 772), - MACRO_OBJECT(/*preset*/ macro_ttc_spinner, /*yaw*/ 0, /*pos*/ 1828, 3835, -50), - MACRO_OBJECT(/*preset*/ macro_ttc_spinner, /*yaw*/ 0, /*pos*/ 1459, 3835, -357), - MACRO_OBJECT(/*preset*/ macro_ttc_spinner, /*yaw*/ 0, /*pos*/ 1091, 3835, -665), - MACRO_OBJECT(/*preset*/ macro_ttc_small_gear, /*yaw*/ 0, /*pos*/ 1580, -4854, -825), - MACRO_OBJECT(/*preset*/ macro_ttc_small_gear, /*yaw*/ 0, /*pos*/ -1692, 1022, -1157), - MACRO_OBJECT(/*preset*/ macro_ttc_small_gear, /*yaw*/ 0, /*pos*/ 2098, 7007, 2243), - MACRO_OBJECT(/*preset*/ macro_ttc_large_gear, /*yaw*/ 0, /*pos*/ 1801, -4843, -731), - MACRO_OBJECT(/*preset*/ macro_ttc_large_gear, /*yaw*/ 0, /*pos*/ -1477, 1044, -1088), - MACRO_OBJECT(/*preset*/ macro_ttc_large_gear, /*yaw*/ 0, /*pos*/ 2268, 7030, 2227), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 800, -4400, 1900), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 800, -3700, 1900), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 800, -3000, 1900), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1780, -3300, 1000), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1388, -3300, 1428), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 200, -3000, 2000), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 200, -3700, 2000), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 200, -4400, 2000), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_in_pole, /*yaw*/ 0, /*pos*/ -1080, 90, 1575), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_ttc_elevator_platform, /*yaw*/ 45, /*pos*/ -1179, 445, 1413, /*behParam*/ 6), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_ttc_elevator_platform, /*yaw*/ 315, /*pos*/ -1524, -1454, 1129, /*behParam*/ 2), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -980, -700, 1450, /*behParam*/ 1), - MACRO_OBJECT(/*preset*/ macro_blue_coin_switch, /*yaw*/ 45, /*pos*/ -1203, -19, -170), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 0, 20, -1400), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -250, 20, -1700), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 250, 20, -1700), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 0, 20, -2000), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 500, 20, -2000), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -500, 20, -2000), - MACRO_OBJECT(/*preset*/ macro_heave_ho, /*yaw*/ 0, /*pos*/ 880, -19, 1160), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ 800, -2460, 160), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 45, /*pos*/ -1120, -820, 1320), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -571, 6020, -1414), - MACRO_OBJECT(/*preset*/ macro_recovery_heart, /*yaw*/ 0, /*pos*/ 620, -5150, 1540), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -520, 1351, 1919), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -165, 1351, 1919), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 182, 1351, 1919), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ 657, 1368, 1879, /*behParam*/ 3), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -700, -2350, -700, /*behParam*/ 1), - MACRO_OBJECT(/*preset*/ macro_box_1up, /*yaw*/ 0, /*pos*/ 1883, 4150, 550), - MACRO_OBJECT(/*preset*/ macro_recovery_heart, /*yaw*/ 0, /*pos*/ -1333, 350, 1116), - MACRO_OBJECT(/*preset*/ macro_box_1up, /*yaw*/ 45, /*pos*/ -1101, 6316, -685), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ 1077, -4822, 638), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ 1683, -4822, 189), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 0, 20, -1700), - MACRO_OBJECT(/*preset*/ macro_ttc_rotating_hexagon, /*yaw*/ 0, /*pos*/ -1020, 1229, 537), - MACRO_OBJECT(/*preset*/ macro_box_ten_coins, /*yaw*/ 45, /*pos*/ 2350, 5600, 2350), - MACRO_OBJECT(/*preset*/ macro_box_ten_coins, /*yaw*/ 0, /*pos*/ 0, 4783, 0), - MACRO_OBJECT(/*preset*/ macro_box_three_coins, /*yaw*/ 45, /*pos*/ -1140, -3720, -1620), - MACRO_OBJECT(/*preset*/ macro_box_three_coins, /*yaw*/ 45, /*pos*/ 840, -2200, 860), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -770, -3800, -440), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -770, -3700, -440), - MACRO_OBJECT(/*preset*/ macro_box_ten_coins, /*yaw*/ 0, /*pos*/ 280, -4920, 1660), - MACRO_OBJECT(/*preset*/ macro_box_three_coins, /*yaw*/ 45, /*pos*/ 1240, 300, 840), - MACRO_OBJECT(/*preset*/ macro_box_three_coins, /*yaw*/ 45, /*pos*/ 520, 300, 1500), - MACRO_OBJECT(/*preset*/ macro_box_ten_coins, /*yaw*/ 0, /*pos*/ -400, 3600, 1880), - MACRO_OBJECT(/*preset*/ macro_box_three_coins, /*yaw*/ 0, /*pos*/ -40, 4160, -1280), - MACRO_OBJECT(/*preset*/ macro_box_three_coins, /*yaw*/ 45, /*pos*/ -1160, 2920, -840), - MACRO_OBJECT(/*preset*/ macro_box_ten_coins, /*yaw*/ 45, /*pos*/ -780, 6316, -1020), - MACRO_OBJECT(/*preset*/ macro_ttc_large_treadmill_2, /*yaw*/ 45, /*pos*/ 1313, 6190, 1313), - MACRO_OBJECT(/*preset*/ macro_ttc_small_treadmill_2, /*yaw*/ 0, /*pos*/ 1851, -2488, -98), + MACRO_OBJECT (/*preset*/ macro_ttc_rotating_cube, /*yaw*/ 45, /*pos*/ -1032, -3291, 1070), + MACRO_OBJECT (/*preset*/ macro_ttc_rotating_cube, /*yaw*/ 90, /*pos*/ -1881, 1767, -446), + MACRO_OBJECT (/*preset*/ macro_ttc_rotating_cube, /*yaw*/ 90, /*pos*/ -1870, 2068, 362), + MACRO_OBJECT (/*preset*/ macro_ttc_rotating_cube, /*yaw*/ 225, /*pos*/ -770, -4361, -423), + MACRO_OBJECT (/*preset*/ macro_ttc_rotating_cube, /*yaw*/ 135, /*pos*/ -1314, -3691, 788), + MACRO_OBJECT (/*preset*/ macro_ttc_rotating_cube, /*yaw*/ 135, /*pos*/ -1314, -2892, 1353), + MACRO_OBJECT (/*preset*/ macro_ttc_rotating_prism, /*yaw*/ 315, /*pos*/ 780, 5767, -1027), + MACRO_OBJECT (/*preset*/ macro_ttc_rotating_prism, /*yaw*/ 315, /*pos*/ 1063, 5562, -744), + MACRO_OBJECT (/*preset*/ macro_ttc_pendulum, /*yaw*/ 45, /*pos*/ -1350, 748, -1208), + MACRO_OBJECT (/*preset*/ macro_ttc_pendulum, /*yaw*/ 45, /*pos*/ -690, 901, -910), + MACRO_OBJECT (/*preset*/ macro_ttc_pendulum, /*yaw*/ 45, /*pos*/ -1389, -3030, -1028), + MACRO_OBJECT (/*preset*/ macro_ttc_pendulum, /*yaw*/ 45, /*pos*/ 937, -3867, -1041), + MACRO_OBJECT (/*preset*/ macro_ttc_large_treadmill_1, /*yaw*/ 135, /*pos*/ -139, -4408, -1056), + MACRO_OBJECT (/*preset*/ macro_ttc_small_treadmill_1, /*yaw*/ 90, /*pos*/ 618, 3656, 148), + MACRO_OBJECT (/*preset*/ macro_ttc_small_treadmill_1, /*yaw*/ 270, /*pos*/ 963, 3297, 608), + MACRO_OBJECT (/*preset*/ macro_ttc_small_treadmill_1, /*yaw*/ 90, /*pos*/ 1306, 2939, 1069), + MACRO_OBJECT (/*preset*/ macro_ttc_small_treadmill_1, /*yaw*/ 315, /*pos*/ -1179, -1453, -792), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_ttc_push_block, /*yaw*/ 180, /*pos*/ 174, 1248, 2040, /*bhvParam*/ 2), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_ttc_push_block, /*yaw*/ 45, /*pos*/ -1321, 1490, -1563, /*bhvParam*/ 0), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_ttc_push_block, /*yaw*/ 45, /*pos*/ -1076, 1730, -1808, /*bhvParam*/ 5), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_ttc_push_block, /*yaw*/ 45, /*pos*/ -1319, 1970, -1564, /*bhvParam*/ 10), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_ttc_push_block, /*yaw*/ 180, /*pos*/ -517, 3175, 2040, /*bhvParam*/ 0), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_ttc_push_block, /*yaw*/ 180, /*pos*/ -170, 1248, 2040, /*bhvParam*/ 1), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_ttc_push_block, /*yaw*/ 180, /*pos*/ -515, 1248, 2040, /*bhvParam*/ 0), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_ttc_push_block, /*yaw*/ 0, /*pos*/ -175, -1351, -2039, /*bhvParam*/ 0), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_ttc_push_block, /*yaw*/ 180, /*pos*/ -515, -2590, 2040, /*bhvParam*/ 0), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_ttc_push_block, /*yaw*/ 180, /*pos*/ 518, 3175, 2040, /*bhvParam*/ 3), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_ttc_push_block, /*yaw*/ 180, /*pos*/ -171, 3175, 2040, /*bhvParam*/ 1), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_ttc_push_block, /*yaw*/ 180, /*pos*/ 174, 3175, 2040, /*bhvParam*/ 2), + MACRO_OBJECT (/*preset*/ macro_ttc_rotating_hexagon, /*yaw*/ 0, /*pos*/ 1490, -2088, -873), + MACRO_OBJECT (/*preset*/ macro_ttc_rotating_hexagon, /*yaw*/ 0, /*pos*/ -708, -1606, -1589), + MACRO_OBJECT (/*preset*/ macro_ttc_rotating_hexagon, /*yaw*/ 0, /*pos*/ 954, -1627, -1448), + MACRO_OBJECT (/*preset*/ macro_ttc_rotating_hexagon, /*yaw*/ 0, /*pos*/ 1215, -1781, -1215), + MACRO_OBJECT (/*preset*/ macro_ttc_rotating_hexagon, /*yaw*/ 0, /*pos*/ 1052, -1934, -769), + MACRO_OBJECT (/*preset*/ macro_ttc_rotating_triangle, /*yaw*/ 225, /*pos*/ -620, 1229, 1233), + MACRO_OBJECT (/*preset*/ macro_ttc_rotating_triangle, /*yaw*/ 315, /*pos*/ 1050, -19, -1037), + MACRO_OBJECT (/*preset*/ macro_ttc_pit_block_1, /*yaw*/ 315, /*pos*/ -1100, -71, -1030), + MACRO_OBJECT (/*preset*/ macro_ttc_clock_hand, /*yaw*/ 225, /*pos*/ 0, 6011, 0), + MACRO_OBJECT (/*preset*/ macro_ttc_clock_hand, /*yaw*/ 45, /*pos*/ 0, -2487, 0), + MACRO_OBJECT (/*preset*/ macro_ttc_spinner, /*yaw*/ 135, /*pos*/ 1102, -3619, 1682), + MACRO_OBJECT (/*preset*/ macro_ttc_spinner, /*yaw*/ 90, /*pos*/ 424, -3312, 1959), + MACRO_OBJECT (/*preset*/ macro_ttc_spinner, /*yaw*/ 135, /*pos*/ 1102, -3004, 1682), + MACRO_OBJECT (/*preset*/ macro_ttc_spinner, /*yaw*/ 135, /*pos*/ 1584, -2697, 1200), + MACRO_OBJECT (/*preset*/ macro_ttc_spinner, /*yaw*/ 135, /*pos*/ 1582, -3619, 1203), + MACRO_OBJECT (/*preset*/ macro_ttc_spinner, /*yaw*/ 135, /*pos*/ -762, 4347, 1047), + MACRO_OBJECT (/*preset*/ macro_ttc_spinner, /*yaw*/ 90, /*pos*/ 424, -3926, 1959), + MACRO_OBJECT (/*preset*/ macro_ttc_spinner, /*yaw*/ 135, /*pos*/ 1102, -4233, 1682), + MACRO_OBJECT (/*preset*/ macro_ttc_spinner, /*yaw*/ 135, /*pos*/ 1102, -4848, 1682), + MACRO_OBJECT (/*preset*/ macro_ttc_spinner, /*yaw*/ 90, /*pos*/ 424, -4540, 1959), + MACRO_OBJECT (/*preset*/ macro_ttc_spinner, /*yaw*/ 315, /*pos*/ -1037, 4244, 772), + MACRO_OBJECT (/*preset*/ macro_ttc_spinner, /*yaw*/ 0, /*pos*/ 1828, 3835, -50), + MACRO_OBJECT (/*preset*/ macro_ttc_spinner, /*yaw*/ 0, /*pos*/ 1459, 3835, -357), + MACRO_OBJECT (/*preset*/ macro_ttc_spinner, /*yaw*/ 0, /*pos*/ 1091, 3835, -665), + MACRO_OBJECT (/*preset*/ macro_ttc_small_gear, /*yaw*/ 0, /*pos*/ 1580, -4854, -825), + MACRO_OBJECT (/*preset*/ macro_ttc_small_gear, /*yaw*/ 0, /*pos*/ -1692, 1022, -1157), + MACRO_OBJECT (/*preset*/ macro_ttc_small_gear, /*yaw*/ 0, /*pos*/ 2098, 7007, 2243), + MACRO_OBJECT (/*preset*/ macro_ttc_large_gear, /*yaw*/ 0, /*pos*/ 1801, -4843, -731), + MACRO_OBJECT (/*preset*/ macro_ttc_large_gear, /*yaw*/ 0, /*pos*/ -1477, 1044, -1088), + MACRO_OBJECT (/*preset*/ macro_ttc_large_gear, /*yaw*/ 0, /*pos*/ 2268, 7030, 2227), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 800, -4400, 1900), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 800, -3700, 1900), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 800, -3000, 1900), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1780, -3300, 1000), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1388, -3300, 1428), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 200, -3000, 2000), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 200, -3700, 2000), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 200, -4400, 2000), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_in_pole, /*yaw*/ 0, /*pos*/ -1080, 90, 1575), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_ttc_elevator_platform, /*yaw*/ 45, /*pos*/ -1179, 445, 1413, /*bhvParam*/ 6), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_ttc_elevator_platform, /*yaw*/ 315, /*pos*/ -1524, -1454, 1129, /*bhvParam*/ 2), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -980, -700, 1450, /*bhvParam*/ AMP_BP_ROT_RADIUS_300), + MACRO_OBJECT (/*preset*/ macro_blue_coin_switch, /*yaw*/ 45, /*pos*/ -1203, -19, -170), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 0, 20, -1400), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -250, 20, -1700), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 250, 20, -1700), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 0, 20, -2000), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 500, 20, -2000), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -500, 20, -2000), + MACRO_OBJECT (/*preset*/ macro_heave_ho, /*yaw*/ 0, /*pos*/ 880, -19, 1160), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ 800, -2460, 160), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 45, /*pos*/ -1120, -820, 1320), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -571, 6020, -1414), + MACRO_OBJECT (/*preset*/ macro_recovery_heart, /*yaw*/ 0, /*pos*/ 620, -5150, 1540), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -520, 1351, 1919), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -165, 1351, 1919), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 182, 1351, 1919), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ 657, 1368, 1879, /*bhvParam*/ 3), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -700, -2350, -700, /*bhvParam*/ AMP_BP_ROT_RADIUS_300), + MACRO_OBJECT (/*preset*/ macro_box_1up, /*yaw*/ 0, /*pos*/ 1883, 4150, 550), + MACRO_OBJECT (/*preset*/ macro_recovery_heart, /*yaw*/ 0, /*pos*/ -1333, 350, 1116), + MACRO_OBJECT (/*preset*/ macro_box_1up, /*yaw*/ 45, /*pos*/ -1101, 6316, -685), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ 1077, -4822, 638), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ 1683, -4822, 189), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 0, 20, -1700), + MACRO_OBJECT (/*preset*/ macro_ttc_rotating_hexagon, /*yaw*/ 0, /*pos*/ -1020, 1229, 537), + MACRO_OBJECT (/*preset*/ macro_box_ten_coins, /*yaw*/ 45, /*pos*/ 2350, 5600, 2350), + MACRO_OBJECT (/*preset*/ macro_box_ten_coins, /*yaw*/ 0, /*pos*/ 0, 4783, 0), + MACRO_OBJECT (/*preset*/ macro_box_three_coins, /*yaw*/ 45, /*pos*/ -1140, -3720, -1620), + MACRO_OBJECT (/*preset*/ macro_box_three_coins, /*yaw*/ 45, /*pos*/ 840, -2200, 860), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -770, -3800, -440), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -770, -3700, -440), + MACRO_OBJECT (/*preset*/ macro_box_ten_coins, /*yaw*/ 0, /*pos*/ 280, -4920, 1660), + MACRO_OBJECT (/*preset*/ macro_box_three_coins, /*yaw*/ 45, /*pos*/ 1240, 300, 840), + MACRO_OBJECT (/*preset*/ macro_box_three_coins, /*yaw*/ 45, /*pos*/ 520, 300, 1500), + MACRO_OBJECT (/*preset*/ macro_box_ten_coins, /*yaw*/ 0, /*pos*/ -400, 3600, 1880), + MACRO_OBJECT (/*preset*/ macro_box_three_coins, /*yaw*/ 0, /*pos*/ -40, 4160, -1280), + MACRO_OBJECT (/*preset*/ macro_box_three_coins, /*yaw*/ 45, /*pos*/ -1160, 2920, -840), + MACRO_OBJECT (/*preset*/ macro_box_ten_coins, /*yaw*/ 45, /*pos*/ -780, 6316, -1020), + MACRO_OBJECT (/*preset*/ macro_ttc_large_treadmill_2, /*yaw*/ 45, /*pos*/ 1313, 6190, 1313), + MACRO_OBJECT (/*preset*/ macro_ttc_small_treadmill_2, /*yaw*/ 0, /*pos*/ 1851, -2488, -98), MACRO_OBJECT_END(), }; diff --git a/levels/ttc/clock_hand/geo.inc.c b/levels/ttc/clock_hand/geo.inc.c index d8b141e7..f919a532 100644 --- a/levels/ttc/clock_hand/geo.inc.c +++ b/levels/ttc/clock_hand/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000358 const GeoLayout ttc_geo_000358[] = { - GEO_CULLING_RADIUS(1700), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_07011B38), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1700), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_07011B38), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttc/elevator_platform/geo.inc.c b/levels/ttc/elevator_platform/geo.inc.c index 7f77cdb0..e81b0b2a 100644 --- a/levels/ttc/elevator_platform/geo.inc.c +++ b/levels/ttc/elevator_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000340 const GeoLayout ttc_geo_000340[] = { - GEO_CULLING_RADIUS(380), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_070116A8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(380), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_070116A8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttc/large_gear/geo.inc.c b/levels/ttc/large_gear/geo.inc.c index 4f87597d..0a830fdb 100644 --- a/levels/ttc/large_gear/geo.inc.c +++ b/levels/ttc/large_gear/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0003A0 const GeoLayout ttc_geo_0003A0[] = { - GEO_CULLING_RADIUS(300), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, ttc_seg7_dl_07012278), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(300), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, ttc_seg7_dl_07012278), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttc/large_treadmill/geo.inc.c b/levels/ttc/large_treadmill/geo.inc.c index 631e0fe9..d17dae69 100644 --- a/levels/ttc/large_treadmill/geo.inc.c +++ b/levels/ttc/large_treadmill/geo.inc.c @@ -1,9 +1,9 @@ // 0x0E000288 const GeoLayout ttc_geo_000288[] = { - GEO_CULLING_RADIUS(720), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_0700FBB8), - GEO_ASM(0x1400, geo_movtex_draw_colored_no_update), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(720), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_0700FBB8), + GEO_ASM(0x1400, geo_movtex_draw_colored_no_update), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttc/leveldata.c b/levels/ttc/leveldata.c index 1f5ee226..f57da02c 100644 --- a/levels/ttc/leveldata.c +++ b/levels/ttc/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "make_const_nonconst.h" diff --git a/levels/ttc/pendulum/geo.inc.c b/levels/ttc/pendulum/geo.inc.c index 2976bd1a..4e3259b9 100644 --- a/levels/ttc/pendulum/geo.inc.c +++ b/levels/ttc/pendulum/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000270 const GeoLayout ttc_geo_000270[] = { - GEO_CULLING_RADIUS(1100), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_0700F760), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1100), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_0700F760), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttc/pit_block/geo.inc.c b/levels/ttc/pit_block/geo.inc.c index 547c917e..d790db32 100644 --- a/levels/ttc/pit_block/geo.inc.c +++ b/levels/ttc/pit_block/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000310 const GeoLayout ttc_geo_000310[] = { - GEO_CULLING_RADIUS(250), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_07011040), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(250), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_07011040), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttc/pit_block_2/geo.inc.c b/levels/ttc/pit_block_2/geo.inc.c index cbb65d6b..e6b2925d 100644 --- a/levels/ttc/pit_block_2/geo.inc.c +++ b/levels/ttc/pit_block_2/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000328 const GeoLayout ttc_geo_000328[] = { - GEO_CULLING_RADIUS(250), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_07011360), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(250), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_07011360), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttc/push_block/geo.inc.c b/levels/ttc/push_block/geo.inc.c index 2d89eb82..de06724f 100644 --- a/levels/ttc/push_block/geo.inc.c +++ b/levels/ttc/push_block/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0002C8 const GeoLayout ttc_geo_0002C8[] = { - GEO_CULLING_RADIUS(500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_070102B8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_070102B8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttc/rotating_cube/geo.inc.c b/levels/ttc/rotating_cube/geo.inc.c index 8120e547..9b54463e 100644 --- a/levels/ttc/rotating_cube/geo.inc.c +++ b/levels/ttc/rotating_cube/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000240 const GeoLayout ttc_geo_000240[] = { - GEO_CULLING_RADIUS(410), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_0700ECB8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(410), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_0700ECB8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttc/rotating_hexagon/geo.inc.c b/levels/ttc/rotating_hexagon/geo.inc.c index 8fdfaafb..0eb34b42 100644 --- a/levels/ttc/rotating_hexagon/geo.inc.c +++ b/levels/ttc/rotating_hexagon/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0002E0 const GeoLayout ttc_geo_0002E0[] = { - GEO_CULLING_RADIUS(400), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_07010868), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(400), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_07010868), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttc/rotating_prism/geo.inc.c b/levels/ttc/rotating_prism/geo.inc.c index 778b0ad5..a835d6d7 100644 --- a/levels/ttc/rotating_prism/geo.inc.c +++ b/levels/ttc/rotating_prism/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000258 const GeoLayout ttc_geo_000258[] = { - GEO_CULLING_RADIUS(410), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_0700EFE0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(410), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_0700EFE0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttc/rotating_triangle/geo.inc.c b/levels/ttc/rotating_triangle/geo.inc.c index a9a7a98b..d939e3eb 100644 --- a/levels/ttc/rotating_triangle/geo.inc.c +++ b/levels/ttc/rotating_triangle/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0002F8 const GeoLayout ttc_geo_0002F8[] = { - GEO_CULLING_RADIUS(520), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_07010D38), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(520), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_07010D38), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttc/script.c b/levels/ttc/script.c index 4b93de86..c871611b 100644 --- a/levels/ttc/script.c +++ b/levels/ttc/script.c @@ -16,31 +16,31 @@ #include "levels/ttc/header.h" static const LevelScript script_func_local_1[] = { - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1080, -840, 1573, /*angle*/ 0, 0, 0, /*behParam*/ 0x00560000, /*beh*/ bhvPoleGrabbing), - OBJECT(/*model*/ MODEL_THWOMP, /*pos*/ 1919, 6191, 1919, /*angle*/ 0, 225, 0, /*behParam*/ 0x00000000, /*beh*/ bhvThwomp2), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1080, -840, 1573, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(86), /*bhv*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_THWOMP, /*pos*/ 1919, 6191, 1919, /*angle*/ 0, 225, 0, /*bhvParam*/ BPARAM2(0), /*bhv*/ bhvThwomp), RETURN(), }; static const LevelScript script_func_local_2[] = { - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -1450, -1130, -1050, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -1850, 300, -950, /*angle*/ 0, 0, 0, /*behParam*/ 0x01000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -1300, -2250, -1300, /*angle*/ 0, 0, 0, /*behParam*/ 0x02000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 2200, 7300, 2210, /*angle*/ 0, 0, 0, /*behParam*/ 0x03000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -1050, 2400, -790, /*angle*/ 0, 0, 0, /*behParam*/ 0x04000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 1815, -3200, 800, /*angle*/ 0, 0, 0, /*behParam*/ 0x05000000, /*beh*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -1450, -1130, -1050, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_1), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -1850, 300, -950, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_2), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -1300, -2250, -1300, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_3), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 2200, 7300, 2210, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_4), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -1050, 2400, -790, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_5), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 1815, -3200, 800, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_6), /*bhv*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), RETURN(), }; const LevelScript level_ttc_entry[] = { INIT_LEVEL(), - LOAD_MIO0( /*seg*/ 0x07, _ttc_segment_7SegmentRomStart, _ttc_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _ttc_segment_7SegmentRomStart, _ttc_segment_7SegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _machine_mio0SegmentRomStart, _machine_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x05, _group1_mio0SegmentRomStart, _group1_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0C, _group1_geoSegmentRomStart, _group1_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x05, _group1_mio0SegmentRomStart, _group1_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0C, _group1_geoSegmentRomStart, _group1_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_1), JUMP_LINK(script_func_global_2), LOAD_MODEL_FROM_GEO(MODEL_TTC_ROTATING_CUBE, ttc_geo_000240), @@ -60,10 +60,10 @@ const LevelScript level_ttc_entry[] = { LOAD_MODEL_FROM_GEO(MODEL_TTC_LARGE_GEAR, ttc_geo_0003A0), AREA(/*index*/ 1, ttc_geo_0003B8), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1417, -3822, -548, /*angle*/ 0, 316, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvSpinAirborneWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_TTC, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x35, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x67, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1417, -3822, -548, /*angle*/ 0, 316, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvSpinAirborneWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_TTC, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_35, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_67, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_1), JUMP_LINK(script_func_local_2), TERRAIN(/*terrainData*/ ttc_seg7_collision_level), diff --git a/levels/ttc/small_gear/geo.inc.c b/levels/ttc/small_gear/geo.inc.c index 5c626ee4..c0f7bc7e 100644 --- a/levels/ttc/small_gear/geo.inc.c +++ b/levels/ttc/small_gear/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000388 const GeoLayout ttc_geo_000388[] = { - GEO_CULLING_RADIUS(200), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, ttc_seg7_dl_07012148), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(200), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, ttc_seg7_dl_07012148), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttc/small_treadmill/geo.inc.c b/levels/ttc/small_treadmill/geo.inc.c index df319cd0..d12a7019 100644 --- a/levels/ttc/small_treadmill/geo.inc.c +++ b/levels/ttc/small_treadmill/geo.inc.c @@ -1,9 +1,9 @@ // 0x0E0002A8 const GeoLayout ttc_geo_0002A8[] = { - GEO_CULLING_RADIUS(520), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_0700FFE8), - GEO_ASM(0x1401, geo_movtex_draw_colored_no_update), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(520), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_0700FFE8), + GEO_ASM(0x1401, geo_movtex_draw_colored_no_update), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttc/spinner/geo.inc.c b/levels/ttc/spinner/geo.inc.c index fd3b45d0..d4704ce3 100644 --- a/levels/ttc/spinner/geo.inc.c +++ b/levels/ttc/spinner/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000370 const GeoLayout ttc_geo_000370[] = { - GEO_CULLING_RADIUS(500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_07012028), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttc_seg7_dl_07012028), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/areas/1/10/geo.inc.c b/levels/ttm/areas/1/10/geo.inc.c index c572b282..f622fb6d 100644 --- a/levels/ttm/areas/1/10/geo.inc.c +++ b/levels/ttm/areas/1/10/geo.inc.c @@ -1,11 +1,11 @@ // 0x0E000880 const GeoLayout ttm_geo_000880[] = { - GEO_CULLING_RADIUS(2200), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-3200, 10000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700CAE0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2200), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-3200, 10000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700CAE0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/areas/1/11/geo.inc.c b/levels/ttm/areas/1/11/geo.inc.c index 2b28f144..a6ee2aa7 100644 --- a/levels/ttm/areas/1/11/geo.inc.c +++ b/levels/ttm/areas/1/11/geo.inc.c @@ -1,11 +1,11 @@ // 0x0E0008A8 const GeoLayout ttm_geo_0008A8[] = { - GEO_CULLING_RADIUS(750), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-1750, 7000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700CD10), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(750), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-1750, 7000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700CD10), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/areas/1/12/geo.inc.c b/levels/ttm/areas/1/12/geo.inc.c index d44558c6..538899af 100644 --- a/levels/ttm/areas/1/12/geo.inc.c +++ b/levels/ttm/areas/1/12/geo.inc.c @@ -1,11 +1,11 @@ // 0x0E0008D0 const GeoLayout ttm_geo_0008D0[] = { - GEO_CULLING_RADIUS(1200), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2200, 8000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700D1D8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1200), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2200, 8000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700D1D8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/areas/1/13/geo.inc.c b/levels/ttm/areas/1/13/geo.inc.c index e78313bf..799a6c85 100644 --- a/levels/ttm/areas/1/13/geo.inc.c +++ b/levels/ttm/areas/1/13/geo.inc.c @@ -1,11 +1,11 @@ // 0x0E0008F8 const GeoLayout ttm_geo_0008F8[] = { - GEO_CULLING_RADIUS(1500), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2100, 8000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700D688), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1500), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2100, 8000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700D688), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/areas/1/14/geo.inc.c b/levels/ttm/areas/1/14/geo.inc.c index 98ee9baa..c29d6392 100644 --- a/levels/ttm/areas/1/14/geo.inc.c +++ b/levels/ttm/areas/1/14/geo.inc.c @@ -1,12 +1,12 @@ // 0x0E000920 const GeoLayout ttm_geo_000920[] = { - GEO_CULLING_RADIUS(1650), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2650, 5500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700DF78), - GEO_OPEN_NODE(), - GEO_CLOSE_NODE(), - //! Too many open nodes. Unfortunately not exploitable - GEO_END(), + GEO_CULLING_RADIUS(1650), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2650, 5500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700DF78), + GEO_OPEN_NODE(), + GEO_CLOSE_NODE(), + //! Missing close nodes. Unfortunately not exploitable + GEO_END(), }; diff --git a/levels/ttm/areas/1/15/geo.inc.c b/levels/ttm/areas/1/15/geo.inc.c index 7912e96e..f926e61e 100644 --- a/levels/ttm/areas/1/15/geo.inc.c +++ b/levels/ttm/areas/1/15/geo.inc.c @@ -1,11 +1,11 @@ // 0x0E000948 const GeoLayout ttm_geo_000948[] = { - GEO_CULLING_RADIUS(350), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-1350, 3000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700E308), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(350), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-1350, 3000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700E308), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/areas/1/16/geo.inc.c b/levels/ttm/areas/1/16/geo.inc.c index 2da5a56a..10d60065 100644 --- a/levels/ttm/areas/1/16/geo.inc.c +++ b/levels/ttm/areas/1/16/geo.inc.c @@ -1,9 +1,9 @@ // 0x0E000970 const GeoLayout ttm_geo_000970[] = { - GEO_CULLING_RADIUS(3200), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700EAC8), - GEO_DISPLAY_LIST(LAYER_ALPHA, ttm_seg7_dl_0700EC58), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(3200), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700EAC8), + GEO_DISPLAY_LIST(LAYER_ALPHA, ttm_seg7_dl_0700EC58), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/areas/1/17/geo.inc.c b/levels/ttm/areas/1/17/geo.inc.c index b4b396a2..90c6543c 100644 --- a/levels/ttm/areas/1/17/geo.inc.c +++ b/levels/ttm/areas/1/17/geo.inc.c @@ -1,12 +1,12 @@ // 0x0E000990 const GeoLayout ttm_geo_000990[] = { - GEO_CULLING_RADIUS(780), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-1780, 5500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, ttm_seg7_dl_0700F270), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700FA18), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(780), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-1780, 5500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, ttm_seg7_dl_0700F270), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700FA18), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/areas/1/18/geo.inc.c b/levels/ttm/areas/1/18/geo.inc.c index 9a8166eb..ed9602a2 100644 --- a/levels/ttm/areas/1/18/geo.inc.c +++ b/levels/ttm/areas/1/18/geo.inc.c @@ -1,12 +1,12 @@ // 0x0E0009C0 const GeoLayout ttm_geo_0009C0[] = { - GEO_CULLING_RADIUS(1700), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2700, 5000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_07010978), - GEO_DISPLAY_LIST(LAYER_ALPHA, ttm_seg7_dl_07010A68), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1700), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2700, 5000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_07010978), + GEO_DISPLAY_LIST(LAYER_ALPHA, ttm_seg7_dl_07010A68), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/areas/1/19/geo.inc.c b/levels/ttm/areas/1/19/geo.inc.c index 8a887fd2..8896bd1d 100644 --- a/levels/ttm/areas/1/19/geo.inc.c +++ b/levels/ttm/areas/1/19/geo.inc.c @@ -1,11 +1,11 @@ // 0x0E0009F0 const GeoLayout ttm_geo_0009F0[] = { - GEO_CULLING_RADIUS(920), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-1920, 5000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_07011128), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(920), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-1920, 5000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_07011128), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/areas/1/20/geo.inc.c b/levels/ttm/areas/1/20/geo.inc.c index 30fa2945..fbadb361 100644 --- a/levels/ttm/areas/1/20/geo.inc.c +++ b/levels/ttm/areas/1/20/geo.inc.c @@ -1,11 +1,11 @@ // 0x0E000A18 const GeoLayout ttm_geo_000A18[] = { - GEO_CULLING_RADIUS(1100), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2100, 5000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_07011608), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1100), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2100, 5000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_07011608), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/areas/1/21/geo.inc.c b/levels/ttm/areas/1/21/geo.inc.c index aaab43b9..9ccf1c1c 100644 --- a/levels/ttm/areas/1/21/geo.inc.c +++ b/levels/ttm/areas/1/21/geo.inc.c @@ -1,12 +1,12 @@ // 0x0E000A40 const GeoLayout ttm_geo_000A40[] = { - GEO_CULLING_RADIUS(900), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-1900, 5000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_07011C78), - GEO_DISPLAY_LIST(LAYER_ALPHA, ttm_seg7_dl_07011D78), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(900), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-1900, 5000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_07011C78), + GEO_DISPLAY_LIST(LAYER_ALPHA, ttm_seg7_dl_07011D78), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/areas/1/3/geo.inc.c b/levels/ttm/areas/1/3/geo.inc.c index beb627cc..e3c71212 100644 --- a/levels/ttm/areas/1/3/geo.inc.c +++ b/levels/ttm/areas/1/3/geo.inc.c @@ -1,12 +1,12 @@ // 0x0E000748 const GeoLayout ttm_geo_000748[] = { - GEO_CULLING_RADIUS(1800), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2800, 10000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700A8C0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, ttm_seg7_dl_0700AB08), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1800), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2800, 10000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700A8C0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, ttm_seg7_dl_0700AB08), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/areas/1/4/geo.inc.c b/levels/ttm/areas/1/4/geo.inc.c index d708ee3e..7f37e14e 100644 --- a/levels/ttm/areas/1/4/geo.inc.c +++ b/levels/ttm/areas/1/4/geo.inc.c @@ -1,12 +1,12 @@ // 0x0E000778 const GeoLayout ttm_geo_000778[] = { - GEO_CULLING_RADIUS(1700), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2700, 6500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700AF90), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, ttm_seg7_dl_0700B0D0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1700), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2700, 6500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700AF90), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, ttm_seg7_dl_0700B0D0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/areas/1/5/geo.inc.c b/levels/ttm/areas/1/5/geo.inc.c index f2292416..155283db 100644 --- a/levels/ttm/areas/1/5/geo.inc.c +++ b/levels/ttm/areas/1/5/geo.inc.c @@ -1,12 +1,12 @@ // 0x0E0007A8 const GeoLayout ttm_geo_0007A8[] = { - GEO_CULLING_RADIUS(1700), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2700, 6500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700B530), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, ttm_seg7_dl_0700B670), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1700), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2700, 6500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700B530), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, ttm_seg7_dl_0700B670), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/areas/1/6/geo.inc.c b/levels/ttm/areas/1/6/geo.inc.c index f545b293..271fd1cf 100644 --- a/levels/ttm/areas/1/6/geo.inc.c +++ b/levels/ttm/areas/1/6/geo.inc.c @@ -1,12 +1,12 @@ // 0x0E0007D8 const GeoLayout ttm_geo_0007D8[] = { - GEO_CULLING_RADIUS(1700), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2700, 6500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700BAD0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, ttm_seg7_dl_0700BC10), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1700), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2700, 6500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700BAD0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, ttm_seg7_dl_0700BC10), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/areas/1/7/geo.inc.c b/levels/ttm/areas/1/7/geo.inc.c index 7e129654..1e9159df 100644 --- a/levels/ttm/areas/1/7/geo.inc.c +++ b/levels/ttm/areas/1/7/geo.inc.c @@ -1,11 +1,11 @@ // 0x0E000808 const GeoLayout ttm_geo_000808[] = { - GEO_CULLING_RADIUS(650), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-1650, 9500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700BE20), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(650), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-1650, 9500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700BE20), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/areas/1/8/geo.inc.c b/levels/ttm/areas/1/8/geo.inc.c index b122f79b..afbd587f 100644 --- a/levels/ttm/areas/1/8/geo.inc.c +++ b/levels/ttm/areas/1/8/geo.inc.c @@ -1,11 +1,11 @@ // 0x0E000830 const GeoLayout ttm_geo_000830[] = { - GEO_CULLING_RADIUS(1900), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2900, 8000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700C070), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1900), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2900, 8000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700C070), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/areas/1/9/geo.inc.c b/levels/ttm/areas/1/9/geo.inc.c index 3afa7f0c..64377942 100644 --- a/levels/ttm/areas/1/9/geo.inc.c +++ b/levels/ttm/areas/1/9/geo.inc.c @@ -1,11 +1,11 @@ // 0x0E000858 const GeoLayout ttm_geo_000858[] = { - GEO_CULLING_RADIUS(450), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-1450, 5500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700C408), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(450), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-1450, 5500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700C408), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/areas/1/geo.inc.c b/levels/ttm/areas/1/geo.inc.c index b93b3c11..249a86e4 100644 --- a/levels/ttm/areas/1/geo.inc.c +++ b/levels/ttm/areas/1/geo.inc.c @@ -1,40 +1,40 @@ // 0x0E000A70 const GeoLayout ttm_geo_000A70[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND(BACKGROUND_OCEAN_SKY, geo_skybox_main), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(1, 0, 2000, 6000, 0, -2200, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700A120), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700A2E0), - GEO_RENDER_OBJ(), - 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), - GEO_ASM(0x3603, geo_movtex_draw_nocolor), - 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_envfx_main), + GEO_BACKGROUND(BACKGROUND_OCEAN_SKY, geo_skybox_main), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_cannon_circle_base), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(1, 0, 2000, 6000, 0, -2200, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700A120), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700A2E0), + GEO_RENDER_OBJ(), + 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), + GEO_ASM(0x3603, geo_movtex_draw_nocolor), + 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_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_cannon_circle_base), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/areas/1/macro.inc.c b/levels/ttm/areas/1/macro.inc.c index a19e7317..d580a70e 100644 --- a/levels/ttm/areas/1/macro.inc.c +++ b/levels/ttm/areas/1/macro.inc.c @@ -1,43 +1,43 @@ // 0x07016F18 - 0x070170A0 const MacroObject ttm_seg7_area_1_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_bobomb_buddy_opens_cannon, /*yaw*/ 0, /*pos*/ 799, -2668, 3320), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 45, /*pos*/ 5035, -3994, -3445, /*behParam*/ 0xC0), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 90, /*pos*/ 3644, -1304, 1422, /*behParam*/ DIALOG_072), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 622, -4331, 5466, /*behParam*/ DIALOG_094), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1450, -2750, -4250), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2550, -2750, -3400), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4150, -2700, -2800), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -1600, -1650, -2500), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -1200, -1600, -3250), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -1850, 100, -2850), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -1500, -800, -2750), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 180, /*pos*/ -1126, -3448, -4400, /*behParam*/ DIALOG_091), - MACRO_OBJECT(/*preset*/ macro_goomba_triplet_spawner, /*yaw*/ 0, /*pos*/ 1740, -4236, 5320), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ 4540, -4607, 1060), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -3713, -4130, 3530), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -3507, -2480, -1046), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -3538, -2409, -61), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -3538, -2330, 1046), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 82, /*pos*/ -521, -2047, 3568), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ 2369, -1451, -3876), - MACRO_OBJECT(/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ 707, -1223, -3846), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -1010, -705, -3385), - MACRO_OBJECT(/*preset*/ macro_goomba_triplet_spawner, /*yaw*/ 0, /*pos*/ -584, 195, 1476), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 1530, 620, 1670), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 3476, 708, -896), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 125, /*pos*/ 2461, 1461, 1960), - MACRO_OBJECT(/*preset*/ macro_box_1up, /*yaw*/ 0, /*pos*/ 3261, -2553, -4092), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal_flying, /*yaw*/ 330, /*pos*/ -1907, -861, -3138), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 30, /*pos*/ 1950, 880, 1321), - MACRO_OBJECT(/*preset*/ macro_floor_switch_hidden_objects, /*yaw*/ 50, /*pos*/ -1200, 1543, 460), - MACRO_OBJECT(/*preset*/ macro_goomba_triplet_spawner, /*yaw*/ 0, /*pos*/ -600, 1177, -1340), - MACRO_OBJECT(/*preset*/ macro_fish_group, /*yaw*/ 0, /*pos*/ -780, -4580, 4440), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 55, /*pos*/ -900, 1540, 580), - MACRO_OBJECT(/*preset*/ macro_chuckya, /*yaw*/ 270, /*pos*/ -2676, -2145, 2923), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1840, -2880, -3600), - MACRO_OBJECT(/*preset*/ macro_coin_line_vertical, /*yaw*/ 0, /*pos*/ -880, 1750, 580), - MACRO_OBJECT(/*preset*/ macro_fire_fly_guy, /*yaw*/ 0, /*pos*/ 2300, -1384, 3753), - MACRO_OBJECT(/*preset*/ macro_butterfly_triplet, /*yaw*/ 0, /*pos*/ -606, 1186, -1290), - MACRO_OBJECT(/*preset*/ macro_jumping_box, /*yaw*/ 0, /*pos*/ 4980, -4607, 2680), + MACRO_OBJECT (/*preset*/ macro_bobomb_buddy_opens_cannon_1, /*yaw*/ 0, /*pos*/ 799, -2668, 3320), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 45, /*pos*/ 5035, -3994, -3445, /*bhvParam*/ 0xC0), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 90, /*pos*/ 3644, -1304, 1422, /*bhvParam*/ DIALOG_072), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 622, -4331, 5466, /*bhvParam*/ DIALOG_094), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1450, -2750, -4250), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2550, -2750, -3400), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4150, -2700, -2800), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -1600, -1650, -2500), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -1200, -1600, -3250), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -1850, 100, -2850), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -1500, -800, -2750), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 180, /*pos*/ -1126, -3448, -4400, /*bhvParam*/ DIALOG_091), + MACRO_OBJECT (/*preset*/ macro_goomba_triplet_spawner, /*yaw*/ 0, /*pos*/ 1740, -4236, 5320), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ 4540, -4607, 1060), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -3713, -4130, 3530), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -3507, -2480, -1046), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -3538, -2409, -61), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ -3538, -2330, 1046), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 82, /*pos*/ -521, -2047, 3568), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ 2369, -1451, -3876), + MACRO_OBJECT (/*preset*/ macro_bobomb, /*yaw*/ 0, /*pos*/ 707, -1223, -3846), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -1010, -705, -3385), + MACRO_OBJECT (/*preset*/ macro_goomba_triplet_spawner, /*yaw*/ 0, /*pos*/ -584, 195, 1476), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 1530, 620, 1670), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 3476, 708, -896), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 125, /*pos*/ 2461, 1461, 1960), + MACRO_OBJECT (/*preset*/ macro_box_1up, /*yaw*/ 0, /*pos*/ 3261, -2553, -4092), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal_flying, /*yaw*/ 330, /*pos*/ -1907, -861, -3138), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 30, /*pos*/ 1950, 880, 1321), + MACRO_OBJECT (/*preset*/ macro_floor_switch_hidden_objects, /*yaw*/ 50, /*pos*/ -1200, 1543, 460), + MACRO_OBJECT (/*preset*/ macro_goomba_triplet_spawner, /*yaw*/ 0, /*pos*/ -600, 1177, -1340), + MACRO_OBJECT (/*preset*/ macro_fish_spawner_few_blue, /*yaw*/ 0, /*pos*/ -780, -4580, 4440), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 55, /*pos*/ -900, 1540, 580), + MACRO_OBJECT (/*preset*/ macro_chuckya, /*yaw*/ 270, /*pos*/ -2676, -2145, 2923), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1840, -2880, -3600), + MACRO_OBJECT (/*preset*/ macro_coin_line_vertical_flying, /*yaw*/ 0, /*pos*/ -880, 1750, 580), + MACRO_OBJECT (/*preset*/ macro_fire_fly_guy, /*yaw*/ 0, /*pos*/ 2300, -1384, 3753), + MACRO_OBJECT (/*preset*/ macro_butterfly_triplet, /*yaw*/ 0, /*pos*/ -606, 1186, -1290), + MACRO_OBJECT (/*preset*/ macro_jumping_box, /*yaw*/ 0, /*pos*/ 4980, -4607, 2680), MACRO_OBJECT_END(), }; diff --git a/levels/ttm/areas/2/geo.inc.c b/levels/ttm/areas/2/geo.inc.c index 9af13cde..fccf7495 100644 --- a/levels/ttm/areas/2/geo.inc.c +++ b/levels/ttm/areas/2/geo.inc.c @@ -1,27 +1,27 @@ // 0x0E000B5C const GeoLayout ttm_geo_000B5C[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND_COLOR(0x0001), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(9, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - 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_envfx_main), + GEO_BACKGROUND_COLOR(0x0001), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(9, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + 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_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/areas/2/macro.inc.c b/levels/ttm/areas/2/macro.inc.c index 4864d011..40dc3842 100644 --- a/levels/ttm/areas/2/macro.inc.c +++ b/levels/ttm/areas/2/macro.inc.c @@ -1,15 +1,15 @@ // 0x070302C8 - 0x07030338 const MacroObject ttm_seg7_area_2_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 6100, 4836, 6981), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 6645, 4800, 7563), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 7845, 4836, 6327), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 7263, 4836, 5745), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ 6936, 4800, 6654, /*behParam*/ 4), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 6281, 4836, 6472), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 6754, 4800, 5963), - MACRO_OBJECT(/*preset*/ macro_1up_sliding, /*yaw*/ 0, /*pos*/ 1764, 2943, 1480), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 45, /*pos*/ 2972, 3963, 2690), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 45, /*pos*/ 27, 2145, -290), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2763, -37, -2981), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 6100, 4836, 6981), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 6645, 4800, 7563), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 7845, 4836, 6327), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 7263, 4836, 5745), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ 6936, 4800, 6654, /*bhvParam*/ 4), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 6281, 4836, 6472), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ 6754, 4800, 5963), + MACRO_OBJECT (/*preset*/ macro_1up_sliding, /*yaw*/ 0, /*pos*/ 1764, 2943, 1480), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 45, /*pos*/ 2972, 3963, 2690), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 45, /*pos*/ 27, 2145, -290), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ -2763, -37, -2981), MACRO_OBJECT_END(), }; diff --git a/levels/ttm/areas/3/geo.inc.c b/levels/ttm/areas/3/geo.inc.c index a59642d2..a2df4a20 100644 --- a/levels/ttm/areas/3/geo.inc.c +++ b/levels/ttm/areas/3/geo.inc.c @@ -1,28 +1,28 @@ // 0x0E000BEC const GeoLayout ttm_geo_000BEC[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND_COLOR(0x0001), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(9, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_070249A0), - 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_envfx_main), + GEO_BACKGROUND_COLOR(0x0001), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(9, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_070249A0), + 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_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/areas/4/geo.inc.c b/levels/ttm/areas/4/geo.inc.c index 5dc981f8..cc583823 100644 --- a/levels/ttm/areas/4/geo.inc.c +++ b/levels/ttm/areas/4/geo.inc.c @@ -1,27 +1,27 @@ // 0x0E000C84 const GeoLayout ttm_geo_000C84[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND_COLOR(0x0001), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(9, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - 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_envfx_main), + GEO_BACKGROUND_COLOR(0x0001), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(9, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + 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_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/blue_smiley/geo.inc.c b/levels/ttm/blue_smiley/geo.inc.c index bcd9bfde..e7604a84 100644 --- a/levels/ttm/blue_smiley/geo.inc.c +++ b/levels/ttm/blue_smiley/geo.inc.c @@ -1,14 +1,14 @@ // 0x0E000D14 const GeoLayout ttm_geo_000D14[] = { - GEO_CULLING_RADIUS(1000), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 32768), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, ttm_seg7_dl_0702A9C0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1000), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 32768), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, ttm_seg7_dl_0702A9C0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/level.yaml b/levels/ttm/level.yaml index cb584762..473046d9 100644 --- a/levels/ttm/level.yaml +++ b/levels/ttm/level.yaml @@ -1,6 +1,6 @@ -# Tall Tall Mountain +# Tall, Tall Mountain short-name: ttm -full-name: Tall Tall Mountain +full-name: Tall, Tall Mountain texture-file: ["/texture.inc.c"] area-count: 4 objects: [blue_smiley, moon_smiley, rolling_log, slide_exit_podium, star_cage, star_smiley, yellow_smiley] diff --git a/levels/ttm/leveldata.c b/levels/ttm/leveldata.c index c8fb72ff..4129055f 100644 --- a/levels/ttm/leveldata.c +++ b/levels/ttm/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "dialog_ids.h" diff --git a/levels/ttm/moon_smiley/geo.inc.c b/levels/ttm/moon_smiley/geo.inc.c index 83b4f836..554ab455 100644 --- a/levels/ttm/moon_smiley/geo.inc.c +++ b/levels/ttm/moon_smiley/geo.inc.c @@ -1,14 +1,14 @@ // 0x0E000DBC const GeoLayout ttm_geo_000DBC[] = { - GEO_CULLING_RADIUS(1000), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 32768), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, ttm_seg7_dl_0702AC78), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1000), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 32768), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, ttm_seg7_dl_0702AC78), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/rolling_log/geo.inc.c b/levels/ttm/rolling_log/geo.inc.c index c41b6cd7..0d7d432c 100644 --- a/levels/ttm/rolling_log/geo.inc.c +++ b/levels/ttm/rolling_log/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000730 const GeoLayout ttm_geo_000730[] = { - GEO_CULLING_RADIUS(1200), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_07012270), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1200), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_07012270), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/script.c b/levels/ttm/script.c index bc593aac..a1db6d04 100644 --- a/levels/ttm/script.c +++ b/levels/ttm/script.c @@ -16,63 +16,63 @@ #include "levels/ttm/header.h" static const LevelScript script_func_local_1[] = { - OBJECT(/*model*/ MODEL_TTM_ROLLING_LOG, /*pos*/ 4360, -1722, 4001, /*angle*/ 0, 48, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTtmRollingLog), + OBJECT(/*model*/ MODEL_TTM_ROLLING_LOG, /*pos*/ 4360, -1722, 4001, /*angle*/ 0, 48, 0, /*bhvParam*/ 0, /*bhv*/ bhvTTMRollingLog), RETURN(), }; static const LevelScript script_func_local_2[] = { - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -1639, 1146, -1742, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvTtmBowlingBallSpawner), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3295, -3692, 2928, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWaterfallSoundLoop), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2004, -1580, 1283, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWaterfallSoundLoop), - OBJECT(/*model*/ MODEL_DL_MONTY_MOLE_HOLE, /*pos*/ -2077, -1023, -1969, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMontyMoleHole), - OBJECT(/*model*/ MODEL_DL_MONTY_MOLE_HOLE, /*pos*/ -2500, -1023, -2157, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMontyMoleHole), - OBJECT(/*model*/ MODEL_DL_MONTY_MOLE_HOLE, /*pos*/ -2048, -1023, -2307, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMontyMoleHole), - OBJECT(/*model*/ MODEL_DL_MONTY_MOLE_HOLE, /*pos*/ -2351, -1023, -2416, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMontyMoleHole), - OBJECT(/*model*/ MODEL_DL_MONTY_MOLE_HOLE, /*pos*/ -2400, -2559, -2185, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMontyMoleHole), - OBJECT(/*model*/ MODEL_DL_MONTY_MOLE_HOLE, /*pos*/ -1435, -2559, -3118, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMontyMoleHole), - OBJECT(/*model*/ MODEL_DL_MONTY_MOLE_HOLE, /*pos*/ -1677, -2559, -3507, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMontyMoleHole), - OBJECT(/*model*/ MODEL_DL_MONTY_MOLE_HOLE, /*pos*/ -1869, -2559, -2704, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMontyMoleHole), - OBJECT(/*model*/ MODEL_DL_MONTY_MOLE_HOLE, /*pos*/ -2525, -2559, -2626, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMontyMoleHole), - OBJECT(/*model*/ MODEL_MONTY_MOLE, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMontyMole), - OBJECT(/*model*/ MODEL_MONTY_MOLE, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvMontyMole), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3625, 560, 165, /*angle*/ 0, 330, 0, /*behParam*/ 0x00000000, /*beh*/ bhvCloud), - OBJECT_WITH_ACTS(/*model*/ MODEL_UKIKI, /*pos*/ 729, 2307, 335, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvUkiki, /*acts*/ ACT_2), - OBJECT_WITH_ACTS(/*model*/ MODEL_UKIKI, /*pos*/ 1992, -1548, 2944, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvUkiki, /*acts*/ ALL_ACTS), + OBJECT (/*model*/ MODEL_NONE, /*pos*/ -1639, 1146, -1742, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(BBALL_BP_STYPE_TTM), /*bhv*/ bhvTTMBowlingBallSpawner), + OBJECT (/*model*/ MODEL_NONE, /*pos*/ 3295, -3692, 2928, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvWaterfallSoundLoop), + OBJECT (/*model*/ MODEL_NONE, /*pos*/ 2004, -1580, 1283, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvWaterfallSoundLoop), + OBJECT (/*model*/ MODEL_DL_MONTY_MOLE_HOLE, /*pos*/ -2077, -1023, -1969, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvMontyMoleHole), + OBJECT (/*model*/ MODEL_DL_MONTY_MOLE_HOLE, /*pos*/ -2500, -1023, -2157, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvMontyMoleHole), + OBJECT (/*model*/ MODEL_DL_MONTY_MOLE_HOLE, /*pos*/ -2048, -1023, -2307, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvMontyMoleHole), + OBJECT (/*model*/ MODEL_DL_MONTY_MOLE_HOLE, /*pos*/ -2351, -1023, -2416, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvMontyMoleHole), + OBJECT (/*model*/ MODEL_DL_MONTY_MOLE_HOLE, /*pos*/ -2400, -2559, -2185, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvMontyMoleHole), + OBJECT (/*model*/ MODEL_DL_MONTY_MOLE_HOLE, /*pos*/ -1435, -2559, -3118, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvMontyMoleHole), + OBJECT (/*model*/ MODEL_DL_MONTY_MOLE_HOLE, /*pos*/ -1677, -2559, -3507, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvMontyMoleHole), + OBJECT (/*model*/ MODEL_DL_MONTY_MOLE_HOLE, /*pos*/ -1869, -2559, -2704, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvMontyMoleHole), + OBJECT (/*model*/ MODEL_DL_MONTY_MOLE_HOLE, /*pos*/ -2525, -2559, -2626, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvMontyMoleHole), + OBJECT (/*model*/ MODEL_MONTY_MOLE, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(MONTY_MOLE_BP_NO_ROCK), /*bhv*/ bhvMontyMole), + OBJECT (/*model*/ MODEL_MONTY_MOLE, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(MONTY_MOLE_BP_GENERIC), /*bhv*/ bhvMontyMole), + OBJECT (/*model*/ MODEL_NONE, /*pos*/ 3625, 560, 165, /*angle*/ 0, 330, 0, /*bhvParam*/ BPARAM2(CLOUD_BP_FWOOSH), /*bhv*/ bhvCloud), + OBJECT_WITH_ACTS(/*model*/ MODEL_UKIKI, /*pos*/ 729, 2307, 335, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(UKIKI_BP_CAGE), /*bhv*/ bhvUkiki, /*acts*/ ACT_2), + OBJECT_WITH_ACTS(/*model*/ MODEL_UKIKI, /*pos*/ 1992, -1548, 2944, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(UKIKI_BP_CAP), /*bhv*/ bhvUkiki, /*acts*/ ALL_ACTS), RETURN(), }; static const LevelScript script_func_local_3[] = { - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 1200, 2600, 150, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStar, /*acts*/ ACT_1), - OBJECT_WITH_ACTS(/*model*/ MODEL_TTM_STAR_CAGE, /*pos*/ 2496, 1670, 1492, /*angle*/ 0, 0, 0, /*behParam*/ 0x01000000, /*beh*/ bhvUkikiCage, /*acts*/ ACT_2), - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ -3250, -2500, -3700, /*angle*/ 0, 0, 0, /*behParam*/ 0x02000000, /*beh*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -2900, -2700, 3650, /*angle*/ 0, 0, 0, /*behParam*/ 0x03000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 1800, 1200, 1050, /*angle*/ 0, 0, 0, /*behParam*/ 0x04000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 7300, -3100, 1300, /*angle*/ 0, 0, 0, /*behParam*/ 0x05000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 1200, 2600, 150, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_1), /*bhv*/ bhvStar, /*acts*/ ACT_1), + OBJECT_WITH_ACTS(/*model*/ MODEL_TTM_STAR_CAGE, /*pos*/ 2496, 1670, 1492, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_2), /*bhv*/ bhvUkikiCage, /*acts*/ ACT_2), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ -3250, -2500, -3700, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_3), /*bhv*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -2900, -2700, 3650, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_4), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 1800, 1200, 1050, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_5), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 7300, -3100, 1300, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_6), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), RETURN(), }; static const LevelScript script_func_local_4[] = { - OBJECT(/*model*/ MODEL_TTM_BLUE_SMILEY, /*pos*/ 4389, 3620, 624, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_TTM_YELLOW_SMILEY, /*pos*/ -1251, 2493, 2224, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_TTM_STAR_SMILEY, /*pos*/ -2547, 1365, -520, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_TTM_MOON_SMILEY, /*pos*/ -324, 989, -4090, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_TTM_BLUE_SMILEY, /*pos*/ 4389, 3620, 624, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_TTM_YELLOW_SMILEY, /*pos*/ -1251, 2493, 2224, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_TTM_STAR_SMILEY, /*pos*/ -2547, 1365, -520, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_TTM_MOON_SMILEY, /*pos*/ -324, 989, -4090, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), RETURN(), }; static const LevelScript script_func_local_5[] = { - OBJECT(/*model*/ MODEL_TTM_BLUE_SMILEY, /*pos*/ 7867, -959, -6085, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_TTM_BLUE_SMILEY, /*pos*/ -5241, 5329, 9466, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_TTM_YELLOW_SMILEY, /*pos*/ -1869, -5311, 7358, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_TTM_STAR_SMILEY, /*pos*/ -9095, 4262, 5348, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_TTM_MOON_SMILEY, /*pos*/ -8477, 730, -7122, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_TTM_MOON_SMILEY, /*pos*/ 6160, -6076, 7861, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_TTM_BLUE_SMILEY, /*pos*/ 7867, -959, -6085, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_TTM_BLUE_SMILEY, /*pos*/ -5241, 5329, 9466, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_TTM_YELLOW_SMILEY, /*pos*/ -1869, -5311, 7358, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_TTM_STAR_SMILEY, /*pos*/ -9095, 4262, 5348, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_TTM_MOON_SMILEY, /*pos*/ -8477, 730, -7122, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_TTM_MOON_SMILEY, /*pos*/ 6160, -6076, 7861, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), RETURN(), }; static const LevelScript script_func_local_6[] = { - OBJECT(/*model*/ MODEL_TTM_YELLOW_SMILEY, /*pos*/ 5157, 1974, -8292, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_TTM_STAR_SMILEY, /*pos*/ 11106, 2588, 381, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_TTM_MOON_SMILEY, /*pos*/ 37, 1974, -1124, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_TTM_YELLOW_SMILEY, /*pos*/ 5157, 1974, -8292, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_TTM_STAR_SMILEY, /*pos*/ 11106, 2588, 381, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_TTM_MOON_SMILEY, /*pos*/ 37, 1974, -1124, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), RETURN(), }; @@ -82,20 +82,20 @@ static const LevelScript script_func_local_7[] = { const LevelScript level_ttm_entry[] = { INIT_LEVEL(), - LOAD_MIO0( /*seg*/ 0x07, _ttm_segment_7SegmentRomStart, _ttm_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _ttm_segment_7SegmentRomStart, _ttm_segment_7SegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _mountain_mio0SegmentRomStart, _mountain_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0A, _water_skybox_mio0SegmentRomStart, _water_skybox_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x05, _group6_mio0SegmentRomStart, _group6_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0C, _group6_geoSegmentRomStart, _group6_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0A, _water_skybox_mio0SegmentRomStart, _water_skybox_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x05, _group6_mio0SegmentRomStart, _group6_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0C, _group6_geoSegmentRomStart, _group6_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_1), JUMP_LINK(script_func_global_7), LOAD_MODEL_FROM_GEO(MODEL_TTM_SLIDE_EXIT_PODIUM, ttm_geo_000DF4), LOAD_MODEL_FROM_GEO(MODEL_TTM_ROLLING_LOG, ttm_geo_000730), - LOAD_MODEL_FROM_GEO(MODEL_TTM_STAR_CAGE, ttm_geo_000710), + LOAD_MODEL_FROM_GEO(MODEL_TTM_STAR_CAGE, ttm_geo_000710), LOAD_MODEL_FROM_GEO(MODEL_TTM_BLUE_SMILEY, ttm_geo_000D14), LOAD_MODEL_FROM_GEO(MODEL_TTM_YELLOW_SMILEY, ttm_geo_000D4C), LOAD_MODEL_FROM_GEO(MODEL_TTM_STAR_SMILEY, ttm_geo_000D84), @@ -121,19 +121,19 @@ const LevelScript level_ttm_entry[] = { LOAD_MODEL_FROM_GEO(MODEL_LEVEL_GEOMETRY_16, ttm_geo_000A40), AREA(/*index*/ 1, ttm_geo_000A70), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 102, -3332, 5734, /*angle*/ 0, 45, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvSpinAirborneWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2447, -2457, 3952, /*angle*/ 0, -105, 0, /*behParam*/ 0x00140000, /*beh*/ bhvAirborneWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2267, -3006, -3788, /*angle*/ 0, 148, 0, /*behParam*/ 0x00150000, /*beh*/ bhvFadingWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -557, -3448, -4146, /*angle*/ 0, -168, 0, /*behParam*/ 0x00160000, /*beh*/ bhvFadingWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_TTM, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x14, /*destLevel*/ LEVEL_TTM, /*destArea*/ 0x01, /*destNode*/ 0x14, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x15, /*destLevel*/ LEVEL_TTM, /*destArea*/ 0x01, /*destNode*/ 0x16, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x16, /*destLevel*/ LEVEL_TTM, /*destArea*/ 0x01, /*destNode*/ 0x15, /*flags*/ WARP_NO_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x00, /*destLevel*/ LEVEL_TTM, /*destArea*/ 0x02, /*destNode*/ 0x0A, /*flags*/ WARP_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x01, /*destLevel*/ LEVEL_TTM, /*destArea*/ 0x02, /*destNode*/ 0x0A, /*flags*/ WARP_CHECKPOINT), - PAINTING_WARP_NODE(/*id*/ 0x02, /*destLevel*/ LEVEL_TTM, /*destArea*/ 0x02, /*destNode*/ 0x0A, /*flags*/ WARP_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x34, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x66, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 102, -3332, 5734, /*angle*/ 0, 45, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvSpinAirborneWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2447, -2457, 3952, /*angle*/ 0, -105, 0, /*bhvParam*/ BPARAM2(WARP_NODE_14), /*bhv*/ bhvAirborneWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2267, -3006, -3788, /*angle*/ 0, 148, 0, /*bhvParam*/ BPARAM2(WARP_NODE_15), /*bhv*/ bhvFadingWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -557, -3448, -4146, /*angle*/ 0, -168, 0, /*bhvParam*/ BPARAM2(WARP_NODE_16), /*bhv*/ bhvFadingWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_TTM, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_14, /*destLevel*/ LEVEL_TTM, /*destArea*/ 1, /*destNode*/ WARP_NODE_14, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_15, /*destLevel*/ LEVEL_TTM, /*destArea*/ 1, /*destNode*/ WARP_NODE_16, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_16, /*destLevel*/ LEVEL_TTM, /*destArea*/ 1, /*destNode*/ WARP_NODE_15, /*flags*/ WARP_NO_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_00, /*destLevel*/ LEVEL_TTM, /*destArea*/ 2, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_01, /*destLevel*/ LEVEL_TTM, /*destArea*/ 2, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_CHECKPOINT), + PAINTING_WARP_NODE(/*id*/ WARP_NODE_02, /*destLevel*/ LEVEL_TTM, /*destArea*/ 2, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_34, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_66, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_1), JUMP_LINK(script_func_local_2), JUMP_LINK(script_func_local_3), @@ -144,10 +144,10 @@ const LevelScript level_ttm_entry[] = { END_AREA(), AREA(/*index*/ 2, ttm_geo_000B5C), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 7000, 5381, 6750, /*angle*/ 0, 225, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvAirborneWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_TTM, /*destArea*/ 0x02, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x34, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x66, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 7000, 5381, 6750, /*angle*/ 0, 225, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvAirborneWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_TTM, /*destArea*/ 2, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_34, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_66, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_4), TERRAIN(/*terrainData*/ ttm_seg7_area_2_collision), MACRO_OBJECTS(/*objList*/ ttm_seg7_area_2_macro_objs), @@ -157,8 +157,8 @@ const LevelScript level_ttm_entry[] = { END_AREA(), AREA(/*index*/ 3, ttm_geo_000BEC), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x34, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x66, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_34, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_66, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_5), TERRAIN(/*terrainData*/ ttm_seg7_area_3_collision), MACRO_OBJECTS(/*objList*/ ttm_seg7_area_3_macro_objs), @@ -168,10 +168,10 @@ const LevelScript level_ttm_entry[] = { END_AREA(), AREA(/*index*/ 4, ttm_geo_000C84), - OBJECT(/*model*/ MODEL_TTM_SLIDE_EXIT_PODIUM, /*pos*/ -7285, -1866, -4812, /*angle*/ 0, 0, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvExitPodiumWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_TTM, /*destArea*/ 0x01, /*destNode*/ 0x14, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x34, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x66, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_TTM_SLIDE_EXIT_PODIUM, /*pos*/ -7285, -1866, -4812, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvExitPodiumWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_TTM, /*destArea*/ 1, /*destNode*/ WARP_NODE_14, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_34, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_66, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_6), JUMP_LINK(script_func_local_7), TERRAIN(/*terrainData*/ ttm_seg7_area_4_collision), diff --git a/levels/ttm/slide_exit_podium/geo.inc.c b/levels/ttm/slide_exit_podium/geo.inc.c index 71b888b5..3a8f8afa 100644 --- a/levels/ttm/slide_exit_podium/geo.inc.c +++ b/levels/ttm/slide_exit_podium/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000DF4 const GeoLayout ttm_geo_000DF4[] = { - GEO_CULLING_RADIUS(8000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0702BB60), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(8000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0702BB60), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/star_cage/geo.inc.c b/levels/ttm/star_cage/geo.inc.c index c4cc6880..e0c7d28a 100644 --- a/levels/ttm/star_cage/geo.inc.c +++ b/levels/ttm/star_cage/geo.inc.c @@ -1,9 +1,9 @@ // 0x0E000710 const GeoLayout ttm_geo_000710[] = { - GEO_CULLING_RADIUS(300), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_07013430), - GEO_DISPLAY_LIST(LAYER_ALPHA, ttm_seg7_dl_07013608), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(300), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_07013430), + GEO_DISPLAY_LIST(LAYER_ALPHA, ttm_seg7_dl_07013608), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/star_smiley/geo.inc.c b/levels/ttm/star_smiley/geo.inc.c index e8033457..e6989ac5 100644 --- a/levels/ttm/star_smiley/geo.inc.c +++ b/levels/ttm/star_smiley/geo.inc.c @@ -1,14 +1,14 @@ // 0x0E000D84 const GeoLayout ttm_geo_000D84[] = { - GEO_CULLING_RADIUS(1000), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 32768), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, ttm_seg7_dl_0702AB90), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1000), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 32768), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, ttm_seg7_dl_0702AB90), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/ttm/yellow_smiley/geo.inc.c b/levels/ttm/yellow_smiley/geo.inc.c index 5257789f..e966723c 100644 --- a/levels/ttm/yellow_smiley/geo.inc.c +++ b/levels/ttm/yellow_smiley/geo.inc.c @@ -1,14 +1,14 @@ // 0x0E000D4C const GeoLayout ttm_geo_000D4C[] = { - GEO_CULLING_RADIUS(1000), - GEO_OPEN_NODE(), - GEO_BILLBOARD(), - GEO_OPEN_NODE(), - GEO_SCALE(0x00, 32768), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, ttm_seg7_dl_0702AAA8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1000), + GEO_OPEN_NODE(), + GEO_BILLBOARD(), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 32768), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, ttm_seg7_dl_0702AAA8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/vcutm/areas/1/geo.inc.c b/levels/vcutm/areas/1/geo.inc.c index 86b60944..da4e4204 100644 --- a/levels/vcutm/areas/1/geo.inc.c +++ b/levels/vcutm/areas/1/geo.inc.c @@ -1,29 +1,29 @@ // 0x0E000208 const GeoLayout vcutm_geo_000208[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND_COLOR(0x0001), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 25000, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(14, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, vcutm_seg7_dl_07007E88), - GEO_DISPLAY_LIST(LAYER_OPAQUE, vcutm_seg7_dl_07008E10), - 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_envfx_main), + GEO_BACKGROUND_COLOR(0x0001), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 25000, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(14, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, vcutm_seg7_dl_07007E88), + GEO_DISPLAY_LIST(LAYER_OPAQUE, vcutm_seg7_dl_07008E10), + 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_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/vcutm/areas/1/macro.inc.c b/levels/vcutm/areas/1/macro.inc.c index 04fcfc10..98fa332a 100644 --- a/levels/vcutm/areas/1/macro.inc.c +++ b/levels/vcutm/areas/1/macro.inc.c @@ -1,35 +1,35 @@ // 0x0700AB0C - 0x0700AC44 const MacroObject vcutm_seg7_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_box_1up, /*yaw*/ 0, /*pos*/ -3434, 2951, -3076), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -4711, 1594, -2532), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -5952, -393, -1141), - MACRO_OBJECT(/*preset*/ macro_box_vanish_cap, /*yaw*/ 0, /*pos*/ 3980, 300, -6220), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 4200, 0, -4940), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 4740, 0, -4940), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 4740, 0, -4400), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ 4460, 0, -4700, /*behParam*/ 3), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 4200, 0, -4940), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 4740, 0, -4940), - MACRO_OBJECT(/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 4740, 0, -4400), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -2100, -3276, 20), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -2100, -2800, -3866, /*behParam*/ 1), - MACRO_OBJECT(/*preset*/ macro_box_three_coins, /*yaw*/ 0, /*pos*/ -2145, -2160, -5963), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5920, 4575, -4618), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -4740, 3581, -3854), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -4727, -227, -1161), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -3418, -559, -836), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -600, -1400, -6300), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 900, -1400, -6300), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2750, -800, -6300), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4509, 0, -5527), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -1740, -3240, 1580), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -2400, -3240, 600), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -1740, -3240, 0), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -2400, -3240, -1079), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -2920, -3240, 880), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -4000, -3240, 1600), - MACRO_OBJECT(/*preset*/ macro_box_vanish_cap, /*yaw*/ 0, /*pos*/ -6020, -2976, 1240), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -2100, -2840, -3866), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -4600, 5760, -6140), + MACRO_OBJECT (/*preset*/ macro_box_1up, /*yaw*/ 0, /*pos*/ -3434, 2951, -3076), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -4711, 1594, -2532), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -5952, -393, -1141), + MACRO_OBJECT (/*preset*/ macro_box_vanish_cap, /*yaw*/ 0, /*pos*/ 3980, 300, -6220), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 4200, 0, -4940), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 4740, 0, -4940), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 4740, 0, -4400), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ 4460, 0, -4700, /*bhvParam*/ 3), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 4200, 0, -4940), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 4740, 0, -4940), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_2, /*yaw*/ 0, /*pos*/ 4740, 0, -4400), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -2100, -3276, 20), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -2100, -2800, -3866, /*bhvParam*/ AMP_BP_ROT_RADIUS_300), + MACRO_OBJECT (/*preset*/ macro_box_three_coins, /*yaw*/ 0, /*pos*/ -2145, -2160, -5963), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -5920, 4575, -4618), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -4740, 3581, -3854), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -4727, -227, -1161), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -3418, -559, -836), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -600, -1400, -6300), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 900, -1400, -6300), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2750, -800, -6300), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4509, 0, -5527), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -1740, -3240, 1580), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -2400, -3240, 600), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -1740, -3240, 0), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -2400, -3240, -1079), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -2920, -3240, 880), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -4000, -3240, 1600), + MACRO_OBJECT (/*preset*/ macro_box_vanish_cap, /*yaw*/ 0, /*pos*/ -6020, -2976, 1240), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -2100, -2840, -3866), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -4600, 5760, -6140), MACRO_OBJECT_END(), }; diff --git a/levels/vcutm/level.yaml b/levels/vcutm/level.yaml index c6961e8b..9ac54f52 100644 --- a/levels/vcutm/level.yaml +++ b/levels/vcutm/level.yaml @@ -1,6 +1,6 @@ # Vanish Cap under the Moat short-name: vcutm -full-name: Vanish Cap Under The Moat +full-name: Vanish Cap under the Moat texture-file: ["/texture.inc.c"] area-count: 1 objects: [seesaw] diff --git a/levels/vcutm/leveldata.c b/levels/vcutm/leveldata.c index bb2aa0ec..967b0146 100644 --- a/levels/vcutm/leveldata.c +++ b/levels/vcutm/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "make_const_nonconst.h" diff --git a/levels/vcutm/script.c b/levels/vcutm/script.c index fb52c956..1d609f7d 100644 --- a/levels/vcutm/script.c +++ b/levels/vcutm/script.c @@ -17,47 +17,47 @@ #include "levels/vcutm/header.h" static const LevelScript script_func_local_1[] = { - OBJECT(/*model*/ MODEL_VCUTM_SEESAW_PLATFORM, /*pos*/ 154, -1919, -6256, /*angle*/ 0, 270, 0, /*behParam*/ 0x00070000, /*beh*/ bhvSeesawPlatform), - OBJECT(/*model*/ MODEL_VCUTM_SEESAW_PLATFORM, /*pos*/ -2047, -3378, -2047, /*angle*/ 0, 0, 0, /*behParam*/ 0x00070000, /*beh*/ bhvSeesawPlatform), + OBJECT(/*model*/ MODEL_VCUTM_SEESAW_PLATFORM, /*pos*/ 154, -1919, -6256, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM2(0x07), /*bhv*/ bhvSeesawPlatform), + OBJECT(/*model*/ MODEL_VCUTM_SEESAW_PLATFORM, /*pos*/ -2047, -3378, -2047, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x07), /*bhv*/ bhvSeesawPlatform), //! @bug invalid model IDs - model ID 0x37 isn't loaded - OBJECT(/*model*/ MODEL_VCUTM_CHECKERBOARD_PLATFORM_SPAWNER, /*pos*/ 3251, -1082, -6256, /*angle*/ 0, 270, 0, /*behParam*/ 0x014B0000, /*beh*/ bhvCheckerboardElevatorGroup), - OBJECT(/*model*/ MODEL_VCUTM_CHECKERBOARD_PLATFORM_SPAWNER, /*pos*/ 2355, -1901, -6256, /*angle*/ 0, 270, 0, /*behParam*/ 0x014B0000, /*beh*/ bhvCheckerboardElevatorGroup), - OBJECT(/*model*/ MODEL_VCUTM_CHECKERBOARD_PLATFORM_SPAWNER, /*pos*/ 1459, -1594, -6256, /*angle*/ 0, 90, 0, /*behParam*/ 0x014B0000, /*beh*/ bhvCheckerboardElevatorGroup), - OBJECT(/*model*/ MODEL_VCUTM_CHECKERBOARD_PLATFORM_SPAWNER, /*pos*/ -1151, -2413, -6256, /*angle*/ 0, 270, 0, /*behParam*/ 0x014B0000, /*beh*/ bhvCheckerboardElevatorGroup), + OBJECT(/*model*/ MODEL_VCUTM_CHECKERBOARD_PLATFORM_SPAWNER, /*pos*/ 3251, -1082, -6256, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM1(1) | BPARAM2(75), /*bhv*/ bhvCheckerboardElevatorGroup), + OBJECT(/*model*/ MODEL_VCUTM_CHECKERBOARD_PLATFORM_SPAWNER, /*pos*/ 2355, -1901, -6256, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM1(1) | BPARAM2(75), /*bhv*/ bhvCheckerboardElevatorGroup), + OBJECT(/*model*/ MODEL_VCUTM_CHECKERBOARD_PLATFORM_SPAWNER, /*pos*/ 1459, -1594, -6256, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM1(1) | BPARAM2(75), /*bhv*/ bhvCheckerboardElevatorGroup), + OBJECT(/*model*/ MODEL_VCUTM_CHECKERBOARD_PLATFORM_SPAWNER, /*pos*/ -1151, -2413, -6256, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM1(1) | BPARAM2(75), /*bhv*/ bhvCheckerboardElevatorGroup), RETURN(), }; static const LevelScript script_func_local_2[] = { - OBJECT(/*model*/ MODEL_CAP_SWITCH, /*pos*/ 4506, 26, -6246, /*angle*/ 0, 0, 0, /*behParam*/ 0x00020000, /*beh*/ bhvCapSwitch), + OBJECT(/*model*/ MODEL_CAP_SWITCH, /*pos*/ 4506, 26, -6246, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x02), /*bhv*/ bhvCapSwitch), RETURN(), }; static const LevelScript script_func_local_3[] = { - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4600, 250, -4500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenRedCoinStar), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4600, 250, -4500, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_1), /*bhv*/ bhvHiddenRedCoinStar), RETURN(), }; const LevelScript level_vcutm_entry[] = { INIT_LEVEL(), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _outside_mio0SegmentRomStart, _outside_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x07, _vcutm_segment_7SegmentRomStart, _vcutm_segment_7SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x05, _group8_mio0SegmentRomStart, _group8_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0C, _group8_geoSegmentRomStart, _group8_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _vcutm_segment_7SegmentRomStart, _vcutm_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x05, _group8_mio0SegmentRomStart, _group8_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0C, _group8_geoSegmentRomStart, _group8_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_1), JUMP_LINK(script_func_global_9), LOAD_MODEL_FROM_GEO(MODEL_VCUTM_SEESAW_PLATFORM, vcutm_geo_0001F0), LOAD_MODEL_FROM_GEO(MODEL_VCUTM_WARP_PIPE, warp_pipe_geo), AREA(/*index*/ 1, vcutm_geo_000208), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6143, 6734, -6143, /*angle*/ 0, 0, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvAirborneWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_VCUTM, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF3, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 0x01, /*destNode*/ 0x07, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 0x01, /*destNode*/ 0x08, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 0x01, /*destNode*/ 0x06, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6143, 6734, -6143, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvAirborneWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_VCUTM, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_WARP_FLOOR, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 1, /*destNode*/ WARP_NODE_07, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 1, /*destNode*/ WARP_NODE_08, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 1, /*destNode*/ WARP_NODE_06, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_3), JUMP_LINK(script_func_local_1), JUMP_LINK(script_func_local_2), diff --git a/levels/vcutm/seesaw/geo.inc.c b/levels/vcutm/seesaw/geo.inc.c index 0c644141..6728e1fc 100644 --- a/levels/vcutm/seesaw/geo.inc.c +++ b/levels/vcutm/seesaw/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0001F0 const GeoLayout vcutm_geo_0001F0[] = { - GEO_CULLING_RADIUS(1000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, vcutm_seg7_dl_070096E0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, vcutm_seg7_dl_070096E0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wdw/areas/1/geo.inc.c b/levels/wdw/areas/1/geo.inc.c index 662c3b91..046449e4 100644 --- a/levels/wdw/areas/1/geo.inc.c +++ b/levels/wdw/areas/1/geo.inc.c @@ -1,36 +1,36 @@ // 0x0E000658 const GeoLayout wdw_geo_000658[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND(BACKGROUND_UNDERWATER_CITY, geo_skybox_main), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(1, 0, 2000, 6000, -4352, 0, -4352, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wdw_seg7_dl_07009AB0), - GEO_DISPLAY_LIST(LAYER_ALPHA, wdw_seg7_dl_0700A138), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, wdw_seg7_dl_07012798), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, wdw_seg7_dl_07012908), - GEO_ASM( 0, geo_wdw_set_initial_water_level), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x1101, geo_movtex_draw_water_regions), - GEO_RENDER_OBJ(), - GEO_ASM( 0, geo_envfx_main), + GEO_BACKGROUND(BACKGROUND_UNDERWATER_CITY, geo_skybox_main), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_cannon_circle_base), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(1, 0, 2000, 6000, -4352, 0, -4352, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wdw_seg7_dl_07009AB0), + GEO_DISPLAY_LIST(LAYER_ALPHA, wdw_seg7_dl_0700A138), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, wdw_seg7_dl_07012798), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, wdw_seg7_dl_07012908), + GEO_ASM( 0, geo_wdw_set_initial_water_level), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x1101, geo_movtex_draw_water_regions), + GEO_RENDER_OBJ(), + GEO_ASM( 0, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_cannon_circle_base), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wdw/areas/1/macro.inc.c b/levels/wdw/areas/1/macro.inc.c index c27d5c7c..7e3e3822 100644 --- a/levels/wdw/areas/1/macro.inc.c +++ b/levels/wdw/areas/1/macro.inc.c @@ -1,65 +1,65 @@ // 0x070160D8 - 0x0701633C const MacroObject wdw_seg7_area_1_macro_objs[] = { - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -2077, 2816, -660, /*behParam*/ DIALOG_081), - MACRO_OBJECT(/*preset*/ macro_bobomb_buddy_opens_cannon, /*yaw*/ 0, /*pos*/ -2, 2944, 3583), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ -2057, 2800, -500), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 1500, 1741, 2191), - MACRO_OBJECT(/*preset*/ macro_blue_coin_switch, /*yaw*/ 0, /*pos*/ 500, 384, 250), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1124, 400, -218), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1124, 400, 830), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 832, 400, 1194), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1124, 400, 282), - MACRO_OBJECT(/*preset*/ macro_box_star_1, /*yaw*/ 0, /*pos*/ -2200, 2600, 3500), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -1360, 3880, -1340, /*behParam*/ 2), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ 640, 700, 3720, /*behParam*/ 2), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -2100, 2400, -500, /*behParam*/ 2), - MACRO_OBJECT(/*preset*/ macro_heave_ho, /*yaw*/ 0, /*pos*/ -2656, 2300, -1352), - MACRO_OBJECT(/*preset*/ macro_heave_ho, /*yaw*/ 0, /*pos*/ -2909, 1140, 442), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ -2688, 3328, 3198, /*behParam*/ 0x40), - MACRO_OBJECT(/*preset*/ macro_pushable_metal_box, /*yaw*/ 0, /*pos*/ -2200, 384, 1145), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -1129, 3857, 1404), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -882, 4018, 1164), - MACRO_OBJECT(/*preset*/ macro_chuckya, /*yaw*/ 0, /*pos*/ -2963, 3840, -3063), - MACRO_OBJECT(/*preset*/ macro_heave_ho, /*yaw*/ 0, /*pos*/ -3040, 384, 1840), - MACRO_OBJECT(/*preset*/ macro_pushable_metal_box, /*yaw*/ 0, /*pos*/ -1843, 2304, -3694), - MACRO_OBJECT(/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ 943, 3830, -1779), - MACRO_OBJECT(/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ -2200, 384, 1145), - MACRO_OBJECT(/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ -2075, 3000, -524), - MACRO_OBJECT(/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ -3760, 650, 4120), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -827, 3880, -827, /*behParam*/ 2), - MACRO_OBJECT(/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ 1360, 205, -1384), - MACRO_OBJECT(/*preset*/ macro_floor_switch_hidden_objects, /*yaw*/ 0, /*pos*/ 920, 2300, -840), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 470, 2300, -1310), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 470, 2500, -1510), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 470, 2700, -1710), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 470, 2900, -1910), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 470, 3100, -2110), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ 3140, 1300, 2040), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -20, 400, 1520), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -1780, 1160, -40), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -2280, 2320, -2280), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ 1240, 2340, -3300), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -2240, 2320, 3820), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -220, 3860, 60), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -240, 400, -440), - MACRO_OBJECT(/*preset*/ macro_breakable_box_three_coins, /*yaw*/ 0, /*pos*/ 4509, 0, 3069), - MACRO_OBJECT(/*preset*/ macro_breakable_box_three_coins, /*yaw*/ 0, /*pos*/ 4509, 0, 2873), - MACRO_OBJECT(/*preset*/ macro_pushable_metal_box, /*yaw*/ 0, /*pos*/ -3689, 0, 3205), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 470, 3100, -2310), - MACRO_OBJECT(/*preset*/ macro_breakable_box_giant, /*yaw*/ 0, /*pos*/ -3093, 300, 3300), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -1500, 2360, 3120, /*behParam*/ 2), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 420, 400, 1504), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -12, 400, 1808), - MACRO_OBJECT(/*preset*/ macro_box_ten_coins, /*yaw*/ 0, /*pos*/ -2075, 3050, -524), - MACRO_OBJECT(/*preset*/ macro_box_ten_coins, /*yaw*/ 0, /*pos*/ 943, 3880, -1779), - MACRO_OBJECT(/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ -3689, 0, 3205), - MACRO_OBJECT(/*preset*/ macro_breakable_box_three_coins, /*yaw*/ 0, /*pos*/ 4500, 0, 1240), - MACRO_OBJECT(/*preset*/ macro_box_three_coins, /*yaw*/ 0, /*pos*/ -2200, 3060, -3700), - MACRO_OBJECT(/*preset*/ macro_box_ten_coins, /*yaw*/ 0, /*pos*/ -3760, 700, 4120), - MACRO_OBJECT(/*preset*/ macro_box_three_coins, /*yaw*/ 0, /*pos*/ 3388, 1600, 1155), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 740, 3072, -3560), - MACRO_OBJECT(/*preset*/ macro_box_star_2, /*yaw*/ 0, /*pos*/ 1550, 4350, 100), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 740, 3060, -3680, /*behParam*/ DIALOG_053), - MACRO_OBJECT(/*preset*/ macro_breakable_box_three_coins, /*yaw*/ 0, /*pos*/ 4500, 0, 1040), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -2077, 2816, -660, /*bhvParam*/ DIALOG_081), + MACRO_OBJECT (/*preset*/ macro_bobomb_buddy_opens_cannon_1, /*yaw*/ 0, /*pos*/ -2, 2944, 3583), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ -2057, 2800, -500), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 1500, 1741, 2191), + MACRO_OBJECT (/*preset*/ macro_blue_coin_switch, /*yaw*/ 0, /*pos*/ 500, 384, 250), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1124, 400, -218), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1124, 400, 830), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 832, 400, 1194), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 1124, 400, 282), + MACRO_OBJECT (/*preset*/ macro_box_star_act_1, /*yaw*/ 0, /*pos*/ -2200, 2600, 3500), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -1360, 3880, -1340, /*bhvParam*/ AMP_BP_ROT_RADIUS_400), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ 640, 700, 3720, /*bhvParam*/ AMP_BP_ROT_RADIUS_400), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -2100, 2400, -500, /*bhvParam*/ AMP_BP_ROT_RADIUS_400), + MACRO_OBJECT (/*preset*/ macro_heave_ho, /*yaw*/ 0, /*pos*/ -2656, 2300, -1352), + MACRO_OBJECT (/*preset*/ macro_heave_ho, /*yaw*/ 0, /*pos*/ -2909, 1140, 442), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ -2688, 3328, 3198, /*bhvParam*/ 0x40), + MACRO_OBJECT (/*preset*/ macro_pushable_metal_box, /*yaw*/ 0, /*pos*/ -2200, 384, 1145), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -1129, 3857, 1404), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -882, 4018, 1164), + MACRO_OBJECT (/*preset*/ macro_chuckya, /*yaw*/ 0, /*pos*/ -2963, 3840, -3063), + MACRO_OBJECT (/*preset*/ macro_heave_ho, /*yaw*/ 0, /*pos*/ -3040, 384, 1840), + MACRO_OBJECT (/*preset*/ macro_pushable_metal_box, /*yaw*/ 0, /*pos*/ -1843, 2304, -3694), + MACRO_OBJECT (/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ 943, 3830, -1779), + MACRO_OBJECT (/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ -2200, 384, 1145), + MACRO_OBJECT (/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ -2075, 3000, -524), + MACRO_OBJECT (/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ -3760, 650, 4120), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -827, 3880, -827, /*bhvParam*/ AMP_BP_ROT_RADIUS_400), + MACRO_OBJECT (/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ 1360, 205, -1384), + MACRO_OBJECT (/*preset*/ macro_floor_switch_hidden_objects, /*yaw*/ 0, /*pos*/ 920, 2300, -840), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 470, 2300, -1310), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 470, 2500, -1510), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 470, 2700, -1710), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 470, 2900, -1910), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 470, 3100, -2110), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ 3140, 1300, 2040), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -20, 400, 1520), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -1780, 1160, -40), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -2280, 2320, -2280), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ 1240, 2340, -3300), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -2240, 2320, 3820), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -220, 3860, 60), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -240, 400, -440), + MACRO_OBJECT (/*preset*/ macro_breakable_box_three_coins, /*yaw*/ 0, /*pos*/ 4509, 0, 3069), + MACRO_OBJECT (/*preset*/ macro_breakable_box_three_coins, /*yaw*/ 0, /*pos*/ 4509, 0, 2873), + MACRO_OBJECT (/*preset*/ macro_pushable_metal_box, /*yaw*/ 0, /*pos*/ -3689, 0, 3205), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 470, 3100, -2310), + MACRO_OBJECT (/*preset*/ macro_breakable_box_giant, /*yaw*/ 0, /*pos*/ -3093, 300, 3300), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_circling_amp, /*yaw*/ 0, /*pos*/ -1500, 2360, 3120, /*bhvParam*/ AMP_BP_ROT_RADIUS_400), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ 420, 400, 1504), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -12, 400, 1808), + MACRO_OBJECT (/*preset*/ macro_box_ten_coins, /*yaw*/ 0, /*pos*/ -2075, 3050, -524), + MACRO_OBJECT (/*preset*/ macro_box_ten_coins, /*yaw*/ 0, /*pos*/ 943, 3880, -1779), + MACRO_OBJECT (/*preset*/ macro_hidden_star_trigger, /*yaw*/ 0, /*pos*/ -3689, 0, 3205), + MACRO_OBJECT (/*preset*/ macro_breakable_box_three_coins, /*yaw*/ 0, /*pos*/ 4500, 0, 1240), + MACRO_OBJECT (/*preset*/ macro_box_three_coins, /*yaw*/ 0, /*pos*/ -2200, 3060, -3700), + MACRO_OBJECT (/*preset*/ macro_box_ten_coins, /*yaw*/ 0, /*pos*/ -3760, 700, 4120), + MACRO_OBJECT (/*preset*/ macro_box_three_coins, /*yaw*/ 0, /*pos*/ 3388, 1600, 1155), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 740, 3072, -3560), + MACRO_OBJECT (/*preset*/ macro_box_star_act_2, /*yaw*/ 0, /*pos*/ 1550, 4350, 100), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 740, 3060, -3680, /*bhvParam*/ DIALOG_053), + MACRO_OBJECT (/*preset*/ macro_breakable_box_three_coins, /*yaw*/ 0, /*pos*/ 4500, 0, 1040), MACRO_OBJECT_END(), }; diff --git a/levels/wdw/areas/2/geo.inc.c b/levels/wdw/areas/2/geo.inc.c index 352d1249..882338f7 100644 --- a/levels/wdw/areas/2/geo.inc.c +++ b/levels/wdw/areas/2/geo.inc.c @@ -1,30 +1,30 @@ // 0x0E000724 const GeoLayout wdw_geo_000724[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND_COLOR(0x0001), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(1, 0, 2000, 6000, -4352, 0, -4352, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wdw_seg7_dl_07011E48), - GEO_DISPLAY_LIST(LAYER_ALPHA, wdw_seg7_dl_07012258), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, wdw_seg7_dl_07012908), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x1102, geo_movtex_draw_water_regions), - GEO_RENDER_OBJ(), - GEO_ASM( 0, geo_envfx_main), + GEO_BACKGROUND_COLOR(0x0001), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(1, 0, 2000, 6000, -4352, 0, -4352, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wdw_seg7_dl_07011E48), + GEO_DISPLAY_LIST(LAYER_ALPHA, wdw_seg7_dl_07012258), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, wdw_seg7_dl_07012908), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x1102, geo_movtex_draw_water_regions), + GEO_RENDER_OBJ(), + GEO_ASM( 0, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wdw/areas/2/macro.inc.c b/levels/wdw/areas/2/macro.inc.c index f2619ad9..edfb7f0f 100644 --- a/levels/wdw/areas/2/macro.inc.c +++ b/levels/wdw/areas/2/macro.inc.c @@ -1,45 +1,45 @@ // 0x07018224 - 0x070183C0 const MacroObject wdw_seg7_area_2_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -3720, -1131, 520), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -2930, -850, 2560), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 100, -1771, -1500), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1820, -1387, 1020), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -370, -1795, -180), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -1180, -1795, -180), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -780, -2155, 2860), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -780, -1020, 3400), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal_flying, /*yaw*/ 0, /*pos*/ -772, -2320, 772), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -524, -2560, 524), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -1034, -2560, 524), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -1034, -2560, 1034), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -524, -2560, 1034), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ -772, -2180, 772, /*behParam*/ 4), - MACRO_OBJECT(/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ -870, -300, 870), - MACRO_OBJECT(/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ -670, -300, 870), - MACRO_OBJECT(/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ -670, -300, 670), - MACRO_OBJECT(/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ -870, -300, 670), - MACRO_OBJECT(/*preset*/ macro_box_metal_cap, /*yaw*/ 0, /*pos*/ -770, 80, 770), - MACRO_OBJECT(/*preset*/ macro_box_vanish_cap, /*yaw*/ 0, /*pos*/ -1779, -2240, 3644), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 1089, -1279, 968), - MACRO_OBJECT(/*preset*/ macro_skeeter, /*yaw*/ 0, /*pos*/ -1240, -520, 540), - MACRO_OBJECT(/*preset*/ macro_skeeter, /*yaw*/ 0, /*pos*/ -260, -620, 1560), - MACRO_OBJECT(/*preset*/ macro_floor_switch_hidden_objects, /*yaw*/ 0, /*pos*/ -1520, -2516, -1940), - MACRO_OBJECT(/*preset*/ macro_hidden_box, /*yaw*/ 0, /*pos*/ 2200, -2559, 3240), - MACRO_OBJECT(/*preset*/ macro_box_vanish_cap, /*yaw*/ 0, /*pos*/ 1300, -2260, 3740), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -2060, -1580, -1260), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ 2240, -1420, 2140), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ 2280, -1400, -100), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -2280, -2520, -740), - MACRO_OBJECT(/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ 720, -2520, -740), - MACRO_OBJECT(/*preset*/ macro_breakable_box_giant, /*yaw*/ 0, /*pos*/ -2930, -1000, 2560), - MACRO_OBJECT(/*preset*/ macro_breakable_box_giant, /*yaw*/ 0, /*pos*/ -3690, -1151, 520), - MACRO_OBJECT(/*preset*/ macro_breakable_box_giant, /*yaw*/ 0, /*pos*/ -1180, -1945, -180), - MACRO_OBJECT(/*preset*/ macro_breakable_box_giant, /*yaw*/ 0, /*pos*/ -370, -1945, -180), - MACRO_OBJECT(/*preset*/ macro_breakable_box_giant, /*yaw*/ 0, /*pos*/ 100, -1791, -1500), - MACRO_OBJECT(/*preset*/ macro_breakable_box_giant, /*yaw*/ 0, /*pos*/ 1820, -1407, 1020), - MACRO_OBJECT(/*preset*/ macro_breakable_box_giant, /*yaw*/ 0, /*pos*/ -780, -2175, 2810), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 100, -1791, -2100), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -770, -320, 2820), - MACRO_OBJECT(/*preset*/ macro_box_1up_running_away, /*yaw*/ 0, /*pos*/ 1655, -2160, -1293), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -3720, -1131, 520), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -2930, -850, 2560), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 100, -1771, -1500), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1820, -1387, 1020), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -370, -1795, -180), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -1180, -1795, -180), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -780, -2155, 2860), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -780, -1020, 3400), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal_flying, /*yaw*/ 0, /*pos*/ -772, -2320, 772), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -524, -2560, 524), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -1034, -2560, 524), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -1034, -2560, 1034), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -524, -2560, 1034), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ -772, -2180, 772, /*bhvParam*/ 4), + MACRO_OBJECT (/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ -870, -300, 870), + MACRO_OBJECT (/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ -670, -300, 870), + MACRO_OBJECT (/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ -670, -300, 670), + MACRO_OBJECT (/*preset*/ macro_breakable_box_no_coins, /*yaw*/ 0, /*pos*/ -870, -300, 670), + MACRO_OBJECT (/*preset*/ macro_box_metal_cap, /*yaw*/ 0, /*pos*/ -770, 80, 770), + MACRO_OBJECT (/*preset*/ macro_box_vanish_cap, /*yaw*/ 0, /*pos*/ -1779, -2240, 3644), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 1089, -1279, 968), + MACRO_OBJECT (/*preset*/ macro_skeeter, /*yaw*/ 0, /*pos*/ -1240, -520, 540), + MACRO_OBJECT (/*preset*/ macro_skeeter, /*yaw*/ 0, /*pos*/ -260, -620, 1560), + MACRO_OBJECT (/*preset*/ macro_floor_switch_hidden_objects, /*yaw*/ 0, /*pos*/ -1520, -2516, -1940), + MACRO_OBJECT (/*preset*/ macro_hidden_breakable_box, /*yaw*/ 0, /*pos*/ 2200, -2559, 3240), + MACRO_OBJECT (/*preset*/ macro_box_vanish_cap, /*yaw*/ 0, /*pos*/ 1300, -2260, 3740), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -2060, -1580, -1260), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ 2240, -1420, 2140), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ 2280, -1400, -100), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ -2280, -2520, -740), + MACRO_OBJECT (/*preset*/ macro_fire_spitter, /*yaw*/ 0, /*pos*/ 720, -2520, -740), + MACRO_OBJECT (/*preset*/ macro_breakable_box_giant, /*yaw*/ 0, /*pos*/ -2930, -1000, 2560), + MACRO_OBJECT (/*preset*/ macro_breakable_box_giant, /*yaw*/ 0, /*pos*/ -3690, -1151, 520), + MACRO_OBJECT (/*preset*/ macro_breakable_box_giant, /*yaw*/ 0, /*pos*/ -1180, -1945, -180), + MACRO_OBJECT (/*preset*/ macro_breakable_box_giant, /*yaw*/ 0, /*pos*/ -370, -1945, -180), + MACRO_OBJECT (/*preset*/ macro_breakable_box_giant, /*yaw*/ 0, /*pos*/ 100, -1791, -1500), + MACRO_OBJECT (/*preset*/ macro_breakable_box_giant, /*yaw*/ 0, /*pos*/ 1820, -1407, 1020), + MACRO_OBJECT (/*preset*/ macro_breakable_box_giant, /*yaw*/ 0, /*pos*/ -780, -2175, 2810), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 100, -1791, -2100), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ -770, -320, 2820), + MACRO_OBJECT (/*preset*/ macro_box_1up_running_away, /*yaw*/ 0, /*pos*/ 1655, -2160, -1293), MACRO_OBJECT_END(), }; diff --git a/levels/wdw/arrow_lift/geo.inc.c b/levels/wdw/arrow_lift/geo.inc.c index de233a88..c320e014 100644 --- a/levels/wdw/arrow_lift/geo.inc.c +++ b/levels/wdw/arrow_lift/geo.inc.c @@ -1,11 +1,11 @@ // 0x0E000598 const GeoLayout wdw_geo_000598[] = { - GEO_CULLING_RADIUS(350), - GEO_OPEN_NODE(), - GEO_SHADOW(SHADOW_SQUARE_TOGGLABLE, 0x96, 110), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wdw_seg7_dl_07012E88), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(350), + GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_SQUARE_TOGGLABLE, 0x96, 110), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wdw_seg7_dl_07012E88), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wdw/express_elevator/geo.inc.c b/levels/wdw/express_elevator/geo.inc.c index 80ba3e40..24c5807d 100644 --- a/levels/wdw/express_elevator/geo.inc.c +++ b/levels/wdw/express_elevator/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000610 const GeoLayout wdw_geo_000610[] = { - GEO_CULLING_RADIUS(800), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wdw_seg7_dl_07013B70), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(800), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wdw_seg7_dl_07013B70), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wdw/hidden_platform/geo.inc.c b/levels/wdw/hidden_platform/geo.inc.c index b46309a4..ffddd926 100644 --- a/levels/wdw/hidden_platform/geo.inc.c +++ b/levels/wdw/hidden_platform/geo.inc.c @@ -1,11 +1,11 @@ // 0x0E0005E8 const GeoLayout wdw_geo_0005E8[] = { - GEO_CULLING_RADIUS(420), - GEO_OPEN_NODE(), - GEO_SHADOW(SHADOW_SQUARE_TOGGLABLE, 0x96, 240), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wdw_seg7_dl_07013490), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(420), + GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_SQUARE_TOGGLABLE, 0x96, 240), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wdw_seg7_dl_07013490), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wdw/level.yaml b/levels/wdw/level.yaml index e8cd566b..67193e81 100644 --- a/levels/wdw/level.yaml +++ b/levels/wdw/level.yaml @@ -1,6 +1,6 @@ -# Wet Dry World +# Wet-Dry World short-name: wdw -full-name: Wet Dry World +full-name: Wet-Dry World texture-file: ["/texture.inc.c"] area-count: 2 objects: [arrow_lift, double_arrows, express_elevator, hidden_platform, rectangular_floating_platform, rotating_platform, square_floating_platform, water_level_diamond] diff --git a/levels/wdw/leveldata.c b/levels/wdw/leveldata.c index 6eba89e8..ecedd3c5 100644 --- a/levels/wdw/leveldata.c +++ b/levels/wdw/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "dialog_ids.h" diff --git a/levels/wdw/rectangular_floating_platform/geo.inc.c b/levels/wdw/rectangular_floating_platform/geo.inc.c index 374faa7d..e62a182e 100644 --- a/levels/wdw/rectangular_floating_platform/geo.inc.c +++ b/levels/wdw/rectangular_floating_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000628 const GeoLayout wdw_geo_000628[] = { - GEO_CULLING_RADIUS(900), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wdw_seg7_dl_07013E40), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(900), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wdw_seg7_dl_07013E40), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wdw/rotating_platform/geo.inc.c b/levels/wdw/rotating_platform/geo.inc.c index c6298d14..fd20a1c4 100644 --- a/levels/wdw/rotating_platform/geo.inc.c +++ b/levels/wdw/rotating_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000640 const GeoLayout wdw_geo_000640[] = { - GEO_CULLING_RADIUS(450), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wdw_seg7_dl_070140E0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(450), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wdw_seg7_dl_070140E0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wdw/script.c b/levels/wdw/script.c index 0c4b5980..6d71cf27 100644 --- a/levels/wdw/script.c +++ b/levels/wdw/script.c @@ -16,70 +16,70 @@ #include "levels/wdw/header.h" static const LevelScript script_func_local_1[] = { - OBJECT(/*model*/ MODEL_WDW_SQUARE_FLOATING_PLATFORM, /*pos*/ 3390, 0, 384, /*angle*/ 0, 180, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWdwSquareFloatingPlatform), - OBJECT(/*model*/ MODEL_WDW_SQUARE_FLOATING_PLATFORM, /*pos*/ -767, 384, 3584, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWdwSquareFloatingPlatform), - OBJECT(/*model*/ MODEL_WDW_SQUARE_FLOATING_PLATFORM, /*pos*/ -767, 384, 1536, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWdwSquareFloatingPlatform), - OBJECT(/*model*/ MODEL_WDW_SQUARE_FLOATING_PLATFORM, /*pos*/ -767, 2304, -1279, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWdwSquareFloatingPlatform), - OBJECT(/*model*/ MODEL_WDW_ARROW_LIFT, /*pos*/ -578, 2177, 3009, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvArrowLift), - OBJECT(/*model*/ MODEL_WDW_ARROW_LIFT, /*pos*/ -1474, 2177, 3393, /*angle*/ 0, 270, 0, /*behParam*/ 0x00000000, /*beh*/ bhvArrowLift), - OBJECT(/*model*/ MODEL_WDW_ARROW_LIFT, /*pos*/ -1602, 2177, 3009, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvArrowLift), - OBJECT(/*model*/ MODEL_WDW_ARROW_LIFT, /*pos*/ -1090, 2177, 3521, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvArrowLift), - OBJECT(/*model*/ MODEL_WDW_ARROW_LIFT, /*pos*/ -962, 2177, 3137, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvArrowLift), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvInitializeChangingWaterLevel), - OBJECT(/*model*/ MODEL_WDW_WATER_LEVEL_DIAMOND, /*pos*/ 1920, 2560, -3583, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWaterLevelDiamond), - OBJECT(/*model*/ MODEL_WDW_WATER_LEVEL_DIAMOND, /*pos*/ 3328, 256, 2918, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWaterLevelDiamond), - OBJECT(/*model*/ MODEL_WDW_WATER_LEVEL_DIAMOND, /*pos*/ 2048, 1792, 2176, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWaterLevelDiamond), - OBJECT(/*model*/ MODEL_WDW_WATER_LEVEL_DIAMOND, /*pos*/ 640, 1024, 3712, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWaterLevelDiamond), - OBJECT(/*model*/ MODEL_WDW_WATER_LEVEL_DIAMOND, /*pos*/ 1810, 40, -3118, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWaterLevelDiamond), - OBJECT(/*model*/ MODEL_PURPLE_SWITCH, /*pos*/ 3360, 1280, 3420, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFloorSwitchHiddenObjects), - OBJECT(/*model*/ MODEL_WDW_HIDDEN_PLATFORM, /*pos*/ 2239, 1126, 3391, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvHiddenObject), - OBJECT(/*model*/ MODEL_WDW_HIDDEN_PLATFORM, /*pos*/ 1215, 1357, 2751, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvHiddenObject), - OBJECT(/*model*/ MODEL_WDW_HIDDEN_PLATFORM, /*pos*/ 1215, 1229, 3391, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvHiddenObject), - OBJECT(/*model*/ MODEL_WDW_HIDDEN_PLATFORM, /*pos*/ 1599, 1101, 3391, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvHiddenObject), - OBJECT(/*model*/ MODEL_WDW_HIDDEN_PLATFORM, /*pos*/ 2879, 1152, 3391, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvHiddenObject), - OBJECT(/*model*/ MODEL_WDW_EXPRESS_ELEVATOR, /*pos*/ 1024, 3277, -2112, /*angle*/ 0, 0, 0, /*behParam*/ 0x00320000, /*beh*/ bhvWdwExpressElevatorPlatform), - OBJECT(/*model*/ MODEL_WDW_EXPRESS_ELEVATOR, /*pos*/ 1024, 3277, -1663, /*angle*/ 0, 0, 0, /*behParam*/ 0x00320000, /*beh*/ bhvWdwExpressElevator), - OBJECT(/*model*/ MODEL_WDW_RECTANGULAR_FLOATING_PLATFORM, /*pos*/ -767, 1152, 128, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWdwRectangularFloatingPlatform), - OBJECT(/*model*/ MODEL_WDW_RECTANGULAR_FLOATING_PLATFORM, /*pos*/ -767, 2304, -2687, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWdwRectangularFloatingPlatform), - OBJECT(/*model*/ MODEL_WDW_ROTATING_PLATFORM, /*pos*/ 734, 3840, 84, /*angle*/ 0, 0, 0, /*behParam*/ 0x46010000, /*beh*/ bhvRotatingPlatform), - OBJECT(/*model*/ MODEL_SKEETER, /*pos*/ 2956, 288, -468, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSkeeter), - OBJECT(/*model*/ MODEL_SKEETER, /*pos*/ 184, 384, 621, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSkeeter), + OBJECT(/*model*/ MODEL_WDW_SQUARE_FLOATING_PLATFORM, /*pos*/ 3390, 0, 384, /*angle*/ 0, 180, 0, /*bhvParam*/ 0, /*bhv*/ bhvWDWSquareFloatingPlatform), + OBJECT(/*model*/ MODEL_WDW_SQUARE_FLOATING_PLATFORM, /*pos*/ -767, 384, 3584, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvWDWSquareFloatingPlatform), + OBJECT(/*model*/ MODEL_WDW_SQUARE_FLOATING_PLATFORM, /*pos*/ -767, 384, 1536, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvWDWSquareFloatingPlatform), + OBJECT(/*model*/ MODEL_WDW_SQUARE_FLOATING_PLATFORM, /*pos*/ -767, 2304, -1279, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvWDWSquareFloatingPlatform), + OBJECT(/*model*/ MODEL_WDW_ARROW_LIFT, /*pos*/ -578, 2177, 3009, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvArrowLift), + OBJECT(/*model*/ MODEL_WDW_ARROW_LIFT, /*pos*/ -1474, 2177, 3393, /*angle*/ 0, 270, 0, /*bhvParam*/ 0, /*bhv*/ bhvArrowLift), + OBJECT(/*model*/ MODEL_WDW_ARROW_LIFT, /*pos*/ -1602, 2177, 3009, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvArrowLift), + OBJECT(/*model*/ MODEL_WDW_ARROW_LIFT, /*pos*/ -1090, 2177, 3521, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvArrowLift), + OBJECT(/*model*/ MODEL_WDW_ARROW_LIFT, /*pos*/ -962, 2177, 3137, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvArrowLift), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvInitializeChangingWaterLevel), + OBJECT(/*model*/ MODEL_WDW_WATER_LEVEL_DIAMOND, /*pos*/ 1920, 2560, -3583, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvWaterLevelDiamond), + OBJECT(/*model*/ MODEL_WDW_WATER_LEVEL_DIAMOND, /*pos*/ 3328, 256, 2918, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvWaterLevelDiamond), + OBJECT(/*model*/ MODEL_WDW_WATER_LEVEL_DIAMOND, /*pos*/ 2048, 1792, 2176, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvWaterLevelDiamond), + OBJECT(/*model*/ MODEL_WDW_WATER_LEVEL_DIAMOND, /*pos*/ 640, 1024, 3712, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvWaterLevelDiamond), + OBJECT(/*model*/ MODEL_WDW_WATER_LEVEL_DIAMOND, /*pos*/ 1810, 40, -3118, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvWaterLevelDiamond), + OBJECT(/*model*/ MODEL_PURPLE_SWITCH, /*pos*/ 3360, 1280, 3420, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvFloorSwitchHiddenObjects), + OBJECT(/*model*/ MODEL_WDW_HIDDEN_PLATFORM, /*pos*/ 2239, 1126, 3391, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(HIDDEN_OBJECT_BP_WDW_PLATFORM), /*bhv*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_WDW_HIDDEN_PLATFORM, /*pos*/ 1215, 1357, 2751, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(HIDDEN_OBJECT_BP_WDW_PLATFORM), /*bhv*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_WDW_HIDDEN_PLATFORM, /*pos*/ 1215, 1229, 3391, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(HIDDEN_OBJECT_BP_WDW_PLATFORM), /*bhv*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_WDW_HIDDEN_PLATFORM, /*pos*/ 1599, 1101, 3391, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(HIDDEN_OBJECT_BP_WDW_PLATFORM), /*bhv*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_WDW_HIDDEN_PLATFORM, /*pos*/ 2879, 1152, 3391, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(HIDDEN_OBJECT_BP_WDW_PLATFORM), /*bhv*/ bhvHiddenObject), + OBJECT(/*model*/ MODEL_WDW_EXPRESS_ELEVATOR, /*pos*/ 1024, 3277, -2112, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x32), /*bhv*/ bhvWDWExpressElevatorPlatform), + OBJECT(/*model*/ MODEL_WDW_EXPRESS_ELEVATOR, /*pos*/ 1024, 3277, -1663, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(0x32), /*bhv*/ bhvWDWExpressElevator), + OBJECT(/*model*/ MODEL_WDW_RECTANGULAR_FLOATING_PLATFORM, /*pos*/ -767, 1152, 128, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvWDWRectangularFloatingPlatform), + OBJECT(/*model*/ MODEL_WDW_RECTANGULAR_FLOATING_PLATFORM, /*pos*/ -767, 2304, -2687, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvWDWRectangularFloatingPlatform), + OBJECT(/*model*/ MODEL_WDW_ROTATING_PLATFORM, /*pos*/ 734, 3840, 84, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(0x46) | BPARAM2(ROTATING_PLATFORM_BP_WDW), /*bhv*/ bhvRotatingPlatform), + OBJECT(/*model*/ MODEL_SKEETER, /*pos*/ 2956, 288, -468, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvSkeeter), + OBJECT(/*model*/ MODEL_SKEETER, /*pos*/ 184, 384, 621, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvSkeeter), RETURN(), }; static const LevelScript script_func_local_2[] = { - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvInitializeChangingWaterLevel), - OBJECT(/*model*/ MODEL_WDW_WATER_LEVEL_DIAMOND, /*pos*/ -3583, -2508, -2047, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWaterLevelDiamond), - OBJECT(/*model*/ MODEL_WDW_WATER_LEVEL_DIAMOND, /*pos*/ -767, -127, 1792, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWaterLevelDiamond), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -768, -665, 3584, /*angle*/ 0, 0, 0, /*behParam*/ 0x005C0000, /*beh*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvInitializeChangingWaterLevel), + OBJECT(/*model*/ MODEL_WDW_WATER_LEVEL_DIAMOND, /*pos*/ -3583, -2508, -2047, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvWaterLevelDiamond), + OBJECT(/*model*/ MODEL_WDW_WATER_LEVEL_DIAMOND, /*pos*/ -767, -127, 1792, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvWaterLevelDiamond), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -768, -665, 3584, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(92), /*bhv*/ bhvPoleGrabbing), RETURN(), }; static const LevelScript script_func_local_3[] = { - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 3360, 1580, 2660, /*angle*/ 0, 0, 0, /*behParam*/ 0x02000000, /*beh*/ bhvHiddenStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 890, 3400, -2040, /*angle*/ 0, 0, 0, /*behParam*/ 0x03000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 3360, 1580, 2660, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_3), /*bhv*/ bhvHiddenStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 890, 3400, -2040, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_4), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), RETURN(), }; static const LevelScript script_func_local_4[] = { - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ -770, -1600, 3600, /*angle*/ 0, 0, 0, /*behParam*/ 0x04000000, /*beh*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 2180, -840, 3720, /*angle*/ 0, 0, 0, /*behParam*/ 0x05000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ -770, -1600, 3600, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_5), /*bhv*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 2180, -840, 3720, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_6), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), RETURN(), }; const LevelScript level_wdw_entry[] = { INIT_LEVEL(), - LOAD_MIO0( /*seg*/ 0x07, _wdw_segment_7SegmentRomStart, _wdw_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _wdw_segment_7SegmentRomStart, _wdw_segment_7SegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _grass_mio0SegmentRomStart, _grass_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0A, _wdw_skybox_mio0SegmentRomStart, _wdw_skybox_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x05, _group1_mio0SegmentRomStart, _group1_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0C, _group1_geoSegmentRomStart, _group1_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x06, _group13_mio0SegmentRomStart, _group13_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0D, _group13_geoSegmentRomStart, _group13_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0A, _wdw_skybox_mio0SegmentRomStart, _wdw_skybox_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x05, _group1_mio0SegmentRomStart, _group1_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0C, _group1_geoSegmentRomStart, _group1_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x06, _group13_mio0SegmentRomStart, _group13_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0D, _group13_geoSegmentRomStart, _group13_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_1), JUMP_LINK(script_func_global_2), JUMP_LINK(script_func_global_14), @@ -93,16 +93,16 @@ const LevelScript level_wdw_entry[] = { LOAD_MODEL_FROM_GEO(MODEL_WDW_ROTATING_PLATFORM, wdw_geo_000640), AREA(/*index*/ 1, wdw_geo_000658), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3395, 3580, 384, /*angle*/ 0, 180, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvSpinAirborneWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 818, 0, 3634, /*angle*/ 0, 45, 0, /*behParam*/ 0x000B0000, /*beh*/ bhvFadingWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2865, 3328, 3065, /*angle*/ 0, 0, 0, /*behParam*/ 0x000C0000, /*beh*/ bhvFadingWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_WDW, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0B, /*destLevel*/ LEVEL_WDW, /*destArea*/ 0x01, /*destNode*/ 0x0C, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0C, /*destLevel*/ LEVEL_WDW, /*destArea*/ 0x01, /*destNode*/ 0x0B, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3395, 3580, 384, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvSpinAirborneWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 818, 0, 3634, /*angle*/ 0, 45, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0B), /*bhv*/ bhvFadingWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2865, 3328, 3065, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0C), /*bhv*/ bhvFadingWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_WDW, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0B, /*destLevel*/ LEVEL_WDW, /*destArea*/ 1, /*destNode*/ WARP_NODE_0C, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0C, /*destLevel*/ LEVEL_WDW, /*destArea*/ 1, /*destNode*/ WARP_NODE_0B, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_3), JUMP_LINK(script_func_local_1), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x32, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x64, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_32, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_64, /*flags*/ WARP_NO_CHECKPOINT), INSTANT_WARP(/*index*/ 1, /*destArea*/ 2, /*displace*/ 0, 0, 0), TERRAIN(/*terrainData*/ wdw_seg7_area_1_collision), MACRO_OBJECTS(/*objList*/ wdw_seg7_area_1_macro_objs), @@ -113,8 +113,8 @@ const LevelScript level_wdw_entry[] = { AREA(/*index*/ 2, wdw_geo_000724), JUMP_LINK(script_func_local_4), JUMP_LINK(script_func_local_2), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x32, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x64, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_32, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_64, /*flags*/ WARP_NO_CHECKPOINT), INSTANT_WARP(/*index*/ 0, /*destArea*/ 1, /*displace*/ 0, 0, 0), TERRAIN(/*terrainData*/ wdw_seg7_area_2_collision), MACRO_OBJECTS(/*objList*/ wdw_seg7_area_2_macro_objs), diff --git a/levels/wdw/square_floating_platform/geo.inc.c b/levels/wdw/square_floating_platform/geo.inc.c index 749421de..ddad87af 100644 --- a/levels/wdw/square_floating_platform/geo.inc.c +++ b/levels/wdw/square_floating_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000580 const GeoLayout wdw_geo_000580[] = { - GEO_CULLING_RADIUS(550), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wdw_seg7_dl_07012B90), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(550), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wdw_seg7_dl_07012B90), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wdw/water_level_diamond/geo.inc.c b/levels/wdw/water_level_diamond/geo.inc.c index 286dc1e3..53240af0 100644 --- a/levels/wdw/water_level_diamond/geo.inc.c +++ b/levels/wdw/water_level_diamond/geo.inc.c @@ -1,11 +1,11 @@ // 0x0E0005C0 const GeoLayout wdw_geo_0005C0[] = { - GEO_CULLING_RADIUS(200), - GEO_OPEN_NODE(), - GEO_SHADOW(SHADOW_SQUARE_SCALABLE, 0x96, 90), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, wdw_seg7_dl_070131B8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(200), + GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_SQUARE_SCALABLE, 0x96, 90), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, wdw_seg7_dl_070131B8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/areas/1/10/geo.inc.c b/levels/wf/areas/1/10/geo.inc.c index 41116411..9270d767 100644 --- a/levels/wf/areas/1/10/geo.inc.c +++ b/levels/wf/areas/1/10/geo.inc.c @@ -1,15 +1,15 @@ // 0x0E0008A8 const GeoLayout wf_geo_0008A8[] = { - GEO_CULLING_RADIUS(2700), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2048, 5000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_070087B0), - GEO_CLOSE_NODE(), - GEO_RENDER_RANGE(5000, 32767), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_07008FE8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2700), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2048, 5000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_070087B0), + GEO_CLOSE_NODE(), + GEO_RENDER_RANGE(5000, 32767), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_07008FE8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/areas/1/11/geo.inc.c b/levels/wf/areas/1/11/geo.inc.c index 0cd0c73c..c20a3b55 100644 --- a/levels/wf/areas/1/11/geo.inc.c +++ b/levels/wf/areas/1/11/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0008E8 const GeoLayout wf_geo_0008E8[] = { - GEO_CULLING_RADIUS(400), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_07009278), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(400), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_07009278), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/areas/1/12/geo.inc.c b/levels/wf/areas/1/12/geo.inc.c index 52327607..d96d1e1a 100644 --- a/levels/wf/areas/1/12/geo.inc.c +++ b/levels/wf/areas/1/12/geo.inc.c @@ -1,15 +1,15 @@ // 0x0E000900 const GeoLayout wf_geo_000900[] = { - GEO_CULLING_RADIUS(1600), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2048, 5000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_07009780), - GEO_CLOSE_NODE(), - GEO_RENDER_RANGE(5000, 32767), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_07009890), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1600), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2048, 5000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_07009780), + GEO_CLOSE_NODE(), + GEO_RENDER_RANGE(5000, 32767), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_07009890), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/areas/1/13/geo.inc.c b/levels/wf/areas/1/13/geo.inc.c index 0bb17d18..1af86555 100644 --- a/levels/wf/areas/1/13/geo.inc.c +++ b/levels/wf/areas/1/13/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000940 const GeoLayout wf_geo_000940[] = { - GEO_CULLING_RADIUS(800), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_07009DB0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(800), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_07009DB0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/areas/1/14/geo.inc.c b/levels/wf/areas/1/14/geo.inc.c index 9fa12d44..cea2c579 100644 --- a/levels/wf/areas/1/14/geo.inc.c +++ b/levels/wf/areas/1/14/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000AE0 const GeoLayout wf_geo_000AE0[] = { - GEO_CULLING_RADIUS(2000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700A170), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700A170), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/areas/1/15/geo.inc.c b/levels/wf/areas/1/15/geo.inc.c index 6e73e6a8..39efeda1 100644 --- a/levels/wf/areas/1/15/geo.inc.c +++ b/levels/wf/areas/1/15/geo.inc.c @@ -1,16 +1,16 @@ // 0x0E000958 const GeoLayout wf_geo_000958[] = { - GEO_CULLING_RADIUS(2000), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2000, 8000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700ABA0), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, wf_seg7_dl_0700AFB8), - GEO_CLOSE_NODE(), - GEO_RENDER_RANGE(8000, 20000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700AEC8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2000), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2000, 8000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700ABA0), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, wf_seg7_dl_0700AFB8), + GEO_CLOSE_NODE(), + GEO_RENDER_RANGE(8000, 20000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700AEC8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/areas/1/16/geo.inc.c b/levels/wf/areas/1/16/geo.inc.c index 1f4289c6..a1d47f92 100644 --- a/levels/wf/areas/1/16/geo.inc.c +++ b/levels/wf/areas/1/16/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0009A0 const GeoLayout wf_geo_0009A0[] = { - GEO_CULLING_RADIUS(3000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700BA28), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(3000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700BA28), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/areas/1/17/geo.inc.c b/levels/wf/areas/1/17/geo.inc.c index 2db508a7..0d87429c 100644 --- a/levels/wf/areas/1/17/geo.inc.c +++ b/levels/wf/areas/1/17/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0009B8 const GeoLayout wf_geo_0009B8[] = { - GEO_CULLING_RADIUS(1100), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700BF50), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1100), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700BF50), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/areas/1/18/geo.inc.c b/levels/wf/areas/1/18/geo.inc.c index ac1c6746..2bab8107 100644 --- a/levels/wf/areas/1/18/geo.inc.c +++ b/levels/wf/areas/1/18/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0009D0 const GeoLayout wf_geo_0009D0[] = { - GEO_CULLING_RADIUS(1200), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700D028), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1200), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700D028), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/areas/1/19/geo.inc.c b/levels/wf/areas/1/19/geo.inc.c index a0bde516..10a02097 100644 --- a/levels/wf/areas/1/19/geo.inc.c +++ b/levels/wf/areas/1/19/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E0009E8 const GeoLayout wf_geo_0009E8[] = { - GEO_CULLING_RADIUS(2700), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700D300), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(2700), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700D300), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/areas/1/5/geo.inc.c b/levels/wf/areas/1/5/geo.inc.c index 388c6b1e..1e1975f4 100644 --- a/levels/wf/areas/1/5/geo.inc.c +++ b/levels/wf/areas/1/5/geo.inc.c @@ -1,15 +1,15 @@ // 0x0E0007E0 const GeoLayout wf_geo_0007E0[] = { - GEO_CULLING_RADIUS(600), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2048, 5000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_07005DD8), - GEO_CLOSE_NODE(), - GEO_RENDER_RANGE(5000, 32767), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_07005EE8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(600), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2048, 5000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_07005DD8), + GEO_CLOSE_NODE(), + GEO_RENDER_RANGE(5000, 32767), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_07005EE8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/areas/1/6/geo.inc.c b/levels/wf/areas/1/6/geo.inc.c index fe9c2133..0ab1b064 100644 --- a/levels/wf/areas/1/6/geo.inc.c +++ b/levels/wf/areas/1/6/geo.inc.c @@ -1,15 +1,15 @@ // 0x0E000820 const GeoLayout wf_geo_000820[] = { - GEO_CULLING_RADIUS(1800), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2048, 5000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_070064E8), - GEO_CLOSE_NODE(), - GEO_RENDER_RANGE(5000, 32767), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_070065F8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1800), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2048, 5000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_070064E8), + GEO_CLOSE_NODE(), + GEO_RENDER_RANGE(5000, 32767), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_070065F8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/areas/1/7/geo.inc.c b/levels/wf/areas/1/7/geo.inc.c index 4c06e63b..5fe433af 100644 --- a/levels/wf/areas/1/7/geo.inc.c +++ b/levels/wf/areas/1/7/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000860 const GeoLayout wf_geo_000860[] = { - GEO_CULLING_RADIUS(1400), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_07006820), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1400), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_07006820), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/areas/1/8/geo.inc.c b/levels/wf/areas/1/8/geo.inc.c index d3b05de9..5cb7b18a 100644 --- a/levels/wf/areas/1/8/geo.inc.c +++ b/levels/wf/areas/1/8/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000878 const GeoLayout wf_geo_000878[] = { - GEO_CULLING_RADIUS(9000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_ALPHA, wf_seg7_dl_07007220), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(9000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, wf_seg7_dl_07007220), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/areas/1/9/geo.inc.c b/levels/wf/areas/1/9/geo.inc.c index 74a12515..2768146e 100644 --- a/levels/wf/areas/1/9/geo.inc.c +++ b/levels/wf/areas/1/9/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000890 const GeoLayout wf_geo_000890[] = { - GEO_CULLING_RADIUS(1000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_07007518), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_07007518), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/areas/1/geo.inc.c b/levels/wf/areas/1/geo.inc.c index b1c794ab..d0df37fd 100644 --- a/levels/wf/areas/1/geo.inc.c +++ b/levels/wf/areas/1/geo.inc.c @@ -1,35 +1,35 @@ // 0x0E000BF8 const GeoLayout wf_geo_000BF8[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND(BACKGROUND_BELOW_CLOUDS, geo_skybox_main), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(1, 0, 2000, 6000, 0, 2000, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_070050C8), - GEO_DISPLAY_LIST(LAYER_OPAQUE_DECAL, wf_seg7_dl_070052B8), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, wf_seg7_dl_07005538), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT, wf_seg7_dl_07005690), - GEO_RENDER_OBJ(), - GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x2401, geo_movtex_draw_water_regions), - GEO_ASM( 0, geo_envfx_main), + GEO_BACKGROUND(BACKGROUND_BELOW_CLOUDS, geo_skybox_main), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_cannon_circle_base), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(1, 0, 2000, 6000, 0, 2000, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_070050C8), + GEO_DISPLAY_LIST(LAYER_OPAQUE_DECAL, wf_seg7_dl_070052B8), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, wf_seg7_dl_07005538), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, wf_seg7_dl_07005690), + GEO_RENDER_OBJ(), + GEO_ASM( 0, geo_movtex_pause_control), + GEO_ASM(0x2401, geo_movtex_draw_water_regions), + GEO_ASM( 0, geo_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_cannon_circle_base), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/areas/1/macro.inc.c b/levels/wf/areas/1/macro.inc.c index ee3d2c05..7852e24b 100644 --- a/levels/wf/areas/1/macro.inc.c +++ b/levels/wf/areas/1/macro.inc.c @@ -1,47 +1,47 @@ // 0x07011C38 - 0x07011DE8 const MacroObject wf_seg7_macro_objs[] = { - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 3760, 960, 2740), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ -1400, 1160, 3900), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 1254, 2586, 2299), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ -2500, 1795, -260), - MACRO_OBJECT(/*preset*/ macro_blue_coin_switch, /*yaw*/ 0, /*pos*/ -2500, 384, -250), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -2500, 450, -1150), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -2500, 450, -900), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -2500, 450, -650), - MACRO_OBJECT(/*preset*/ macro_box_metal_cap, /*yaw*/ 0, /*pos*/ 2750, 1370, -3400), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 0, 2650, 2900), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -500, 2650, 2900), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ 250, 2650, 2800), - MACRO_OBJECT(/*preset*/ macro_yellow_coin, /*yaw*/ 0, /*pos*/ -750, 2650, 2800), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_in_pole, /*yaw*/ 0, /*pos*/ -2500, 4560, -256), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 0, 2650, 2900), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ -250, 2650, 2400, /*behParam*/ 2), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 315, /*pos*/ 4200, 256, 5160, /*behParam*/ DIALOG_018), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -2540, 2560, -900, /*behParam*/ DIALOG_036), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 90, /*pos*/ 1600, 2560, 2600, /*behParam*/ DIALOG_042), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ -2705, 2560, 59, /*behParam*/ DIALOG_051), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 180, /*pos*/ 3460, 2304, -40, /*behParam*/ DIALOG_096), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ -1844, 1026, 3893, /*behParam*/ 0x40), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ -2932, 386, -157, /*behParam*/ DIALOG_078), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -500, 2650, 2900), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -250, 2650, 2970), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1746, 3620, -3120), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1277, 2600, 1350), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1585, 2595, -80), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 3350, 3000, -1520), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2700, 3600, -900), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 3770, 1380, 650), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -270, 1720, 2250), - MACRO_OBJECT(/*preset*/ macro_coin_arrow, /*yaw*/ 135, /*pos*/ 1215, 3600, -2609), - MACRO_OBJECT(/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -2500, 450, -1400), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ 4611, 256, 141), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ 1558, 922, 2329), - MACRO_OBJECT(/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 3396, 1380, 3280), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal_flying, /*yaw*/ 0, /*pos*/ 3234, 3345, -1787), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 4800, 256, 3000, /*behParam*/ DIALOG_104), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 90, /*pos*/ 2930, 1075, -3740, /*behParam*/ DIALOG_113), - MACRO_OBJECT(/*preset*/ macro_breakable_box_small, /*yaw*/ 0, /*pos*/ 4320, 256, 1880), - MACRO_OBJECT(/*preset*/ macro_breakable_box_small, /*yaw*/ 0, /*pos*/ -2940, 384, -1320), - MACRO_OBJECT(/*preset*/ macro_butterfly_triplet_2, /*yaw*/ 0, /*pos*/ 4574, 300, 1130), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 3760, 960, 2740), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ -1400, 1160, 3900), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 90, /*pos*/ 1254, 2586, 2299), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ -2500, 1795, -260), + MACRO_OBJECT (/*preset*/ macro_blue_coin_switch, /*yaw*/ 0, /*pos*/ -2500, 384, -250), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -2500, 450, -1150), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -2500, 450, -900), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -2500, 450, -650), + MACRO_OBJECT (/*preset*/ macro_box_metal_cap, /*yaw*/ 0, /*pos*/ 2750, 1370, -3400), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 0, 2650, 2900), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -500, 2650, 2900), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ 250, 2650, 2800), + MACRO_OBJECT (/*preset*/ macro_yellow_coin_1, /*yaw*/ 0, /*pos*/ -750, 2650, 2800), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_in_pole, /*yaw*/ 0, /*pos*/ -2500, 4560, -256), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ 0, 2650, 2900), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_hidden_1up, /*yaw*/ 0, /*pos*/ -250, 2650, 2400, /*bhvParam*/ 2), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 315, /*pos*/ 4200, 256, 5160, /*bhvParam*/ DIALOG_018), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ -2540, 2560, -900, /*bhvParam*/ DIALOG_036), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 90, /*pos*/ 1600, 2560, 2600, /*bhvParam*/ DIALOG_042), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ -2705, 2560, 59, /*bhvParam*/ DIALOG_051), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 180, /*pos*/ 3460, 2304, -40, /*bhvParam*/ DIALOG_096), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ -1844, 1026, 3893, /*bhvParam*/ 0x40), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 270, /*pos*/ -2932, 386, -157, /*bhvParam*/ DIALOG_078), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_trigger, /*yaw*/ 0, /*pos*/ -500, 2650, 2900), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -250, 2650, 2970), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1746, 3620, -3120), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1277, 2600, 1350), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 1585, 2595, -80), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 3350, 3000, -1520), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2700, 3600, -900), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 3770, 1380, 650), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -270, 1720, 2250), + MACRO_OBJECT (/*preset*/ macro_coin_arrow, /*yaw*/ 135, /*pos*/ 1215, 3600, -2609), + MACRO_OBJECT (/*preset*/ macro_hidden_blue_coin, /*yaw*/ 0, /*pos*/ -2500, 450, -1400), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ 4611, 256, 141), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal, /*yaw*/ 0, /*pos*/ 1558, 922, 2329), + MACRO_OBJECT (/*preset*/ macro_coin_line_horizontal, /*yaw*/ 0, /*pos*/ 3396, 1380, 3280), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal_flying, /*yaw*/ 0, /*pos*/ 3234, 3345, -1787), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 0, /*pos*/ 4800, 256, 3000, /*bhvParam*/ DIALOG_104), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_wooden_signpost, /*yaw*/ 90, /*pos*/ 2930, 1075, -3740, /*bhvParam*/ DIALOG_113), + MACRO_OBJECT (/*preset*/ macro_breakable_box_small, /*yaw*/ 0, /*pos*/ 4320, 256, 1880), + MACRO_OBJECT (/*preset*/ macro_breakable_box_small, /*yaw*/ 0, /*pos*/ -2940, 384, -1320), + MACRO_OBJECT (/*preset*/ macro_butterfly_triplet_no_bombs, /*yaw*/ 0, /*pos*/ 4574, 300, 1130), MACRO_OBJECT_END(), }; diff --git a/levels/wf/beta_extending_platform/geo.inc.c b/levels/wf/beta_extending_platform/geo.inc.c index 7da09eab..53a9a498 100644 --- a/levels/wf/beta_extending_platform/geo.inc.c +++ b/levels/wf/beta_extending_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000AF8 const GeoLayout wf_geo_000AF8[] = { - GEO_CULLING_RADIUS(650), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700EDC0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(650), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700EDC0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/breakable_wall_left/geo.inc.c b/levels/wf/breakable_wall_left/geo.inc.c index 71cdd216..8e459f8a 100644 --- a/levels/wf/breakable_wall_left/geo.inc.c +++ b/levels/wf/breakable_wall_left/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000B90 const GeoLayout wf_geo_000B90[] = { - GEO_CULLING_RADIUS(690), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700F340), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(690), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700F340), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/breakable_wall_right/geo.inc.c b/levels/wf/breakable_wall_right/geo.inc.c index aa16c3fa..646926c9 100644 --- a/levels/wf/breakable_wall_right/geo.inc.c +++ b/levels/wf/breakable_wall_right/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000B78 const GeoLayout wf_geo_000B78[] = { - GEO_CULLING_RADIUS(750), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700F1A8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(750), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700F1A8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/extending_platform/geo.inc.c b/levels/wf/extending_platform/geo.inc.c index 803a9d34..80dcdf00 100644 --- a/levels/wf/extending_platform/geo.inc.c +++ b/levels/wf/extending_platform/geo.inc.c @@ -1,32 +1,32 @@ // 0x0E000B10 const GeoLayout wf_geo_000B10[] = { - GEO_CULLING_RADIUS(650), - GEO_OPEN_NODE(), - GEO_SHADOW(SHADOW_SQUARE_PERMANENT, 0x96, 420), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700F018), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(650), + GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_SQUARE_PERMANENT, 0x96, 420), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700F018), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000B38 const GeoLayout wf_geo_000B38[] = { - GEO_CULLING_RADIUS(650), - GEO_OPEN_NODE(), - GEO_SHADOW(SHADOW_SQUARE_PERMANENT, 0x96, 420), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700F018), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(650), + GEO_OPEN_NODE(), + GEO_SHADOW(SHADOW_SQUARE_PERMANENT, 0x96, 420), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700F018), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000B60 const GeoLayout wf_geo_000B60[] = { - GEO_CULLING_RADIUS(650), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700F018), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(650), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700F018), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/kickable_board/geo.inc.c b/levels/wf/kickable_board/geo.inc.c index b9e70b61..58511ae3 100644 --- a/levels/wf/kickable_board/geo.inc.c +++ b/levels/wf/kickable_board/geo.inc.c @@ -1,18 +1,18 @@ // 0x0E000BA8 const GeoLayout wf_geo_000BA8[] = { - GEO_CULLING_RADIUS(1300), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700F610), - GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, wf_seg7_dl_0700F6C0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1300), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700F610), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, wf_seg7_dl_0700F6C0), + GEO_CLOSE_NODE(), + GEO_END(), }; // 0x0E000BC8 const GeoLayout wf_geo_000BC8[] = { - GEO_CULLING_RADIUS(1300), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700F610), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1300), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700F610), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/large_bomp/geo.inc.c b/levels/wf/large_bomp/geo.inc.c index d2615cd2..de5e9d2d 100644 --- a/levels/wf/large_bomp/geo.inc.c +++ b/levels/wf/large_bomp/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000A40 const GeoLayout wf_geo_000A40[] = { - GEO_CULLING_RADIUS(700), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700DE20), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(700), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700DE20), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/leveldata.c b/levels/wf/leveldata.c index 071a395a..42269cff 100644 --- a/levels/wf/leveldata.c +++ b/levels/wf/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "dialog_ids.h" diff --git a/levels/wf/rotating_wooden_platform/geo.inc.c b/levels/wf/rotating_wooden_platform/geo.inc.c index 964c7a13..16873a1c 100644 --- a/levels/wf/rotating_wooden_platform/geo.inc.c +++ b/levels/wf/rotating_wooden_platform/geo.inc.c @@ -1,15 +1,15 @@ // 0x0E000A58 const GeoLayout wf_geo_000A58[] = { - GEO_CULLING_RADIUS(1500), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2048, 5000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700E760), - GEO_CLOSE_NODE(), - GEO_RENDER_RANGE(5000, 32767), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700E9B8), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(1500), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2048, 5000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700E760), + GEO_CLOSE_NODE(), + GEO_RENDER_RANGE(5000, 32767), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700E9B8), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/script.c b/levels/wf/script.c index 6697b497..4ab0c206 100644 --- a/levels/wf/script.c +++ b/levels/wf/script.c @@ -19,91 +19,91 @@ // Unlike most levels, some of the level geometry objects in WF are defined as regular objects instead of terrain objects. // Some of them are still terrain objects, however. static const LevelScript script_func_local_1[] = { - OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 2305, 2432, -255, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_04, /*pos*/ 3405, 1664, -1791, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_05, /*pos*/ 3840, 0, -2303, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_05, /*pos*/ 3840, 0, -1279, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_06, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_07, /*pos*/ 1757, 3519, -3151, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0A, /*pos*/ 3840, 794, 2688, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0C, /*pos*/ 1408, 2522, 2431, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStaticObject), - OBJECT(/*model*/ MODEL_WF_GIANT_POLE, /*pos*/ -2560, 2560, -256, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvGiantPole), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_03, /*pos*/ 2305, 2432, -255, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_04, /*pos*/ 3405, 1664, -1791, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_05, /*pos*/ 3840, 0, -2303, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_05, /*pos*/ 3840, 0, -1279, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_06, /*pos*/ 0, 0, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_07, /*pos*/ 1757, 3519, -3151, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0A, /*pos*/ 3840, 794, 2688, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_LEVEL_GEOMETRY_0C, /*pos*/ 1408, 2522, 2431, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvStaticObject), + OBJECT(/*model*/ MODEL_WF_GIANT_POLE, /*pos*/ -2560, 2560, -256, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvGiantPole), RETURN(), }; static const LevelScript script_func_local_2[] = { - OBJECT(/*model*/ MODEL_WF_SMALL_BOMP, /*pos*/ 3300, 1070, 1, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSmallBomp), - OBJECT(/*model*/ MODEL_WF_SMALL_BOMP, /*pos*/ 3300, 1070, 1281, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSmallBomp), - OBJECT(/*model*/ MODEL_WF_LARGE_BOMP, /*pos*/ 3300, 1070, 641, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvLargeBomp), - OBJECT(/*model*/ MODEL_WF_ROTATING_WOODEN_PLATFORM, /*pos*/ -255, 2560, 2304, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWfRotatingWoodenPlatform), - OBJECT(/*model*/ MODEL_WF_SLIDING_PLATFORM, /*pos*/ 3328, 1075, -1791, /*angle*/ 0, 90, 0, /*behParam*/ 0x00020000, /*beh*/ bhvWfSlidingPlatform), - OBJECT(/*model*/ MODEL_WF_SLIDING_PLATFORM, /*pos*/ 3328, 1075, -767, /*angle*/ 0, 90, 0, /*behParam*/ 0x00010000, /*beh*/ bhvWfSlidingPlatform), - OBJECT(/*model*/ MODEL_WF_SLIDING_PLATFORM, /*pos*/ 3328, 1075, -2815, /*angle*/ 0, 90, 0, /*behParam*/ 0x00030000, /*beh*/ bhvWfSlidingPlatform), - OBJECT(/*model*/ MODEL_WF_TUMBLING_BRIDGE, /*pos*/ 1792, 2496, 1600, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWfTumblingBridge), - OBJECT(/*model*/ MODEL_WF_BREAKABLE_WALL_RIGHT, /*pos*/ 512, 2176, 2944, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWfBreakableWallRight), - OBJECT(/*model*/ MODEL_WF_BREAKABLE_WALL_LEFT, /*pos*/ -1023, 2176, 2944, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWfBreakableWallLeft), - OBJECT_WITH_ACTS(/*model*/ MODEL_WF_KICKABLE_BOARD, /*pos*/ 13, 3584, -1407, /*angle*/ 0, 315, 0, /*behParam*/ 0x00000000, /*beh*/ bhvKickableBoard, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_1UP, /*pos*/ -384, 3584, 6, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhv1Up, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT(/*model*/ MODEL_WF_ROTATING_PLATFORM, /*pos*/ 2304, 3584, -2303, /*angle*/ 0, 0, 0, /*behParam*/ 0x08000000, /*beh*/ bhvRotatingPlatform), - OBJECT(/*model*/ MODEL_WF_ROTATING_PLATFORM, /*pos*/ 3200, 3328, -1791, /*angle*/ 0, 0, 0, /*behParam*/ 0x08000000, /*beh*/ bhvRotatingPlatform), - OBJECT(/*model*/ MODEL_WF_ROTATING_PLATFORM, /*pos*/ 2688, 3584, -895, /*angle*/ 0, 0, 0, /*behParam*/ 0x08000000, /*beh*/ bhvRotatingPlatform), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2495, 1331, -256, /*angle*/ 0, 0, 0, /*behParam*/ 0x003D0000, /*beh*/ bhvPoleGrabbing), + OBJECT (/*model*/ MODEL_WF_SMALL_BOMP, /*pos*/ 3300, 1070, 1, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvSmallBomp), + OBJECT (/*model*/ MODEL_WF_SMALL_BOMP, /*pos*/ 3300, 1070, 1281, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvSmallBomp), + OBJECT (/*model*/ MODEL_WF_LARGE_BOMP, /*pos*/ 3300, 1070, 641, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvLargeBomp), + OBJECT (/*model*/ MODEL_WF_ROTATING_WOODEN_PLATFORM, /*pos*/ -255, 2560, 2304, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvWFRotatingWoodenPlatform), + OBJECT (/*model*/ MODEL_WF_SLIDING_PLATFORM, /*pos*/ 3328, 1075, -1791, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(WF_SLID_BRICK_PTFM_BP_MOV_VEL_15), /*bhv*/ bhvWFSlidingPlatform), + OBJECT (/*model*/ MODEL_WF_SLIDING_PLATFORM, /*pos*/ 3328, 1075, -767, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(WF_SLID_BRICK_PTFM_BP_MOV_VEL_10), /*bhv*/ bhvWFSlidingPlatform), + OBJECT (/*model*/ MODEL_WF_SLIDING_PLATFORM, /*pos*/ 3328, 1075, -2815, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(WF_SLID_BRICK_PTFM_BP_MOV_VEL_20), /*bhv*/ bhvWFSlidingPlatform), + OBJECT (/*model*/ MODEL_WF_TUMBLING_BRIDGE, /*pos*/ 1792, 2496, 1600, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(TUMBLING_BRIDGE_BP_WF), /*bhv*/ bhvTumblingBridge), + OBJECT (/*model*/ MODEL_WF_BREAKABLE_WALL_RIGHT, /*pos*/ 512, 2176, 2944, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvWFBreakableWallRight), + OBJECT (/*model*/ MODEL_WF_BREAKABLE_WALL_LEFT, /*pos*/ -1023, 2176, 2944, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvWFBreakableWallLeft), + OBJECT_WITH_ACTS(/*model*/ MODEL_WF_KICKABLE_BOARD, /*pos*/ 13, 3584, -1407, /*angle*/ 0, 315, 0, /*bhvParam*/ 0, /*bhv*/ bhvKickableBoard, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_1UP, /*pos*/ -384, 3584, 6, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(ONE_UP_BP_GENERIC), /*bhv*/ bhv1Up, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT (/*model*/ MODEL_WF_ROTATING_PLATFORM, /*pos*/ 2304, 3584, -2303, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(0x08) | BPARAM2(ROTATING_PLATFORM_BP_WF), /*bhv*/ bhvRotatingPlatform), + OBJECT (/*model*/ MODEL_WF_ROTATING_PLATFORM, /*pos*/ 3200, 3328, -1791, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(0x08) | BPARAM2(ROTATING_PLATFORM_BP_WF), /*bhv*/ bhvRotatingPlatform), + OBJECT (/*model*/ MODEL_WF_ROTATING_PLATFORM, /*pos*/ 2688, 3584, -895, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(0x08) | BPARAM2(ROTATING_PLATFORM_BP_WF), /*bhv*/ bhvRotatingPlatform), + OBJECT (/*model*/ MODEL_NONE, /*pos*/ -2495, 1331, -256, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(61), /*bhv*/ bhvPoleGrabbing), RETURN(), }; static const LevelScript script_func_local_3[] = { - OBJECT(/*model*/ MODEL_THWOMP, /*pos*/ 3462, 1939, -1545, /*angle*/ 0, 180, 0, /*behParam*/ 0x00000000, /*beh*/ bhvThwomp), - OBJECT(/*model*/ MODEL_THWOMP, /*pos*/ 3462, 1075, -3314, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvThwomp2), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -856, 922, 3819, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBetaFishSplashSpawner), - OBJECT(/*model*/ MODEL_PIRANHA_PLANT, /*pos*/ 1822, 2560, -101, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPiranhaPlant), - OBJECT(/*model*/ MODEL_PIRANHA_PLANT, /*pos*/ 4625, 256, 5017, /*angle*/ 0, -90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPiranhaPlant), - OBJECT(/*model*/ MODEL_PIRANHA_PLANT, /*pos*/ 689, 2560, 1845, /*angle*/ 0, 90, 0, /*behParam*/ 0x00000000, /*beh*/ bhvPiranhaPlant), - OBJECT(/*model*/ MODEL_WHOMP, /*pos*/ -1545, 2560, -286, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSmallWhomp), - OBJECT(/*model*/ MODEL_WHOMP, /*pos*/ 189, 2560, -1857, /*angle*/ 0, -135, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSmallWhomp), - OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ 4736, 256, 4992, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvButterfly), - OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ 4608, 256, 5120, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvButterfly), - OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ 4608, 256, 4992, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvButterfly), - OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ 4608, 256, 4864, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvButterfly), - OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ 4480, 256, 4992, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvButterfly), - OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ 4608, 256, 256, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvButterfly), - OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ 4736, 256, 128, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvButterfly), - OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ 4480, 256, 128, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvButterfly), - OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ 4608, 256, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvButterfly), - OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ 4608, 256, 128, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvButterfly), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1035, 2880, -900, /*angle*/ 0, 45, 0, /*behParam*/ 0x00000000, /*beh*/ bhvCheckerboardElevatorGroup), - OBJECT_WITH_ACTS(/*model*/ MODEL_BULLET_BILL, /*pos*/ 1280, 3712, 968, /*angle*/ 0, 180, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBulletBill, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_LEVEL_GEOMETRY_08, /*pos*/ 0, 3584, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTower, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_LEVEL_GEOMETRY_09, /*pos*/ 1280, 3584, 896, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBulletBillCannon, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 0, 3483, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTowerPlatformGroup, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_WF_TOWER_DOOR, /*pos*/ -511, 3584, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvTowerDoor, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_BOBOMB_BUDDY, /*pos*/ -1700, 1140, 3500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBobombBuddyOpensCannon, /*acts*/ ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_HOOT, /*pos*/ 2560, 700, 4608, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHoot, /*acts*/ ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT (/*model*/ MODEL_THWOMP, /*pos*/ 3462, 1939, -1545, /*angle*/ 0, 180, 0, /*bhvParam*/ BPARAM2(0), /*bhv*/ bhvThwomp2), + OBJECT (/*model*/ MODEL_THWOMP, /*pos*/ 3462, 1075, -3314, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(0), /*bhv*/ bhvThwomp), + OBJECT (/*model*/ MODEL_NONE, /*pos*/ -856, 922, 3819, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBetaFishSplashSpawner), + OBJECT (/*model*/ MODEL_PIRANHA_PLANT, /*pos*/ 1822, 2560, -101, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvPiranhaPlant), + OBJECT (/*model*/ MODEL_PIRANHA_PLANT, /*pos*/ 4625, 256, 5017, /*angle*/ 0, -90, 0, /*bhvParam*/ 0, /*bhv*/ bhvPiranhaPlant), + OBJECT (/*model*/ MODEL_PIRANHA_PLANT, /*pos*/ 689, 2560, 1845, /*angle*/ 0, 90, 0, /*bhvParam*/ 0, /*bhv*/ bhvPiranhaPlant), + OBJECT (/*model*/ MODEL_WHOMP, /*pos*/ -1545, 2560, -286, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(WHOMP_BP_SMALL), /*bhv*/ bhvSmallWhomp), + OBJECT (/*model*/ MODEL_WHOMP, /*pos*/ 189, 2560, -1857, /*angle*/ 0, -135, 0, /*bhvParam*/ BPARAM2(WHOMP_BP_SMALL), /*bhv*/ bhvSmallWhomp), + OBJECT (/*model*/ MODEL_BUTTERFLY, /*pos*/ 4736, 256, 4992, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvButterfly), + OBJECT (/*model*/ MODEL_BUTTERFLY, /*pos*/ 4608, 256, 5120, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvButterfly), + OBJECT (/*model*/ MODEL_BUTTERFLY, /*pos*/ 4608, 256, 4992, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvButterfly), + OBJECT (/*model*/ MODEL_BUTTERFLY, /*pos*/ 4608, 256, 4864, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvButterfly), + OBJECT (/*model*/ MODEL_BUTTERFLY, /*pos*/ 4480, 256, 4992, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvButterfly), + OBJECT (/*model*/ MODEL_BUTTERFLY, /*pos*/ 4608, 256, 256, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvButterfly), + OBJECT (/*model*/ MODEL_BUTTERFLY, /*pos*/ 4736, 256, 128, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvButterfly), + OBJECT (/*model*/ MODEL_BUTTERFLY, /*pos*/ 4480, 256, 128, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvButterfly), + OBJECT (/*model*/ MODEL_BUTTERFLY, /*pos*/ 4608, 256, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvButterfly), + OBJECT (/*model*/ MODEL_BUTTERFLY, /*pos*/ 4608, 256, 128, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvButterfly), + OBJECT (/*model*/ MODEL_NONE, /*pos*/ 1035, 2880, -900, /*angle*/ 0, 45, 0, /*bhvParam*/ BPARAM1(0) | BPARAM2(0), /*bhv*/ bhvCheckerboardElevatorGroup), + OBJECT_WITH_ACTS(/*model*/ MODEL_BULLET_BILL, /*pos*/ 1280, 3712, 968, /*angle*/ 0, 180, 0, /*bhvParam*/ 0, /*bhv*/ bhvBulletBill, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_LEVEL_GEOMETRY_08, /*pos*/ 0, 3584, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvTower, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_LEVEL_GEOMETRY_09, /*pos*/ 1280, 3584, 896, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBulletBillCannon, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 0, 3483, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvTowerPlatformGroup, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_WF_TOWER_DOOR, /*pos*/ -511, 3584, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvTowerDoor, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_BOBOMB_BUDDY, /*pos*/ -1700, 1140, 3500, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvBobombBuddyOpensCannon, /*acts*/ ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_HOOT, /*pos*/ 2560, 700, 4608, /*angle*/ 0, 0, 0, /*bhvParam*/ 0, /*bhv*/ bhvHoot, /*acts*/ ACT_3 | ACT_4 | ACT_5 | ACT_6), RETURN(), }; static const LevelScript script_func_local_4[] = { - OBJECT_WITH_ACTS(/*model*/ MODEL_WHOMP, /*pos*/ 0, 3584, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvWhompKingBoss, /*acts*/ ACT_1), - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 300, 5550, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x01000000, /*beh*/ bhvStar, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -2500, 1500, -750, /*angle*/ 0, 0, 0, /*behParam*/ 0x02000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 4600, 550, 2500, /*angle*/ 0, 0, 0, /*behParam*/ 0x03000000, /*beh*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 2880, 4300, 190, /*angle*/ 0, 0, 0, /*behParam*/ 0x04000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), - OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 590, 2450, 2650, /*angle*/ 0, 0, 0, /*behParam*/ 0x05000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_WHOMP, /*pos*/ 0, 3584, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_1), /*bhv*/ bhvWhompKingBoss, /*acts*/ ACT_1), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 300, 5550, 0, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_2), /*bhv*/ bhvStar, /*acts*/ ACT_2 | ACT_3 | ACT_4 | ACT_5 | ACT_6), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -2500, 1500, -750, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_3), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 4600, 550, 2500, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_4), /*bhv*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 2880, 4300, 190, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_5), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), + OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 590, 2450, 2650, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_6), /*bhv*/ bhvStar, /*acts*/ ALL_ACTS), RETURN(), }; const LevelScript level_wf_entry[] = { INIT_LEVEL(), - LOAD_MIO0( /*seg*/ 0x07, _wf_segment_7SegmentRomStart, _wf_segment_7SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0A, _cloud_floor_skybox_mio0SegmentRomStart, _cloud_floor_skybox_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _wf_segment_7SegmentRomStart, _wf_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0A, _cloud_floor_skybox_mio0SegmentRomStart, _cloud_floor_skybox_mio0SegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _grass_mio0SegmentRomStart, _grass_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x05, _group1_mio0SegmentRomStart, _group1_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0C, _group1_geoSegmentRomStart, _group1_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x06, _group14_mio0SegmentRomStart, _group14_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0D, _group14_geoSegmentRomStart, _group14_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x05, _group1_mio0SegmentRomStart, _group1_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0C, _group1_geoSegmentRomStart, _group1_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x06, _group14_mio0SegmentRomStart, _group14_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0D, _group14_geoSegmentRomStart, _group14_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_1), JUMP_LINK(script_func_global_2), JUMP_LINK(script_func_global_15), @@ -140,14 +140,14 @@ const LevelScript level_wf_entry[] = { LOAD_MODEL_FROM_GEO(MODEL_WF_KICKABLE_BOARD_FELLED, wf_geo_000BC8), AREA(/*index*/ 1, wf_geo_000BF8), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2600, 1256, 5120, /*angle*/ 0, 90, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvSpinAirborneWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2925, 2560, -947, /*angle*/ 0, 19, 0, /*behParam*/ 0x000B0000, /*beh*/ bhvFadingWarp), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2548, 1075, -3962, /*angle*/ 0, 51, 0, /*behParam*/ 0x000C0000, /*beh*/ bhvFadingWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_WF, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0B, /*destLevel*/ LEVEL_WF, /*destArea*/ 0x01, /*destNode*/ 0x0C, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0x0C, /*destLevel*/ LEVEL_WF, /*destArea*/ 0x01, /*destNode*/ 0x0B, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x34, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x01, /*destNode*/ 0x66, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2600, 1256, 5120, /*angle*/ 0, 90, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvSpinAirborneWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2925, 2560, -947, /*angle*/ 0, 19, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0B), /*bhv*/ bhvFadingWarp), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2548, 1075, -3962, /*angle*/ 0, 51, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0C), /*bhv*/ bhvFadingWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_WF, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0B, /*destLevel*/ LEVEL_WF, /*destArea*/ 1, /*destNode*/ WARP_NODE_0C, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_0C, /*destLevel*/ LEVEL_WF, /*destArea*/ 1, /*destNode*/ WARP_NODE_0B, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_34, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 1, /*destNode*/ WARP_NODE_66, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_1), JUMP_LINK(script_func_local_2), JUMP_LINK(script_func_local_3), diff --git a/levels/wf/sliding_platform/geo.inc.c b/levels/wf/sliding_platform/geo.inc.c index ebab6b8c..9c21a6b5 100644 --- a/levels/wf/sliding_platform/geo.inc.c +++ b/levels/wf/sliding_platform/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000A98 const GeoLayout wf_geo_000A98[] = { - GEO_CULLING_RADIUS(500), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700EB40), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(500), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700EB40), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/small_bomp/geo.inc.c b/levels/wf/small_bomp/geo.inc.c index 93779c76..729cfb79 100644 --- a/levels/wf/small_bomp/geo.inc.c +++ b/levels/wf/small_bomp/geo.inc.c @@ -1,15 +1,15 @@ // 0x0E000A00 const GeoLayout wf_geo_000A00[] = { - GEO_CULLING_RADIUS(500), - GEO_OPEN_NODE(), - GEO_RENDER_RANGE(-2048, 5000), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700D708), - GEO_CLOSE_NODE(), - GEO_RENDER_RANGE(5000, 32767), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700D9F0), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(500), + GEO_OPEN_NODE(), + GEO_RENDER_RANGE(-2048, 5000), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700D708), + GEO_CLOSE_NODE(), + GEO_RENDER_RANGE(5000, 32767), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700D9F0), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/tower_door/geo.inc.c b/levels/wf/tower_door/geo.inc.c index 1d69d066..297230a0 100644 --- a/levels/wf/tower_door/geo.inc.c +++ b/levels/wf/tower_door/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000BE0 const GeoLayout wf_geo_000BE0[] = { - GEO_CULLING_RADIUS(320), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700F7F8), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(320), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700F7F8), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/tumbling_bridge_far/geo.inc.c b/levels/wf/tumbling_bridge_far/geo.inc.c index 21b371cb..17b707c6 100644 --- a/levels/wf/tumbling_bridge_far/geo.inc.c +++ b/levels/wf/tumbling_bridge_far/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000AC8 const GeoLayout wf_geo_000AC8[] = { - GEO_CULLING_RADIUS(800), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700E3D0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(800), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700E3D0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wf/tumbling_bridge_near/geo.inc.c b/levels/wf/tumbling_bridge_near/geo.inc.c index 191d5080..0dc944cd 100644 --- a/levels/wf/tumbling_bridge_near/geo.inc.c +++ b/levels/wf/tumbling_bridge_near/geo.inc.c @@ -1,8 +1,8 @@ // 0x0E000AB0 const GeoLayout wf_geo_000AB0[] = { - GEO_CULLING_RADIUS(400), - GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700E0F0), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CULLING_RADIUS(400), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_0700E0F0), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wmotr/areas/1/geo.inc.c b/levels/wmotr/areas/1/geo.inc.c index ba73389a..9537bf89 100644 --- a/levels/wmotr/areas/1/geo.inc.c +++ b/levels/wmotr/areas/1/geo.inc.c @@ -1,32 +1,32 @@ // 0x0E0001F0 const GeoLayout wmotr_geo_0001F0[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), - GEO_OPEN_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_NODE_ORTHO(100), - GEO_OPEN_NODE(), - GEO_BACKGROUND(BACKGROUND_BELOW_CLOUDS, geo_skybox_main), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(1), - GEO_OPEN_NODE(), - GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov), - GEO_OPEN_NODE(), - GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_OPEN_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_NODE_ORTHO(100), GEO_OPEN_NODE(), - GEO_DISPLAY_LIST(LAYER_OPAQUE, wmotr_seg7_dl_0700C1F8), - 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_envfx_main), + GEO_BACKGROUND(BACKGROUND_BELOW_CLOUDS, geo_skybox_main), GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_ZBUFFER(0), - GEO_OPEN_NODE(), - GEO_ASM(0, geo_cannon_circle_base), - GEO_CLOSE_NODE(), - GEO_CLOSE_NODE(), - GEO_END(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(1), + GEO_OPEN_NODE(), + GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov), + GEO_OPEN_NODE(), + GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, wmotr_seg7_dl_0700C1F8), + 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_envfx_main), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ZBUFFER(0), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_cannon_circle_base), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), }; diff --git a/levels/wmotr/areas/1/macro.inc.c b/levels/wmotr/areas/1/macro.inc.c index 2f548eed..e5109097 100644 --- a/levels/wmotr/areas/1/macro.inc.c +++ b/levels/wmotr/areas/1/macro.inc.c @@ -1,30 +1,30 @@ // 0x070136A8 - 0x070137AE const MacroObject wmotr_seg7_macro_objs[] = { - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ -4456, 827, 191, /*behParam*/ 0x00), - MACRO_OBJECT_WITH_BEH_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ 3712, -2740, 5200, /*behParam*/ 0x80), - MACRO_OBJECT(/*preset*/ macro_bobomb_buddy_opens_cannon, /*yaw*/ 0, /*pos*/ 3684, -2712, 4660), - MACRO_OBJECT(/*preset*/ macro_coin_ring_horizontal_flying, /*yaw*/ 0, /*pos*/ -3050, 2100, -4200), - MACRO_OBJECT(/*preset*/ macro_box_1up, /*yaw*/ 0, /*pos*/ -2744, 4899, -4439), - MACRO_OBJECT(/*preset*/ macro_hidden_1up_in_pole, /*yaw*/ 0, /*pos*/ 3995, -1850, 5478), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -2980, 3990, -4248), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2735, 3140, -3085), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -3640, 4600, -4200), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4400, 240, 80), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 3440, -2680, 5240), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -600, -1360, 5040), - MACRO_OBJECT(/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ -400, 1960, -120), - MACRO_OBJECT(/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ -240, -1080, 4520), - MACRO_OBJECT(/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ 3600, -2480, 5440), - MACRO_OBJECT(/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ 3960, 520, 440), - MACRO_OBJECT(/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ -3200, 4880, -4040), - MACRO_OBJECT(/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ -2760, 2320, -4080), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -3630, -430, 3180), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 320, 1725, 40), - MACRO_OBJECT(/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -2560, 4600, -4800), - MACRO_OBJECT(/*preset*/ macro_coin_ring_vertical, /*yaw*/ 0, /*pos*/ -50, 2180, 1900), - MACRO_OBJECT(/*preset*/ macro_coin_ring_vertical, /*yaw*/ 40, /*pos*/ -2850, 1550, 2280), - MACRO_OBJECT(/*preset*/ macro_coin_ring_vertical, /*yaw*/ 85, /*pos*/ 1710, -650, 4850), - MACRO_OBJECT(/*preset*/ macro_coin_ring_vertical, /*yaw*/ 0, /*pos*/ 2350, 2300, 240), - MACRO_OBJECT(/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -3260, 3370, -3945), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ -4456, 827, 191, /*bhvParam*/ 0x00), + MACRO_OBJECT_WITH_BHV_PARAM(/*preset*/ macro_cannon_closed, /*yaw*/ 0, /*pos*/ 3712, -2740, 5200, /*bhvParam*/ 0x80), + MACRO_OBJECT (/*preset*/ macro_bobomb_buddy_opens_cannon_1, /*yaw*/ 0, /*pos*/ 3684, -2712, 4660), + MACRO_OBJECT (/*preset*/ macro_coin_ring_horizontal_flying, /*yaw*/ 0, /*pos*/ -3050, 2100, -4200), + MACRO_OBJECT (/*preset*/ macro_box_1up, /*yaw*/ 0, /*pos*/ -2744, 4899, -4439), + MACRO_OBJECT (/*preset*/ macro_hidden_1up_in_pole, /*yaw*/ 0, /*pos*/ 3995, -1850, 5478), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -2980, 3990, -4248), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 2735, 3140, -3085), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -3640, 4600, -4200), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 4400, 240, 80), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 3440, -2680, 5240), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -600, -1360, 5040), + MACRO_OBJECT (/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ -400, 1960, -120), + MACRO_OBJECT (/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ -240, -1080, 4520), + MACRO_OBJECT (/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ 3600, -2480, 5440), + MACRO_OBJECT (/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ 3960, 520, 440), + MACRO_OBJECT (/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ -3200, 4880, -4040), + MACRO_OBJECT (/*preset*/ macro_box_wing_cap, /*yaw*/ 0, /*pos*/ -2760, 2320, -4080), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -3630, -430, 3180), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ 320, 1725, 40), + MACRO_OBJECT (/*preset*/ macro_red_coin, /*yaw*/ 0, /*pos*/ -2560, 4600, -4800), + MACRO_OBJECT (/*preset*/ macro_coin_ring_vertical_flying, /*yaw*/ 0, /*pos*/ -50, 2180, 1900), + MACRO_OBJECT (/*preset*/ macro_coin_ring_vertical_flying, /*yaw*/ 40, /*pos*/ -2850, 1550, 2280), + MACRO_OBJECT (/*preset*/ macro_coin_ring_vertical_flying, /*yaw*/ 85, /*pos*/ 1710, -650, 4850), + MACRO_OBJECT (/*preset*/ macro_coin_ring_vertical_flying, /*yaw*/ 0, /*pos*/ 2350, 2300, 240), + MACRO_OBJECT (/*preset*/ macro_1up, /*yaw*/ 0, /*pos*/ -3260, 3370, -3945), MACRO_OBJECT_END(), }; diff --git a/levels/wmotr/level.yaml b/levels/wmotr/level.yaml index a17b7179..075a88ba 100644 --- a/levels/wmotr/level.yaml +++ b/levels/wmotr/level.yaml @@ -1,6 +1,6 @@ -# Wing Mario Over the Rainbow +# Wing Mario over the Rainbow short-name: wmotr -full-name: Wing Mario Over the Rainbow +full-name: Wing Mario over the Rainbow texture-file: ["/texture.inc.c"] area-count: 1 objects: [] diff --git a/levels/wmotr/leveldata.c b/levels/wmotr/leveldata.c index d80b826c..d53095ae 100644 --- a/levels/wmotr/leveldata.c +++ b/levels/wmotr/leveldata.c @@ -3,8 +3,8 @@ #include "surface_terrains.h" #include "moving_texture_macros.h" #include "level_misc_macros.h" -#include "macro_preset_names.h" -#include "special_preset_names.h" +#include "macro_presets.h" +#include "special_presets.h" #include "textures.h" #include "make_const_nonconst.h" diff --git a/levels/wmotr/script.c b/levels/wmotr/script.c index dfbaae27..ad5d6c03 100644 --- a/levels/wmotr/script.c +++ b/levels/wmotr/script.c @@ -16,43 +16,43 @@ #include "levels/wmotr/header.h" static const LevelScript script_func_local_1[] = { - OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3996, -2739, 5477, /*angle*/ 0, 0, 0, /*behParam*/ 0x00520000, /*beh*/ bhvPoleGrabbing), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2911, 3564, -3967, /*angle*/ 0, 0, 0, /*behParam*/ 0x00540000, /*beh*/ bhvPoleGrabbing), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3258, 3359, -3946, /*angle*/ 0, 0, 0, /*behParam*/ 0x00690000, /*beh*/ bhvPoleGrabbing), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2639, 3154, -4369, /*angle*/ 0, 0, 0, /*behParam*/ 0x007D0000, /*beh*/ bhvPoleGrabbing), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2980, 4048, -4248, /*angle*/ 0, 0, 0, /*behParam*/ 0x00240000, /*beh*/ bhvPoleGrabbing), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3290, 3636, -4477, /*angle*/ 0, 0, 0, /*behParam*/ 0x004D0000, /*beh*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3996, -2739, 5477, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(82), /*bhv*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2911, 3564, -3967, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(84), /*bhv*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3258, 3359, -3946, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(105), /*bhv*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2639, 3154, -4369, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(125), /*bhv*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2980, 4048, -4248, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(36), /*bhv*/ bhvPoleGrabbing), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3290, 3636, -4477, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM2(77), /*bhv*/ bhvPoleGrabbing), RETURN(), }; static const LevelScript script_func_local_2[] = { - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -160, 1950, -470, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenRedCoinStar), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -160, 1950, -470, /*angle*/ 0, 0, 0, /*bhvParam*/ BPARAM1(STAR_INDEX_ACT_1), /*bhv*/ bhvHiddenRedCoinStar), RETURN(), }; const LevelScript level_wmotr_entry[] = { INIT_LEVEL(), - LOAD_MIO0( /*seg*/ 0x07, _wmotr_segment_7SegmentRomStart, _wmotr_segment_7SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x0A, _cloud_floor_skybox_mio0SegmentRomStart, _cloud_floor_skybox_mio0SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x07, _wmotr_segment_7SegmentRomStart, _wmotr_segment_7SegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x0A, _cloud_floor_skybox_mio0SegmentRomStart, _cloud_floor_skybox_mio0SegmentRomEnd), LOAD_MIO0_TEXTURE(/*seg*/ 0x09, _sky_mio0SegmentRomStart, _sky_mio0SegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x05, _group2_mio0SegmentRomStart, _group2_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0C, _group2_geoSegmentRomStart, _group2_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x06, _group17_mio0SegmentRomStart, _group17_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0D, _group17_geoSegmentRomStart, _group17_geoSegmentRomEnd), - LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), - LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x05, _group2_mio0SegmentRomStart, _group2_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0C, _group2_geoSegmentRomStart, _group2_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x06, _group17_mio0SegmentRomStart, _group17_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0D, _group17_geoSegmentRomStart, _group17_geoSegmentRomEnd), + LOAD_MIO0 (/*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd), + LOAD_RAW (/*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd), ALLOC_LEVEL_POOL(), - MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario), + MARIO(/*model*/ MODEL_MARIO, /*bhvParam*/ BPARAM4(0x01), /*bhv*/ bhvMario), JUMP_LINK(script_func_global_1), JUMP_LINK(script_func_global_3), JUMP_LINK(script_func_global_18), AREA(/*index*/ 1, wmotr_geo_0001F0), - OBJECT(/*model*/ MODEL_NONE, /*pos*/ -67, 2669, -16, /*angle*/ 0, 270, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvAirborneWarp), - WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_WMOTR, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x38, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x02, /*destNode*/ 0x6D, /*flags*/ WARP_NO_CHECKPOINT), - WARP_NODE(/*id*/ 0xF3, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT), + OBJECT(/*model*/ MODEL_NONE, /*pos*/ -67, 2669, -16, /*angle*/ 0, 270, 0, /*bhvParam*/ BPARAM2(WARP_NODE_0A), /*bhv*/ bhvAirborneWarp), + WARP_NODE(/*id*/ WARP_NODE_0A, /*destLevel*/ LEVEL_WMOTR, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_SUCCESS, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_38, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_DEATH, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 2, /*destNode*/ WARP_NODE_6D, /*flags*/ WARP_NO_CHECKPOINT), + WARP_NODE(/*id*/ WARP_NODE_WARP_FLOOR, /*destLevel*/ LEVEL_CASTLE_GROUNDS, /*destArea*/ 1, /*destNode*/ WARP_NODE_0A, /*flags*/ WARP_NO_CHECKPOINT), JUMP_LINK(script_func_local_1), JUMP_LINK(script_func_local_2), TERRAIN(/*terrainData*/ wmotr_seg7_collision), diff --git a/lib/asm/__osDisableInt.s b/lib/asm/__osDisableInt.s index b19b8481..22534ee9 100644 --- a/lib/asm/__osDisableInt.s +++ b/lib/asm/__osDisableInt.s @@ -1,18 +1,40 @@ .set noreorder // don't insert nops after branches -.set gp=64 #include "macros.inc" +#include + .section .text, "ax" glabel __osDisableInt - mfc0 $t0, $12 - and $t1, $t0, -2 - mtc0 $t1, $12 - andi $v0, $t0, 1 - nop - jr $ra - nop +#ifdef VERSION_CN + la $t2, __OSGlobalIntMask + lw $t3, ($t2) + andi $t3, $t3, SR_IMASK +#endif + mfc0 $t0, C0_SR + and $t1, $t0, ~SR_IE + mtc0 $t1, C0_SR + andi $v0, $t0, SR_IE +#ifdef VERSION_CN + lw $t0, ($t2) + andi $t0, $t0, SR_IMASK + beq $t0, $t3, .Lret + lui $t2, %hi(__osRunningThread) + addiu $t2, %lo(__osRunningThread) + lw $t1, 0x118($t2) + andi $t2, $t1, SR_IMASK + and $t2, $t2, $t0 + and $t1, $t1, ~SR_IMASK + or $t1, $t1, $t2 + and $t1, $t1, ~SR_IE + mtc0 $t1, $12 + nop +#endif + nop +.Lret: + jr $ra + nop diff --git a/lib/asm/__osExceptionPreamble.s b/lib/asm/__osExceptionPreamble.s index c3b97993..9c21048e 100644 --- a/lib/asm/__osExceptionPreamble.s +++ b/lib/asm/__osExceptionPreamble.s @@ -1,24 +1,33 @@ .set noat // allow manual use of $at .set noreorder // don't insert nops after branches -.set gp=64 #include "macros.inc" +#include +#include +#include + +#if defined(VERSION_EU) || defined(VERSION_SH) +#define VERSION_EU_SH +#endif + +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) +#define VERSION_EU_SH_CN +#endif + .section .text, "ax" #ifdef AVOID_UB -.set D_80334890, D_80334890_fix +.set __osThreadTail, __osThreadTail_fix #endif glabel __osExceptionPreamble - lui $k0, %hi(__osException) - addiu $k0, %lo(__osException) + la $k0, __osException jr $k0 nop glabel __osException - lui $k0, %hi(gInterruptedThread) - addiu $k0, %lo(gInterruptedThread) + la $k0, __osThreadSave sd $at, 0x20($k0) mfc0 $k1, $12 sw $k1, 0x118($k0) @@ -30,7 +39,7 @@ glabel __osException sd $t2, 0x68($k0) sw $zero, 0x18($k0) mfc0 $t0, $13 -#if !defined(VERSION_EU) && !defined(VERSION_SH) +#ifndef VERSION_EU_SH_CN andi $t1, $t0, 0x7c li $t2, 0 bne $t1, $t2, .L80326750 @@ -57,11 +66,11 @@ glabel __osException lui $at, %hi(D_80334938) #endif move $t0, $k0 -#if !defined(VERSION_EU) && !defined(VERSION_SH) +#ifndef VERSION_EU_SH_CN sw $zero, %lo(D_80334938)($at) #endif - lui $k0, %hi(D_80334890 + 0x10) - lw $k0, %lo(D_80334890 + 0x10)($k0) + lui $k0, %hi(__osThreadTail + 0x10) + lw $k0, %lo(__osThreadTail + 0x10)($k0) ld $t1, 0x20($t0) sd $t1, 0x20($k0) ld $t1, 0x118($t0) @@ -72,15 +81,17 @@ glabel __osException sd $t1, 0x60($k0) ld $t1, 0x68($t0) sd $t1, 0x68($k0) -#if defined(VERSION_EU) || defined(VERSION_SH) +#ifdef VERSION_EU_SH lw $k1, 0x118($k0) #else .L80326794: #endif +#ifndef VERSION_CN mflo $t0 sd $t0, 0x108($k0) mfhi $t0 -#if defined(VERSION_EU) || defined(VERSION_SH) +#endif +#ifdef VERSION_EU_SH andi $t1, $k1, 0xff00 #endif sd $v0, 0x28($k0) @@ -108,11 +119,38 @@ glabel __osException sd $sp, 0xf0($k0) sd $fp, 0xf8($k0) sd $ra, 0x100($k0) -#if defined(VERSION_EU) || defined(VERSION_SH) - beqz $t1, .L802F3A18 +#ifdef VERSION_EU_SH_CN +#ifdef VERSION_CN + mflo $t0 + sd $t0, 0x108($k0) + mfhi $t0 + sd $t0, 0x110($k0) + lw $k1, 0x118($k0) + andi $t1, $k1, SR_IMASK + beqz $t1, savercp + nop + la $t0, __OSGlobalIntMask + lw $t0, ($t0) + lui $at, (0xFFFFFFFF >> 16) + ori $at, (0xFFFFFFFF & 0xFFFF) + xor $t2, $t0, $at + andi $t2, $t2, SR_IMASK + or $t4, $t1, $t2 + lui $at, (~SR_IMASK >> 16) & 0xFFFF + ori $at, (~SR_IMASK & 0xFFFF) + and $t3, $k1, $at + or $t3, $t3, $t4 + sw $t3, 0x118($k0) + andi $t0, $t0, SR_IMASK + and $t1, $t1, $t0 + lui $at, (~SR_IMASK >> 16) & 0xFFFF + ori $at, (~SR_IMASK & 0xFFFF) + and $k1, $k1, $at + or $k1, $k1, $t1 +#else + beqz $t1, savercp sd $t0, 0x110($k0) - lui $t0, %hi(__OSGlobalIntMask) - addiu $t0, %lo(__OSGlobalIntMask) + la $t0, __OSGlobalIntMask lw $t0, ($t0) li $at, -1 #ifdef VERSION_EU @@ -120,13 +158,13 @@ glabel __osException #else xor $t2, $t0, $at #endif - lui $at, (0xFFFF00FF >> 16) + lui $at, (~SR_IMASK >> 16) & 0xFFFF #ifdef VERSION_EU - andi $t0, $t0, 0xFF00 + andi $t0, $t0, SR_IMASK #else - andi $t2, $t2, 0xFF00 + andi $t2, $t2, SR_IMASK #endif - ori $at, (0xFFFF00FF & 0xFFFF) + ori $at, (~SR_IMASK & 0xFFFF) #ifdef VERSION_EU or $t1, $t1, $t0 and $k1, $k1, $at @@ -135,35 +173,43 @@ glabel __osException #else or $t4, $t1, $t2 and $t3, $k1, $at - andi $t0, $t0, 0xFF00 + andi $t0, $t0, SR_IMASK or $t3, $t3, $t4 and $t1, $t1, $t0 and $k1, $k1, $at sw $t3, 0x118($k0) or $k1, $k1, $t1 #endif +#endif -.L802F3A18: - lui $t1, %hi(MI_INTR_MASK_REG) - lw $t1, %lo(MI_INTR_MASK_REG)($t1) - beqz $t1, .L802F3A50 +savercp: + lui $t1, %hi(PHYS_TO_K1(MI_INTR_MASK_REG)) + lw $t1, %lo(PHYS_TO_K1(MI_INTR_MASK_REG))($t1) + beqz $t1, endrcp nop - lui $t0, %hi(__OSGlobalIntMask) - addiu $t0, %lo(__OSGlobalIntMask) + la $t0, __OSGlobalIntMask lw $t0, ($t0) - lw $t4, 0x128($k0) - li $at, -1 +#ifdef VERSION_CN srl $t0, $t0, 0x10 + li $at, 0xFFFFFFFF +#else + lw $t4, 0x128($k0) + li $at, 0xFFFFFFFF + srl $t0, $t0, 0x10 +#endif xor $t0, $t0, $at andi $t0, $t0, 0x3f +#ifdef VERSION_CN + lw $t4, 0x128($k0) +#endif and $t0, $t0, $t4 or $t1, $t1, $t0 -.L802F3A50: +endrcp: sw $t1, 0x128($k0) #else sd $t0, 0x110($k0) #endif - mfc0 $t0, $14 + mfc0 $t0, C0_EPC sw $t0, 0x11c($k0) lw $t0, 0x18($k0) beqz $t0, .L80326868 @@ -188,16 +234,16 @@ glabel __osException sdc1 $f28, 0x1a0($k0) sdc1 $f30, 0x1a8($k0) .L80326868: - mfc0 $t0, $13 + mfc0 $t0, C0_CAUSE sw $t0, 0x120($k0) -#if !defined(VERSION_EU) && !defined(VERSION_SH) - lui $t1, %hi(MI_INTR_MASK_REG) - lw $t1, %lo(MI_INTR_MASK_REG)($t1) +#ifndef VERSION_EU_SH_CN + lui $t1, %hi(PHYS_TO_K1(MI_INTR_MASK_REG)) + lw $t1, %lo(PHYS_TO_K1(MI_INTR_MASK_REG))($t1) sw $t1, 0x128($k0) #endif li $t1, 2 sh $t1, 0x10($k0) -#if !defined(VERSION_EU) && !defined(VERSION_SH) +#ifndef VERSION_EU_SH_CN lui $t1, %hi(D_80334934) lw $t1, %lo(D_80334934)($t1) beqz $t1, .L803268B4 @@ -217,80 +263,173 @@ glabel __osException nop lui $t2, %hi(D_C000000C) sw $zero, %lo(D_C000000C)($t2) - lui $t1, %hi(D_80334A40) - lw $t1, %lo(D_80334A40)($t1) + lui $t1, %hi(__osRdbSendMessage) + lw $t1, %lo(__osRdbSendMessage)($t1) addiu $t2, %lo(D_C000000C) beqz $t1, .L803268E8 nop jal send_mesg li $a0, 120 .L803268E8: - lui $t1, %hi(D_80334A44) - lw $t1, %lo(D_80334A44)($t1) - lui $at, %hi(D_80334A44) + lui $t1, %hi(__osRdbWriteOK) + lw $t1, %lo(__osRdbWriteOK)($t1) + lui $at, %hi(__osRdbWriteOK) addi $t1, $t1, 1 b .L80326E08 - sw $t1, %lo(D_80334A44)($at) + sw $t1, %lo(__osRdbWriteOK)($at) .L80326900: #endif - andi $t1, $t0, 0x7c - li $t2, 36 - beq $t1, $t2, .L80326B84 + andi $t1, $t0, CAUSE_EXCMASK + li $t2, EXC_BREAK + beq $t1, $t2, handle_break nop - li $t2, 44 - beq $t1, $t2, .L80326CCC + li $t2, EXC_CPU + beq $t1, $t2, handle_CpU nop - li $t2, 0 - bne $t1, $t2, .L80326BE8 + li $t2, EXC_INT + bne $t1, $t2, panic nop and $s0, $k1, $t0 -.L8032692C: - andi $t1, $s0, 0xff00 +next_interrupt: + andi $t1, $s0, SR_IMASK srl $t2, $t1, 0xc bnez $t2, .L80326944 nop srl $t2, $t1, 8 addi $t2, $t2, 0x10 .L80326944: - lui $at, %hi(D_80338610) - addu $at, $at, $t2 - lbu $t2, %lo(D_80338610)($at) - lui $at, %hi(jtbl_80338630) - addu $at, $at, $t2 - lw $t2, %lo(jtbl_80338630)($at) + // TODO: Get rid of noat +.set at + lbu $t2, __osIntOffTable($t2) + lw $t2, __osIntTable($t2) +.set noat jr $t2 nop -#if defined(VERSION_EU) || defined(VERSION_SH) -glabel L802F3B28 - li $at, -8193 - b .L8032692C +#ifdef VERSION_EU_SH_CN +glabel IP6_Hdlr + li $at, ~CAUSE_IP6 + b next_interrupt and $s0, $s0, $at -glabel L802F3B34 - li $at, -16385 - b .L8032692C +glabel IP7_Hdlr + li $at, ~CAUSE_IP7 + b next_interrupt and $s0, $s0, $at #endif -glabel L80326964 - mfc0 $t1, $11 - mtc0 $t1, $11 +glabel counter + mfc0 $t1, C0_COMPARE + mtc0 $t1, C0_COMPARE +#ifdef VERSION_CN + li $a0, 24 + jal send_mesg + nop +#else jal send_mesg li $a0, 24 - lui $at, (0xFFFF7FFF >> 16) - ori $at, (0xFFFF7FFF & 0xFFFF) - b .L8032692C +#endif + lui $at, (~CAUSE_IP8 >> 16) & 0xFFFF + ori $at, (~CAUSE_IP8 & 0xFFFF) + b next_interrupt and $s0, $s0, $at -glabel L80326984 -#if defined(VERSION_EU) || defined(VERSION_SH) - li $at, -2049 + +glabel cart +#ifdef VERSION_EU_SH_CN + li $at, ~CAUSE_IP4 and $s0, $s0, $at #endif +#ifdef VERSION_CN + la $t1, __osHwIntTable + addi $t1, $t1, 4 * 2 + lw $t2, ($t1) + beqz $t2, .L80307480 + nop + jalr $t2 + lw $sp, 4($t1) + beqz $v0, .L80307480 + nop + b redispatch + nop +.L80307480: + lui $s1, %hi(PHYS_TO_K1(MI_HW_INTR_REG)) + lw $s1, %lo(PHYS_TO_K1(MI_HW_INTR_REG))($s1) + andi $t1, $s1, 0x40 + beqz $t1, .L803074AC + nop + andi $s1, $s1, 0x3F80 + li $t1, 0 + lui $at, %hi(PHYS_TO_K1(PI_CARD_ADDR_REG)) + sw $t1, %lo(PHYS_TO_K1(PI_CARD_ADDR_REG))($at) + jal send_mesg + li $a0, 184 +.L803074AC: + andi $t1, $s1, 0x2000 + beqz $t1, .L803074D0 + nop + andi $s1, $s1, 0x1FC0 + li $t1, 0x2000 + lui $at, %hi(PHYS_TO_K1(MI_HW_INTR_REG)) + sw $t1, %lo(PHYS_TO_K1(MI_HW_INTR_REG))($at) + jal send_mesg + li $a0, 240 +.L803074D0: + andi $t1, $s1, 0x80 + beqz $t1, .L803074F4 + nop + andi $s1, $s1, 0x3F40 + li $t1, 0x4000 + lui $at, %hi(PHYS_TO_K1(MI_HW_INTR_MASK_REG)) + sw $t1, %lo(PHYS_TO_K1(MI_HW_INTR_MASK_REG))($at) + jal send_mesg + li $a0, 192 +.L803074F4: + andi $t1, $s1, 0x100 + beqz $t1, .L80307518 + nop + andi $s1, $s1, 0x3EC0 + lui $t1, 1 + lui $at, %hi(PHYS_TO_K1(MI_HW_INTR_MASK_REG)) + sw $t1, %lo(PHYS_TO_K1(MI_HW_INTR_MASK_REG))($at) + jal send_mesg + li $a0, 200 +.L80307518: + andi $t1, $s1, 0x200 + beqz $t1, .L8030753C + nop + andi $s1, $s1, 0x3DC0 + lui $t1, 4 + lui $at, %hi(PHYS_TO_K1(MI_HW_INTR_MASK_REG)) + sw $t1, %lo(PHYS_TO_K1(MI_HW_INTR_MASK_REG))($at) + jal send_mesg + li $a0, 208 +.L8030753C: + andi $t1, $s1, 0x400 + beqz $t1, .L80307560 + nop + andi $s1, $s1, 0x3BC0 + lui $t1, 0x10 + lui $at, %hi(PHYS_TO_K1(MI_HW_INTR_MASK_REG)) + sw $t1, %lo(PHYS_TO_K1(MI_HW_INTR_MASK_REG))($at) + jal send_mesg + li $a0, 216 +.L80307560: + andi $t1, $s1, 0x800 + beqz $t1, .L80307584 + nop + andi $s1, $s1, 0x37C0 + lui $t1, 0x40 + lui $at, %hi(PHYS_TO_K1(MI_HW_INTR_MASK_REG)) + sw $t1, %lo(PHYS_TO_K1(MI_HW_INTR_MASK_REG))($at) + jal send_mesg + li $a0, 224 +.L80307584: + b next_interrupt + nop +#else li $t2, 4 - lui $at, %hi(D_80334920) + lui $at, %hi(__osHwIntTable) addu $at, $at, $t2 - lw $t2, %lo(D_80334920)($at) -#if defined(VERSION_EU) || defined(VERSION_SH) - lui $sp, %hi(leoDiskStack) - addiu $sp, %lo(leoDiskStack) + lw $t2, %lo(__osHwIntTable)($at) +#ifdef VERSION_EU_SH + la $sp, leoDiskStack li $a0, 16 beqz $t2, .L803269A4 addiu $sp, $sp, 0xff0 @@ -299,202 +438,302 @@ glabel L80326984 nop #endif jalr $t2 - nop -#if defined(VERSION_EU) || defined(VERSION_SH) + nop +#ifdef VERSION_EU_SH beqz $v0, .L803269A4 #ifdef VERSION_SH li $a0, 0x10 #else nop #endif - b .L80326B9C + b redispatch nop #endif .L803269A4: jal send_mesg -#if defined(VERSION_EU) || defined(VERSION_SH) +#ifdef VERSION_EU_SH nop - b .L8032692C + b next_interrupt nop #else li $a0, 16 li $at, -2049 - b .L8032692C + b next_interrupt and $s0, $s0, $at #endif -glabel L803269B8 -#if defined(VERSION_EU) || defined(VERSION_SH) - lui $t0, %hi(__OSGlobalIntMask) - addiu $t0, %lo(__OSGlobalIntMask) +#endif +glabel rcp +#ifdef VERSION_EU_SH + la $t0, __OSGlobalIntMask lw $t0, ($t0) #endif - lui $s1, %hi(MI_INTR_REG) - lw $s1, %lo(MI_INTR_REG)($s1) -#if defined(VERSION_EU) || defined(VERSION_SH) + lui $s1, %hi(PHYS_TO_K1(MI_INTR_REG)) + lw $s1, %lo(PHYS_TO_K1(MI_INTR_REG))($s1) +#ifdef VERSION_CN + la $t0, __OSGlobalIntMask + lw $t0, ($t0) +#endif +#ifdef VERSION_EU_SH_CN srl $t0, $t0, 0x10 and $s1, $s1, $t0 #else andi $s1, $s1, 0x3f #endif - andi $t1, $s1, 1 - beqz $t1, .L80326A18 + andi $t1, $s1, MI_INTR_SP + beqz $t1, vi nop - lui $t4, %hi(SP_STATUS_REG) - lw $t4, %lo(SP_STATUS_REG)($t4) - li $t1, 8 - lui $at, %hi(SP_STATUS_REG) +#ifdef VERSION_CN + andi $s1, $s1, 0x3e +#endif + lui $t4, %hi(PHYS_TO_K1(SP_STATUS_REG)) + lw $t4, %lo(PHYS_TO_K1(SP_STATUS_REG))($t4) +#ifdef VERSION_CN + li $t1, SP_CLR_INTR | SP_CLR_SIG3 +#else + li $t1, SP_CLR_INTR +#endif + lui $at, %hi(PHYS_TO_K1(SP_STATUS_REG)) +#ifdef VERSION_CN + sw $t1, %lo(PHYS_TO_K1(SP_STATUS_REG))($at) + andi $t4, $t4, 0x300 + beqz $t4, sp_other_break + nop +#else andi $t4, $t4, 0x300 andi $s1, $s1, 0x3e - beqz $t4, .L80326A08 - sw $t1, %lo(SP_STATUS_REG)($at) + beqz $t4, sp_other_break + sw $t1, %lo(PHYS_TO_K1(SP_STATUS_REG))($at) +#endif jal send_mesg li $a0, 32 - beqz $s1, .L80326ADC + beqz $s1, no_more_rcp_ints nop - b .L80326A18 + b vi nop -.L80326A08: +sp_other_break: jal send_mesg li $a0, 88 - beqz $s1, .L80326ADC + beqz $s1, no_more_rcp_ints nop -.L80326A18: +vi: andi $t1, $s1, 8 - beqz $t1, .L80326A3C - lui $at, %hi(VI_CURRENT_REG) + beqz $t1, ai +#ifdef VERSION_CN + nop andi $s1, $s1, 0x37 - sw $zero, %lo(VI_CURRENT_REG)($at) + lui $at, %hi(PHYS_TO_K1(VI_CURRENT_REG)) +#else + lui $at, %hi(PHYS_TO_K1(VI_CURRENT_REG)) + andi $s1, $s1, 0x37 +#endif + sw $zero, %lo(PHYS_TO_K1(VI_CURRENT_REG))($at) jal send_mesg li $a0, 56 - beqz $s1, .L80326ADC + beqz $s1, no_more_rcp_ints nop -.L80326A3C: +ai: andi $t1, $s1, 4 - beqz $t1, .L80326A68 + beqz $t1, si nop - li $t1, 1 - lui $at, %hi(AI_STATUS_REG) +#ifdef VERSION_CN andi $s1, $s1, 0x3b - sw $t1, %lo(AI_STATUS_REG)($at) +#endif + li $t1, 1 + lui $at, %hi(PHYS_TO_K1(AI_STATUS_REG)) +#ifndef VERSION_CN + andi $s1, $s1, 0x3b +#endif + sw $t1, %lo(PHYS_TO_K1(AI_STATUS_REG))($at) jal send_mesg li $a0, 48 - beqz $s1, .L80326ADC + beqz $s1, no_more_rcp_ints nop -.L80326A68: +si: andi $t1, $s1, 2 - beqz $t1, .L80326A8C - lui $at, %hi(SI_STATUS_REG) + beqz $t1, pi +#ifdef VERSION_CN + nop +#else + lui $at, %hi(PHYS_TO_K1(SI_STATUS_REG)) +#endif andi $s1, $s1, 0x3d - sw $zero, %lo(SI_STATUS_REG)($at) +#ifdef VERSION_CN + lui $at, %hi(PHYS_TO_K1(SI_STATUS_REG)) +#endif + sw $zero, %lo(PHYS_TO_K1(SI_STATUS_REG))($at) jal send_mesg li $a0, 40 - beqz $s1, .L80326ADC + beqz $s1, no_more_rcp_ints nop -.L80326A8C: +pi: andi $t1, $s1, 0x10 - beqz $t1, .L80326AB8 + beqz $t1, dp nop - li $t1, 2 - lui $at, %hi(PI_STATUS_REG) +#ifdef VERSION_CN andi $s1, $s1, 0x2f - sw $t1, %lo(PI_STATUS_REG)($at) + li $t1, 2 + lui $at, %hi(PHYS_TO_K1(PI_STATUS_REG)) + sw $t1, %lo(PHYS_TO_K1(PI_STATUS_REG))($at) + la $t1, D_CN_80319658 + lw $t2, ($t1) + beqz $t2, .L803076C0 + nop + lw $sp, 4($t1) + jalr $t2 + move $a0, $v0 + bnez $v0, .L803076C8 + nop +.L803076C0: +#else + li $t1, 2 + lui $at, %hi(PHYS_TO_K1(PI_STATUS_REG)) + andi $s1, $s1, 0x2f + sw $t1, %lo(PHYS_TO_K1(PI_STATUS_REG))($at) +#endif jal send_mesg li $a0, 64 - beqz $s1, .L80326ADC +.L803076C8: + beqz $s1, no_more_rcp_ints nop -.L80326AB8: +dp: andi $t1, $s1, 0x20 - beqz $t1, .L80326ADC + beqz $t1, no_more_rcp_ints nop - li $t1, 2048 - lui $at, %hi(MI_MODE_REG) +#ifdef VERSION_CN andi $s1, $s1, 0x1f - sw $t1, %lo(MI_MODE_REG)($at) +#endif + li $t1, MI_CLR_DP_INTR + lui $at, %hi(PHYS_TO_K1(MI_MODE_REG)) +#ifndef VERSION_CN + andi $s1, $s1, 0x1f +#endif + sw $t1, %lo(PHYS_TO_K1(MI_MODE_REG))($at) jal send_mesg li $a0, 72 -.L80326ADC: +no_more_rcp_ints: li $at, -1025 - b .L8032692C + b next_interrupt and $s0, $s0, $at -glabel L80326AE8 +glabel prenmi lw $k1, 0x118($k0) li $at, -4097 - lui $t1, %hi(D_80334808) +#ifdef VERSION_CN and $k1, $k1, $at sw $k1, 0x118($k0) - addiu $t1, %lo(D_80334808) + la $t1, __osShutdown +#else + lui $t1, %hi(__osShutdown) + and $k1, $k1, $at + sw $k1, 0x118($k0) + addiu $t1, %lo(__osShutdown) +#endif lw $t2, ($t1) - beqz $t2, .L80326B14 + beqz $t2, firstnmi +#ifdef VERSION_CN + nop +#endif li $at, -4097 - b .L80326B9C + b redispatch and $s0, $s0, $at -.L80326B14: +firstnmi: li $t2, 1 sw $t2, ($t1) jal send_mesg li $a0, 112 - lui $t2, %hi(D_80334890 + 0x8) - lw $t2, %lo(D_80334890 + 0x8)($t2) +#ifdef VERSION_CN li $at, -4097 and $s0, $s0, $at +#endif + lui $t2, %hi(__osThreadTail + 0x8) + lw $t2, %lo(__osThreadTail + 0x8)($t2) +#ifndef VERSION_CN + li $at, -4097 + and $s0, $s0, $at +#endif lw $k1, 0x118($t2) +#ifdef VERSION_CN + li $at, -4097 +#endif and $k1, $k1, $at - b .L80326B9C + b redispatch sw $k1, 0x118($t2) -glabel L80326B44 +glabel sw2 li $at, -513 and $t0, $t0, $at mtc0 $t0, $13 +#ifdef VERSION_CN + li $a0, 8 + jal send_mesg + nop +#else jal send_mesg li $a0, 8 +#endif li $at, -513 - b .L8032692C + b next_interrupt and $s0, $s0, $at -glabel L80326B64 +glabel sw1 li $at, -257 and $t0, $t0, $at mtc0 $t0, $13 +#ifdef VERSION_CN + li $a0, 0 + jal send_mesg + nop +#else jal send_mesg li $a0, 0 +#endif li $at, -257 - b .L8032692C + b next_interrupt and $s0, $s0, $at -.L80326B84: +handle_break: li $t1, 1 sh $t1, 0x12($k0) jal send_mesg li $a0, 80 - b .L80326B9C + b redispatch nop -.L80326B9C: -glabel L80326B9C - lui $t2, %hi(D_80334890 + 0x8) - lw $t2, %lo(D_80334890 + 0x8)($t2) +glabel redispatch +#ifdef VERSION_CN + lw $t1, 4($k0) + lui $t2, %hi(__osThreadTail + 0x8) + lw $t2, %lo(__osThreadTail + 0x8)($t2) + lw $t3, 4($t2) + slt $at, $t1, $t3 + beqz $at, enqueue_running + nop + move $a1, $k0 + la $a0, __osThreadTail + 0x8 + jal __osEnqueueThread + nop +#else + lui $t2, %hi(__osThreadTail + 0x8) + lw $t2, %lo(__osThreadTail + 0x8)($t2) lw $t1, 4($k0) lw $t3, 4($t2) slt $at, $t1, $t3 - beqz $at, .L80326BD0 + beqz $at, enqueue_running nop - lui $a0, %hi(D_80334890 + 0x8) + lui $a0, %hi(__osThreadTail + 0x8) move $a1, $k0 jal __osEnqueueThread - addiu $a0, %lo(D_80334890 + 0x8) + addiu $a0, %lo(__osThreadTail + 0x8) +#endif j __osDispatchThread nop -.L80326BD0: - lui $t1, %hi(D_80334890 + 0x8) - addiu $t1, %lo(D_80334890 + 0x8) +enqueue_running: + la $t1, __osThreadTail + 0x8 lw $t2, ($t1) sw $t2, ($k0) j __osDispatchThread sw $k0, ($t1) -.L80326BE8: -glabel L80326BE8 - lui $at, %hi(D_80334890 + 0x14) - sw $k0, %lo(D_80334890 + 0x14)($at) +glabel panic + lui $at, %hi(__osThreadTail + 0x14) + sw $k0, %lo(__osThreadTail + 0x14)($at) li $t1, 1 sh $t1, 0x10($k0) li $t1, 2 @@ -507,11 +746,15 @@ glabel L80326BE8 nop glabel send_mesg - lui $t2, %hi(__osEventStateTab) - addiu $t2, %lo(__osEventStateTab) +#ifdef VERSION_CN + move $s2, $ra +#endif + la $t2, __osEventStateTab addu $t2, $t2, $a0 lw $t1, ($t2) +#ifndef VERSION_CN move $s2, $ra +#endif beqz $t1, .L80326CC4 nop lw $t3, 8($t1) @@ -521,9 +764,14 @@ glabel send_mesg nop lw $t5, 0xc($t1) addu $t5, $t5, $t3 +#ifdef VERSION_CN + bnez $t4, .L80326C60 + div $zero, $t5, $t4 +#else div $zero, $t5, $t4 bnez $t4, .L80326C60 nop +#endif break 7 .L80326C60: li $at, -1 @@ -533,13 +781,26 @@ glabel send_mesg nop break 6 .L80326C78: +#ifdef VERSION_CN + mfhi $t5 + lw $t4, 0x14($t1) + li $at, 4 + mult $t5, $at + mflo $t5 +#else lw $t4, 0x14($t1) mfhi $t5 sll $t5, $t5, 2 +#endif addu $t4, $t4, $t5 lw $t5, 4($t2) +#ifdef VERSION_CN + sw $t5, ($t4) + addiu $t2, $t3, 1 +#else addiu $t2, $t3, 1 sw $t5, ($t4) +#endif sw $t2, 8($t1) lw $t2, ($t1) lw $t3, ($t2) @@ -548,34 +809,51 @@ glabel send_mesg jal __osPopThread move $a0, $t1 move $t2, $v0 - lui $a0, %hi(D_80334890 + 0x8) +#ifdef VERSION_CN + move $a1, $t2 + la $a0, __osThreadTail + 0x8 + jal __osEnqueueThread + nop +#else + lui $a0, %hi(__osThreadTail + 0x8) move $a1, $t2 jal __osEnqueueThread - addiu $a0, %lo(D_80334890 + 0x8) + addiu $a0, %lo(__osThreadTail + 0x8) +#endif .L80326CC4: jr $s2 nop -.L80326CCC: +handle_CpU: // coprocessor error lui $at, 0x3000 and $t1, $t0, $at srl $t1, $t1, 0x1c li $t2, 1 - bne $t1, $t2, .L80326BE8 + bne $t1, $t2, panic nop +#ifdef VERSION_CN + li $t1, 1 + sw $t1, 0x18($k0) + lw $k1, 0x118($k0) + lui $at, 0x2000 + or $k1, $k1, $at +#else lw $k1, 0x118($k0) lui $at, 0x2000 li $t1, 1 or $k1, $k1, $at sw $t1, 0x18($k0) - b .L80326BD0 +#endif + b enqueue_running sw $k1, 0x118($k0) glabel __osEnqueueAndYield - lui $a1, %hi(D_80334890 + 0x10) - lw $a1, %lo(D_80334890 + 0x10)($a1) + lui $a1, %hi(__osThreadTail + 0x10) + lw $a1, %lo(__osThreadTail + 0x10)($a1) mfc0 $t0, $12 +#ifndef VERSION_CN lw $k1, 0x18($a1) +#endif ori $t0, $t0, 2 sw $t0, 0x118($a1) sd $s0, 0x98($a1) @@ -590,50 +868,73 @@ glabel __osEnqueueAndYield sd $sp, 0xf0($a1) sd $fp, 0xf8($a1) sd $ra, 0x100($a1) +#ifdef VERSION_CN + sw $ra, 0x11c($a1) + lw $k1, 0x18($a1) + beqz $k1, .L80326D70 + nop + cfc1 $k1, $31 + sw $k1, 0x12c($a1) +#else beqz $k1, .L80326D70 sw $ra, 0x11c($a1) cfc1 $k1, $31 +#endif sdc1 $f20, 0x180($a1) sdc1 $f22, 0x188($a1) sdc1 $f24, 0x190($a1) sdc1 $f26, 0x198($a1) sdc1 $f28, 0x1a0($a1) sdc1 $f30, 0x1a8($a1) +#ifndef VERSION_CN sw $k1, 0x12c($a1) +#endif .L80326D70: -#if defined(VERSION_EU) || defined(VERSION_SH) +#ifdef VERSION_EU_SH_CN lw $k1, 0x118($a1) andi $t1, $k1, 0xff00 beqz $t1, .L802F3FBC nop - lui $t0, %hi(__OSGlobalIntMask) - addiu $t0, %lo(__OSGlobalIntMask) + la $t0, __OSGlobalIntMask lw $t0, ($t0) - li $at, -1 + li $at, 0xFFFFFFFF xor $t0, $t0, $at - lui $at, (0xFFFF00FF >> 16) - andi $t0, $t0, 0xff00 - ori $at, (0xFFFF00FF & 0xFFFF) +#ifdef VERSION_CN + andi $t0, $t0, SR_IMASK or $t1, $t1, $t0 + li $at, ~SR_IMASK +#else + lui $at, (~SR_IMASK >> 16) & 0xFFFF + andi $t0, $t0, SR_IMASK + ori $at, (~SR_IMASK & 0xFFFF) + or $t1, $t1, $t0 +#endif and $k1, $k1, $at or $k1, $k1, $t1 sw $k1, 0x118($a1) .L802F3FBC: #endif - lui $k1, %hi(MI_INTR_MASK_REG) - lw $k1, %lo(MI_INTR_MASK_REG)($k1) -#if defined(VERSION_EU) || defined(VERSION_SH) + lui $k1, %hi(PHYS_TO_K1(MI_INTR_MASK_REG)) + lw $k1, %lo(PHYS_TO_K1(MI_INTR_MASK_REG))($k1) +#ifdef VERSION_EU_SH_CN beqz $k1, .L802F3FF4 nop - lui $k0, %hi(__OSGlobalIntMask) - addiu $k0, %lo(__OSGlobalIntMask) + la $k0, __OSGlobalIntMask lw $k0, ($k0) +#ifdef VERSION_CN + srl $k0, $k0, 0x10 + li $at, 0xFFFFFFFF + xor $k0, $k0, $at + andi $k0, $k0, 0x3f lw $t0, 0x128($a1) - li $at, -1 +#else + lw $t0, 0x128($a1) + li $at, 0xFFFFFFFF srl $k0, $k0, 0x10 xor $k0, $k0, $at andi $k0, $k0, 0x3f +#endif and $k0, $k0, $t0 or $k1, $k1, $k0 .L802F3FF4: @@ -648,9 +949,14 @@ glabel __osEnqueueAndYield // enqueue and pop look like compiled functions? but there's no easy way to extract them glabel __osEnqueueThread +#ifdef VERSION_CN + move $t9, $a0 +#endif lw $t8, ($a0) lw $t7, 4($a1) +#ifndef VERSION_CN move $t9, $a0 +#endif lw $t6, 4($t8) slt $at, $t6, $t7 bnez $at, .L80326DC4 @@ -675,35 +981,61 @@ glabel __osPopThread jr $ra sw $t9, ($a0) +#ifdef VERSION_CN +func_unused: + jr $ra + nop +#endif + glabel __osDispatchThread - lui $a0, %hi(D_80334890 + 0x8) +#ifdef VERSION_CN + la $a0, __osThreadTail + 0x8 jal __osPopThread - addiu $a0, %lo(D_80334890 + 0x8) - lui $at, %hi(D_80334890 + 0x10) - sw $v0, %lo(D_80334890 + 0x10)($at) + nop +#else + lui $a0, %hi(__osThreadTail + 0x8) + jal __osPopThread + addiu $a0, %lo(__osThreadTail + 0x8) +#endif + lui $at, %hi(__osThreadTail + 0x10) + sw $v0, %lo(__osThreadTail + 0x10)($at) li $t0, 4 sh $t0, 0x10($v0) move $k0, $v0 -#if defined(VERSION_EU) || defined(VERSION_SH) +#ifdef VERSION_EU_SH_CN +#ifdef VERSION_CN + lw $k1, 0x118($k0) + la $t0, __OSGlobalIntMask + lw $t0, ($t0) + andi $t0, $t0, SR_IMASK + andi $t1, $k1, SR_IMASK + and $t1, $t1, $t0 + li $at, ~SR_IMASK +#else lui $t0, %hi(__OSGlobalIntMask) lw $k1, 0x118($k0) addiu $t0, %lo(__OSGlobalIntMask) lw $t0, ($t0) - lui $at, (0xFFFF00FF >> 16) - andi $t1, $k1, 0xff00 - ori $at, (0xFFFF00FF & 0xFFFF) - andi $t0, $t0, 0xff00 + lui $at, (~SR_IMASK >> 16) & 0xFFFF + andi $t1, $k1, SR_IMASK + ori $at, (~SR_IMASK & 0xFFFF) + andi $t0, $t0, SR_IMASK and $t1, $t1, $t0 +#endif and $k1, $k1, $at or $k1, $k1, $t1 mtc0 $k1, $12 #endif .L80326E08: +#ifndef VERSION_CN ld $k1, 0x108($k0) +#endif ld $at, 0x20($k0) ld $v0, 0x28($k0) +#ifndef VERSION_CN mtlo $k1 ld $k1, 0x110($k0) +#endif ld $v1, 0x30($k0) ld $a0, 0x38($k0) ld $a1, 0x40($k0) @@ -728,13 +1060,21 @@ glabel __osDispatchThread ld $t8, 0xd8($k0) ld $t9, 0xe0($k0) ld $gp, 0xe8($k0) +#ifndef VERSION_CN mthi $k1 +#endif ld $sp, 0xf0($k0) ld $fp, 0xf8($k0) ld $ra, 0x100($k0) +#ifdef VERSION_CN + ld $k1, 0x108($k0) + mtlo $k1 + ld $k1, 0x110($k0) + mthi $k1 +#endif lw $k1, 0x11c($k0) mtc0 $k1, $14 -#if !defined(VERSION_EU) && !defined(VERSION_SH) +#ifndef VERSION_EU_SH_CN lw $k1, 0x118($k0) mtc0 $k1, $12 #endif @@ -761,20 +1101,23 @@ glabel __osDispatchThread ldc1 $f30, 0x1a8($k0) .L80326EF0: lw $k1, 0x128($k0) -#if defined(VERSION_EU) || defined(VERSION_SH) - lui $k0, %hi(__OSGlobalIntMask) - addiu $k0, %lo(__OSGlobalIntMask) +#ifdef VERSION_EU_SH_CN + la $k0, __OSGlobalIntMask lw $k0, ($k0) srl $k0, $k0, 0x10 and $k1, $k1, $k0 #endif sll $k1, $k1, 1 - lui $k0, %hi(D_803386D0) - addiu $k0, %lo(D_803386D0) + la $k0, __osRcpImTable addu $k1, $k1, $k0 lhu $k1, ($k1) - lui $k0, %hi(MI_INTR_MASK_REG) - addiu $k0, %lo(MI_INTR_MASK_REG) +#ifdef VERSION_CN + li $k0, PHYS_TO_K1(MI_INTR_MASK_REG) +#else + // TODO: is this an la? + lui $k0, %hi(PHYS_TO_K1(MI_INTR_MASK_REG)) + addiu $k0, %lo(PHYS_TO_K1(MI_INTR_MASK_REG)) +#endif sw $k1, ($k0) nop nop @@ -787,40 +1130,54 @@ glabel __osCleanupThread .section .data -glabel D_80334920 +glabel __osHwIntTable + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 +#ifdef VERSION_CN + // CN: table is now 2 words per entry (handler, sp) .word 0 .word 0 .word 0 .word 0 .word 0 +// Is this part of __osHwIntTable? +glabel D_CN_80319658 + .word 0 +#endif + +#ifndef VERSION_EU_SH_CN glabel D_80334934 .word 0 glabel D_80334938 .word 0 .word 0 +#endif .section .rodata -glabel D_80338610 +glabel __osIntOffTable .byte 0x00,0x14,0x18,0x18,0x1C,0x1C,0x1C,0x1C,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x04,0x08,0x08,0x0C,0x0C,0x0C,0x0C,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10 -glabel jtbl_80338630 - .word L80326B9C - .word L80326B64 - .word L80326B44 - .word L803269B8 - .word L80326984 - .word L80326AE8 -#if defined(VERSION_EU) || defined(VERSION_SH) - .word L802F3B28 - .word L802F3B34 +glabel __osIntTable + .word redispatch + .word sw1 + .word sw2 + .word rcp + .word cart + .word prenmi +#ifdef VERSION_EU_SH_CN + .word IP6_Hdlr + .word IP7_Hdlr #else - .word L80326BE8 - .word L80326BE8 + .word panic + .word panic #endif - .word L80326964 + .word counter .word 0 .word 0 .word 0 diff --git a/lib/asm/__osGetCause.s b/lib/asm/__osGetCause.s index 56371707..770e2edb 100644 --- a/lib/asm/__osGetCause.s +++ b/lib/asm/__osGetCause.s @@ -1,5 +1,4 @@ .set noreorder // don't insert nops after branches -.set gp=64 #include "macros.inc" diff --git a/lib/asm/__osGetSR.s b/lib/asm/__osGetSR.s index 0ed57883..96d71a8a 100644 --- a/lib/asm/__osGetSR.s +++ b/lib/asm/__osGetSR.s @@ -1,5 +1,4 @@ .set noreorder // don't insert nops after branches -.set gp=64 #include "macros.inc" diff --git a/lib/asm/__osProbeTLB.s b/lib/asm/__osProbeTLB.s index 5f955bc9..e6369c93 100644 --- a/lib/asm/__osProbeTLB.s +++ b/lib/asm/__osProbeTLB.s @@ -1,6 +1,5 @@ .set noat // allow manual use of $at .set noreorder // don't insert nops after branches -.set gp=64 #include "macros.inc" @@ -10,7 +9,7 @@ glabel __osProbeTLB mfc0 $t0, $10 andi $t1, $t0, 0xff - li $at, -8192 + li $at, 0xFFFFE000 and $t2, $a0, $at or $t1, $t1, $t2 mtc0 $t1, $10 @@ -58,7 +57,3 @@ glabel __osProbeTLB mtc0 $t0, $10 jr $ra nop - - nop - nop - diff --git a/lib/asm/__osRestoreInt.s b/lib/asm/__osRestoreInt.s index 9b2c80ff..5d11c9f2 100644 --- a/lib/asm/__osRestoreInt.s +++ b/lib/asm/__osRestoreInt.s @@ -1,19 +1,16 @@ .set noreorder // don't insert nops after branches -.set gp=64 #include "macros.inc" +#include .section .text, "ax" glabel __osRestoreInt - mfc0 $t0, $12 + mfc0 $t0, C0_SR or $t0, $t0, $a0 - mtc0 $t0, $12 + mtc0 $t0, C0_SR nop nop jr $ra nop - - nop - diff --git a/lib/asm/__osSetCompare.s b/lib/asm/__osSetCompare.s index 2df90585..df66a566 100644 --- a/lib/asm/__osSetCompare.s +++ b/lib/asm/__osSetCompare.s @@ -1,15 +1,65 @@ +.set noat .set noreorder // don't insert nops after branches -.set gp=64 #include "macros.inc" +#include + .section .text, "ax" +#ifdef VERSION_CN + glabel __osSetCompare - mtc0 $a0, $11 + addiu $sp, $sp, -0x38 + sd $ra, 0x30($sp) + sd $fp, 0x28($sp) + move $fp, $sp + sw $a0, 0x3c($fp) + lw $v0, 0x3c($fp) + beqz $v0, .L8030A25C + nop + jal __osDisableInt + nop + sw $v0, 0x20($fp) + lw $v0, 0x3c($fp) + lui $v1, %hi(sLastHighestCount2) # $v1, 0x8032 + lw $v1, %lo(sLastHighestCount2)($v1) + sltu $v0, $v0, $v1 + lui $v1, %hi(sNumCountOverflows2) # $v1, 0x8032 + lw $v1, %lo(sNumCountOverflows2)($v1) + addu $v0, $v0, $v1 + sw $v0, 0x24($fp) + lwu $v0, 0x24($fp) + dsll32 $v1, $v0, 0 + lwu $a0, 0x3c($fp) + or $v0, $v1, $a0 + move $a0, $v0 + dsll $v1, $a0, 1 + daddu $v1, $v1, $v0 + dsll $a0, $v1, 6 + li $at, 125 + ddivu $zero, $a0, $at + mflo $v0 + dsll32 $v0, $v0, 0 + dsra32 $v0, $v0, 0 + sw $v0, 0x3c($fp) + jal __osRestoreInt + lw $a0, 0x20($fp) +.L8030A25C: + lw $a1, 0x3c($fp) + mtc0 $a1, C0_COMPARE + move $sp, $fp + ld $ra, 0x30($sp) + ld $fp, 0x28($sp) + jr $ra + addiu $sp, $sp, 0x38 + +#else + +glabel __osSetCompare + mtc0 $a0, C0_COMPARE jr $ra nop - nop - +#endif diff --git a/lib/asm/__osSetFpcCsr.s b/lib/asm/__osSetFpcCsr.s index 0d5e75bc..c11fcd85 100644 --- a/lib/asm/__osSetFpcCsr.s +++ b/lib/asm/__osSetFpcCsr.s @@ -1,5 +1,4 @@ .set noreorder // don't insert nops after branches -.set gp=64 #include "macros.inc" diff --git a/lib/asm/__osSetSR.s b/lib/asm/__osSetSR.s index 00544244..fc89627f 100644 --- a/lib/asm/__osSetSR.s +++ b/lib/asm/__osSetSR.s @@ -1,5 +1,4 @@ .set noreorder // don't insert nops after branches -.set gp=64 #include "macros.inc" diff --git a/lib/asm/__osSetWatchLo.s b/lib/asm/__osSetWatchLo.s new file mode 100644 index 00000000..48e0667d --- /dev/null +++ b/lib/asm/__osSetWatchLo.s @@ -0,0 +1,13 @@ +.set noreorder // don't insert nops after branches + +#include "macros.inc" + + +.section .text, "ax" + +glabel __osSetWatchLo + mtc0 $a0, $18 + nop + jr $ra + nop + diff --git a/lib/asm/__os_eu_802ef550.s b/lib/asm/__os_eu_802ef550.s index 4f723ddb..15ac8f3f 100644 --- a/lib/asm/__os_eu_802ef550.s +++ b/lib/asm/__os_eu_802ef550.s @@ -1,6 +1,5 @@ -.set noreorder // don't insert nops after branches -.set gp=64 .set noat +.set noreorder // don't insert nops after branches #include "macros.inc" diff --git a/lib/asm/bcopy.s b/lib/asm/bcopy.s index e4f26909..859455c9 100644 --- a/lib/asm/bcopy.s +++ b/lib/asm/bcopy.s @@ -1,27 +1,45 @@ .set noat // allow manual use of $at .set noreorder // don't insert nops after branches -.set gp=64 #include "macros.inc" .section .text, "ax" +//TODO There seem to be patterns in these iQue diffs. Can we figure out what's causing them? Could this have been written in C? +//also ifdef hell lol + glabel bcopy beqz $a2, .L80323A4C move $a3, $a1 +#ifdef VERSION_CN + beq $a0, $a1, .L80323A4C + nop + slt $at, $a1, $a0 + bnez $at, .L80323A14 + nop + add $v0, $a0, $a2 + slt $at, $a1, $v0 + beqz $at, .L80323A14 + nop + b .L80323B78 + nop +.L80323A14: + slti $at, $a2, 0x10 +#else beq $a0, $a1, .L80323A4C slt $at, $a1, $a0 bnezl $at, .L80323A14 slti $at, $a2, 0x10 add $v0, $a0, $a2 slt $at, $a1, $v0 - beql $at, $zero, .L80323A14 + beqzl $at, .L80323A14 slti $at, $a2, 0x10 b .L80323B78 slti $at, $a2, 0x10 slti $at, $a2, 0x10 .L80323A14: +#endif bnez $at, .L80323A2C nop andi $v0, $a0, 3 @@ -35,14 +53,38 @@ glabel bcopy .L80323A38: lb $v0, ($a0) addiu $a0, $a0, 1 +#ifdef VERSION_CN + sb $v0, ($a1) + bne $a0, $v1, .L80323A38 + addiu $a1, $a1, 1 +#else addiu $a1, $a1, 1 bne $a0, $v1, .L80323A38 sb $v0, -1($a1) +#endif .L80323A4C: jr $ra move $v0, $a3 .L80323A54: +#ifdef VERSION_CN + beqz $v0, .L80323AB8 + nop + li $at, 1 + beq $v0, $at, .L80323A9C + nop + li $at, 2 + beq $v0, $at, .L80323A88 + nop + lb $v0, ($a0) + addiu $a0, $a0, 1 + sb $v0, ($a1) + addiu $a1, $a1, 1 + b .L80323AB8 + addiu $a2, $a2, -1 +.L80323A88: + lh $v0, ($a0) +#else beqz $v0, .L80323AB8 li $at, 1 beq $v0, $at, .L80323A9C @@ -57,23 +99,42 @@ glabel bcopy sb $v0, -1($a1) lh $v0, ($a0) .L80323A88: +#endif addiu $a0, $a0, 2 +#ifdef VERSION_CN + sh $v0, ($a1) + addiu $a1, $a1, 2 + b .L80323AB8 + addiu $a2, $a2, -2 +#else addiu $a1, $a1, 2 addiu $a2, $a2, -2 b .L80323AB8 sh $v0, -2($a1) +#endif .L80323A9C: lb $v0, ($a0) lh $v1, 1($a0) addiu $a0, $a0, 3 +#ifdef VERSION_CN + sb $v0, ($a1) + sh $v1, 1($a1) +#endif addiu $a1, $a1, 3 addiu $a2, $a2, -3 +#ifndef VERSION_CN sb $v0, -3($a1) sh $v1, -2($a1) +#endif .L80323AB8: slti $at, $a2, 0x20 +#ifdef VERSION_CN + bnez $at, .L80323B14 + nop +#else bnezl $at, .L80323B18 slti $at, $a2, 0x10 +#endif lw $v0, ($a0) lw $v1, 4($a0) lw $t0, 8($a0) @@ -83,7 +144,18 @@ glabel bcopy lw $t4, 0x18($a0) lw $t5, 0x1c($a0) addiu $a0, $a0, 0x20 +#ifdef VERSION_CN + sw $v0, ($a1) + sw $v1, 4($a1) + sw $t0, 8($a1) + sw $t1, 0xc($a1) + sw $t2, 0x10($a1) + sw $t3, 0x14($a1) + sw $t4, 0x18($a1) + sw $t5, 0x1c($a1) +#endif addiu $a1, $a1, 0x20 +#ifndef VERSION_CN addiu $a2, $a2, -0x20 sw $v0, -0x20($a1) sw $v1, -0x1c($a1) @@ -92,25 +164,47 @@ glabel bcopy sw $t2, -0x10($a1) sw $t3, -0xc($a1) sw $t4, -8($a1) +#endif b .L80323AB8 +#ifdef VERSION_CN + addiu $a2, $a2, -0x20 +#else sw $t5, -4($a1) +#endif .L80323B14: slti $at, $a2, 0x10 .L80323B18: +#ifdef VERSION_CN + bnez $at, .L80323B50 + nop +#else bnezl $at, .L80323B54 slti $at, $a2, 4 +#endif lw $v0, ($a0) lw $v1, 4($a0) lw $t0, 8($a0) lw $t1, 0xc($a0) addiu $a0, $a0, 0x10 +#ifdef VERSION_CN + sw $v0, ($a1) + sw $v1, 4($a1) + sw $t0, 8($a1) + sw $t1, 0xc($a1) +#endif addiu $a1, $a1, 0x10 +#ifndef VERSION_CN addiu $a2, $a2, -0x10 sw $v0, -0x10($a1) sw $v1, -0xc($a1) sw $t0, -8($a1) +#endif b .L80323B14 +#ifdef VERSION_CN + addiu $a2, $a2, -0x10 +#else sw $t1, -4($a1) +#endif .L80323B50: slti $at, $a2, 4 .L80323B54: @@ -118,15 +212,32 @@ glabel bcopy nop lw $v0, ($a0) addiu $a0, $a0, 4 +#ifdef VERSION_CN + sw $v0, ($a1) +#endif addiu $a1, $a1, 4 +#ifndef VERSION_CN addiu $a2, $a2, -4 +#endif b .L80323B50 +#ifdef VERSION_CN + addiu $a2, $a2, -4 +#else sw $v0, -4($a1) slti $at, $a2, 0x10 +#endif .L80323B78: add $a0, $a0, $a2 +#ifdef VERSION_CN + add $a1, $a1, $a2 + slti $at, $a2, 0x10 +#endif bnez $at, .L80323B94 +#ifdef VERSION_CN + nop +#else add $a1, $a1, $a2 +#endif andi $v0, $a0, 3 andi $v1, $a1, 3 beq $v0, $v1, .L80323BC4 @@ -140,44 +251,94 @@ glabel bcopy .L80323BA8: lb $v0, ($a0) addiu $a0, $a0, -1 +#ifdef VERSION_CN + sb $v0, 0($a1) +#else addiu $a1, $a1, -1 +#endif bne $a0, $v1, .L80323BA8 +#ifdef VERSION_CN + addiu $a1, $a1, -1 +#else sb $v0, 1($a1) +#endif jr $ra move $v0, $a3 .L80323BC4: beqz $v0, .L80323C28 +#ifdef VERSION_CN + nop +#endif li $at, 3 beq $v0, $at, .L80323C0C +#ifdef VERSION_CN + nop +#endif li $at, 2 +#ifdef VERSION_CN + beq $v0, $at, .L80323BF4 + nop +#else beql $v0, $at, .L80323BF8 lh $v0, -2($a0) +#endif lb $v0, -1($a0) addiu $a0, $a0, -1 +#ifdef VERSION_CN + sb $v0, -1($a1) +#endif addiu $a1, $a1, -1 +#ifndef VERSION_CN addiu $a2, $a2, -1 +#endif b .L80323C28 +#ifdef VERSION_CN + addiu $a2, $a2, -1 +#else sb $v0, ($a1) +#endif +.L80323BF4: lh $v0, -2($a0) .L80323BF8: addiu $a0, $a0, -2 +#ifdef VERSION_CN + sh $v0, -2($a1) +#endif addiu $a1, $a1, -2 +#ifndef VERSION_CN addiu $a2, $a2, -2 +#endif b .L80323C28 +#ifdef VERSION_CN + addiu $a2, $a2, -2 +#else sh $v0, ($a1) +#endif .L80323C0C: lb $v0, -1($a0) lh $v1, -3($a0) addiu $a0, $a0, -3 +#ifdef VERSION_CN + sb $v0, -1($a1) + sh $v1, -3($a1) + addiu $a1, $a1, -3 + addiu $a2, $a2, -3 +#else addiu $a1, $a1, -3 addiu $a2, $a2, -3 sb $v0, 2($a1) sh $v1, ($a1) +#endif .L80323C28: slti $at, $a2, 0x20 +#ifdef VERSION_CN + bnez $at, .L80323C84 + nop +#else bnezl $at, .L80323C88 slti $at, $a2, 0x10 +#endif lw $v0, -4($a0) lw $v1, -8($a0) lw $t0, -0xc($a0) @@ -187,6 +348,17 @@ glabel bcopy lw $t4, -0x1c($a0) lw $t5, -0x20($a0) addiu $a0, $a0, -0x20 +#ifdef VERSION_CN + sw $v0, -4($a1) + sw $v1, -8($a1) + sw $t0, -0xc($a1) + sw $t1, -0x10($a1) + sw $t2, -0x14($a1) + sw $t3, -0x18($a1) + sw $t4, -0x1c($a1) + sw $t5, -0x20($a1) + addiu $a1, $a1, -0x20 +#else addiu $a1, $a1, -0x20 addiu $a2, $a2, -0x20 sw $v0, 0x1c($a1) @@ -196,25 +368,47 @@ glabel bcopy sw $t2, 0xc($a1) sw $t3, 8($a1) sw $t4, 4($a1) +#endif b .L80323C28 +#ifdef VERSION_CN + addiu $a2, $a2, -0x20 +#else sw $t5, ($a1) +#endif .L80323C84: slti $at, $a2, 0x10 .L80323C88: +#ifdef VERSION_CN + bnez $at, .L80323CC0 + nop +#else bnezl $at, .L80323CC4 slti $at, $a2, 4 +#endif lw $v0, -4($a0) lw $v1, -8($a0) lw $t0, -0xc($a0) lw $t1, -0x10($a0) addiu $a0, $a0, -0x10 +#ifdef VERSION_CN + sw $v0, -4($a1) + sw $v1, -8($a1) + sw $t0, -0xc($a1) + sw $t1, -0x10($a1) + addiu $a1, $a1, -0x10 +#else addiu $a1, $a1, -0x10 addiu $a2, $a2, -0x10 sw $v0, 0xc($a1) sw $v1, 8($a1) sw $t0, 4($a1) +#endif b .L80323C84 +#ifdef VERSION_CN + addiu $a2, $a2, -0x10 +#else sw $t1, ($a1) +#endif .L80323CC0: slti $at, $a2, 4 .L80323CC4: @@ -222,11 +416,19 @@ glabel bcopy nop lw $v0, -4($a0) addiu $a0, $a0, -4 +#ifdef VERSION_CN + sw $v0, -4($a1) +#endif addiu $a1, $a1, -4 +#ifndef VERSION_CN addiu $a2, $a2, -4 +#endif b .L80323CC0 +#ifdef VERSION_CN + addiu $a2, $a2, -4 +#else sw $v0, ($a1) nop nop nop - +#endif diff --git a/lib/asm/bzero.s b/lib/asm/bzero.s index 1e073acb..cc542f67 100644 --- a/lib/asm/bzero.s +++ b/lib/asm/bzero.s @@ -1,13 +1,61 @@ .set noreorder // don't insert nops after branches -.set gp=64 #include "macros.inc" // this file is probably handwritten +//TODO There seem to be patterns in these iQue diffs. Can we figure out what's causing them? Could this have been written in C? See also bcopy.s. + .section .text, "ax" glabel bzero + +#ifdef VERSION_CN + negu $v1, $a0 + blt $a1, 0xc, .L80303790 + nop + andi $v1, $v1, 3 + beqz $v1, .L80303734 + subu $a1, $a1, $v1 + swl $zero, ($a0) + addu $a0, $a0, $v1 +.L80303734: + and $a3, $a1, -32 + beqz $a3, .L80303770 + subu $a1, $a1, $a3 + addu $a3, $a3, $a0 +.L80303748: + sw $zero, ($a0) + sw $zero, 4($a0) + sw $zero, 8($a0) + sw $zero, 0xc($a0) + addiu $a0, $a0, 0x20 + sw $zero, -0x10($a0) + sw $zero, -0xc($a0) + sw $zero, -8($a0) + bne $a0, $a3, .L80303748 + sw $zero, -4($a0) +.L80303770: + and $a3, $a1, -4 + beqz $a3, .L80303790 + subu $a1, $a1, $a3 + addu $a3, $a3, $a0 +.L80303784: + addiu $a0, $a0, 4 + bne $a0, $a3, .L80303784 + sw $zero, -4($a0) +.L80303790: + blez $a1, .L803037A8 + nop + addu $a1, $a1, $a0 +.L8030379C: + addiu $a0, $a0, 1 + bne $a0, $a1, .L8030379C + sb $zero, -1($a0) +.L803037A8: + jr $ra + nop +#else blt $a1, 0xc, .L803236BC negu $v1, $a0 andi $v1, $v1, 3 @@ -50,4 +98,5 @@ glabel bzero sb $zero, -1($a0) .L803236D4: jr $ra +#endif diff --git a/lib/asm/guMtxF2L.s b/lib/asm/guMtxF2L.s new file mode 100644 index 00000000..481213e3 --- /dev/null +++ b/lib/asm/guMtxF2L.s @@ -0,0 +1,46 @@ +.set noat +.set noreorder // don't insert nops after branches + +#include "macros.inc" + + +.section .text, "ax" + +#ifdef VERSION_CN + +.balign 32 + +glabel guMtxF2L + li $at, 0x47800000 // 65536.000000 + mtc1 $at, $f0 + lui $t9, 0xffff + addiu $t8, $a1, 0x20 +.L80306C70: + lwc1 $f4, ($a0) + mul.s $f6, $f4, $f0 + trunc.w.s $f8, $f6 + lwc1 $f10, 4($a0) + mul.s $f16, $f10, $f0 + trunc.w.s $f18, $f16 + mfc1 $t0, $f8 + mfc1 $t1, $f18 + and $t2, $t0, $t9 + srl $t3, $t1, 0x10 + or $t4, $t2, $t3 + sw $t4, ($a1) + sll $t5, $t0, 0x10 + andi $t6, $t1, 0xffff + or $t7, $t5, $t6 + sw $t7, 0x20($a1) + addiu $a1, $a1, 4 + bne $a1, $t8, .L80306C70 + addiu $a0, $a0, 8 + jr $ra + nop + + nop + nop + nop + nop + +#endif diff --git a/lib/asm/guMtxIdentF.s b/lib/asm/guMtxIdentF.s new file mode 100644 index 00000000..8cbb4d49 --- /dev/null +++ b/lib/asm/guMtxIdentF.s @@ -0,0 +1,32 @@ +.set noreorder // don't insert nops after branches + +#include "macros.inc" + + +.section .text, "ax" + +#ifdef VERSION_CN + +.balign 32 + +glabel guMtxIdentF + lui $t0, 0x3f80 + sw $t0, ($a0) + sw $zero, 4($a0) + sw $zero, 8($a0) + sw $zero, 0xc($a0) + sw $zero, 0x10($a0) + sw $t0, 0x14($a0) + sw $zero, 0x18($a0) + sw $zero, 0x1c($a0) + sw $zero, 0x20($a0) + sw $zero, 0x24($a0) + sw $t0, 0x28($a0) + sw $zero, 0x2c($a0) + sw $zero, 0x30($a0) + sw $zero, 0x34($a0) + sw $zero, 0x38($a0) + jr $ra + sw $t0, 0x3c($a0) + +#endif diff --git a/lib/asm/guNormalize.s b/lib/asm/guNormalize.s new file mode 100644 index 00000000..a02ad034 --- /dev/null +++ b/lib/asm/guNormalize.s @@ -0,0 +1,33 @@ +.set noreorder // don't insert nops after branches + +#include "macros.inc" + + +.section .text, "ax" + +#ifdef VERSION_CN + +glabel guNormalize + lwc1 $f4, ($a0) + lwc1 $f6, ($a1) + lwc1 $f8, ($a2) + mul.s $f10, $f4, $f4 + li $t0, 0x3F800000 # 1.000000 + mul.s $f16, $f6, $f6 + add.s $f18, $f10, $f16 + mul.s $f16, $f8, $f8 + add.s $f10, $f16, $f18 + mtc1 $t0, $f18 + sqrt.s $f16, $f10 + div.s $f10, $f18, $f16 + mul.s $f16, $f4, $f10 + nop + mul.s $f18, $f6, $f10 + nop + mul.s $f4, $f8, $f10 + swc1 $f16, ($a0) + swc1 $f18, ($a1) + jr $ra + swc1 $f4, ($a2) + +#endif diff --git a/lib/asm/guScale.s b/lib/asm/guScale.s new file mode 100644 index 00000000..c315e4c7 --- /dev/null +++ b/lib/asm/guScale.s @@ -0,0 +1,55 @@ +.set noat +.set noreorder // don't insert nops after branches + +#include "macros.inc" + + +.section .text, "ax" + +#ifdef VERSION_CN + +.balign 32 + +glabel guScale + li $at, 0x47800000 // 65536.000000 + mtc1 $at, $f4 + mtc1 $a1, $f6 + mul.s $f8, $f6, $f4 + trunc.w.s $f10, $f8 + mfc1 $t1, $f10 + srl $t2, $t1, 0x10 + sll $t0, $t2, 0x10 + sw $t0, ($a0) + sll $t2, $t1, 0x10 + sw $t2, 0x20($a0) + mtc1 $a2, $f6 + mul.s $f8, $f6, $f4 + trunc.w.s $f10, $f8 + mfc1 $t1, $f10 + srl $t0, $t1, 0x10 + sw $t0, 8($a0) + andi $t2, $t1, 0xffff + sw $t2, 0x28($a0) + mtc1 $a3, $f6 + mul.s $f8, $f6, $f4 + trunc.w.s $f10, $f8 + mfc1 $t1, $f10 + srl $t2, $t1, 0x10 + sll $t0, $t2, 0x10 + sw $t0, 0x14($a0) + sll $t2, $t1, 0x10 + sw $t2, 0x34($a0) + li $t0, 1 + sw $t0, 0x1c($a0) + sw $zero, 4($a0) + sw $zero, 0xc($a0) + sw $zero, 0x10($a0) + sw $zero, 0x18($a0) + sw $zero, 0x24($a0) + sw $zero, 0x2c($a0) + sw $zero, 0x30($a0) + sw $zero, 0x38($a0) + jr $ra + sw $zero, 0x3c($a0) + +#endif diff --git a/lib/asm/guTranslate.s b/lib/asm/guTranslate.s new file mode 100644 index 00000000..c0e02559 --- /dev/null +++ b/lib/asm/guTranslate.s @@ -0,0 +1,65 @@ +.set noat +.set noreorder // don't insert nops after branches + +#include "macros.inc" + + +.section .text, "ax" + +#ifdef VERSION_CN + +.balign 16 + +glabel guTranslate + li $at, 0x47800000 // 65536.000000 + mtc1 $at, $f4 + mtc1 $a1, $f6 + mul.s $f8, $f6, $f4 + trunc.w.s $f10, $f8 + mfc1 $t1, $f10 + mtc1 $a2, $f6 + mul.s $f8, $f6, $f4 + trunc.w.s $f10, $f8 + mfc1 $t3, $f10 + srl $t2, $t1, 0x10 + sll $t0, $t2, 0x10 + srl $t2, $t3, 0x10 + or $t0, $t0, $t2 + sw $t0, 0x18($a0) + sll $t0, $t1, 0x10 + sll $t2, $t3, 0x10 + srl $t2, $t2, 0x10 + or $t0, $t0, $t2 + sw $t0, 0x38($a0) + mtc1 $a3, $f6 + mul.s $f8, $f6, $f4 + trunc.w.s $f10, $f8 + mfc1 $t1, $f10 + srl $t2, $t1, 0x10 + sll $t0, $t2, 0x10 + addiu $t0, $t0, 1 + sw $t0, 0x1c($a0) + sll $t2, $t1, 0x10 + sw $t2, 0x3c($a0) + sw $zero, ($a0) + sw $zero, 4($a0) + sw $zero, 8($a0) + sw $zero, 0xc($a0) + sw $zero, 0x10($a0) + sw $zero, 0x14($a0) + sw $zero, 0x20($a0) + sw $zero, 0x24($a0) + sw $zero, 0x28($a0) + sw $zero, 0x2c($a0) + sw $zero, 0x30($a0) + sw $zero, 0x34($a0) + lui $t0, 1 + ori $t0, $t0, 0 + sw $t0, ($a0) + sw $t0, 0x14($a0) + lui $t0, (0x00000001 >> 16) # lui $t0, 0 + ori $t0, (0x00000001 & 0xFFFF) # ori $t0, $t0, 1 + jr $ra + sw $t0, 8($a0) + +#endif diff --git a/lib/asm/iQueKernelCalls.s b/lib/asm/iQueKernelCalls.s new file mode 100644 index 00000000..9dcde049 --- /dev/null +++ b/lib/asm/iQueKernelCalls.s @@ -0,0 +1,42 @@ +.set noat +.set noreorder // don't insert nops after branches + +#include "macros.inc" + +.macro def label, num + glabel \label + li $v0, \num + lui $t0, (0xA4300014 >> 16) + ori $t0, (0xA4300014 & 0xFFFF) + lw $t1, ($t0) // traps the iQue OS and performs the function + nop + jr $ra + nop +.endm + + +.section .text, "ax" + +def skGetId, 0x0 +def skLaunchSetup, 0x1 +def skLaunch, 0x2 +def skRecryptListValid, 0x3 +def skRecryptBegin, 0x4 +def skRecryptData, 0x5 +def skRecryptComputeState, 0x6 +def skRecryptEnd, 0x7 +def skSignHash, 0x8 +def skVerifyHash, 0x9 +def skGetConsumption, 0xa +def skAdvanceTicketWindow, 0xb +def skSetLimit, 0xc +def skExit, 0xd +def skKeepAlive, 0xe + +// developer calls +def sk0f, 0x0f +def sk10, 0x10 +def sk11, 0x11 +def sk12, 0x12 +def sk13, 0x13 +def sk14, 0x14 diff --git a/lib/asm/llmuldiv_gcc.s b/lib/asm/llmuldiv_gcc.s index 1582f878..9ef338ee 100644 --- a/lib/asm/llmuldiv_gcc.s +++ b/lib/asm/llmuldiv_gcc.s @@ -1,10 +1,11 @@ // assembler directives .set noat // allow manual use of $at .set noreorder // don't insert nops after branches -.set gp=64 #include "macros.inc" +#ifndef VERSION_CN + .section .text, "ax" @@ -98,3 +99,5 @@ glabel __divdi3 dsra32 $v1, $v1, 0 jr $ra dsra32 $v0, $v0, 0 + +#endif diff --git a/lib/asm/osGetCount.s b/lib/asm/osGetCount.s index b47b66ae..aa4f3316 100644 --- a/lib/asm/osGetCount.s +++ b/lib/asm/osGetCount.s @@ -1,11 +1,78 @@ .set noreorder // don't insert nops after branches -.set gp=64 #include "macros.inc" - .section .text, "ax" +#ifdef VERSION_CN + +glabel osGetCount + addiu $sp, $sp, -0x38 + sd $ra, 0x30($sp) + sd $fp, 0x28($sp) + jal __osDisableInt + move $fp, $sp + sw $v0, 0x24($fp) + mfc0 $a1, $9 + sw $a1, 0x20($fp) + lw $v0, 0x20($fp) + lui $v1, %hi(sLastHighestCount) # $v1, 0x8032 + lw $v1, %lo(sLastHighestCount)($v1) + sltu $v0, $v0, $v1 + beqz $v0, .L80304FCC + nop + lui $v0, %hi(sNumCountOverflows) # $v0, 0x8032 + lw $v0, %lo(sNumCountOverflows)($v0) + addiu $v1, $v0, 1 + sw $v1, sNumCountOverflows +.L80304FCC: + lw $v0, 0x20($fp) + sw $v0, sLastHighestCount + lui $v0, %hi(sNumCountOverflows) // $v0, 0x8032 + lwu $v0, %lo(sNumCountOverflows)($v0) + dsll32 $v1, $v0, 0 + lwu $a0, 0x20($fp) + or $v0, $v1, $a0 + move $a0, $v0 + dsll $v1, $a0, 5 + dsubu $v1, $v1, $v0 + dsll $a0, $v1, 2 + daddu $a0, $a0, $v0 +.set noat // gas seems to add an extra mflo $zero after, if we don't manually use $at + li $at, 192 + ddivu $zero, $a0, $at +.set at + mflo $v0 + dsll32 $v0, $v0, 0 + dsra32 $v0, $v0, 0 + sw $v0, 0x20($fp) + lw $v0, 0x20($fp) + lui $v1, %hi(sLastHighestCount2) // $v1, 0x8032 + lw $v1, %lo(sLastHighestCount2)($v1) + sltu $v0, $v0, $v1 + beqz $v0, .L80305044 + nop + lui $v0, %hi(sNumCountOverflows2) // $v0, 0x8032 + lw $v0, %lo(sNumCountOverflows2)($v0) + addiu $v1, $v0, 1 + sw $v1, sNumCountOverflows2 +.L80305044: + lw $v0, 0x20($fp) + sw $v0, sLastHighestCount2 + jal __osRestoreInt + lw $a0, 0x24($fp) + lw $v1, 0x20($fp) + j .L80305064 + move $v0, $v1 +.L80305064: + move $sp, $fp + ld $ra, 0x30($sp) + ld $fp, 0x28($sp) + jr $ra + addiu $sp, $sp, 0x38 + +#else + glabel osGetCount mfc0 $v0, $9 jr $ra @@ -13,3 +80,4 @@ glabel osGetCount nop +#endif diff --git a/lib/asm/osInvalDCache.s b/lib/asm/osInvalDCache.s index dca94af6..54bba4e8 100644 --- a/lib/asm/osInvalDCache.s +++ b/lib/asm/osInvalDCache.s @@ -1,6 +1,5 @@ .set noat // allow manual use of $at .set noreorder // don't insert nops after branches -.set gp=64 #include "macros.inc" @@ -9,42 +8,49 @@ glabel osInvalDCache blez $a1, .L80323500 - nop + nop li $t3, 8192 sltu $at, $a1, $t3 beqz $at, .L80323508 - nop + nop move $t0, $a0 addu $t1, $a0, $a1 sltu $at, $t0, $t1 beqz $at, .L80323500 - nop + nop +#ifdef VERSION_CN + addiu $t1, $t1, -0x10 andi $t2, $t0, 0xf beqz $t2, .L803234D0 - addiu $t1, $t1, -0x10 + nop +#else + andi $t2, $t0, 0xf + beqz $t2, .L803234D0 + addiu $t1, $t1, -0x10 +#endif subu $t0, $t0, $t2 cache 0x15, ($t0) sltu $at, $t0, $t1 beqz $at, .L80323500 - nop + nop addiu $t0, $t0, 0x10 .L803234D0: andi $t2, $t1, 0xf beqz $t2, .L803234F0 - nop + nop subu $t1, $t1, $t2 cache 0x15, 0x10($t1) sltu $at, $t1, $t0 bnez $at, .L80323500 - nop + nop .L803234F0: cache 0x11, ($t0) sltu $at, $t0, $t1 bnez $at, .L803234F0 - addiu $t0, $t0, 0x10 + addiu $t0, $t0, 0x10 .L80323500: jr $ra - nop + nop .L80323508: li $t0, K0BASE diff --git a/lib/asm/osInvalICache.s b/lib/asm/osInvalICache.s index fd9ea6a7..1d92d4df 100644 --- a/lib/asm/osInvalICache.s +++ b/lib/asm/osInvalICache.s @@ -1,6 +1,5 @@ .set noat // allow manual use of $at .set noreorder // don't insert nops after branches -.set gp=64 #include "macros.inc" @@ -19,8 +18,13 @@ glabel osInvalICache sltu $at, $t0, $t1 beqz $at, .L80323728 nop +#ifdef VERSION_CN + addiu $t1, $t1, -0x20 + andi $t2, $t0, 0x1f +#else andi $t2, $t0, 0x1f addiu $t1, $t1, -0x20 +#endif subu $t0, $t0, $t2 .L80323718: cache 0x10, ($t0) diff --git a/lib/asm/osMapTLB.s b/lib/asm/osMapTLB.s index 1910cd9d..891e4f11 100644 --- a/lib/asm/osMapTLB.s +++ b/lib/asm/osMapTLB.s @@ -1,5 +1,4 @@ .set noreorder // don't insert nops after branches -.set gp=64 #include "macros.inc" diff --git a/lib/asm/osMapTLBRdb.s b/lib/asm/osMapTLBRdb.s index 4bcba1d1..04c13e2a 100644 --- a/lib/asm/osMapTLBRdb.s +++ b/lib/asm/osMapTLBRdb.s @@ -1,6 +1,5 @@ .set noat // allow manual use of $at .set noreorder // don't insert nops after branches -.set gp=64 #include "macros.inc" diff --git a/lib/asm/osSetIntMask.s b/lib/asm/osSetIntMask.s index 6ea380e5..d5d70da6 100644 --- a/lib/asm/osSetIntMask.s +++ b/lib/asm/osSetIntMask.s @@ -1,34 +1,35 @@ .set noat // allow manual use of $at .set noreorder // don't insert nops after branches -.set gp=64 #include "macros.inc" -.eqv MI_INTR_MASK_REG, 0xA430000C +#include +#include +#include .section .text, "ax" glabel osSetIntMask -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) mfc0 $t4, $12 - andi $v0, $t4, 0xff01 + andi $v0, $t4, OS_IM_CPU lui $t0, %hi(__OSGlobalIntMask) // $t0, 0x8030 addiu $t0, %lo(__OSGlobalIntMask) // addiu $t0, $t0, 0x208c lw $t3, ($t0) - li $at, -1 + li $at, 0xFFFFFFFF xor $t0, $t3, $at - andi $t0, $t0, 0xff00 + andi $t0, $t0, SR_IMASK or $v0, $v0, $t0 #else mfc0 $t1, $12 - andi $v0, $t1, 0xff01 + andi $v0, $t1, OS_IM_CPU #endif - lui $t2, %hi(MI_INTR_MASK_REG) // $t2, 0xa430 - lw $t2, %lo(MI_INTR_MASK_REG)($t2) -#if defined(VERSION_EU) || defined(VERSION_SH) + lui $t2, %hi(PHYS_TO_K1(MI_INTR_MASK_REG)) // $t2, 0xa430 + lw $t2, %lo(PHYS_TO_K1(MI_INTR_MASK_REG))($t2) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) beqz $t2, .L80200074 srl $t1, $t3, 0x10 - li $at, -1 + li $at, 0xFFFFFFFF xor $t1, $t1, $at andi $t1, $t1, 0x3f or $t2, $t2, $t1 @@ -38,23 +39,23 @@ glabel osSetIntMask or $v0, $v0, $t2 lui $at, 0x3f and $t0, $a0, $at -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) and $t0, $t0, $t3 #endif srl $t0, $t0, 0xf - lui $t2, %hi(D_803386D0) + lui $t2, %hi(__osRcpImTable) addu $t2, $t2, $t0 - lhu $t2, %lo(D_803386D0)($t2) - lui $at, %hi(MI_INTR_MASK_REG) // $at, 0xa430 - sw $t2, %lo(MI_INTR_MASK_REG)($at) - andi $t0, $a0, 0xff01 -#if defined(VERSION_EU) || defined(VERSION_SH) + lhu $t2, %lo(__osRcpImTable)($t2) + lui $at, %hi(PHYS_TO_K1(MI_INTR_MASK_REG)) // $at, 0xa430 + sw $t2, %lo(PHYS_TO_K1(MI_INTR_MASK_REG))($at) + andi $t0, $a0, OS_IM_CPU +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) andi $t1, $t3, 0xff00 and $t0, $t0, $t1 #endif lui $at, (0xFFFF00FF >> 16) // lui $at, 0xffff ori $at, (0xFFFF00FF & 0xFFFF) // ori $at, $at, 0xff -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) and $t4, $t4, $at or $t4, $t4, $t0 mtc0 $t4, $12 @@ -71,7 +72,7 @@ glabel osSetIntMask .section .rodata -glabel D_803386D0 +glabel __osRcpImTable .half 0x0555 .half 0x0556 .half 0x0559 diff --git a/lib/asm/osUnmapTLBAll.s b/lib/asm/osUnmapTLBAll.s index 1548c162..ff692c3f 100644 --- a/lib/asm/osUnmapTLBAll.s +++ b/lib/asm/osUnmapTLBAll.s @@ -1,5 +1,4 @@ .set noreorder // don't insert nops after branches -.set gp=64 #include "macros.inc" @@ -8,7 +7,11 @@ glabel osUnmapTLBAll mfc0 $t0, $10 +#ifdef VERSION_CN + li $t1, 30 +#else li $t1, 31 +#endif lui $t2, 0x8000 mtc0 $t2, $10 mtc0 $zero, $2 @@ -20,13 +23,12 @@ glabel osUnmapTLBAll nop nop addi $t1, $t1, -1 +#ifdef VERSION_CN + bgez $t1, .L80321588 +#else bnezl $t1, .L80321588 #bnezl, bnez but with likely hint +#endif nop mtc0 $t0, $10 jr $ra nop - - nop - nop - nop - diff --git a/lib/asm/osWritebackDCache.s b/lib/asm/osWritebackDCache.s index e4a2ab0c..3d506ecb 100644 --- a/lib/asm/osWritebackDCache.s +++ b/lib/asm/osWritebackDCache.s @@ -1,5 +1,4 @@ .set noreorder // don't insert nops after branches -.set gp=64 #include "macros.inc" @@ -16,8 +15,13 @@ glabel osWritebackDCache addu $t1, $a0, $a1 bgeu $t0, $t1, .osWritebackDCacheReturn nop +#ifdef VERSION_CN + addiu $t1, $t1, -0x10 + andi $t2, $t0, 0xf +#else andi $t2, $t0, 0xf addiu $t1, $t1, -0x10 +#endif subu $t0, $t0, $t2 .L80324E28: cache 0x19, ($t0) diff --git a/lib/asm/osWritebackDCacheAll.s b/lib/asm/osWritebackDCacheAll.s index bb5fa41d..d194e8f7 100644 --- a/lib/asm/osWritebackDCacheAll.s +++ b/lib/asm/osWritebackDCacheAll.s @@ -1,6 +1,5 @@ .set noat // allow manual use of $at .set noreorder // don't insert nops after branches -.set gp=64 #include "macros.inc" diff --git a/lib/asm/parameters.s b/lib/asm/parameters.s index 5b402250..0921794c 100644 --- a/lib/asm/parameters.s +++ b/lib/asm/parameters.s @@ -1,6 +1,6 @@ .macro gsymbol sym addr .global \sym -.set \sym, \addr +.equ \sym, \addr #ifndef VERSION_JP nop nop @@ -16,7 +16,7 @@ gsymbol osCiCId 0x80000310 gsymbol osVersion 0x80000314 gsymbol osMemSize 0x80000318 gsymbol osAppNmiBuffer 0x8000031C -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) nop nop nop @@ -25,4 +25,10 @@ nop nop nop nop +#ifdef VERSION_CN +nop +nop +nop +nop +#endif #endif diff --git a/lib/asm/sqrtf.s b/lib/asm/sqrtf.s index 70984e56..91cd3eb5 100644 --- a/lib/asm/sqrtf.s +++ b/lib/asm/sqrtf.s @@ -1,6 +1,5 @@ .set noat // allow manual use of $at .set noreorder // don't insert nops after branches -.set gp=64 #include "macros.inc" diff --git a/lib/src/D_802F4380.c b/lib/src/D_802F4380.c deleted file mode 100644 index 7183ab1d..00000000 --- a/lib/src/D_802F4380.c +++ /dev/null @@ -1,147 +0,0 @@ -#include "libultra_internal.h" -#include "hardware.h" -#include "new_func.h" -#include "macros.h" - -#if defined(VERSION_EU) -u32 D_802F4380() { - u32 sp3c; - u32 sp38; - u32 sp34; - __OSTranxInfo *sp30; - __OSBlockInfo *sp2c; - u32 sp28; - UNUSED __OSBlockInfo *sp24; - if (!EU_D_80302090) { - return 0; - } - sp30 = &__osDiskHandle->transferInfo; - sp2c = &sp30->block[sp30->blockNum]; - sp38 = HW_REG(PI_STATUS_REG, u32); - if (sp38 & PI_STATUS_BUSY) { - HW_REG(PI_STATUS_REG, u32) = PI_STATUS_RESET_CONTROLLER | PI_STATUS_CLEAR_INTR; - WAIT_ON_IOBUSY(sp38); - sp3c = HW_REG(ASIC_STATUS, u32); - if (sp3c & MECHANIC_INTERRUPT) { - WAIT_ON_IOBUSY(sp38); - HW_REG(ASIC_BM_CTL, u32) = sp30->bmCtlShadow | MECHANIC_INTERRUPT_RESET; - } - sp30->errStatus = 75; - func_802F4A20(); - return 1; - } - WAIT_ON_IOBUSY(sp38); - sp3c = HW_REG(ASIC_STATUS, u32); - if (sp3c & MECHANIC_INTERRUPT) { - WAIT_ON_IOBUSY(sp38); - HW_REG(ASIC_BM_CTL, u32) = sp30->bmCtlShadow | MECHANIC_INTERRUPT_RESET; - sp30->errStatus = 0; - return 0; - } - if (sp3c & BUFFER_MANAGER_ERROR) { - sp30->errStatus = 3; - func_802F4A20(); - return 1; - } - if (sp30->cmdType == 1) { - if ((sp3c & DATA_REQUEST) == 0) { - if (sp30->sectorNum + 1 != sp30->transferMode * 85) { - sp30->errStatus = 6; - func_802F4A20(); - return 1; - } - HW_REG(PI_STATUS_REG, u32) = PI_STATUS_CLEAR_INTR; - __OSGlobalIntMask |= 0x00100401; - sp30->errStatus = 0; - func_802F4B08(); - return 1; - } - sp2c->dramAddr = (void *) ((u32) sp2c->dramAddr + sp2c->sectorSize); - sp30->sectorNum++; - osEPiRawStartDma(__osDiskHandle, 1, 0x05000400, sp2c->dramAddr, sp2c->sectorSize); - return 1; - } - if (sp30->cmdType == 0) { - if (sp30->transferMode == 3) { - if ((s32)(sp2c->C1ErrNum + 17) < sp30->sectorNum) { - sp30->errStatus = 0; - func_802F4A20(); - return 1; - } - if ((sp3c & DATA_REQUEST) == 0) { - sp30->errStatus = 17; - func_802F4A20(); - return 1; - } - } else { - sp2c->dramAddr = (void *) ((u32) sp2c->dramAddr + sp2c->sectorSize); - } - sp34 = HW_REG(ASIC_BM_STATUS, u32); - if (((C1_SINGLE & sp34) && (C1_DOUBLE & sp34)) || (sp34 & MICRO_STATUS)) { - if (sp2c->C1ErrNum > 3) { - if (sp30->transferMode != 3 || sp30->sectorNum > 0x52) { - sp30->errStatus = 17; - func_802F4A20(); - return 1; - } - } else { - sp28 = sp2c->C1ErrNum; - sp2c->C1ErrSector[sp28] = sp30->sectorNum + 1; - } - sp2c->C1ErrNum++; - } - if (sp3c & C2_TRANSFER) { - if (sp30->sectorNum != 87) { - sp30->errStatus = 6; - func_802F4A20(); - } - if (sp30->transferMode == 2 && sp30->blockNum == 0) { - sp30->blockNum = 1; - sp30->sectorNum = -1; - sp30->block[1].dramAddr = - (void *) ((u32) sp30->block[1].dramAddr - sp30->block[1].sectorSize); - } else { - HW_REG(PI_STATUS_REG, u32) = PI_STATUS_CLEAR_INTR; - __OSGlobalIntMask |= 0x00100401; - } - osEPiRawStartDma(__osDiskHandle, 0, 0x5000000, sp2c->C2Addr, sp2c->sectorSize * 4); - sp30->errStatus = 0; - return 1; - } - - if (sp30->sectorNum == -1 && sp30->transferMode == 2 && sp30->blockNum == 1) { - sp24 = &sp30->block[0]; - if (sp30->block[0].C1ErrNum == 0) { - if (((u32 *) sp30->block[0].C2Addr)[0] | ((u32 *) sp30->block[0].C2Addr)[1] - | ((u32 *) sp30->block[0].C2Addr)[2] | ((u32 *) sp30->block[0].C2Addr)[3]) { - sp30->errStatus = 6; - func_802F4A20(); - return 1; - } - } - sp30->errStatus = 0; - func_802F4B08(); - } - sp30->sectorNum++; - if (sp3c & DATA_REQUEST) { - if (sp30->sectorNum > 0x54) { - sp30->errStatus = 6; - func_802F4A20(); - return 1; - } - osEPiRawStartDma(__osDiskHandle, 0, 0x05000400, sp2c->dramAddr, sp2c->sectorSize); - sp30->errStatus = 0; - return 1; - } - if (sp30->sectorNum <= 0x54) { - sp30->errStatus = 6; - func_802F4A20(); - return 1; - } - return 1; - } - sp30->errStatus = 75; - func_802F4A20(); - return 1; -} -#endif diff --git a/lib/src/EU_D_802f4330.c b/lib/src/EU_D_802f4330.c deleted file mode 100644 index ad9b3bac..00000000 --- a/lib/src/EU_D_802f4330.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "libultra_internal.h" - -// an array of pointers to functions taking no arguments and returning u32... -// this is only referenced in the exception handler and here. this function is called with a0=1 and -// then the same memory address is loaded. it's definitely an array access though.. -extern u32 (*D_80334920[8])(void) ; - -void EU_D_802f4330(u32 a0, u32 a1(void)) { - register u32 int_disabled = __osDisableInt(); - D_80334920[a0] = a1; - __osRestoreInt(int_disabled); -} diff --git a/lib/src/_Ldtob.c b/lib/src/_Ldtob.c index 3656bd45..ab1067ad 100644 --- a/lib/src/_Ldtob.c +++ b/lib/src/_Ldtob.c @@ -7,9 +7,9 @@ #define BUFF_LEN 0x20 static s16 _Ldunscale(s16 *, printf_struct *); -static void _Genld(printf_struct *, u8, u8 *, s16, s16); +static void _Genld(printf_struct *, fmt_type, fmt_type *, s16, s16); -const double D_80338670[] = { 10e0L, 10e1L, 10e3L, 10e7L, 10e15L, 10e31L, 10e63L, 10e127L, 10e255L }; +const double pows[] = { 10e0L, 10e1L, 10e3L, 10e7L, 10e15L, 10e31L, 10e63L, 10e127L, 10e255L }; /* float properties */ #define _D0 0 @@ -44,10 +44,9 @@ const double D_80338670[] = { 10e0L, 10e1L, 10e3L, 10e7L, 10e15L, 10e31L, 10e63L #define _D3 3 #endif -void _Ldtob(printf_struct *args, u8 type) { - u8 buff[BUFF_LEN]; - u8 *ptr; - UNUSED u32 sp70; +void _Ldtob(printf_struct *args, fmt_type type) { + fmt_type buff[BUFF_LEN]; + fmt_type *ptr; f64 val; /* maybe struct? */ s16 err; @@ -59,12 +58,7 @@ void _Ldtob(printf_struct *args, u8 type) { f64 factor; s32 gen; s32 j; - s32 lo; - ldiv_t qr; - u8 drop; - s32 n2; - /* */ - UNUSED u8 unused[0x4]; + ptr = buff; val = args->value.f64; if (args->precision < 0) { @@ -88,11 +82,11 @@ void _Ldtob(printf_struct *args, u8 type) { } exp = exp * 30103 / 0x000186A0 - 4; if (exp < 0) { - n = (3 - exp) & ~3; + n = (-exp + 3) & ~3; exp = -n; for (i = 0; n > 0; n >>= 1, i++) { if ((n & 1) != 0) { - val *= D_80338670[i]; + val *= pows[i]; } } } else { @@ -101,25 +95,25 @@ void _Ldtob(printf_struct *args, u8 type) { exp &= ~3; for (n = exp, i = 0; n > 0; n >>= 1, i++) { if ((n & 1) != 0) { - factor *= D_80338670[i]; + factor *= pows[i]; } } val /= factor; } } - gen = ((type == 'f') ? exp + 10 : 6) + args->precision; + gen = args->precision + ((type == 'f') ? exp + 10 : 6); if (gen > 0x13) { gen = 0x13; } *ptr++ = '0'; while (gen > 0 && 0 < val) { - lo = val; + s32 lo = val; if ((gen -= 8) > 0) { val = (val - lo) * 1.0e8; } ptr = ptr + 8; for (j = 8; lo > 0 && --j >= 0;) { - qr = ldiv(lo, 10); + ldiv_t qr = ldiv(lo, 10); *--ptr = qr.rem + '0'; lo = qr.quot; } @@ -135,16 +129,13 @@ void _Ldtob(printf_struct *args, u8 type) { --gen, --exp; } - nsig = ((type == 'f') ? exp + 1 : ((type == 'e' || type == 'E') ? 1 : 0)) + args->precision; + nsig = args->precision + ((type == 'f') ? exp + 1 : ((type == 'e' || type == 'E') ? 1 : 0)); if (gen < nsig) { nsig = gen; } if (nsig > 0) { - if (nsig < gen && ptr[nsig] > '4') { - drop = '9'; - } else { - drop = '0'; - } + fmt_type drop = (nsig < gen && ptr[nsig] > '4') ? '9' : '0'; + s32 n2; for (n2 = nsig; ptr[--n2] == drop;) { nsig--; @@ -180,12 +171,12 @@ static s16 _Ldunscale(s16 *pex, printf_struct *px) { } } -static void _Genld(printf_struct *px, u8 code, u8 *p, s16 nsig, s16 xexp) { - u8 point = '.'; +static void _Genld(printf_struct *px, fmt_type code, fmt_type *p, s16 nsig, s16 xexp) { + const fmt_type point = '.'; if (nsig <= 0) { nsig = 1, - p = (u8 *) "0"; + p = (fmt_type *) "0"; } if (code == 'f' @@ -258,7 +249,7 @@ static void _Genld(printf_struct *px, u8 code, u8 *p, s16 nsig, s16 xexp) { px->part2_len += nsig; px->num_mid_zeros = px->precision - nsig; } - p = (u8 *) &px->buff[px->part2_len]; /* put exponent */ + p = (fmt_type *) &px->buff[px->part2_len]; /* put exponent */ *p++ = code; if (0 <= xexp) { *p++ = '+'; @@ -274,7 +265,7 @@ static void _Genld(printf_struct *px, u8 code, u8 *p, s16 nsig, s16 xexp) { } *p++ = xexp / 10 + '0', xexp %= 10; *p++ = xexp + '0'; - px->part3_len = p - (u8 *) &px->buff[px->part2_len]; + px->part3_len = p - (fmt_type *) &px->buff[px->part2_len]; } if ((px->flags & (FLAGS_ZERO | FLAGS_MINUS)) == FLAGS_ZERO) { /* pad with leading zeros */ int n = diff --git a/lib/src/_Litob.c b/lib/src/_Litob.c index 58ed081f..c1fbabd5 100644 --- a/lib/src/_Litob.c +++ b/lib/src/_Litob.c @@ -5,10 +5,10 @@ #define BUFF_LEN 0x18 -static u8 D_80334960[] = "0123456789abcdef"; -static u8 D_80334974[] = "0123456789ABCDEF"; +static u8 ldigs[] = "0123456789abcdef"; +static u8 udigs[] = "0123456789ABCDEF"; -void _Litob(printf_struct *args, u8 type) { +void _Litob(printf_struct *args, fmt_type type) { u8 buff[BUFF_LEN]; const u8 *num_map; s32 base; @@ -17,9 +17,9 @@ void _Litob(printf_struct *args, u8 type) { lldiv_t quotrem; if (type == 'X') { - num_map = D_80334974; + num_map = udigs; } else { - num_map = D_80334960; + num_map = ldigs; } base = (type == 'o') ? 8 : ((type != 'x' && type != 'X') ? 10 : 16); diff --git a/lib/src/_Printf.c b/lib/src/_Printf.c index e42bf042..5252a207 100644 --- a/lib/src/_Printf.c +++ b/lib/src/_Printf.c @@ -6,7 +6,7 @@ #define ATOI(i, a) \ for (i = 0; *a >= '0' && *a <= '9'; a++) \ if (i < 999) \ - i = *a + i * 10 - '0'; + i = i * 10 + *a - '0'; #define _PROUT(dst, fmt, _size) \ if (_size > 0) { \ dst = prout(dst, fmt, _size); \ @@ -25,25 +25,25 @@ _PROUT(dst, src, c); \ } -const char length_str[] = "hlL"; -const char flags_str[] = " +-#0"; -const u32 flags_arr[] = { FLAGS_SPACE, FLAGS_PLUS, FLAGS_MINUS, FLAGS_HASH, FLAGS_ZERO, 0 }; -char _spaces[] = " "; -char _zeroes[] = "00000000000000000000000000000000"; +char spaces[] = " "; +char zeroes[] = "00000000000000000000000000000000"; -static void _Putfld(printf_struct *, va_list *, u8, u8 *); +static void _Putfld(printf_struct *, va_list *, fmt_type, fmt_type *); s32 _Printf(char *(*prout)(char *, const char *, size_t), char *dst, const char *fmt, va_list args) { + static const char flags_str[] = " +-#0"; + static const u32 flags_arr[] = { FLAGS_SPACE, FLAGS_PLUS, FLAGS_MINUS, FLAGS_HASH, FLAGS_ZERO, 0 }; + printf_struct sp78; - const u8 *fmt_ptr; - u8 c; + const fmt_type *fmt_ptr; + fmt_type c; const char *flag_index; - u8 sp4c[0x20]; // probably a buffer? + fmt_type sp4c[0x20]; // probably a buffer? s32 sp48, sp44, sp40, sp3c, sp38, sp34, sp30, sp2c, sp28, sp24; sp78.size = 0; while (TRUE) { - fmt_ptr = (u8 *) fmt; -#ifdef VERSION_SH + fmt_ptr = (fmt_type *) fmt; +#if defined(VERSION_SH) || defined(VERSION_CN) // new version: don't point fmt_ptr beyond NUL character while ((c = *fmt_ptr) != 0 && c != '%') { fmt_ptr++; @@ -56,7 +56,7 @@ s32 _Printf(char *(*prout)(char *, const char *, size_t), char *dst, const char } } #endif - _PROUT(dst, fmt, fmt_ptr - (u8 *) fmt); + _PROUT(dst, fmt, fmt_ptr - (fmt_type *) fmt); if (c == 0) { return sp78.size; } @@ -86,11 +86,7 @@ s32 _Printf(char *(*prout)(char *, const char *, size_t), char *dst, const char ATOI(sp78.precision, fmt_ptr); } } - if (strchr(length_str, *fmt_ptr) != NULL) { - sp78.length = *fmt_ptr++; - } else { - sp78.length = 0; - } + sp78.length = strchr("hlL", *fmt_ptr) != NULL ? *fmt_ptr++ : '\0'; if (sp78.length == 'l' && *fmt_ptr == 'l') { sp78.length = 'L'; @@ -99,19 +95,19 @@ s32 _Printf(char *(*prout)(char *, const char *, size_t), char *dst, const char _Putfld(&sp78, &args, *fmt_ptr, sp4c); sp78.width -= sp78.part1_len + sp78.num_leading_zeros + sp78.part2_len + sp78.num_mid_zeros + sp78.part3_len + sp78.num_trailing_zeros; - _PAD(sp44, sp78.width, sp48, _spaces, !(sp78.flags & FLAGS_MINUS)); + _PAD(sp44, sp78.width, sp48, spaces, !(sp78.flags & FLAGS_MINUS)); _PROUT(dst, (char *) sp4c, sp78.part1_len); - _PAD(sp3c, sp78.num_leading_zeros, sp40, _zeroes, 1); + _PAD(sp3c, sp78.num_leading_zeros, sp40, zeroes, 1); _PROUT(dst, sp78.buff, sp78.part2_len); - _PAD(sp34, sp78.num_mid_zeros, sp38, _zeroes, 1); + _PAD(sp34, sp78.num_mid_zeros, sp38, zeroes, 1); _PROUT(dst, (char *) (&sp78.buff[sp78.part2_len]), sp78.part3_len) - _PAD(sp2c, sp78.num_trailing_zeros, sp30, _zeroes, 1); - _PAD(sp24, sp78.width, sp28, _spaces, sp78.flags & FLAGS_MINUS); + _PAD(sp2c, sp78.num_trailing_zeros, sp30, zeroes, 1); + _PAD(sp24, sp78.width, sp28, spaces, sp78.flags & FLAGS_MINUS); fmt = (char *) fmt_ptr + 1; } } -static void _Putfld(printf_struct *a0, va_list *args, u8 type, u8 *buff) { +static void _Putfld(printf_struct *a0, va_list *args, fmt_type type, fmt_type *buff) { a0->part1_len = a0->num_leading_zeros = a0->part2_len = a0->num_mid_zeros = a0->part3_len = a0->num_trailing_zeros = 0; diff --git a/lib/src/__osAiDeviceBusy.c b/lib/src/__osAiDeviceBusy.c index 261fcbab..b7ec5626 100644 --- a/lib/src/__osAiDeviceBusy.c +++ b/lib/src/__osAiDeviceBusy.c @@ -1,9 +1,9 @@ #include "libultra_internal.h" -#include "hardware.h" +#include "PR/rcp.h" s32 __osAiDeviceBusy(void) { - register s32 status = HW_REG(AI_STATUS_REG, u32); - if ((status & AI_STATUS_AI_FULL) != 0) { + register s32 status = IO_READ(AI_STATUS_REG); + if (status & AI_STATUS_FIFO_FULL) { return 1; } else { return 0; diff --git a/lib/src/__osDequeueThread.c b/lib/src/__osDequeueThread.c index 08758378..42269232 100644 --- a/lib/src/__osDequeueThread.c +++ b/lib/src/__osDequeueThread.c @@ -3,17 +3,17 @@ // these don't feel like they belong here // but it makes the most logical since there was printf data before #ifndef AVOID_UB -OSThread *D_80334890 = NULL; +OSThread *__osThreadTail = NULL; u32 D_80334894 = -1; -OSThread *D_80334898 = (OSThread *) &D_80334890; -OSThread *D_8033489C = (OSThread *) &D_80334890; -OSThread *D_803348A0 = NULL; -u32 D_803348A4 = 0; // UNKNOWN +OSThread *__osRunQueue = (OSThread *) &__osThreadTail; +OSThread *__osActiveQueue = (OSThread *) &__osThreadTail; +OSThread *__osRunningThread = { 0 }; +OSThread *__osFaultedThread = { 0 }; #else -OSThread_ListHead D_80334890_fix = {NULL, -1, (OSThread *) &D_80334890_fix, (OSThread *) &D_80334890_fix, NULL, 0}; +OSThread_ListHead __osThreadTail_fix = {NULL, -1, (OSThread *) &__osThreadTail_fix, (OSThread *) &__osThreadTail_fix, NULL, 0}; #endif -void __osDequeueThread(OSThread **queue, OSThread *thread) { +void __osDequeueThread(register OSThread **queue, register OSThread *thread) { register OSThread **a2; register OSThread *a3; a2 = queue; diff --git a/lib/src/__osDevMgrMain.c b/lib/src/__osDevMgrMain.c index e31bdaa3..3903c268 100644 --- a/lib/src/__osDevMgrMain.c +++ b/lib/src/__osDevMgrMain.c @@ -1,10 +1,18 @@ #include "libultra_internal.h" #include "macros.h" +#include "PR/os.h" -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) #include "new_func.h" +#include "PR/rcp.h" +#include "PR/ique.h" + +#define ALIGN16(val) (((val) + 0xF) & ~0xF) void __osDevMgrMain(void *args) { +#ifdef VERSION_CN + s32 loadedToTempBuffer = FALSE; +#endif OSIoMesg *mb; OSMesg em; OSMesg dummy; @@ -16,7 +24,7 @@ void __osDevMgrMain(void *args) { u32 sp2c; __OSBlockInfo *sp28; __OSTranxInfo *sp24; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) u32 tmp; #endif #ifdef VERSION_EU @@ -43,45 +51,55 @@ void __osDevMgrMain(void *args) { sp2c = 0; } osRecvMesg(sp34->accessQueue, &dummy, OS_MESG_BLOCK); - __osResetGlobalIntMask(0x00100401); // remove magic constant! - __osEPiRawWriteIo(mb->piHandle, 0x05000510, (sp24->bmCtlShadow | 0x80000000)); - while (TRUE) { - osRecvMesg(sp34->eventQueue, &em, OS_MESG_BLOCK); -#ifdef VERSION_SH - sp24 = &mb->piHandle->transferInfo; - sp28 = &sp24->block[sp24->blockNum]; - if (sp28->errStatus == 0x1D) { - __osEPiRawWriteIo(mb->piHandle, 0x5000510, sp24->bmCtlShadow | 0x10000000); - __osEPiRawWriteIo(mb->piHandle, 0x5000510, sp24->bmCtlShadow); - __osEPiRawReadIo(mb->piHandle, 0x5000508, &tmp); - if ((tmp & 0x2000000) != 0) { - __osEPiRawWriteIo(mb->piHandle, 0x5000510, sp24->bmCtlShadow | 0x1000000); - } - sp28->errStatus = 4; - HW_REG(PI_STATUS_REG, u32) = PI_STATUS_CLEAR_INTR; - __osSetGlobalIntMask(0x100C01); + __osResetGlobalIntMask(OS_IM_PI); + osEPiRawWriteIo(mb->piHandle, 0x05000510, (sp24->bmCtlShadow | 0x80000000)); +l1: + osRecvMesg(sp34->eventQueue, &em, OS_MESG_BLOCK); +#if defined(VERSION_SH) || defined(VERSION_CN) + sp24 = &mb->piHandle->transferInfo; + sp28 = &sp24->block[sp24->blockNum]; + if (sp28->errStatus == 0x1D) { + osEPiRawWriteIo(mb->piHandle, 0x5000510, sp24->bmCtlShadow | 0x10000000); + osEPiRawWriteIo(mb->piHandle, 0x5000510, sp24->bmCtlShadow); + osEPiRawReadIo(mb->piHandle, 0x5000508, &tmp); + if ((tmp & 0x2000000) != 0) { + osEPiRawWriteIo(mb->piHandle, 0x5000510, sp24->bmCtlShadow | 0x1000000); } - osSendMesg(mb->hdr.retQueue, mb, OS_MESG_NOBLOCK); - if (sp2c != 1 || mb->piHandle->transferInfo.block[0].errStatus != 0) { - break; - } -#else - sp30 = osSendMesg(mb->hdr.retQueue, mb, OS_MESG_NOBLOCK); - if (sp2c != 1 || mb->piHandle->transferInfo.errStatus != 0) { - break; - } -#endif - sp2c = 0; + sp28->errStatus = 4; + IO_WRITE(PI_STATUS_REG, PI_STATUS_CLR_INTR); + __osSetGlobalIntMask(0x100C01); } + + osSendMesg(mb->hdr.retQueue, mb, OS_MESG_NOBLOCK); + + if (sp2c == 1 && mb->piHandle->transferInfo.block[0].errStatus == 0) { + sp2c = 0; + goto l1; + } +#else + sp30 = osSendMesg(mb->hdr.retQueue, mb, OS_MESG_NOBLOCK); + + if (sp2c == 1 && mb->piHandle->transferInfo.errStatus == 0) { + sp2c = 0; + goto l1; + } +#endif osSendMesg(sp34->accessQueue, NULL, OS_MESG_NOBLOCK); + if (mb->piHandle->transferInfo.blockNum == 1) { - func_802F71F0(); + osYieldThread(); } } else { switch (mb->hdr.type) { case 11: osRecvMesg(sp34->accessQueue, &dummy, OS_MESG_BLOCK); - ret = sp34->dma_func(OS_READ, mb->devAddr, mb->dramAddr, mb->size); +#ifdef VERSION_CN + if (__osBbIsBb == 1 && ((uintptr_t) mb->dramAddr & 0x7f) >= 0x60) { + loadedToTempBuffer = TRUE; + ret = sp34->dma_func(OS_READ, mb->devAddr, (void *) 0x80600000, mb->size); + } else +#endif + ret = sp34->dma_func(OS_READ, mb->devAddr, mb->dramAddr, mb->size); break; case 12: osRecvMesg(sp34->accessQueue, &dummy, OS_MESG_BLOCK); @@ -89,8 +107,15 @@ void __osDevMgrMain(void *args) { break; case 15: osRecvMesg(sp34->accessQueue, &dummy, OS_MESG_BLOCK); - ret = sp34->edma_func(mb->piHandle, OS_READ, mb->devAddr, mb->dramAddr, - mb->size); +#ifdef VERSION_CN + if (__osBbIsBb == 1 && ((uintptr_t) mb->dramAddr & 0x7f) >= 0x60) { + loadedToTempBuffer = TRUE; + ret = sp34->edma_func(mb->piHandle, OS_READ, mb->devAddr, (void *) 0x80600000, + mb->size); + } else +#endif + ret = sp34->edma_func(mb->piHandle, OS_READ, mb->devAddr, mb->dramAddr, + mb->size); break; case 16: osRecvMesg(sp34->accessQueue, &dummy, OS_MESG_BLOCK); @@ -108,6 +133,14 @@ void __osDevMgrMain(void *args) { } if (ret == 0) { osRecvMesg(sp34->eventQueue, &em, OS_MESG_BLOCK); +#ifdef VERSION_CN + if (__osBbIsBb == 1 && loadedToTempBuffer) { + osInvalDCache((void *) 0x80600000, ALIGN16(mb->size)); + bcopy((void *) 0x80600000, mb->dramAddr, mb->size); + osWritebackDCache(mb->dramAddr, mb->size); + loadedToTempBuffer = FALSE; + } +#endif #ifdef VERSION_EU sp30 = #endif diff --git a/lib/src/__osEPiRawReadIo.c b/lib/src/__osEPiRawReadIo.c deleted file mode 100644 index 28c403a2..00000000 --- a/lib/src/__osEPiRawReadIo.c +++ /dev/null @@ -1,11 +0,0 @@ -#include "libultra_internal.h" -#include "hardware.h" - -s32 __osEPiRawReadIo(OSPiHandle *arg0, u32 devAddr, u32 *data) { - register s32 stat; - while (stat = HW_REG(PI_STATUS_REG, s32), stat & (PI_STATUS_BUSY | PI_STATUS_IOBUSY | PI_STATUS_ERROR)) { - ; - } - *data = HW_REG(arg0->baseAddress | devAddr, s32); - return 0; -} diff --git a/lib/src/__osEPiRawWriteIo.c b/lib/src/__osEPiRawWriteIo.c deleted file mode 100644 index 539a5c65..00000000 --- a/lib/src/__osEPiRawWriteIo.c +++ /dev/null @@ -1,35 +0,0 @@ -#include "libultra_internal.h" -#include "hardware.h" - -s32 __osEPiRawWriteIo(OSPiHandle *a0, u32 a1, u32 a2) { - register u32 a3 = HW_REG(PI_STATUS_REG, u32); - while (a3 & PI_STATUS_ERROR) - a3 = HW_REG(PI_STATUS_REG, u32); - HW_REG(a0->baseAddress | a1, u32) = a2; - return 0; -} -/* -/ 0B69A0 802F71A0 3C0EA460 / lui $t6, %hi(PI_STATUS_REG) # $t6, 0xa460 -/ 0B69A4 802F71A4 8DC70010 / lw $a3, %lo(PI_STATUS_REG)($t6) -/ 0B69A8 802F71A8 27BDFFF8 / addiu $sp, $sp, -8 -/ 0B69AC 802F71AC 30EF0003 / andi $t7, $a3, 3 - -/ 0B69B0 802F71B0 11E00006 / beqz $t7, .L802F71CC -/ 0B69B4 802F71B4 00000000 / nop -.L802F71B8: -/ 0B69B8 802F71B8 3C18A460 / lui $t8, %hi(PI_STATUS_REG) # $t8, 0xa460 -/ 0B69BC 802F71BC 8F070010 / lw $a3, %lo(PI_STATUS_REG)($t8) -/ 0B69C0 802F71C0 30F90003 / andi $t9, $a3, 3 -/ 0B69C4 802F71C4 1720FFFC / bnez $t9, .L802F71B8 -/ 0B69C8 802F71C8 00000000 / nop -.L802F71CC: -/ 0B69CC 802F71CC 8C88000C / lw $t0, 0xc($a0) -/ 0B69D0 802F71D0 3C01A000 / lui $at, 0xa000 -/ 0B69D4 802F71D4 27BD0008 / addiu $sp, $sp, 8 -/ 0B69D8 802F71D8 01054825 / or $t1, $t0, $a1 -/ 0B69DC 802F71DC 01215025 / or $t2, $t1, $at -/ 0B69E0 802F71E0 AD460000 / sw $a2, ($t2) -/ 0B69E4 802F71E4 03E00008 / jr $ra -/ 0B69E8 802F71E8 00001025 / move $v0, $zero - -/ 0B69EC 802F71EC 00000000 / nop */ diff --git a/lib/src/__osGetCurrFaultedThread.c b/lib/src/__osGetCurrFaultedThread.c index f4951ff1..eede93e1 100644 --- a/lib/src/__osGetCurrFaultedThread.c +++ b/lib/src/__osGetCurrFaultedThread.c @@ -1,5 +1,5 @@ #include "libultra_internal.h" OSThread *__osGetCurrFaultedThread() { - return D_8033489C; // 80302efc + return __osActiveQueue; } diff --git a/lib/src/__osPiCreateAccessQueue.c b/lib/src/__osPiCreateAccessQueue.c index 90d4c86a..385848f9 100644 --- a/lib/src/__osPiCreateAccessQueue.c +++ b/lib/src/__osPiCreateAccessQueue.c @@ -1,8 +1,10 @@ #include "libultra_internal.h" +#include "macros.h" + #define PIAccessQueueSize 2 -OSMesg osPiMesgBuff[PIAccessQueueSize]; +FORCE_BSS OSMesg osPiMesgBuff[PIAccessQueueSize]; OSMesgQueue gOsPiMessageQueue; u32 gOsPiAccessQueueCreated = 0; diff --git a/lib/src/__osResetGlobalIntMask.c b/lib/src/__osResetGlobalIntMask.c index e6b0de27..26fbccfc 100644 --- a/lib/src/__osResetGlobalIntMask.c +++ b/lib/src/__osResetGlobalIntMask.c @@ -1,5 +1,5 @@ #include "libultra_internal.h" -#include "new_func.h" +#include "PR/os.h" void __osResetGlobalIntMask(u32 mask) { register u32 prev; diff --git a/lib/src/__osSetGlobalIntMask.c b/lib/src/__osSetGlobalIntMask.c index c800bb33..937281cf 100644 --- a/lib/src/__osSetGlobalIntMask.c +++ b/lib/src/__osSetGlobalIntMask.c @@ -1,9 +1,8 @@ #include "libultra_internal.h" -#include "hardware.h" -#include "new_func.h" +#include "PR/os.h" -void __osSetGlobalIntMask(s32 arg0) { - register u32 prev = __osDisableInt(); - __OSGlobalIntMask |= arg0; - __osRestoreInt(prev); +void __osSetGlobalIntMask(s32 mask) { + register u32 saveMask = __osDisableInt(); + __OSGlobalIntMask |= mask; + __osRestoreInt(saveMask); } diff --git a/lib/src/__osSetHWintrRoutine.c b/lib/src/__osSetHWintrRoutine.c new file mode 100644 index 00000000..0a32ede7 --- /dev/null +++ b/lib/src/__osSetHWintrRoutine.c @@ -0,0 +1,10 @@ +#include "libultra_internal.h" + +extern s32 (*__osHwIntTable[])(void) ; + +void __osSetHWIntrRoutine(OSHWIntr interrupt, s32 (*handler)(void)) { + register u32 saveMask; + saveMask = __osDisableInt(); + __osHwIntTable[interrupt] = handler; + __osRestoreInt(saveMask); +} diff --git a/lib/src/__osSiCreateAccessQueue.c b/lib/src/__osSiCreateAccessQueue.c index 06917774..00f35011 100644 --- a/lib/src/__osSiCreateAccessQueue.c +++ b/lib/src/__osSiCreateAccessQueue.c @@ -1,8 +1,10 @@ #include "libultra_internal.h" +#include "macros.h" + #define SIAccessQueueSize 2 -OSMesg osSiMesgBuff[SIAccessQueueSize]; +FORCE_BSS OSMesg osSiMesgBuff[SIAccessQueueSize]; OSMesgQueue gOsSiMessageQueue; u32 gOsSiAccessQueueCreated = 0; diff --git a/lib/src/__osSiDeviceBusy.c b/lib/src/__osSiDeviceBusy.c index 5872f134..83d5b395 100644 --- a/lib/src/__osSiDeviceBusy.c +++ b/lib/src/__osSiDeviceBusy.c @@ -1,10 +1,10 @@ #include "libultra_internal.h" -#include "hardware.h" +#include "PR/rcp.h" s32 __osSiDeviceBusy() { register u32 status; - status = HW_REG(SI_STATUS_REG, u32); - if (status & (SI_STATUS_DMA_BUSY | SI_STATUS_IO_READ_BUSY)) { + status = IO_READ(SI_STATUS_REG); + if (status & (SI_STATUS_DMA_BUSY | SI_STATUS_RD_BUSY)) { return 1; } else { return 0; diff --git a/lib/src/__osSiRawReadIo.c b/lib/src/__osSiRawReadIo.c index 03654dab..288d9411 100644 --- a/lib/src/__osSiRawReadIo.c +++ b/lib/src/__osSiRawReadIo.c @@ -1,10 +1,10 @@ #include "libultra_internal.h" -#include "hardware.h" +#include "PR/rcp.h" -s32 __osSiRawReadIo(void *a0, u32 *a1) { +s32 __osSiRawReadIo(u32 devAddr, u32 *data) { if (__osSiDeviceBusy()) { return -1; } - *a1 = HW_REG((uintptr_t) a0, u32); + *data = IO_READ(devAddr); return 0; } diff --git a/lib/src/__osSiRawStartDma.c b/lib/src/__osSiRawStartDma.c index 965b7187..83b6b882 100644 --- a/lib/src/__osSiRawStartDma.c +++ b/lib/src/__osSiRawStartDma.c @@ -1,21 +1,35 @@ #include "libultra_internal.h" -#include "hardware.h" +#include "PR/rcp.h" +#include "PR/ique.h" s32 __osSiRawStartDma(s32 dir, void *addr) { +#ifdef VERSION_CN + if (IO_READ(SI_STATUS_REG) & (SI_STATUS_DMA_BUSY | SI_STATUS_RD_BUSY)) { + return -1; + } +#else if (__osSiDeviceBusy()) { return -1; } +#endif if (dir == OS_WRITE) { osWritebackDCache(addr, 64); } - HW_REG(SI_DRAM_ADDR_REG, void *) = (void *) osVirtualToPhysical(addr); + IO_WRITE(SI_DRAM_ADDR_REG, osVirtualToPhysical(addr)); if (dir == OS_READ) { - HW_REG(SI_PIF_ADDR_RD64B_REG, u32) = 0x1FC007C0; +#ifdef VERSION_CN + if (__osBbIsBb != 0) { + u32 prev = __osDisableInt(); + skKeepAlive(); + __osRestoreInt(prev); + } +#endif + IO_WRITE(SI_PIF_ADDR_RD64B_REG, 0x1FC007C0); } else { - HW_REG(SI_PIF_ADDR_WR64B_REG, u32) = 0x1FC007C0; + IO_WRITE(SI_PIF_ADDR_WR64B_REG, 0x1FC007C0); } if (dir == OS_READ) { diff --git a/lib/src/__osSiRawWriteIo.c b/lib/src/__osSiRawWriteIo.c index 8da0a3d6..0cec9443 100644 --- a/lib/src/__osSiRawWriteIo.c +++ b/lib/src/__osSiRawWriteIo.c @@ -1,10 +1,10 @@ #include "libultra_internal.h" -#include "hardware.h" +#include "PR/rcp.h" -s32 __osSiRawWriteIo(void *a0, u32 a1) { +s32 __osSiRawWriteIo(u32 devAddr, u32 data) { if (__osSiDeviceBusy()) { return -1; } - HW_REG((uintptr_t) a0, u32) = a1; + IO_WRITE(devAddr, data); return 0; } diff --git a/lib/src/__osSpDeviceBusy.c b/lib/src/__osSpDeviceBusy.c index a40c402a..e03b4543 100644 --- a/lib/src/__osSpDeviceBusy.c +++ b/lib/src/__osSpDeviceBusy.c @@ -1,10 +1,12 @@ #include "libultra_internal.h" -#include "hardware.h" +#include "PR/rcp.h" s32 __osSpDeviceBusy() { - register u32 status = HW_REG(SP_STATUS_REG, u32); + register u32 status = IO_READ(SP_STATUS_REG); + if (status & (SPSTATUS_IO_FULL | SPSTATUS_DMA_FULL | SPSTATUS_DMA_BUSY)) { return 1; } + return 0; } diff --git a/lib/src/__osSpGetStatus.c b/lib/src/__osSpGetStatus.c index a3be17e6..2e25d140 100644 --- a/lib/src/__osSpGetStatus.c +++ b/lib/src/__osSpGetStatus.c @@ -1,6 +1,6 @@ #include "libultra_internal.h" -#include "hardware.h" +#include "PR/rcp.h" u32 __osSpGetStatus() { - return HW_REG(SP_STATUS_REG, u32); + return IO_READ(SP_STATUS_REG); } diff --git a/lib/src/__osSpRawStartDma.c b/lib/src/__osSpRawStartDma.c index 3768a5fa..1f3f761d 100644 --- a/lib/src/__osSpRawStartDma.c +++ b/lib/src/__osSpRawStartDma.c @@ -1,16 +1,18 @@ #include "libultra_internal.h" -#include "hardware.h" +#include "PR/rcp.h" s32 __osSpRawStartDma(u32 dir, void *sp_ptr, void *dram_ptr, size_t size) { if (__osSpDeviceBusy()) { return -1; } - HW_REG(SP_MEM_ADDR_REG, void *) = sp_ptr; - HW_REG(SP_DRAM_ADDR_REG, void *) = (void *) osVirtualToPhysical(dram_ptr); + + IO_WRITE(SP_MEM_ADDR_REG, sp_ptr); + IO_WRITE(SP_DRAM_ADDR_REG, osVirtualToPhysical(dram_ptr)); + if (dir == 0) { - HW_REG(SP_WR_LEN_REG, u32) = size - 1; + IO_WRITE(SP_WR_LEN_REG, size - 1); } else { - HW_REG(SP_RD_LEN_REG, u32) = size - 1; + IO_WRITE(SP_RD_LEN_REG, size - 1); } return 0; } diff --git a/lib/src/__osSpSetPc.c b/lib/src/__osSpSetPc.c index d074590c..d72d5be1 100644 --- a/lib/src/__osSpSetPc.c +++ b/lib/src/__osSpSetPc.c @@ -1,12 +1,12 @@ #include "libultra_internal.h" -#include "hardware.h" +#include "PR/rcp.h" s32 __osSpSetPc(void *pc) { - register u32 status = HW_REG(SP_STATUS_REG, u32); + register u32 status = IO_READ(SP_STATUS_REG); if (!(status & SPSTATUS_HALT)) { return -1; } else { - HW_REG(SP_PC_REG, void *) = pc; + IO_WRITE(SP_PC_REG, pc); return 0; } } diff --git a/lib/src/__osSpSetStatus.c b/lib/src/__osSpSetStatus.c index d63ac4ce..975d34d7 100644 --- a/lib/src/__osSpSetStatus.c +++ b/lib/src/__osSpSetStatus.c @@ -1,6 +1,6 @@ #include "libultra_internal.h" -#include "hardware.h" +#include "PR/rcp.h" void __osSpSetStatus(u32 status) { - HW_REG(SP_STATUS_REG, u32) = status; + IO_WRITE(SP_STATUS_REG, status); } diff --git a/lib/src/__osSyncPutChars.c b/lib/src/__osSyncPutChars.c index a27ef60f..0defdbcc 100644 --- a/lib/src/__osSyncPutChars.c +++ b/lib/src/__osSyncPutChars.c @@ -1,38 +1,33 @@ #include "libultra_internal.h" +#include "PR/rdb.h" +#include "PR/R4300.h" -typedef struct { - u8 unk00 : 2; - u8 pad : 4; - u8 unk01 : 2; - u8 unk2[3]; -} unkStruct; +u32 __osRdbSendMessage = 0; +u32 __osRdbWriteOK = 1; -u32 D_80334A40 = 0; -u32 D_80334A44 = 1; +void __osSyncPutChars(s32 type, s32 length, u8 *buf) { + rdbPacket packet; + s32 i; + u32 mask; + packet.type = type; + packet.length = length; -void __osSyncPutChars(s32 a0, s32 a1, u8 *a2) { - unkStruct sp24; - s32 sp20; - u32 sp1c; - sp24.unk00 = a0; - sp24.unk01 = a1; - - for (sp20 = 0; sp20 < a1; sp20++) { - sp24.unk2[sp20] = a2[sp20]; + for (i = 0; i < length; i++) { + packet.buf[i] = buf[i]; } - while (!__osAtomicDec(&D_80334A44)) { + while (!__osAtomicDec(&__osRdbWriteOK)) { ; } - sp1c = __osDisableInt(); + mask = __osDisableInt(); - *(u32 *) 0xC0000000 = *(u32 *) &sp24; - while (!(__osGetCause() & 0x2000)) { + *(u32 *) RDB_BASE_REG = *(u32 *) &packet; + while (!(__osGetCause() & CAUSE_IP6)) { ; } - *(u32 *) 0xC000000C = 0; - D_80334A44++; + *(u32 *) RDB_READ_INTR_REG = 0; + __osRdbWriteOK++; - __osRestoreInt(sp1c); + __osRestoreInt(mask); } diff --git a/lib/src/__osViInit.c b/lib/src/__osViInit.c index 9e0c9163..9643af04 100644 --- a/lib/src/__osViInit.c +++ b/lib/src/__osViInit.c @@ -1,87 +1,84 @@ #include "libultra_internal.h" -#include "hardware.h" +#include "PR/rcp.h" +#include "PR/os.h" OSViContext sViContexts[2] = { 0 }; OSViContext *__osViCurr = &sViContexts[0]; OSViContext *__osViNext = &sViContexts[1]; + #ifdef VERSION_EU -u32 osViClock = 0x02E6D354; // used for audio frequency calculations +u32 osViClock = VI_NTSC_CLOCK; u32 sTvType = TV_TYPE_PAL; -#elif !defined(VERSION_SH) +#elif !defined(VERSION_SH) && !defined(VERSION_CN) u32 sTvType = TV_TYPE_NTSC; -u32 osViClock = 0x02E6D354; +u32 osViClock = VI_NTSC_CLOCK; #endif -extern OSViMode D_80334990; -extern OSViMode D_803349E0; -#if defined(VERSION_EU) || defined(VERSION_SH) -extern OSViMode D_80302FD0; +extern OSViMode osViModePalLan1; +extern OSViMode osViModeMpalLan1; +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) +extern OSViMode osViModeNtscLan1; #endif void __osViInit(void) { -//#ifdef VERSION_JP #ifdef VERSION_US sTvType = osTvType; #endif + bzero(sViContexts, sizeof(sViContexts)); __osViCurr = &sViContexts[0]; __osViNext = &sViContexts[1]; __osViNext->retraceCount = 1; __osViCurr->retraceCount = 1; -#if defined(VERSION_EU) - - if (osTvType == TV_TYPE_PAL) { - __osViNext->modep = &D_80334990; - osViClock = 0x02F5B2D2; - } else if (osTvType == TV_TYPE_MPAL) { - __osViNext->modep = &D_803349E0; - osViClock = 0x02E6025C; +#if defined(VERSION_JP) + if (sTvType != TV_TYPE_PAL) { + __osViNext->modep = &osViModePalLan1; + osViClock = VI_NTSC_CLOCK; } else { - __osViNext->modep = &D_80302FD0; - osViClock = 0x02E6D354; + __osViNext->modep = &osViModeMpalLan1; + osViClock = VI_PAL_CLOCK; } - -#elif defined(VERSION_SH) - +#elif defined(VERSION_US) + if (sTvType == TV_TYPE_NTSC) { + __osViNext->modep = &osViModePalLan1; + osViClock = VI_NTSC_CLOCK; + } else { + __osViNext->modep = &osViModeMpalLan1; + osViClock = VI_MPAL_CLOCK; + } +#elif defined(VERSION_EU) + if (osTvType == TV_TYPE_PAL) { + __osViNext->modep = &osViModePalLan1; + osViClock = VI_PAL_CLOCK; + } else if (osTvType == TV_TYPE_MPAL) { + __osViNext->modep = &osViModeMpalLan1; + osViClock = VI_MPAL_CLOCK; + } else { + __osViNext->modep = &osViModeNtscLan1; + osViClock = VI_NTSC_CLOCK; + } +#else __osViNext->buffer = (void *) 0x80000000; __osViCurr->buffer = (void *) 0x80000000; if (osTvType == TV_TYPE_PAL) { - __osViNext->modep = &D_80334990; + __osViNext->modep = &osViModePalLan1; } else if (osTvType == TV_TYPE_MPAL) { - __osViNext->modep = &D_803349E0; + __osViNext->modep = &osViModeMpalLan1; } else { - __osViNext->modep = &D_80302FD0; - } - -#else - -#ifdef VERSION_JP - if (sTvType != TV_TYPE_PAL) -#else - if (sTvType == TV_TYPE_NTSC) -#endif - { - __osViNext->modep = &D_80334990; - osViClock = 0x02E6D354; - } else { - __osViNext->modep = &D_803349E0; -#if defined(VERSION_JP) - osViClock = 0x02F5B2D2; -#elif defined(VERSION_US) - osViClock = 0x02E6025C; -#endif + __osViNext->modep = &osViModeNtscLan1; } #endif - __osViNext->unk00 = 0x20; + __osViNext->unk00 = VI_STATE_BLACK; __osViNext->features = __osViNext->modep->comRegs.ctrl; + #ifndef VERSION_JP - while (HW_REG(VI_CURRENT_REG, u32) > 0xa) { + while (IO_READ(VI_CURRENT_REG) > 10) { ; } - HW_REG(VI_STATUS_REG, u32) = 0; + IO_WRITE(VI_STATUS_REG, 0); #endif __osViSwapContext(); } diff --git a/lib/src/__osViSwapContext.c b/lib/src/__osViSwapContext.c index 990cb11f..2aa963e6 100644 --- a/lib/src/__osViSwapContext.c +++ b/lib/src/__osViSwapContext.c @@ -1,36 +1,44 @@ #include "libultra_internal.h" -#include "hardware.h" +#include "PR/rcp.h" extern OSViContext *__osViNext; extern OSViContext *__osViCurr; +extern u32 __additional_scanline; + void __osViSwapContext() { - register OSViMode *s0; + register OSViMode *viMode; register OSViContext *s1; u32 origin; u32 hStart; +#ifdef VERSION_CN + u32 vStart; +#endif u32 sp34; u32 field; - register u32 s2; field = 0; s1 = __osViNext; - s0 = s1->modep; - field = HW_REG(VI_V_CURRENT_LINE_REG, u32) & 1; - s2 = osVirtualToPhysical(s1->buffer); - origin = (s0->fldRegs[field].origin) + s2; + viMode = s1->modep; + field = IO_READ(VI_V_CURRENT_LINE_REG) & 1; + origin = osVirtualToPhysical(s1->buffer) + viMode->fldRegs[field].origin; if (s1->unk00 & 2) { - s1->unk20 |= s0->comRegs.xScale & ~0xfff; + s1->unk20 |= viMode->comRegs.xScale & ~0xfff; } else { - s1->unk20 = s0->comRegs.xScale; + s1->unk20 = viMode->comRegs.xScale; } if (s1->unk00 & 4) { - sp34 = (u32)(s0->fldRegs[field].yScale & 0xfff); + sp34 = (u32)(viMode->fldRegs[field].yScale & 0xfff); s1->unk2c = s1->unk24 * sp34; - s1->unk2c |= s0->fldRegs[field].yScale & ~0xfff; + s1->unk2c |= viMode->fldRegs[field].yScale & ~0xfff; } else { - s1->unk2c = s0->fldRegs[field].yScale; + s1->unk2c = viMode->fldRegs[field].yScale; } - hStart = s0->comRegs.hStart; + +#ifdef VERSION_CN + vStart = viMode->fldRegs[field].vStart - (__additional_scanline << 0x10) + __additional_scanline; +#endif + hStart = viMode->comRegs.hStart; + if (s1->unk00 & 0x20) { hStart = 0; } @@ -42,19 +50,23 @@ void __osViSwapContext() { s1->unk2c = (s1->unk28 << 0x10) & 0x3ff0000; origin = osVirtualToPhysical(s1->buffer); } - HW_REG(VI_ORIGIN_REG, u32) = origin; - HW_REG(VI_WIDTH_REG, u32) = s0->comRegs.width; - HW_REG(VI_BURST_REG, u32) = s0->comRegs.burst; - HW_REG(VI_V_SYNC_REG, u32) = s0->comRegs.vSync; - HW_REG(VI_H_SYNC_REG, u32) = s0->comRegs.hSync; - HW_REG(VI_LEAP_REG, u32) = s0->comRegs.leap; - HW_REG(VI_H_START_REG, u32) = hStart; - HW_REG(VI_V_START_REG, u32) = s0->fldRegs[field].vStart; - HW_REG(VI_V_BURST_REG, u32) = s0->fldRegs[field].vBurst; - HW_REG(VI_INTR_REG, u32) = s0->fldRegs[field].vIntr; - HW_REG(VI_X_SCALE_REG, u32) = s1->unk20; - HW_REG(VI_Y_SCALE_REG, u32) = s1->unk2c; - HW_REG(VI_CONTROL_REG, u32) = s1->features; + IO_WRITE(VI_ORIGIN_REG, origin); + IO_WRITE(VI_WIDTH_REG, viMode->comRegs.width); + IO_WRITE(VI_BURST_REG, viMode->comRegs.burst); + IO_WRITE(VI_V_SYNC_REG, viMode->comRegs.vSync); + IO_WRITE(VI_H_SYNC_REG, viMode->comRegs.hSync); + IO_WRITE(VI_LEAP_REG, viMode->comRegs.leap); + IO_WRITE(VI_H_START_REG, hStart); +#ifdef VERSION_CN + IO_WRITE(VI_V_START_REG, vStart); +#else + IO_WRITE(VI_V_START_REG, viMode->fldRegs[field].vStart); +#endif + IO_WRITE(VI_V_BURST_REG, viMode->fldRegs[field].vBurst); + IO_WRITE(VI_INTR_REG, viMode->fldRegs[field].vIntr); + IO_WRITE(VI_X_SCALE_REG, s1->unk20); + IO_WRITE(VI_Y_SCALE_REG, s1->unk2c); + IO_WRITE(VI_CONTROL_REG, s1->features); __osViNext = __osViCurr; __osViCurr = s1; *__osViNext = *__osViCurr; diff --git a/lib/src/contramread.c b/lib/src/contramread.c index cd74bb24..19cd3f53 100644 --- a/lib/src/contramread.c +++ b/lib/src/contramread.c @@ -1,8 +1,9 @@ #include "libultra_internal.h" #include "PR/rcp.h" #include "controller.h" +#include "macros.h" -extern s32 func_8030A5C0(OSMesgQueue *, s32); +extern s32 __osPfsGetStatus(OSMesgQueue *, s32); void __osPackRamReadData(int channel, u16 address); s32 __osContRamRead(OSMesgQueue *mq, int channel, u16 address, u8 *buffer) { @@ -15,7 +16,7 @@ s32 __osContRamRead(OSMesgQueue *mq, int channel, u16 address, u8 *buffer) { ptr = (u8 *)&__osPfsPifRam; retry = 2; __osSiGetAccess(); - _osLastSentSiCmd = CONT_CMD_READ_MEMPACK; + __osContLastCmd = CONT_CMD_READ_MEMPACK; __osPackRamReadData(channel, address); ret = __osSiRawStartDma(OS_WRITE, &__osPfsPifRam); osRecvMesg(mq, NULL, OS_MESG_BLOCK); @@ -34,14 +35,14 @@ s32 __osContRamRead(OSMesgQueue *mq, int channel, u16 address, u8 *buffer) { u8 c; c = __osContDataCrc((u8*)&ramreadformat.data); if (c != ramreadformat.datacrc) { - ret = func_8030A5C0(mq, channel); + ret = __osPfsGetStatus(mq, channel); if (ret != 0) { __osSiRelAccess(); return ret; } ret = PFS_ERR_CONTRFAIL; } else { - for (i = 0; i < ARRLEN(ramreadformat.data); i++) { + for (i = 0; i < ARRAY_COUNT(ramreadformat.data); i++) { *buffer++ = ramreadformat.data[i]; } } @@ -63,7 +64,7 @@ void __osPackRamReadData(int channel, u16 address) { ptr = (u8 *)__osPfsPifRam.ramarray; - for (i = 0; i < ARRLEN(__osPfsPifRam.ramarray) + 1; i++) { // also clear pifstatus + for (i = 0; i < ARRAY_COUNT(__osPfsPifRam.ramarray) + 1; i++) { __osPfsPifRam.ramarray[i] = 0; } @@ -74,7 +75,7 @@ void __osPackRamReadData(int channel, u16 address) { ramreadformat.cmd = CONT_CMD_READ_MEMPACK; ramreadformat.address = (address << 0x5) | __osContAddressCrc(address); ramreadformat.datacrc = CONT_CMD_NOP; - for (i = 0; i < ARRLEN(ramreadformat.data); i++) { + for (i = 0; i < ARRAY_COUNT(ramreadformat.data); i++) { ramreadformat.data[i] = CONT_CMD_NOP; } if (channel != 0) { diff --git a/lib/src/contramwrite.c b/lib/src/contramwrite.c index f72d6ffd..abf21665 100644 --- a/lib/src/contramwrite.c +++ b/lib/src/contramwrite.c @@ -1,16 +1,17 @@ #include "libultra_internal.h" #include "PR/rcp.h" #include "controller.h" +#include "macros.h" -extern s32 func_8030A5C0(OSMesgQueue *, s32); -void __osPackRamWriteData(int channel, u16 address, u8 *buffer); +extern s32 __osPfsGetStatus(OSMesgQueue *, s32); +void __osPackRamWriteData(s32 channel, u16 address, u8 *buffer); -s32 __osContRamWrite(OSMesgQueue *mq, int channel, u16 address, u8 *buffer, int force) { +s32 __osContRamWrite(OSMesgQueue *mq, s32 channel, u16 address, u8 *buffer, s32 force) { s32 ret; - int i; + s32 i; u8 *ptr; __OSContRamReadFormat ramreadformat; - int retry; + s32 retry; ret = 0; ptr = (u8 *)&__osPfsPifRam; @@ -19,7 +20,7 @@ s32 __osContRamWrite(OSMesgQueue *mq, int channel, u16 address, u8 *buffer, int return 0; } __osSiGetAccess(); - _osLastSentSiCmd = CONT_CMD_WRITE_MEMPACK; + __osContLastCmd = CONT_CMD_WRITE_MEMPACK; __osPackRamWriteData(channel, address, buffer); ret = __osSiRawStartDma(OS_WRITE, &__osPfsPifRam); osRecvMesg(mq, NULL, OS_MESG_BLOCK); @@ -38,7 +39,7 @@ s32 __osContRamWrite(OSMesgQueue *mq, int channel, u16 address, u8 *buffer, int ret = CHNL_ERR(ramreadformat); if (ret == 0) { if (__osContDataCrc(buffer) != ramreadformat.datacrc) { - ret = func_8030A5C0(mq, channel); + ret = __osPfsGetStatus(mq, channel); if (ret != 0) { __osSiRelAccess(); return ret; @@ -63,7 +64,7 @@ void __osPackRamWriteData(int channel, u16 address, u8 *buffer) { ptr = (u8 *)__osPfsPifRam.ramarray; - for (i = 0; i < ARRLEN(__osPfsPifRam.ramarray) + 1; i++) { // also clear pifstatus + for (i = 0; i < ARRAY_COUNT(__osPfsPifRam.ramarray) + 1; i++) { __osPfsPifRam.ramarray[i] = 0; } @@ -74,7 +75,7 @@ void __osPackRamWriteData(int channel, u16 address, u8 *buffer) { ramreadformat.cmd = CONT_CMD_WRITE_MEMPACK; ramreadformat.address = (address << 0x5) | __osContAddressCrc(address); ramreadformat.datacrc = CONT_CMD_NOP; - for (i = 0; i < ARRLEN(ramreadformat.data); i++) { + for (i = 0; i < ARRAY_COUNT(ramreadformat.data); i++) { ramreadformat.data[i] = *buffer++; } if (channel != 0) { diff --git a/lib/src/controller.h b/lib/src/controller.h index 518b113e..df67aa43 100644 --- a/lib/src/controller.h +++ b/lib/src/controller.h @@ -5,17 +5,14 @@ #include "PR/rcp.h" //should go somewhere else but -#define ARRLEN(x) ((s32)(sizeof(x) / sizeof(x[0]))) #define CHNL_ERR(format) ((format.rxsize & CHNL_ERR_MASK) >> 4) -typedef struct -{ - /* 0x0 */ u32 ramarray[15]; +typedef struct { + /* 0x00 */ u32 ramarray[15]; /* 0x3C */ u32 pifstatus; } OSPifRam; -typedef struct -{ +typedef struct { /* 0x0 */ u8 dummy; /* 0x1 */ u8 txsize; /* 0x2 */ u8 rxsize; @@ -25,8 +22,7 @@ typedef struct /* 0x7 */ s8 stick_y; } __OSContReadFormat; -typedef struct -{ +typedef struct { /* 0x0 */ u8 dummy; /* 0x1 */ u8 txsize; /* 0x2 */ u8 rxsize; @@ -37,8 +33,7 @@ typedef struct /* 0x7 */ u8 dummy1; } __OSContRequesFormat; -typedef struct -{ +typedef struct { /* 0x0 */ u8 txsize; /* 0x1 */ u8 rxsize; /* 0x2 */ u8 cmd; @@ -47,8 +42,7 @@ typedef struct /* 0x5 */ u8 status; } __OSContRequesFormatShort; -typedef struct -{ +typedef struct { /* 0x0 */ u8 dummy; /* 0x1 */ u8 txsize; /* 0x2 */ u8 rxsize; @@ -67,8 +61,7 @@ typedef union { /* 0x0 */ u16 ipage; } __OSInodeUnit; -typedef struct -{ +typedef struct { /* 0x0 */ u32 game_code; /* 0x4 */ u16 company_code; /* 0x6 */ __OSInodeUnit start_page; @@ -79,13 +72,11 @@ typedef struct /* 0x10 */ u8 game_name[PFS_FILE_NAME_LEN]; } __OSDir; -typedef struct -{ +typedef struct { /* 0x0 */ __OSInodeUnit inode_page[128]; } __OSInode; -typedef struct -{ +typedef struct { /* 0x0 */ u32 repaired; /* 0x4 */ u32 random; /* 0x8 */ u64 serial_mid; @@ -97,8 +88,7 @@ typedef struct /* 0x1E */ u16 inverted_checksum; } __OSPackId; -typedef struct -{ +typedef struct { /* 0x0 */ u8 txsize; /* 0x1 */ u8 rxsize; /* 0x2 */ u8 cmd; @@ -160,7 +150,7 @@ s32 __osPfsDeclearPage(OSPfs *pfs, __OSInode *inode, int file_size_in_pages, int s32 __osPfsReleasePages(OSPfs *pfs, __OSInode *inode, u8 start_page, u16 *sum, u8 bank, __OSInodeUnit *last_page, int flag); s32 __osBlockSum(OSPfs *pfs, u8 page_no, u16 *sum, u8 bank); s32 __osContRamRead(OSMesgQueue *mq, int channel, u16 address, u8 *buffer); -s32 __osContRamWrite(OSMesgQueue *mq, int channel, u16 address, u8 *buffer, int force); +s32 __osContRamWrite(OSMesgQueue *mq, s32 channel, u16 address, u8 *buffer, s32 force); void __osContGetInitData(u8 *pattern, OSContStatus *data); void __osPackRequestData(u8 cmd); void __osPfsRequestData(u8 cmd); @@ -169,14 +159,14 @@ u8 __osContAddressCrc(u16 addr); u8 __osContDataCrc(u8 *data); s32 __osPfsGetStatus(OSMesgQueue *queue, int channel); -extern u8 _osLastSentSiCmd; +extern u8 __osContLastCmd; extern OSTimer __osEepromTimer; -extern OSMesg __osEepromTimerMsg; +extern OSMesg __osEepromTimerMsg[4]; extern OSMesgQueue __osEepromTimerQ; extern OSPifRam __osEepPifRam; extern OSPifRam __osContPifRam; extern OSPifRam __osPfsPifRam; -extern u8 _osContNumControllers; +extern u8 __osMaxControllers; //some version of this almost certainly existed since there's plenty of times where it's used right before a return 0 #define ERRCK(fn) \ diff --git a/lib/src/epidma.c b/lib/src/epidma.c index 3aa76f17..0206fcc7 100644 --- a/lib/src/epidma.c +++ b/lib/src/epidma.c @@ -1,4 +1,4 @@ -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) #include "PR/os_internal.h" #include "piint.h" diff --git a/lib/src/func_802F4A20.c b/lib/src/func_802F4A20.c deleted file mode 100644 index 499697d8..00000000 --- a/lib/src/func_802F4A20.c +++ /dev/null @@ -1,40 +0,0 @@ -#include "new_func.h" - -void func_802F4A20(void) { - __OSTranxInfo *sp1c; - volatile u32 sp18; - sp1c = &__osDiskHandle->transferInfo; - WAIT_ON_IOBUSY(sp18); - HW_REG(ASIC_BM_CTL, u32) = BUFFER_MANAGER_RESET | sp1c->bmCtlShadow; //should be unk10?? - WAIT_ON_IOBUSY(sp18); - HW_REG(ASIC_BM_CTL, u32) = sp1c->bmCtlShadow; - func_802F4B08(); - HW_REG(PI_STATUS_REG, u32) = PI_STATUS_CLEAR_INTR; - __OSGlobalIntMask |= 0x00100401; // TODO: fix magic numbers -} - -typedef struct OSEventMessageStruct_0_s { - OSMesgQueue *queue; - OSMesg msg; -} OSEventMessageStruct_0; - -extern OSEventMessageStruct_0 __osEventStateTab[16]; // should be OS_NUM_EVENTS + 1 I think - -void func_802F4B08(void) { - OSEventMessageStruct_0 *sp2c; - OSMesgQueue *sp28; - u32 sp24; - register OSThread *s0; - sp2c = &__osEventStateTab[OS_EVENT_PI]; - sp28 = sp2c->queue; - if (!sp28 || sp28->validCount >= sp28->msgCount) { - return; - } - sp24 = (sp28->first + sp28->validCount) % sp28->msgCount; - sp28->msg[sp24] = sp2c->msg; - sp28->validCount++; - if (sp28->mtqueue->next != NULL) { - s0 = __osPopThread(&sp28->mtqueue); - __osEnqueueThread(&D_80334898, s0); - } -} diff --git a/lib/src/func_802F71F0.c b/lib/src/func_802F71F0.c deleted file mode 100644 index e829ae47..00000000 --- a/lib/src/func_802F71F0.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "libultra_internal.h" - -void func_802F71F0(void) { - register u32 s0 = __osDisableInt(); - D_803348A0->state = OS_STATE_RUNNABLE; - __osEnqueueAndYield(&D_80334898); - __osRestoreInt(s0); -} diff --git a/lib/src/guMtxF2L.c b/lib/src/guMtxF2L.c index 2b9d9359..e2ec7a5a 100644 --- a/lib/src/guMtxF2L.c +++ b/lib/src/guMtxF2L.c @@ -3,6 +3,8 @@ #include #endif +#if !defined(VERSION_CN) || !defined(TARGET_N64) + #ifndef GBI_FLOATS void guMtxF2L(float mf[4][4], Mtx *m) { int r, c; @@ -68,3 +70,5 @@ void guMtxIdent(Mtx *m) { guMtxIdentF(m->m); #endif } + +#endif diff --git a/lib/src/guNormalize.c b/lib/src/guNormalize.c index 3ac2f00b..2f8a5aa3 100644 --- a/lib/src/guNormalize.c +++ b/lib/src/guNormalize.c @@ -1,8 +1,12 @@ #include "libultra_internal.h" +#if !defined(VERSION_CN) || !defined(TARGET_N64) + void guNormalize(f32 *x, f32 *y, f32 *z) { f32 tmp = 1.0f / sqrtf(*x * *x + *y * *y + *z * *z); *x = *x * tmp; *y = *y * tmp; *z = *z * tmp; } + +#endif diff --git a/lib/src/guRotateF.c b/lib/src/guRotateF.c index c71093ae..748265ba 100644 --- a/lib/src/guRotateF.c +++ b/lib/src/guRotateF.c @@ -1,38 +1,70 @@ #include "libultra_internal.h" void guRotateF(float m[4][4], float a, float x, float y, float z) { - float sin_a; - float cos_a; - float sp2c; - float sp28; - float sp24; - float xx, yy, zz; - static float D_80365D70 = GU_PI / 180; + static f32 pi_180 = GU_PI / 180.0f; + f32 sin_a; + f32 cos_a; + f32 ab; + f32 bc; + f32 ca; + f32 t; +#ifdef VERSION_CN + f32 xs; + f32 ys; + f32 zs; +#else + f32 xx, yy, zz; +#endif guNormalize(&x, &y, &z); - a = a * D_80365D70; + a = a * pi_180; sin_a = sinf(a); cos_a = cosf(a); + t = 1 - cos_a; - sp2c = x * y * (1 - cos_a); - sp28 = y * z * (1 - cos_a); - sp24 = z * x * (1 - cos_a); + ab = x * y * t; + bc = y * z * t; + ca = z * x * t; guMtxIdentF(m); + + // TODO: Merge IDO/GCC +#ifdef VERSION_CN + xs = x * sin_a; + t = x * x; + m[0][0] = t + cos_a * (1 - t); + m[2][1] = bc - xs; + m[1][2] = bc + xs; + + ys = y * sin_a; + t = y * y; + m[1][1] = t + cos_a * (1 - t); + m[2][0] = ca + ys; + m[0][2] = ca - ys; + + zs = z * sin_a; + t = z * z; + m[2][2] = t + cos_a * (1 - t); + m[1][0] = ab - zs; + m[0][1] = ab + zs; +#else xx = x * x; - m[0][0] = (1 - xx) * cos_a + xx; - m[2][1] = sp28 - x * sin_a; - m[1][2] = sp28 + x * sin_a; + m[0][0] = xx + cos_a * (1 - xx); + m[2][1] = bc - (x * sin_a); + m[1][2] = bc + (x * sin_a); + yy = y * y; - m[1][1] = (1 - yy) * cos_a + yy; - m[2][0] = sp24 + y * sin_a; - m[0][2] = sp24 - y * sin_a; + m[1][1] = yy + cos_a * (1 - yy); + m[2][0] = ca + (y * sin_a); + m[0][2] = ca - (y * sin_a); + zz = z * z; - m[2][2] = (1 - zz) * cos_a + zz; - m[1][0] = sp2c - z * sin_a; - m[0][1] = sp2c + z * sin_a; + m[2][2] = zz + cos_a * (1 - zz); + m[1][0] = ab - (z * sin_a); + m[0][1] = ab + (z * sin_a); +#endif } void guRotate(Mtx *m, float a, float x, float y, float z) { diff --git a/lib/src/guScaleF.c b/lib/src/guScaleF.c index 15de4c69..b900a1e2 100644 --- a/lib/src/guScaleF.c +++ b/lib/src/guScaleF.c @@ -1,5 +1,7 @@ #include "libultra_internal.h" +#if !defined(VERSION_CN) || !defined(TARGET_N64) + void guScaleF(float mf[4][4], float x, float y, float z) { guMtxIdentF(mf); mf[0][0] = x; @@ -13,3 +15,5 @@ void guScale(Mtx *m, float x, float y, float z) { guScaleF(mf, x, y, z); guMtxF2L(mf, m); } + +#endif diff --git a/lib/src/guTranslateF.c b/lib/src/guTranslateF.c index 179a6a7d..e0dc1f1e 100644 --- a/lib/src/guTranslateF.c +++ b/lib/src/guTranslateF.c @@ -1,5 +1,7 @@ #include "libultra_internal.h" +#if !defined(VERSION_CN) || !defined(TARGET_N64) + void guTranslateF(float m[4][4], float x, float y, float z) { guMtxIdentF(m); m[3][0] = x; @@ -12,3 +14,5 @@ void guTranslate(Mtx *m, float x, float y, float z) { guTranslateF(mf, x, y, z); guMtxF2L(mf, m); } + +#endif diff --git a/lib/src/hardware.h b/lib/src/hardware.h deleted file mode 100644 index 564e814c..00000000 --- a/lib/src/hardware.h +++ /dev/null @@ -1,127 +0,0 @@ -#ifndef _HARDWARE_H_ -#define _HARDWARE_H_ - -#define HW_REG(reg, type) *(volatile type *)(uintptr_t)((reg) | 0xa0000000) - -#define AI_DRAM_ADDR_REG 0x04500000 -#define AI_LEN_REG 0x04500004 -#define AI_CONTROL_REG 0x04500008 -#define AI_STATUS_REG 0x0450000C -#define AI_STATUS_AI_FULL (1 << 31) -#define AI_STATUS_AI_BUSY (1 << 30) -#define AI_DACRATE_REG 0x04500010 -#define AI_BITRATE_REG 0x04500014 - -#define VI_STATUS_REG 0x04400000 -#define VI_CONTROL_REG 0x04400000 -#define VI_ORIGIN_REG 0x04400004 -#define VI_DRAM_ADDR_REG 0x04400004 -#define VI_WIDTH_REG 0x04400008 -#define VI_H_WIDTH_REG 0x04400008 -#define VI_INTR_REG 0x0440000C -#define VI_V_INTER_REG 0x0440000C -#define VI_CURRENT_REG 0x04400010 -#define VI_V_CURRENT_LINE_REG 0x04400010 -#define VI_BURST_REG 0x04400014 -#define VI_TIMING_REG 0x04400014 -#define VI_V_SYNC_REG 0x04400018 //VI vertical sync -#define VI_H_SYNC_REG 0x0440001C //VI horizontal sync -#define VI_LEAP_REG 0x04400020 //VI horizontal sync leap -#define VI_H_SYNC_LEAP_REG 0x04400020 -#define VI_H_START_REG 0x04400024 //VI horizontal video -#define VI_H_VIDEO_REG 0x04400024 -#define VI_V_START_REG 0x04400028 //VI vertical video -#define VI_V_VIDEO_REG 0x04400028 -#define VI_V_BURST_REG 0x0440002C //VI vertical burst -#define VI_X_SCALE_REG 0x04400030 //VI x-scale -#define VI_Y_SCALE_REG 0x04400034 //VI y-scale - -#define SP_IMEM_START 0x04001000 -#define SP_DMEM_START 0x04000000 - -#define SP_MEM_ADDR_REG 0x04040000 -#define SP_DRAM_ADDR_REG 0x04040004 -#define SP_RD_LEN_REG 0x04040008 -#define SP_WR_LEN_REG 0x0404000C -#define SP_STATUS_REG 0x04040010 -#define SP_PC_REG 0x04080000 - -#define PI_DRAM_ADDR_REG 0x04600000 //PI DRAM address -#define PI_CART_ADDR_REG 0x04600004 //PI pbus (cartridge) address -#define PI_RD_LEN_REG 0x04600008 //PI read length -#define PI_WR_LEN_REG 0x0460000C //PI write length -#define PI_STATUS_REG 0x04600010 //PI status -#define PI_BSD_DOM1_LAT_REG 0x04600014 //PI dom1 latency -#define PI_DOMAIN1_REG 0x04600014 -#define PI_BSD_DOM1_PWD_REG 0x04600018 //PI dom1 pulse width -#define PI_BSD_DOM1_PGS_REG 0x0460001C //PI dom1 page size -#define PI_BSD_DOM1_RLS_REG 0x04600020 //PI dom1 release -#define PI_BSD_DOM2_LAT_REG 0x04600024 //PI dom2 latency -#define PI_DOMAIN2_REG 0x04600024 -#define PI_BSD_DOM2_PWD_REG 0x04600028 //PI dom2 pulse width -#define PI_BSD_DOM2_PGS_REG 0x0460002C //PI dom2 page size -#define PI_BSD_DOM2_RLS_REG 0x04600030 //PI dom2 release - -#define PI_STATUS_BUSY 0x1 -#define PI_STATUS_IOBUSY 0x2 -#define PI_STATUS_ERROR 0x3 - -#define PI_STATUS_RESET_CONTROLLER 0x1 -#define PI_STATUS_CLEAR_INTR 0x2 - -#define SI_DRAM_ADDR_REG 0x04800000 -#define SI_PIF_ADDR_RD64B_REG 0x04800004 -#define SI_PIF_ADDR_WR64B_REG 0x04800010 -#define SI_STATUS_REG 0x04800018 - -#define SI_STATUS_DMA_BUSY 0x1 -#define SI_STATUS_IO_READ_BUSY 0x2 -#define SI_STATUS_DMA_ERROR 0x8 -#define SI_STATUS_INTERRUPT (1 << 12) - -#define MI_INIT_MODE_REG 0x04300000 -#define MI_MODE_REG MI_INIT_MODE_REG -#define MI_VERSION_REG 0x04300004 -#define MI_INTR_REG 0x04300008 -#define MI_INTR_MASK_REG 0x0430000C - -//https://github.com/LuigiBlood/64dd/wiki/Registers -#define ASIC_STATUS 0x05000508 - -#define DATA_REQUEST 0x40000000 -#define C2_TRANSFER 0x10000000 -#define BUFFER_MANAGER_ERROR 0x08000000 -#define BUFFER_MANAGER_INTERRUPT 0x04000000 -#define MECHANIC_INTERRUPT 0x02000000 -#define DISK_PRESENT 0x01000000 -#define BUSY_STATE 0x00800000 -#define RESET_STATE 0x00400000 -#define MOTOR_NOT_SPINNING 0x00100000 -#define HEAD_RETRACTED 0x00080000 -#define WRITE_PROTECT_ERROR 0x00040000 -#define MECHANIC_ERROR 0x00020000 -#define DISK_CHANGE 0x00010000 - -#define _64DD_PRESENT_MASK 0xFFFF - - -//ro -#define ASIC_BM_STATUS 0x05000510 - -#define MICRO_STATUS 0x02000000 -#define C1_DOUBLE 0x00400000 -#define C1_SINGLE 0x00200000 - -//wo -#define ASIC_BM_CTL 0x05000510 -#define BUFFER_MANAGER_RESET 0x10000000 -#define MECHANIC_INTERRUPT_RESET 0x01000000 -/*- Start Buffer Manager (0x80000000) -- Buffer Manager Mode (0x40000000) -- BM Interrupt Mask (0x20000000) -- Buffer Manager Reset (0x10000000) -- Disable OR Check? (0x08000000) -- Disable C1 Correction (0x04000000) -- Block Transfer (0x02000000) -- Mechanic Interrupt Reset (0x01000000)*/ -#endif diff --git a/lib/src/kdebugserver.c b/lib/src/kdebugserver.c index f35b67d3..2515763b 100644 --- a/lib/src/kdebugserver.c +++ b/lib/src/kdebugserver.c @@ -1,22 +1,17 @@ #include "libultra_internal.h" +#include "PR/rdb.h" -typedef struct { - u8 unk00 : 2; - u8 pad : 4; - u8 unk01 : 2; - u8 unk2[3]; -} unkStruct; +#ifndef VERSION_CN +static s32 debugState = 0; +static s32 numChars = 0; +static s32 numCharsToReceive = 0; +#endif -extern u32 D_80334A44; +extern u8 debugBuffer[0x100]; -u32 D_80334A30 = 0; -u32 D_80334A34 = 0; -s32 D_80334A38 = 0; - -extern u8 D_80365E40[0x100]; - -OSThread gInterruptedThread; +OSThread __osThreadSave; +#ifndef VERSION_CN void u32_to_string(u32 i, u8 *str) { str[0] = (i >> 0x18) & 0xff; str[1] = (i >> 0x10) & 0xff; @@ -34,29 +29,29 @@ u32 string_to_u32(u8 *str) { } void send_packet(u8 *a0, s32 a1) { - unkStruct sp1c; + rdbPacket pkt; s32 i; - sp1c.unk00 = 2; - for (sp1c.unk01 = a1, i = 0; i < a1; i++) { - sp1c.unk2[i] = a0[i]; + pkt.type = 2; + for (pkt.length = a1, i = 0; i < a1; i++) { + pkt.buf[i] = a0[i]; } - *(volatile u32 *) 0xc0000000 = *(u32 *) &sp1c; + *(volatile u32 *) RDB_BASE_REG = *(u32 *) &pkt; while (!(__osGetCause() & 0x2000)) { ; } - *(volatile u32 *) 0xc000000c = 0; + *(volatile u32 *) RDB_READ_INTR_REG = 0; } void send(u8 *buff, s32 len) { s32 i; s32 end; s32 rem; - if (!D_80334A44) { + if (!__osRdbWriteOK) { while (!(__osGetCause() & 0x2000)) { ; } - *(volatile u32 *) 0xc000000c = 0; - D_80334A44 = 1; + *(volatile u32 *) RDB_READ_INTR_REG = 0; + __osRdbWriteOK = 1; } i = 0; rem = len % 3; @@ -72,62 +67,63 @@ void send(u8 *buff, s32 len) { void process_command_memory(void) { u32 sp1c; u32 sp18; - sp1c = string_to_u32(&D_80365E40[1]); - sp18 = string_to_u32(&D_80365E40[5]); + sp1c = string_to_u32(&debugBuffer[1]); + sp18 = string_to_u32(&debugBuffer[5]); send((u8 *) (uintptr_t) sp1c, sp18); } void process_command_register(void) { - send((u8 *) &gInterruptedThread.context, sizeof(__OSThreadContext)); + send((u8 *) &__osThreadSave.context, sizeof(__OSThreadContext)); } void kdebugserver(u32 a0) { u32 sp2c; - unkStruct sp28; - *(u32 *) &sp28 = a0; - for (sp2c = 0; sp2c < sp28.unk01; sp2c++) { - D_80365E40[D_80334A34] = sp28.unk2[sp2c]; - D_80334A34++; + rdbPacket pkt; + *(u32 *) &pkt = a0; + for (sp2c = 0; sp2c < pkt.length; sp2c++) { + debugBuffer[numChars] = pkt.buf[sp2c]; + numChars++; } - D_80334A38 -= sp28.unk01; - switch (D_80334A30) { + numCharsToReceive -= pkt.length; + switch (debugState) { case 0: - switch (sp28.unk2[0]) { + switch (pkt.buf[0]) { case 1: - D_80334A30 = 1; - D_80334A38 = 9 - sp28.unk01; + debugState = 1; + numCharsToReceive = 9 - pkt.length; break; case 2: process_command_register(); - D_80334A30 = 0; - D_80334A34 = 0; - D_80334A38 = 0; + debugState = 0; + numChars = 0; + numCharsToReceive = 0; break; default: - D_80334A30 = 0; - D_80334A34 = 0; - D_80334A38 = 0; + debugState = 0; + numChars = 0; + numCharsToReceive = 0; break; } break; case 1: - if (D_80334A38 <= 0) { - if (D_80365E40[0] == 1) { + if (numCharsToReceive <= 0) { + if (debugBuffer[0] == 1) { process_command_memory(); - D_80334A30 = 0; - D_80334A34 = 0; - D_80334A38 = 0; + debugState = 0; + numChars = 0; + numCharsToReceive = 0; } else { - D_80334A30 = 0; - D_80334A34 = 0; - D_80334A38 = 0; + debugState = 0; + numChars = 0; + numCharsToReceive = 0; } } break; default: - D_80334A30 = 0; - D_80334A34 = 0; - D_80334A38 = 0; + debugState = 0; + numChars = 0; + numCharsToReceive = 0; break; } } +#endif diff --git a/lib/src/kdebugserver_stack.c b/lib/src/kdebugserver_stack.c index 62dd6151..13f88633 100644 --- a/lib/src/kdebugserver_stack.c +++ b/lib/src/kdebugserver_stack.c @@ -1,5 +1,5 @@ #include "libultra_internal.h" #if defined(VERSION_JP) || defined(VERSION_US) -u8 D_80365E40[0x100]; +u8 debugBuffer[0x100]; #endif diff --git a/lib/src/ldiv.c b/lib/src/ldiv.c index 01b04be2..566ad173 100644 --- a/lib/src/ldiv.c +++ b/lib/src/ldiv.c @@ -1,6 +1,23 @@ #include "libultra_internal.h" #include +// for some reason the order of the functions has been swapped + +#ifdef VERSION_CN +ldiv_t ldiv(long num, long denom) { + ldiv_t ret; + + ret.quot = num / denom; + ret.rem = num - denom * ret.quot; + if (ret.quot < 0 && ret.rem > 0) { + ret.quot++; + ret.rem -= denom; + } + + return ret; +} +#endif + lldiv_t lldiv(long long num, long long denom) { lldiv_t ret; @@ -14,6 +31,7 @@ lldiv_t lldiv(long long num, long long denom) { return ret; } +#ifndef VERSION_CN ldiv_t ldiv(long num, long denom) { ldiv_t ret; @@ -26,3 +44,4 @@ ldiv_t ldiv(long num, long denom) { return ret; } +#endif diff --git a/lib/src/leointerrupt.c b/lib/src/leointerrupt.c index 83a4f39e..32ffb2b7 100644 --- a/lib/src/leointerrupt.c +++ b/lib/src/leointerrupt.c @@ -1,67 +1,112 @@ #include "libultra_internal.h" #include "PR/rcp.h" #include "bstring.h" +#include "new_func.h" +#include "macros.h" #include "piint.h" #include "osint.h" u8 leoDiskStack[OS_PIM_STACKSIZE]; // technically should have a OS_LEO_STACKSIZE or something.. -#ifdef VERSION_SH - -// TODO: so many magic constants :'( static void __osLeoResume(void); static void __osLeoAbnormalResume(void); -s32 __osLeoInterrupt() { +s32 __osLeoInterrupt(void) { u32 stat; +#ifdef VERSION_EU + u32 pi_stat; +#else // VERSION_SH volatile u32 pi_stat; +#endif u32 bm_stat; __OSTranxInfo *info; __OSBlockInfo *blockInfo; + +#ifdef VERSION_EU + if (!osDDActive) { + return 0; + } +#else // VERSION_SH stat = 0; +#endif + info = &__osDiskHandle->transferInfo; blockInfo = &info->block[info->blockNum]; pi_stat = IO_READ(PI_STATUS_REG); if (pi_stat & PI_STATUS_DMA_BUSY) { +#ifdef VERSION_EU + IO_WRITE(PI_STATUS_REG, PI_STATUS_RESET | PI_STATUS_CLR_INTR); + WAIT_ON_LEO_IO_BUSY(pi_stat); + stat = IO_READ(LEO_STATUS); + if (stat & LEO_STATUS_MECHANIC_INTERRUPT) { + WAIT_ON_LEO_IO_BUSY(pi_stat); + IO_WRITE(LEO_BM_CTL, info->bmCtlShadow | LEO_BM_CTL_CLR_MECHANIC_INTR); + } + info->errStatus = LEO_ERROR_75; + __osLeoAbnormalResume(); +#else // VERSION_SH __OSGlobalIntMask = __OSGlobalIntMask & ~SR_IBIT4; //cartridge interrupt blockInfo->errStatus = LEO_ERROR_29; __osLeoResume(); +#endif return 1; } - WAIT_ON_IOBUSY(pi_stat); + WAIT_ON_LEO_IO_BUSY(pi_stat); stat = IO_READ(LEO_STATUS); if (stat & LEO_STATUS_MECHANIC_INTERRUPT) { - WAIT_ON_IOBUSY(pi_stat); + WAIT_ON_LEO_IO_BUSY(pi_stat); IO_WRITE(LEO_BM_CTL, info->bmCtlShadow | LEO_BM_CTL_CLR_MECHANIC_INTR); +#ifdef VERSION_EU + info->errStatus = LEO_ERROR_GOOD; +#else // VERSION_SH blockInfo->errStatus = LEO_ERROR_GOOD; +#endif return 0; } + +#ifdef VERSION_SH if (info->cmdType == LEO_CMD_TYPE_2) { return 1; } +#endif + if (stat & LEO_STATUS_BUFFER_MANAGER_ERROR) { - WAIT_ON_IOBUSY(pi_stat); +#ifdef VERSION_EU + info->errStatus = LEO_ERROR_3; + __osLeoAbnormalResume(); +#else //VERSION_SH + WAIT_ON_LEO_IO_BUSY(pi_stat); stat = IO_READ(LEO_STATUS); blockInfo->errStatus = LEO_ERROR_22; __osLeoResume(); IO_WRITE(PI_STATUS_REG, PI_STATUS_CLR_INTR); __OSGlobalIntMask |= OS_IM_PI; +#endif return 1; } + if (info->cmdType == LEO_CMD_TYPE_1) { if ((stat & LEO_STATUS_DATA_REQUEST) == 0) { if (info->sectorNum + 1 != info->transferMode * 85) { +#ifdef VERSION_EU + info->errStatus = LEO_ERROR_6; +#else // VERSION_SH blockInfo->errStatus = LEO_ERROR_24; +#endif __osLeoAbnormalResume(); return 1; } IO_WRITE(PI_STATUS_REG, PI_STATUS_CLR_INTR); __OSGlobalIntMask |= OS_IM_PI; +#ifdef VERSION_EU + info->errStatus = LEO_ERROR_GOOD; +#else // VERSION_SH blockInfo->errStatus = LEO_ERROR_GOOD; +#endif __osLeoResume(); return 1; } - blockInfo->dramAddr = (void *)((u32)blockInfo->dramAddr + blockInfo->sectorSize); + blockInfo->dramAddr = (void *) ((u32)blockInfo->dramAddr + blockInfo->sectorSize); info->sectorNum++; osEPiRawStartDma(__osDiskHandle, OS_WRITE, LEO_SECTOR_BUFF, blockInfo->dramAddr, blockInfo->sectorSize); return 1; @@ -69,12 +114,20 @@ s32 __osLeoInterrupt() { if (info->cmdType == LEO_CMD_TYPE_0) { if (info->transferMode == LEO_SECTOR_MODE) { if ((s32)blockInfo->C1ErrNum + 17 < info->sectorNum) { +#ifdef VERSION_EU + info->errStatus = LEO_ERROR_GOOD; +#else // VERSION_SH blockInfo->errStatus = LEO_ERROR_GOOD; +#endif __osLeoAbnormalResume(); return 1; } if ((stat & LEO_STATUS_DATA_REQUEST) == 0) { +#ifdef VERSION_EU + info->errStatus = LEO_ERROR_17; +#else // VERSION_SH blockInfo->errStatus = LEO_ERROR_23; +#endif __osLeoAbnormalResume(); return 1; } @@ -85,68 +138,107 @@ s32 __osLeoInterrupt() { if ((bm_stat & LEO_BM_STATUS_C1SINGLE && bm_stat & LEO_BM_STATUS_C1DOUBLE) || bm_stat & LEO_BM_STATUS_MICRO) { if (blockInfo->C1ErrNum > 3) { if (info->transferMode != LEO_SECTOR_MODE || info->sectorNum > 0x52) { - blockInfo->errStatus = LEO_ERROR_23; +#ifdef VERSION_EU + info->errStatus = LEO_ERROR_17; +#else // VERSION_SH + blockInfo->errStatus = LEO_ERROR_23; +#endif __osLeoAbnormalResume(); return 1; } } else { - int errNum = blockInfo->C1ErrNum; + s32 errNum = blockInfo->C1ErrNum; blockInfo->C1ErrSector[errNum] = info->sectorNum + 1; } blockInfo->C1ErrNum++; } + if (stat & LEO_STATUS_C2_TRANSFER) { if (info->sectorNum != 87) { +#ifdef VERSION_EU + info->errStatus = LEO_ERROR_6; +#else // VERSION_SH blockInfo->errStatus = LEO_ERROR_24; +#endif __osLeoAbnormalResume(); } if (info->transferMode == LEO_TRACK_MODE && info->blockNum == 0) { info->blockNum = 1; info->sectorNum = -1; info->block[1].dramAddr = (void *)((u32)info->block[1].dramAddr - info->block[1].sectorSize); - +#ifdef VERSION_SH blockInfo->errStatus = LEO_ERROR_22; +#endif } else { IO_WRITE(PI_STATUS_REG, PI_STATUS_CLR_INTR); __OSGlobalIntMask |= OS_IM_PI; +#ifdef VERSION_SH info->cmdType = LEO_CMD_TYPE_2; blockInfo->errStatus = LEO_ERROR_GOOD; +#endif } osEPiRawStartDma(__osDiskHandle, OS_READ, LEO_C2_BUFF, blockInfo->C2Addr, blockInfo->sectorSize * 4); +#ifdef VERSION_EU + info->errStatus = LEO_ERROR_GOOD; +#endif return 1; } - if (info->sectorNum == -1 && info->transferMode == LEO_TRACK_MODE && info->blockNum == 1) { __OSBlockInfo *bptr = &info->block[0]; if (bptr->C1ErrNum == 0) { if (((u32 *)bptr->C2Addr)[0] | ((u32 *)bptr->C2Addr)[1] | ((u32 *)bptr->C2Addr)[2] | ((u32 *)bptr->C2Addr)[3]) { - bptr->errStatus = LEO_ERROR_24; +#ifdef VERSION_EU + info->errStatus = LEO_ERROR_6; +#else // VERSION_SH + bptr->errStatus = LEO_ERROR_24; +#endif __osLeoAbnormalResume(); return 1; } } - bptr->errStatus = 0; +#ifdef VERSION_EU + info->errStatus = LEO_ERROR_GOOD; +#else // VERSION_SH + bptr->errStatus = LEO_ERROR_GOOD; +#endif __osLeoResume(); } info->sectorNum++; if (stat & LEO_STATUS_DATA_REQUEST) { if (info->sectorNum > 0x54) { +#ifdef VERSION_EU + info->errStatus = LEO_ERROR_6; +#else // VERSION_SH blockInfo->errStatus = LEO_ERROR_24; +#endif __osLeoAbnormalResume(); return 1; } osEPiRawStartDma(__osDiskHandle, 0, LEO_SECTOR_BUFF, blockInfo->dramAddr, blockInfo->sectorSize); - blockInfo->errStatus = LEO_ERROR_GOOD; +#ifdef VERSION_EU + info->errStatus = LEO_ERROR_GOOD; +#else // VERSION_SH + blockInfo->errStatus = LEO_ERROR_GOOD; +#endif return 1; } if (info->sectorNum <= 0x54) { +#ifdef VERSION_EU + info->errStatus = LEO_ERROR_6; +#else // VERSION_SH blockInfo->errStatus = LEO_ERROR_24; +#endif __osLeoAbnormalResume(); return 1; } return 1; } +#ifdef VERSION_EU + info->errStatus = LEO_ERROR_75; +#else // VERSION_SH blockInfo->errStatus = LEO_ERROR_4; +#endif + __osLeoAbnormalResume(); return 1; } @@ -155,9 +247,9 @@ static void __osLeoAbnormalResume(void) { __OSTranxInfo *info; u32 pi_stat; info = &__osDiskHandle->transferInfo; - WAIT_ON_IOBUSY(pi_stat); + WAIT_ON_LEO_IO_BUSY(pi_stat); IO_WRITE(LEO_BM_CTL, info->bmCtlShadow | LEO_BM_CTL_RESET); - WAIT_ON_IOBUSY(pi_stat); + WAIT_ON_LEO_IO_BUSY(pi_stat); IO_WRITE(LEO_BM_CTL, info->bmCtlShadow); __osLeoResume(); IO_WRITE(PI_STATUS_REG, PI_STATUS_CLR_INTR); @@ -177,8 +269,6 @@ static void __osLeoResume(void) { mq->msg[last] = es->message; mq->validCount++; if (mq->mtqueue->next != NULL) { - __osEnqueueThread(&D_80334898, __osPopThread(&mq->mtqueue)); + __osEnqueueThread(&__osRunQueue, __osPopThread(&mq->mtqueue)); } } - -#endif diff --git a/lib/src/libgcc/_cmpdi2.c b/lib/src/libgcc/_cmpdi2.c new file mode 100644 index 00000000..e7407d72 --- /dev/null +++ b/lib/src/libgcc/_cmpdi2.c @@ -0,0 +1,2 @@ +#define L_cmpdi2 +#include "libgcc2.inc" diff --git a/lib/src/libgcc/_divdi3.c b/lib/src/libgcc/_divdi3.c new file mode 100644 index 00000000..01efcaa8 --- /dev/null +++ b/lib/src/libgcc/_divdi3.c @@ -0,0 +1,2 @@ +#define L_divdi3 +#include "libgcc2.inc" diff --git a/lib/src/libgcc/_fixdfdi.c b/lib/src/libgcc/_fixdfdi.c new file mode 100644 index 00000000..856d6805 --- /dev/null +++ b/lib/src/libgcc/_fixdfdi.c @@ -0,0 +1,2 @@ +#define L_fixdfdi +#include "libgcc2.inc" diff --git a/lib/src/libgcc/_fixsfdi.c b/lib/src/libgcc/_fixsfdi.c new file mode 100644 index 00000000..86e089b7 --- /dev/null +++ b/lib/src/libgcc/_fixsfdi.c @@ -0,0 +1,2 @@ +#define L_fixsfdi +#include "libgcc2.inc" diff --git a/lib/src/libgcc/_fixunsdfdi.c b/lib/src/libgcc/_fixunsdfdi.c new file mode 100644 index 00000000..c6460614 --- /dev/null +++ b/lib/src/libgcc/_fixunsdfdi.c @@ -0,0 +1,2 @@ +#define L_fixunsdfdi +#include "libgcc2.inc" diff --git a/lib/src/libgcc/_fixunssfdi.c b/lib/src/libgcc/_fixunssfdi.c new file mode 100644 index 00000000..5b1b0689 --- /dev/null +++ b/lib/src/libgcc/_fixunssfdi.c @@ -0,0 +1,2 @@ +#define L_fixunssfdi +#include "libgcc2.inc" diff --git a/lib/src/libgcc/_floatdidf.c b/lib/src/libgcc/_floatdidf.c new file mode 100644 index 00000000..e358a370 --- /dev/null +++ b/lib/src/libgcc/_floatdidf.c @@ -0,0 +1,2 @@ +#define L_floatdidf +#include "libgcc2.inc" diff --git a/lib/src/libgcc/_floatdisf.c b/lib/src/libgcc/_floatdisf.c new file mode 100644 index 00000000..e5293c5a --- /dev/null +++ b/lib/src/libgcc/_floatdisf.c @@ -0,0 +1,2 @@ +#define L_floatdisf +#include "libgcc2.inc" diff --git a/lib/src/libgcc/_moddi3.c b/lib/src/libgcc/_moddi3.c new file mode 100644 index 00000000..f4494999 --- /dev/null +++ b/lib/src/libgcc/_moddi3.c @@ -0,0 +1,2 @@ +#define L_moddi3 +#include "libgcc2.inc" diff --git a/lib/src/libgcc/_udivdi3.c b/lib/src/libgcc/_udivdi3.c new file mode 100644 index 00000000..36892ea3 --- /dev/null +++ b/lib/src/libgcc/_udivdi3.c @@ -0,0 +1,2 @@ +#define L_udivdi3 +#include "libgcc2.inc" diff --git a/lib/src/libgcc/_umoddi3.c b/lib/src/libgcc/_umoddi3.c new file mode 100644 index 00000000..adfde87a --- /dev/null +++ b/lib/src/libgcc/_umoddi3.c @@ -0,0 +1,2 @@ +#define L_umoddi3 +#include "libgcc2.inc" diff --git a/lib/src/libgcc/libgcc2.inc b/lib/src/libgcc/libgcc2.inc new file mode 100644 index 00000000..5eda40ea --- /dev/null +++ b/lib/src/libgcc/libgcc2.inc @@ -0,0 +1,4021 @@ +// This file is copied from gcc 2.95.2 +// tconfig.h, machmode.h, defaults.h and stddef.h have been un-included + +#define LIBGCC2_WORDS_BIG_ENDIAN 1 +#define BITS_PER_UNIT 8 +#define inhibit_libc + +/* More subroutines needed by GCC output code on some machines. */ +/* Compile this one with gcc. */ +/* Copyright (C) 1989, 92-98, 1999 Free Software Foundation, Inc. + +This file is part of GNU CC. + +GNU CC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU CC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU CC; see the file COPYING. If not, write to +the Free Software Foundation, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* As a special exception, if you link this library with other files, + some of which are compiled with GCC, to produce an executable, + this library does not by itself cause the resulting executable + to be covered by the GNU General Public License. + This exception does not however invalidate any other reasons why + the executable file might be covered by the GNU General Public License. */ + +/* It is incorrect to include config.h here, because this file is being + compiled for the target, and hence definitions concerning only the host + do not apply. */ + +//#include "tconfig.h" + +/* We disable this when inhibit_libc, so that gcc can still be built without + needing header files first. */ +/* ??? This is not a good solution, since prototypes may be required in + some cases for correct code. See also frame.c. */ +#ifndef inhibit_libc +/* fixproto guarantees these system headers exist. */ +#include +#include +#endif + +//#include "machmode.h" +//#include "defaults.h" +#ifndef L_trampoline +//#include +#endif + +/* Don't use `fancy_abort' here even if config.h says to use it. */ +#ifdef abort +#undef abort +#endif + +#if (SUPPORTS_WEAK == 1) && (defined (ASM_OUTPUT_DEF) || defined (ASM_OUTPUT_WEAK_ALIAS)) +#define WEAK_ALIAS +#endif + +/* In a cross-compilation situation, default to inhibiting compilation + of routines that use libc. */ + +#if defined(CROSS_COMPILE) && !defined(inhibit_libc) +#define inhibit_libc +#endif + +/* Permit the tm.h file to select the endianness to use just for this + file. This is used when the endianness is determined when the + compiler is run. */ + +#ifndef LIBGCC2_WORDS_BIG_ENDIAN +#define LIBGCC2_WORDS_BIG_ENDIAN WORDS_BIG_ENDIAN +#endif + +#ifndef LIBGCC2_LONG_DOUBLE_TYPE_SIZE +#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE LONG_DOUBLE_TYPE_SIZE +#endif + +/* In the first part of this file, we are interfacing to calls generated + by the compiler itself. These calls pass values into these routines + which have very specific modes (rather than very specific types), and + these compiler-generated calls also expect any return values to have + very specific modes (rather than very specific types). Thus, we need + to avoid using regular C language type names in this part of the file + because the sizes for those types can be configured to be anything. + Instead we use the following special type names. */ + +typedef unsigned int UQItype __attribute__ ((mode (QI))); +typedef int SItype __attribute__ ((mode (SI))); +typedef unsigned int USItype __attribute__ ((mode (SI))); +typedef int DItype __attribute__ ((mode (DI))); +typedef unsigned int UDItype __attribute__ ((mode (DI))); + +typedef float SFtype __attribute__ ((mode (SF))); +typedef float DFtype __attribute__ ((mode (DF))); + +#if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 96 +typedef float XFtype __attribute__ ((mode (XF))); +#endif +#if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128 +typedef float TFtype __attribute__ ((mode (TF))); +#endif + +typedef int word_type __attribute__ ((mode (__word__))); + +/* Make sure that we don't accidentally use any normal C language built-in + type names in the first part of this file. Instead we want to use *only* + the type names defined above. The following macro definitions insure + that if we *do* accidentally use some normal C language built-in type name, + we will get a syntax error. */ + +#define char bogus_type +#define short bogus_type +#define int bogus_type +#define long bogus_type +#define unsigned bogus_type +#define float bogus_type +#define double bogus_type + +#define SI_TYPE_SIZE (sizeof (SItype) * BITS_PER_UNIT) + +/* DIstructs are pairs of SItype values in the order determined by + LIBGCC2_WORDS_BIG_ENDIAN. */ + +#if LIBGCC2_WORDS_BIG_ENDIAN + struct DIstruct {SItype high, low;}; +#else + struct DIstruct {SItype low, high;}; +#endif + +/* We need this union to unpack/pack DImode values, since we don't have + any arithmetic yet. Incoming DImode parameters are stored into the + `ll' field, and the unpacked result is read from the struct `s'. */ + +typedef union +{ + struct DIstruct s; + DItype ll; +} DIunion; + +#if (defined (L_udivmoddi4) || defined (L_muldi3) || defined (L_udiv_w_sdiv)\ + || defined (L_divdi3) || defined (L_udivdi3) \ + || defined (L_moddi3) || defined (L_umoddi3)) + +#include "longlong.h" + +#endif /* udiv or mul */ + +extern DItype __fixunssfdi (SFtype a); +extern DItype __fixunsdfdi (DFtype a); +#if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 96 +extern DItype __fixunsxfdi (XFtype a); +#endif +#if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128 +extern DItype __fixunstfdi (TFtype a); +#endif + +#if defined (L_negdi2) || defined (L_divdi3) || defined (L_moddi3) +#if defined (L_divdi3) || defined (L_moddi3) +static inline +#endif +DItype +__negdi2 (DItype u) +{ + DIunion w; + DIunion uu; + + uu.ll = u; + + w.s.low = -uu.s.low; + w.s.high = -uu.s.high - ((USItype) w.s.low > 0); + + return w.ll; +} +#endif + +/* Unless shift functions are defined whith full ANSI prototypes, + parameter b will be promoted to int if word_type is smaller than an int. */ +#ifdef L_lshrdi3 +DItype +__lshrdi3 (DItype u, word_type b) +{ + DIunion w; + word_type bm; + DIunion uu; + + if (b == 0) + return u; + + uu.ll = u; + + bm = (sizeof (SItype) * BITS_PER_UNIT) - b; + if (bm <= 0) + { + w.s.high = 0; + w.s.low = (USItype)uu.s.high >> -bm; + } + else + { + USItype carries = (USItype)uu.s.high << bm; + w.s.high = (USItype)uu.s.high >> b; + w.s.low = ((USItype)uu.s.low >> b) | carries; + } + + return w.ll; +} +#endif + +#ifdef L_ashldi3 +DItype +__ashldi3 (DItype u, word_type b) +{ + DIunion w; + word_type bm; + DIunion uu; + + if (b == 0) + return u; + + uu.ll = u; + + bm = (sizeof (SItype) * BITS_PER_UNIT) - b; + if (bm <= 0) + { + w.s.low = 0; + w.s.high = (USItype)uu.s.low << -bm; + } + else + { + USItype carries = (USItype)uu.s.low >> bm; + w.s.low = (USItype)uu.s.low << b; + w.s.high = ((USItype)uu.s.high << b) | carries; + } + + return w.ll; +} +#endif + +#ifdef L_ashrdi3 +DItype +__ashrdi3 (DItype u, word_type b) +{ + DIunion w; + word_type bm; + DIunion uu; + + if (b == 0) + return u; + + uu.ll = u; + + bm = (sizeof (SItype) * BITS_PER_UNIT) - b; + if (bm <= 0) + { + /* w.s.high = 1..1 or 0..0 */ + w.s.high = uu.s.high >> (sizeof (SItype) * BITS_PER_UNIT - 1); + w.s.low = uu.s.high >> -bm; + } + else + { + USItype carries = (USItype)uu.s.high << bm; + w.s.high = uu.s.high >> b; + w.s.low = ((USItype)uu.s.low >> b) | carries; + } + + return w.ll; +} +#endif + +#ifdef L_ffsdi2 +DItype +__ffsdi2 (DItype u) +{ + DIunion uu, w; + uu.ll = u; + w.s.high = 0; + w.s.low = ffs (uu.s.low); + if (w.s.low != 0) + return w.ll; + w.s.low = ffs (uu.s.high); + if (w.s.low != 0) + { + w.s.low += BITS_PER_UNIT * sizeof (SItype); + return w.ll; + } + return w.ll; +} +#endif + +#ifdef L_muldi3 +DItype +__muldi3 (DItype u, DItype v) +{ + DIunion w; + DIunion uu, vv; + + uu.ll = u, + vv.ll = v; + + w.ll = __umulsidi3 (uu.s.low, vv.s.low); + w.s.high += ((USItype) uu.s.low * (USItype) vv.s.high + + (USItype) uu.s.high * (USItype) vv.s.low); + + return w.ll; +} +#endif + +#ifdef L_udiv_w_sdiv +#if defined (sdiv_qrnnd) +USItype +__udiv_w_sdiv (USItype *rp, USItype a1, USItype a0, USItype d) +{ + USItype q, r; + USItype c0, c1, b1; + + if ((SItype) d >= 0) + { + if (a1 < d - a1 - (a0 >> (SI_TYPE_SIZE - 1))) + { + /* dividend, divisor, and quotient are nonnegative */ + sdiv_qrnnd (q, r, a1, a0, d); + } + else + { + /* Compute c1*2^32 + c0 = a1*2^32 + a0 - 2^31*d */ + sub_ddmmss (c1, c0, a1, a0, d >> 1, d << (SI_TYPE_SIZE - 1)); + /* Divide (c1*2^32 + c0) by d */ + sdiv_qrnnd (q, r, c1, c0, d); + /* Add 2^31 to quotient */ + q += (USItype) 1 << (SI_TYPE_SIZE - 1); + } + } + else + { + b1 = d >> 1; /* d/2, between 2^30 and 2^31 - 1 */ + c1 = a1 >> 1; /* A/2 */ + c0 = (a1 << (SI_TYPE_SIZE - 1)) + (a0 >> 1); + + if (a1 < b1) /* A < 2^32*b1, so A/2 < 2^31*b1 */ + { + sdiv_qrnnd (q, r, c1, c0, b1); /* (A/2) / (d/2) */ + + r = 2*r + (a0 & 1); /* Remainder from A/(2*b1) */ + if ((d & 1) != 0) + { + if (r >= q) + r = r - q; + else if (q - r <= d) + { + r = r - q + d; + q--; + } + else + { + r = r - q + 2*d; + q -= 2; + } + } + } + else if (c1 < b1) /* So 2^31 <= (A/2)/b1 < 2^32 */ + { + c1 = (b1 - 1) - c1; + c0 = ~c0; /* logical NOT */ + + sdiv_qrnnd (q, r, c1, c0, b1); /* (A/2) / (d/2) */ + + q = ~q; /* (A/2)/b1 */ + r = (b1 - 1) - r; + + r = 2*r + (a0 & 1); /* A/(2*b1) */ + + if ((d & 1) != 0) + { + if (r >= q) + r = r - q; + else if (q - r <= d) + { + r = r - q + d; + q--; + } + else + { + r = r - q + 2*d; + q -= 2; + } + } + } + else /* Implies c1 = b1 */ + { /* Hence a1 = d - 1 = 2*b1 - 1 */ + if (a0 >= -d) + { + q = -1; + r = a0 + d; + } + else + { + q = -2; + r = a0 + 2*d; + } + } + } + + *rp = r; + return q; +} +#else +/* If sdiv_qrnnd doesn't exist, define dummy __udiv_w_sdiv. */ +USItype +__udiv_w_sdiv (USItype *rp __attribute__ ((__unused__)), + USItype a1 __attribute__ ((__unused__)), + USItype a0 __attribute__ ((__unused__)), + USItype d __attribute__ ((__unused__))) +{ + return 0; +} +#endif +#endif + +#if (defined (L_udivdi3) || defined (L_divdi3) || \ + defined (L_umoddi3) || defined (L_moddi3)) +#define L_udivmoddi4 +#endif + +#ifdef L_udivmoddi4 +static const UQItype __clz_tab[] = +{ + 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, +}; + +#if (defined (L_udivdi3) || defined (L_divdi3) || \ + defined (L_umoddi3) || defined (L_moddi3)) +static inline +#endif +UDItype +__udivmoddi4 (UDItype n, UDItype d, UDItype *rp) +{ + DIunion ww; + DIunion nn, dd; + DIunion rr; + USItype d0, d1, n0, n1, n2; + USItype q0, q1; + USItype b, bm; + + nn.ll = n; + dd.ll = d; + + d0 = dd.s.low; + d1 = dd.s.high; + n0 = nn.s.low; + n1 = nn.s.high; + +#if !UDIV_NEEDS_NORMALIZATION + if (d1 == 0) + { + if (d0 > n1) + { + /* 0q = nn / 0D */ + + udiv_qrnnd (q0, n0, n1, n0, d0); + q1 = 0; + + /* Remainder in n0. */ + } + else + { + /* qq = NN / 0d */ + + if (d0 == 0) + d0 = 1 / d0; /* Divide intentionally by zero. */ + + udiv_qrnnd (q1, n1, 0, n1, d0); + udiv_qrnnd (q0, n0, n1, n0, d0); + + /* Remainder in n0. */ + } + + if (rp != 0) + { + rr.s.low = n0; + rr.s.high = 0; + *rp = rr.ll; + } + } + +#else /* UDIV_NEEDS_NORMALIZATION */ + + if (d1 == 0) + { + if (d0 > n1) + { + /* 0q = nn / 0D */ + + count_leading_zeros (bm, d0); + + if (bm != 0) + { + /* Normalize, i.e. make the most significant bit of the + denominator set. */ + + d0 = d0 << bm; + n1 = (n1 << bm) | (n0 >> (SI_TYPE_SIZE - bm)); + n0 = n0 << bm; + } + + udiv_qrnnd (q0, n0, n1, n0, d0); + q1 = 0; + + /* Remainder in n0 >> bm. */ + } + else + { + /* qq = NN / 0d */ + + if (d0 == 0) + d0 = 1 / d0; /* Divide intentionally by zero. */ + + count_leading_zeros (bm, d0); + + if (bm == 0) + { + /* From (n1 >= d0) /\ (the most significant bit of d0 is set), + conclude (the most significant bit of n1 is set) /\ (the + leading quotient digit q1 = 1). + + This special case is necessary, not an optimization. + (Shifts counts of SI_TYPE_SIZE are undefined.) */ + + n1 -= d0; + q1 = 1; + } + else + { + /* Normalize. */ + + b = SI_TYPE_SIZE - bm; + + d0 = d0 << bm; + n2 = n1 >> b; + n1 = (n1 << bm) | (n0 >> b); + n0 = n0 << bm; + + udiv_qrnnd (q1, n1, n2, n1, d0); + } + + /* n1 != d0... */ + + udiv_qrnnd (q0, n0, n1, n0, d0); + + /* Remainder in n0 >> bm. */ + } + + if (rp != 0) + { + rr.s.low = n0 >> bm; + rr.s.high = 0; + *rp = rr.ll; + } + } +#endif /* UDIV_NEEDS_NORMALIZATION */ + + else + { + if (d1 > n1) + { + /* 00 = nn / DD */ + + q0 = 0; + q1 = 0; + + /* Remainder in n1n0. */ + if (rp != 0) + { + rr.s.low = n0; + rr.s.high = n1; + *rp = rr.ll; + } + } + else + { + /* 0q = NN / dd */ + + count_leading_zeros (bm, d1); + if (bm == 0) + { + /* From (n1 >= d1) /\ (the most significant bit of d1 is set), + conclude (the most significant bit of n1 is set) /\ (the + quotient digit q0 = 0 or 1). + + This special case is necessary, not an optimization. */ + + /* The condition on the next line takes advantage of that + n1 >= d1 (true due to program flow). */ + if (n1 > d1 || n0 >= d0) + { + q0 = 1; + sub_ddmmss (n1, n0, n1, n0, d1, d0); + } + else + q0 = 0; + + q1 = 0; + + if (rp != 0) + { + rr.s.low = n0; + rr.s.high = n1; + *rp = rr.ll; + } + } + else + { + USItype m1, m0; + /* Normalize. */ + + b = SI_TYPE_SIZE - bm; + + d1 = (d1 << bm) | (d0 >> b); + d0 = d0 << bm; + n2 = n1 >> b; + n1 = (n1 << bm) | (n0 >> b); + n0 = n0 << bm; + + udiv_qrnnd (q0, n1, n2, n1, d1); + umul_ppmm (m1, m0, q0, d0); + + if (m1 > n1 || (m1 == n1 && m0 > n0)) + { + q0--; + sub_ddmmss (m1, m0, m1, m0, d1, d0); + } + + q1 = 0; + + /* Remainder in (n1n0 - m1m0) >> bm. */ + if (rp != 0) + { + sub_ddmmss (n1, n0, n1, n0, m1, m0); + rr.s.low = (n1 << b) | (n0 >> bm); + rr.s.high = n1 >> bm; + *rp = rr.ll; + } + } + } + } + + ww.s.low = q0; + ww.s.high = q1; + return ww.ll; +} +#endif + +#ifdef L_divdi3 +UDItype __udivmoddi4 (); + +DItype +__divdi3 (DItype u, DItype v) +{ + word_type c = 0; + DIunion uu, vv; + DItype w; + + uu.ll = u; + vv.ll = v; + + if (uu.s.high < 0) + c = ~c, + uu.ll = __negdi2 (uu.ll); + if (vv.s.high < 0) + c = ~c, + vv.ll = __negdi2 (vv.ll); + + w = __udivmoddi4 (uu.ll, vv.ll, (UDItype *) 0); + if (c) + w = __negdi2 (w); + + return w; +} +#endif + +#ifdef L_moddi3 +UDItype __udivmoddi4 (); +DItype +__moddi3 (DItype u, DItype v) +{ + word_type c = 0; + DIunion uu, vv; + DItype w; + + uu.ll = u; + vv.ll = v; + + if (uu.s.high < 0) + c = ~c, + uu.ll = __negdi2 (uu.ll); + if (vv.s.high < 0) + vv.ll = __negdi2 (vv.ll); + + (void) __udivmoddi4 (uu.ll, vv.ll, &w); + if (c) + w = __negdi2 (w); + + return w; +} +#endif + +#ifdef L_umoddi3 +UDItype __udivmoddi4 (); +UDItype +__umoddi3 (UDItype u, UDItype v) +{ + UDItype w; + + (void) __udivmoddi4 (u, v, &w); + + return w; +} +#endif + +#ifdef L_udivdi3 +UDItype __udivmoddi4 (); +UDItype +__udivdi3 (UDItype n, UDItype d) +{ + return __udivmoddi4 (n, d, (UDItype *) 0); +} +#endif + +#ifdef L_cmpdi2 +word_type +__cmpdi2 (DItype a, DItype b) +{ + DIunion au, bu; + + au.ll = a, bu.ll = b; + + if (au.s.high < bu.s.high) + return 0; + else if (au.s.high > bu.s.high) + return 2; + if ((USItype) au.s.low < (USItype) bu.s.low) + return 0; + else if ((USItype) au.s.low > (USItype) bu.s.low) + return 2; + return 1; +} +#endif + +#ifdef L_ucmpdi2 +word_type +__ucmpdi2 (DItype a, DItype b) +{ + DIunion au, bu; + + au.ll = a, bu.ll = b; + + if ((USItype) au.s.high < (USItype) bu.s.high) + return 0; + else if ((USItype) au.s.high > (USItype) bu.s.high) + return 2; + if ((USItype) au.s.low < (USItype) bu.s.low) + return 0; + else if ((USItype) au.s.low > (USItype) bu.s.low) + return 2; + return 1; +} +#endif + +#if defined(L_fixunstfdi) && (LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128) +#define WORD_SIZE (sizeof (SItype) * BITS_PER_UNIT) +#define HIGH_WORD_COEFF (((UDItype) 1) << WORD_SIZE) + +DItype +__fixunstfdi (TFtype a) +{ + TFtype b; + UDItype v; + + if (a < 0) + return 0; + + /* Compute high word of result, as a flonum. */ + b = (a / HIGH_WORD_COEFF); + /* Convert that to fixed (but not to DItype!), + and shift it into the high word. */ + v = (USItype) b; + v <<= WORD_SIZE; + /* Remove high part from the TFtype, leaving the low part as flonum. */ + a -= (TFtype)v; + /* Convert that to fixed (but not to DItype!) and add it in. + Sometimes A comes out negative. This is significant, since + A has more bits than a long int does. */ + if (a < 0) + v -= (USItype) (- a); + else + v += (USItype) a; + return v; +} +#endif + +#if defined(L_fixtfdi) && (LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128) +DItype +__fixtfdi (TFtype a) +{ + if (a < 0) + return - __fixunstfdi (-a); + return __fixunstfdi (a); +} +#endif + +#if defined(L_fixunsxfdi) && (LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 96) +#define WORD_SIZE (sizeof (SItype) * BITS_PER_UNIT) +#define HIGH_WORD_COEFF (((UDItype) 1) << WORD_SIZE) + +DItype +__fixunsxfdi (XFtype a) +{ + XFtype b; + UDItype v; + + if (a < 0) + return 0; + + /* Compute high word of result, as a flonum. */ + b = (a / HIGH_WORD_COEFF); + /* Convert that to fixed (but not to DItype!), + and shift it into the high word. */ + v = (USItype) b; + v <<= WORD_SIZE; + /* Remove high part from the XFtype, leaving the low part as flonum. */ + a -= (XFtype)v; + /* Convert that to fixed (but not to DItype!) and add it in. + Sometimes A comes out negative. This is significant, since + A has more bits than a long int does. */ + if (a < 0) + v -= (USItype) (- a); + else + v += (USItype) a; + return v; +} +#endif + +#if defined(L_fixxfdi) && (LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 96) +DItype +__fixxfdi (XFtype a) +{ + if (a < 0) + return - __fixunsxfdi (-a); + return __fixunsxfdi (a); +} +#endif + +#ifdef L_fixunsdfdi +#define WORD_SIZE (sizeof (SItype) * BITS_PER_UNIT) +#define HIGH_WORD_COEFF (((UDItype) 1) << WORD_SIZE) + +DItype +__fixunsdfdi (DFtype a) +{ + DFtype b; + UDItype v; + + if (a < 0) + return 0; + + /* Compute high word of result, as a flonum. */ + b = (a / HIGH_WORD_COEFF); + /* Convert that to fixed (but not to DItype!), + and shift it into the high word. */ + v = (USItype) b; + v <<= WORD_SIZE; + /* Remove high part from the DFtype, leaving the low part as flonum. */ + a -= (DFtype)v; + /* Convert that to fixed (but not to DItype!) and add it in. + Sometimes A comes out negative. This is significant, since + A has more bits than a long int does. */ + if (a < 0) + v -= (USItype) (- a); + else + v += (USItype) a; + return v; +} +#endif + +#ifdef L_fixdfdi +DItype +__fixdfdi (DFtype a) +{ + if (a < 0) + return - __fixunsdfdi (-a); + return __fixunsdfdi (a); +} +#endif + +#ifdef L_fixunssfdi +#define WORD_SIZE (sizeof (SItype) * BITS_PER_UNIT) +#define HIGH_WORD_COEFF (((UDItype) 1) << WORD_SIZE) + +DItype +__fixunssfdi (SFtype original_a) +{ + /* Convert the SFtype to a DFtype, because that is surely not going + to lose any bits. Some day someone else can write a faster version + that avoids converting to DFtype, and verify it really works right. */ + DFtype a = original_a; + DFtype b; + UDItype v; + + if (a < 0) + return 0; + + /* Compute high word of result, as a flonum. */ + b = (a / HIGH_WORD_COEFF); + /* Convert that to fixed (but not to DItype!), + and shift it into the high word. */ + v = (USItype) b; + v <<= WORD_SIZE; + /* Remove high part from the DFtype, leaving the low part as flonum. */ + a -= (DFtype)v; + /* Convert that to fixed (but not to DItype!) and add it in. + Sometimes A comes out negative. This is significant, since + A has more bits than a long int does. */ + if (a < 0) + v -= (USItype) (- a); + else + v += (USItype) a; + return v; +} +#endif + +#ifdef L_fixsfdi +DItype +__fixsfdi (SFtype a) +{ + if (a < 0) + return - __fixunssfdi (-a); + return __fixunssfdi (a); +} +#endif + +#if defined(L_floatdixf) && (LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 96) +#define WORD_SIZE (sizeof (SItype) * BITS_PER_UNIT) +#define HIGH_HALFWORD_COEFF (((UDItype) 1) << (WORD_SIZE / 2)) +#define HIGH_WORD_COEFF (((UDItype) 1) << WORD_SIZE) + +XFtype +__floatdixf (DItype u) +{ + XFtype d; + + d = (SItype) (u >> WORD_SIZE); + d *= HIGH_HALFWORD_COEFF; + d *= HIGH_HALFWORD_COEFF; + d += (USItype) (u & (HIGH_WORD_COEFF - 1)); + + return d; +} +#endif + +#if defined(L_floatditf) && (LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128) +#define WORD_SIZE (sizeof (SItype) * BITS_PER_UNIT) +#define HIGH_HALFWORD_COEFF (((UDItype) 1) << (WORD_SIZE / 2)) +#define HIGH_WORD_COEFF (((UDItype) 1) << WORD_SIZE) + +TFtype +__floatditf (DItype u) +{ + TFtype d; + + d = (SItype) (u >> WORD_SIZE); + d *= HIGH_HALFWORD_COEFF; + d *= HIGH_HALFWORD_COEFF; + d += (USItype) (u & (HIGH_WORD_COEFF - 1)); + + return d; +} +#endif + +#ifdef L_floatdidf +#define WORD_SIZE (sizeof (SItype) * BITS_PER_UNIT) +#define HIGH_HALFWORD_COEFF (((UDItype) 1) << (WORD_SIZE / 2)) +#define HIGH_WORD_COEFF (((UDItype) 1) << WORD_SIZE) + +DFtype +__floatdidf (DItype u) +{ + DFtype d; + + d = (SItype) (u >> WORD_SIZE); + d *= HIGH_HALFWORD_COEFF; + d *= HIGH_HALFWORD_COEFF; + d += (USItype) (u & (HIGH_WORD_COEFF - 1)); + + return d; +} +#endif + +#ifdef L_floatdisf +#define WORD_SIZE (sizeof (SItype) * BITS_PER_UNIT) +#define HIGH_HALFWORD_COEFF (((UDItype) 1) << (WORD_SIZE / 2)) +#define HIGH_WORD_COEFF (((UDItype) 1) << WORD_SIZE) +#define DI_SIZE (sizeof (DItype) * BITS_PER_UNIT) + +/* Define codes for all the float formats that we know of. Note + that this is copied from real.h. */ + +#define UNKNOWN_FLOAT_FORMAT 0 +#define IEEE_FLOAT_FORMAT 1 +#define VAX_FLOAT_FORMAT 2 +#define IBM_FLOAT_FORMAT 3 + +/* Default to IEEE float if not specified. Nearly all machines use it. */ +#ifndef HOST_FLOAT_FORMAT +#define HOST_FLOAT_FORMAT IEEE_FLOAT_FORMAT +#endif + +#if HOST_FLOAT_FORMAT == IEEE_FLOAT_FORMAT +#define DF_SIZE 53 +#define SF_SIZE 24 +#endif + +#if HOST_FLOAT_FORMAT == IBM_FLOAT_FORMAT +#define DF_SIZE 56 +#define SF_SIZE 24 +#endif + +#if HOST_FLOAT_FORMAT == VAX_FLOAT_FORMAT +#define DF_SIZE 56 +#define SF_SIZE 24 +#endif + +SFtype +__floatdisf (DItype u) +{ + /* Do the calculation in DFmode + so that we don't lose any of the precision of the high word + while multiplying it. */ + DFtype f; + + /* Protect against double-rounding error. + Represent any low-order bits, that might be truncated in DFmode, + by a bit that won't be lost. The bit can go in anywhere below the + rounding position of the SFmode. A fixed mask and bit position + handles all usual configurations. It doesn't handle the case + of 128-bit DImode, however. */ + if (DF_SIZE < DI_SIZE + && DF_SIZE > (DI_SIZE - DF_SIZE + SF_SIZE)) + { +#define REP_BIT ((USItype) 1 << (DI_SIZE - DF_SIZE)) + if (! (- ((DItype) 1 << DF_SIZE) < u + && u < ((DItype) 1 << DF_SIZE))) + { + if ((USItype) u & (REP_BIT - 1)) + u |= REP_BIT; + } + } + f = (SItype) (u >> WORD_SIZE); + f *= HIGH_HALFWORD_COEFF; + f *= HIGH_HALFWORD_COEFF; + f += (USItype) (u & (HIGH_WORD_COEFF - 1)); + + return (SFtype) f; +} +#endif + +#if defined(L_fixunsxfsi) && LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 96 +/* Reenable the normal types, in case limits.h needs them. */ +#undef char +#undef short +#undef int +#undef long +#undef unsigned +#undef float +#undef double +#undef MIN +#undef MAX +#include + +USItype +__fixunsxfsi (XFtype a) +{ + if (a >= - (DFtype) LONG_MIN) + return (SItype) (a + LONG_MIN) - LONG_MIN; + return (SItype) a; +} +#endif + +#ifdef L_fixunsdfsi +/* Reenable the normal types, in case limits.h needs them. */ +#undef char +#undef short +#undef int +#undef long +#undef unsigned +#undef float +#undef double +#undef MIN +#undef MAX +#include + +USItype +__fixunsdfsi (DFtype a) +{ + if (a >= - (DFtype) LONG_MIN) + return (SItype) (a + LONG_MIN) - LONG_MIN; + return (SItype) a; +} +#endif + +#ifdef L_fixunssfsi +/* Reenable the normal types, in case limits.h needs them. */ +#undef char +#undef short +#undef int +#undef long +#undef unsigned +#undef float +#undef double +#undef MIN +#undef MAX +#include + +USItype +__fixunssfsi (SFtype a) +{ + if (a >= - (SFtype) LONG_MIN) + return (SItype) (a + LONG_MIN) - LONG_MIN; + return (SItype) a; +} +#endif + +/* From here on down, the routines use normal data types. */ + +#define SItype bogus_type +#define USItype bogus_type +#define DItype bogus_type +#define UDItype bogus_type +#define SFtype bogus_type +#define DFtype bogus_type + +#undef char +#undef short +#undef int +#undef long +#undef unsigned +#undef float +#undef double + +#ifdef L__gcc_bcmp + +/* Like bcmp except the sign is meaningful. + Result is negative if S1 is less than S2, + positive if S1 is greater, 0 if S1 and S2 are equal. */ + +int +__gcc_bcmp (unsigned char *s1, unsigned char *s2, size_t size) +{ + while (size > 0) + { + unsigned char c1 = *s1++, c2 = *s2++; + if (c1 != c2) + return c1 - c2; + size--; + } + return 0; +} + +#endif + +#ifdef L__dummy +void +__dummy () {} +#endif + +#ifdef L_varargs +#ifdef __i860__ +#if defined(__svr4__) || defined(__alliant__) + asm (" .text"); + asm (" .align 4"); + +/* The Alliant needs the added underscore. */ + asm (".globl __builtin_saveregs"); +asm ("__builtin_saveregs:"); + asm (".globl ___builtin_saveregs"); +asm ("___builtin_saveregs:"); + + asm (" andnot 0x0f,%sp,%sp"); /* round down to 16-byte boundary */ + asm (" adds -96,%sp,%sp"); /* allocate stack space for reg save + area and also for a new va_list + structure */ + /* Save all argument registers in the arg reg save area. The + arg reg save area must have the following layout (according + to the svr4 ABI): + + struct { + union { + float freg[8]; + double dreg[4]; + } float_regs; + long ireg[12]; + }; + */ + + asm (" fst.q %f8, 0(%sp)"); /* save floating regs (f8-f15) */ + asm (" fst.q %f12,16(%sp)"); + + asm (" st.l %r16,32(%sp)"); /* save integer regs (r16-r27) */ + asm (" st.l %r17,36(%sp)"); + asm (" st.l %r18,40(%sp)"); + asm (" st.l %r19,44(%sp)"); + asm (" st.l %r20,48(%sp)"); + asm (" st.l %r21,52(%sp)"); + asm (" st.l %r22,56(%sp)"); + asm (" st.l %r23,60(%sp)"); + asm (" st.l %r24,64(%sp)"); + asm (" st.l %r25,68(%sp)"); + asm (" st.l %r26,72(%sp)"); + asm (" st.l %r27,76(%sp)"); + + asm (" adds 80,%sp,%r16"); /* compute the address of the new + va_list structure. Put in into + r16 so that it will be returned + to the caller. */ + + /* Initialize all fields of the new va_list structure. This + structure looks like: + + typedef struct { + unsigned long ireg_used; + unsigned long freg_used; + long *reg_base; + long *mem_ptr; + } va_list; + */ + + asm (" st.l %r0, 0(%r16)"); /* nfixed */ + asm (" st.l %r0, 4(%r16)"); /* nfloating */ + asm (" st.l %sp, 8(%r16)"); /* __va_ctl points to __va_struct. */ + asm (" bri %r1"); /* delayed return */ + asm (" st.l %r28,12(%r16)"); /* pointer to overflow args */ + +#else /* not __svr4__ */ +#if defined(__PARAGON__) + /* + * we'll use SVR4-ish varargs but need SVR3.2 assembler syntax, + * and we stand a better chance of hooking into libraries + * compiled by PGI. [andyp@ssd.intel.com] + */ + asm (" .text"); + asm (" .align 4"); + asm (".globl __builtin_saveregs"); +asm ("__builtin_saveregs:"); + asm (".globl ___builtin_saveregs"); +asm ("___builtin_saveregs:"); + + asm (" andnot 0x0f,sp,sp"); /* round down to 16-byte boundary */ + asm (" adds -96,sp,sp"); /* allocate stack space for reg save + area and also for a new va_list + structure */ + /* Save all argument registers in the arg reg save area. The + arg reg save area must have the following layout (according + to the svr4 ABI): + + struct { + union { + float freg[8]; + double dreg[4]; + } float_regs; + long ireg[12]; + }; + */ + + asm (" fst.q f8, 0(sp)"); + asm (" fst.q f12,16(sp)"); + asm (" st.l r16,32(sp)"); + asm (" st.l r17,36(sp)"); + asm (" st.l r18,40(sp)"); + asm (" st.l r19,44(sp)"); + asm (" st.l r20,48(sp)"); + asm (" st.l r21,52(sp)"); + asm (" st.l r22,56(sp)"); + asm (" st.l r23,60(sp)"); + asm (" st.l r24,64(sp)"); + asm (" st.l r25,68(sp)"); + asm (" st.l r26,72(sp)"); + asm (" st.l r27,76(sp)"); + + asm (" adds 80,sp,r16"); /* compute the address of the new + va_list structure. Put in into + r16 so that it will be returned + to the caller. */ + + /* Initialize all fields of the new va_list structure. This + structure looks like: + + typedef struct { + unsigned long ireg_used; + unsigned long freg_used; + long *reg_base; + long *mem_ptr; + } va_list; + */ + + asm (" st.l r0, 0(r16)"); /* nfixed */ + asm (" st.l r0, 4(r16)"); /* nfloating */ + asm (" st.l sp, 8(r16)"); /* __va_ctl points to __va_struct. */ + asm (" bri r1"); /* delayed return */ + asm (" st.l r28,12(r16)"); /* pointer to overflow args */ +#else /* not __PARAGON__ */ + asm (" .text"); + asm (" .align 4"); + + asm (".globl ___builtin_saveregs"); + asm ("___builtin_saveregs:"); + asm (" mov sp,r30"); + asm (" andnot 0x0f,sp,sp"); + asm (" adds -96,sp,sp"); /* allocate sufficient space on the stack */ + +/* Fill in the __va_struct. */ + asm (" st.l r16, 0(sp)"); /* save integer regs (r16-r27) */ + asm (" st.l r17, 4(sp)"); /* int fixed[12] */ + asm (" st.l r18, 8(sp)"); + asm (" st.l r19,12(sp)"); + asm (" st.l r20,16(sp)"); + asm (" st.l r21,20(sp)"); + asm (" st.l r22,24(sp)"); + asm (" st.l r23,28(sp)"); + asm (" st.l r24,32(sp)"); + asm (" st.l r25,36(sp)"); + asm (" st.l r26,40(sp)"); + asm (" st.l r27,44(sp)"); + + asm (" fst.q f8, 48(sp)"); /* save floating regs (f8-f15) */ + asm (" fst.q f12,64(sp)"); /* int floating[8] */ + +/* Fill in the __va_ctl. */ + asm (" st.l sp, 80(sp)"); /* __va_ctl points to __va_struct. */ + asm (" st.l r28,84(sp)"); /* pointer to more args */ + asm (" st.l r0, 88(sp)"); /* nfixed */ + asm (" st.l r0, 92(sp)"); /* nfloating */ + + asm (" adds 80,sp,r16"); /* return address of the __va_ctl. */ + asm (" bri r1"); + asm (" mov r30,sp"); + /* recover stack and pass address to start + of data. */ +#endif /* not __PARAGON__ */ +#endif /* not __svr4__ */ +#else /* not __i860__ */ +#ifdef __sparc__ + asm (".global __builtin_saveregs"); + asm ("__builtin_saveregs:"); + asm (".global ___builtin_saveregs"); + asm ("___builtin_saveregs:"); +#ifdef NEED_PROC_COMMAND + asm (".proc 020"); +#endif + asm ("st %i0,[%fp+68]"); + asm ("st %i1,[%fp+72]"); + asm ("st %i2,[%fp+76]"); + asm ("st %i3,[%fp+80]"); + asm ("st %i4,[%fp+84]"); + asm ("retl"); + asm ("st %i5,[%fp+88]"); +#ifdef NEED_TYPE_COMMAND + asm (".type __builtin_saveregs,#function"); + asm (".size __builtin_saveregs,.-__builtin_saveregs"); +#endif +#else /* not __sparc__ */ +#if defined(__MIPSEL__) | defined(__R3000__) | defined(__R2000__) | defined(__mips__) + + asm (" .text"); +#ifdef __mips16 + asm (" .set nomips16"); +#endif + asm (" .ent __builtin_saveregs"); + asm (" .globl __builtin_saveregs"); + asm ("__builtin_saveregs:"); + asm (" sw $4,0($30)"); + asm (" sw $5,4($30)"); + asm (" sw $6,8($30)"); + asm (" sw $7,12($30)"); + asm (" j $31"); + asm (" .end __builtin_saveregs"); +#else /* not __mips__, etc. */ + +void * +__builtin_saveregs () +{ + abort (); +} + +#endif /* not __mips__ */ +#endif /* not __sparc__ */ +#endif /* not __i860__ */ +#endif + +#ifdef L_eprintf +#ifndef inhibit_libc + +#undef NULL /* Avoid errors if stdio.h and our stddef.h mismatch. */ +#include +/* This is used by the `assert' macro. */ +extern void __eprintf (const char *, const char *, unsigned int, const char *) + __attribute__ ((__noreturn__)); + +void +__eprintf (const char *string, const char *expression, + unsigned int line, const char *filename) +{ + fprintf (stderr, string, expression, line, filename); + fflush (stderr); + abort (); +} + +#endif +#endif + +#ifdef L_bb + +/* Structure emitted by -a */ +struct bb +{ + long zero_word; + const char *filename; + long *counts; + long ncounts; + struct bb *next; + const unsigned long *addresses; + + /* Older GCC's did not emit these fields. */ + long nwords; + const char **functions; + const long *line_nums; + const char **filenames; + char *flags; +}; + +#ifdef BLOCK_PROFILER_CODE +BLOCK_PROFILER_CODE +#else +#ifndef inhibit_libc + +/* Simple minded basic block profiling output dumper for + systems that don't provide tcov support. At present, + it requires atexit and stdio. */ + +#undef NULL /* Avoid errors if stdio.h and our stddef.h mismatch. */ +#include +char *ctime (); + +#include "gbl-ctors.h" +#include "gcov-io.h" +#include + +static struct bb *bb_head; + +/* Return the number of digits needed to print a value */ +/* __inline__ */ static int num_digits (long value, int base) +{ + int minus = (value < 0 && base != 16); + unsigned long v = (minus) ? -value : value; + int ret = minus; + + do + { + v /= base; + ret++; + } + while (v); + + return ret; +} + +void +__bb_exit_func (void) +{ + FILE *da_file, *file; + long time_value; + int i; + + if (bb_head == 0) + return; + + i = strlen (bb_head->filename) - 3; + + if (!strcmp (bb_head->filename+i, ".da")) + { + /* Must be -fprofile-arcs not -a. + Dump data in a form that gcov expects. */ + + struct bb *ptr; + + for (ptr = bb_head; ptr != (struct bb *) 0; ptr = ptr->next) + { + /* If the file exists, and the number of counts in it is the same, + then merge them in. */ + + if ((da_file = fopen (ptr->filename, "r")) != 0) + { + long n_counts = 0; + + if (__read_long (&n_counts, da_file, 8) != 0) + { + fprintf (stderr, "arc profiling: Can't read output file %s.\n", + ptr->filename); + continue; + } + + if (n_counts == ptr->ncounts) + { + int i; + + for (i = 0; i < n_counts; i++) + { + long v = 0; + + if (__read_long (&v, da_file, 8) != 0) + { + fprintf (stderr, "arc profiling: Can't read output file %s.\n", + ptr->filename); + break; + } + ptr->counts[i] += v; + } + } + + if (fclose (da_file) == EOF) + fprintf (stderr, "arc profiling: Error closing output file %s.\n", + ptr->filename); + } + if ((da_file = fopen (ptr->filename, "w")) == 0) + { + fprintf (stderr, "arc profiling: Can't open output file %s.\n", + ptr->filename); + continue; + } + + /* ??? Should first write a header to the file. Preferably, a 4 byte + magic number, 4 bytes containing the time the program was + compiled, 4 bytes containing the last modification time of the + source file, and 4 bytes indicating the compiler options used. + + That way we can easily verify that the proper source/executable/ + data file combination is being used from gcov. */ + + if (__write_long (ptr->ncounts, da_file, 8) != 0) + { + + fprintf (stderr, "arc profiling: Error writing output file %s.\n", + ptr->filename); + } + else + { + int j; + long *count_ptr = ptr->counts; + int ret = 0; + for (j = ptr->ncounts; j > 0; j--) + { + if (__write_long (*count_ptr, da_file, 8) != 0) + { + ret=1; + break; + } + count_ptr++; + } + if (ret) + fprintf (stderr, "arc profiling: Error writing output file %s.\n", + ptr->filename); + } + + if (fclose (da_file) == EOF) + fprintf (stderr, "arc profiling: Error closing output file %s.\n", + ptr->filename); + } + + return; + } + + /* Must be basic block profiling. Emit a human readable output file. */ + + file = fopen ("bb.out", "a"); + + if (!file) + perror ("bb.out"); + + else + { + struct bb *ptr; + + /* This is somewhat type incorrect, but it avoids worrying about + exactly where time.h is included from. It should be ok unless + a void * differs from other pointer formats, or if sizeof (long) + is < sizeof (time_t). It would be nice if we could assume the + use of rationale standards here. */ + + time ((void *) &time_value); + fprintf (file, "Basic block profiling finished on %s\n", ctime ((void *) &time_value)); + + /* We check the length field explicitly in order to allow compatibility + with older GCC's which did not provide it. */ + + for (ptr = bb_head; ptr != (struct bb *) 0; ptr = ptr->next) + { + int i; + int func_p = (ptr->nwords >= sizeof (struct bb) + && ptr->nwords <= 1000 + && ptr->functions); + int line_p = (func_p && ptr->line_nums); + int file_p = (func_p && ptr->filenames); + int addr_p = (ptr->addresses != 0); + long ncounts = ptr->ncounts; + long cnt_max = 0; + long line_max = 0; + long addr_max = 0; + int file_len = 0; + int func_len = 0; + int blk_len = num_digits (ncounts, 10); + int cnt_len; + int line_len; + int addr_len; + + fprintf (file, "File %s, %ld basic blocks \n\n", + ptr->filename, ncounts); + + /* Get max values for each field. */ + for (i = 0; i < ncounts; i++) + { + const char *p; + int len; + + if (cnt_max < ptr->counts[i]) + cnt_max = ptr->counts[i]; + + if (addr_p && addr_max < ptr->addresses[i]) + addr_max = ptr->addresses[i]; + + if (line_p && line_max < ptr->line_nums[i]) + line_max = ptr->line_nums[i]; + + if (func_p) + { + p = (ptr->functions[i]) ? (ptr->functions[i]) : ""; + len = strlen (p); + if (func_len < len) + func_len = len; + } + + if (file_p) + { + p = (ptr->filenames[i]) ? (ptr->filenames[i]) : ""; + len = strlen (p); + if (file_len < len) + file_len = len; + } + } + + addr_len = num_digits (addr_max, 16); + cnt_len = num_digits (cnt_max, 10); + line_len = num_digits (line_max, 10); + + /* Now print out the basic block information. */ + for (i = 0; i < ncounts; i++) + { + fprintf (file, + " Block #%*d: executed %*ld time(s)", + blk_len, i+1, + cnt_len, ptr->counts[i]); + + if (addr_p) + fprintf (file, " address= 0x%.*lx", addr_len, + ptr->addresses[i]); + + if (func_p) + fprintf (file, " function= %-*s", func_len, + (ptr->functions[i]) ? ptr->functions[i] : ""); + + if (line_p) + fprintf (file, " line= %*ld", line_len, ptr->line_nums[i]); + + if (file_p) + fprintf (file, " file= %s", + (ptr->filenames[i]) ? ptr->filenames[i] : ""); + + fprintf (file, "\n"); + } + + fprintf (file, "\n"); + fflush (file); + } + + fprintf (file, "\n\n"); + fclose (file); + } +} + +void +__bb_init_func (struct bb *blocks) +{ + /* User is supposed to check whether the first word is non-0, + but just in case.... */ + + if (blocks->zero_word) + return; + +#ifdef ON_EXIT + /* Initialize destructor. */ + if (!bb_head) + ON_EXIT (__bb_exit_func, 0); +#endif + + /* Set up linked list. */ + blocks->zero_word = 1; + blocks->next = bb_head; + bb_head = blocks; +} + +#ifndef MACHINE_STATE_SAVE +#define MACHINE_STATE_SAVE(ID) +#endif +#ifndef MACHINE_STATE_RESTORE +#define MACHINE_STATE_RESTORE(ID) +#endif + +/* Number of buckets in hashtable of basic block addresses. */ + +#define BB_BUCKETS 311 + +/* Maximum length of string in file bb.in. */ + +#define BBINBUFSIZE 500 + +/* BBINBUFSIZE-1 with double quotes. We could use #BBINBUFSIZE or + "BBINBUFSIZE" but want to avoid trouble with preprocessors. */ + +#define BBINBUFSIZESTR "499" + +struct bb_edge +{ + struct bb_edge *next; + unsigned long src_addr; + unsigned long dst_addr; + unsigned long count; +}; + +enum bb_func_mode +{ + TRACE_KEEP = 0, TRACE_ON = 1, TRACE_OFF = 2 +}; + +struct bb_func +{ + struct bb_func *next; + char *funcname; + char *filename; + enum bb_func_mode mode; +}; + +/* This is the connection to the outside world. + The BLOCK_PROFILER macro must set __bb.blocks + and __bb.blockno. */ + +struct { + unsigned long blockno; + struct bb *blocks; +} __bb; + +/* Vars to store addrs of source and destination basic blocks + of a jump. */ + +static unsigned long bb_src = 0; +static unsigned long bb_dst = 0; + +static FILE *bb_tracefile = (FILE *) 0; +static struct bb_edge **bb_hashbuckets = (struct bb_edge **) 0; +static struct bb_func *bb_func_head = (struct bb_func *) 0; +static unsigned long bb_callcount = 0; +static int bb_mode = 0; + +static unsigned long *bb_stack = (unsigned long *) 0; +static size_t bb_stacksize = 0; + +static int reported = 0; + +/* Trace modes: +Always : Print execution frequencies of basic blocks + to file bb.out. +bb_mode & 1 != 0 : Dump trace of basic blocks to file bbtrace[.gz] +bb_mode & 2 != 0 : Print jump frequencies to file bb.out. +bb_mode & 4 != 0 : Cut call instructions from basic block flow. +bb_mode & 8 != 0 : Insert return instructions in basic block flow. +*/ + +#ifdef HAVE_POPEN + +/*#include */ +#include +/*#include */ + +/* Commands executed by gopen. */ + +#define GOPENDECOMPRESS "gzip -cd " +#define GOPENCOMPRESS "gzip -c >" + +/* Like fopen but pipes through gzip. mode may only be "r" or "w". + If it does not compile, simply replace gopen by fopen and delete + '.gz' from any first parameter to gopen. */ + +static FILE * +gopen (char *fn, char *mode) +{ + int use_gzip; + char *p; + + if (mode[1]) + return (FILE *) 0; + + if (mode[0] != 'r' && mode[0] != 'w') + return (FILE *) 0; + + p = fn + strlen (fn)-1; + use_gzip = ((p[-1] == '.' && (p[0] == 'Z' || p[0] == 'z')) + || (p[-2] == '.' && p[-1] == 'g' && p[0] == 'z')); + + if (use_gzip) + { + if (mode[0]=='r') + { + FILE *f; + char *s = (char *) malloc (sizeof (char) * strlen (fn) + + sizeof (GOPENDECOMPRESS)); + strcpy (s, GOPENDECOMPRESS); + strcpy (s + (sizeof (GOPENDECOMPRESS)-1), fn); + f = popen (s, mode); + free (s); + return f; + } + + else + { + FILE *f; + char *s = (char *) malloc (sizeof (char) * strlen (fn) + + sizeof (GOPENCOMPRESS)); + strcpy (s, GOPENCOMPRESS); + strcpy (s + (sizeof (GOPENCOMPRESS)-1), fn); + if (!(f = popen (s, mode))) + f = fopen (s, mode); + free (s); + return f; + } + } + + else + return fopen (fn, mode); +} + +static int +gclose (FILE *f) +{ + struct stat buf; + + if (f != 0) + { + if (!fstat (fileno (f), &buf) && S_ISFIFO (buf.st_mode)) + return pclose (f); + + return fclose (f); + } + return 0; +} + +#endif /* HAVE_POPEN */ + +/* Called once per program. */ + +static void +__bb_exit_trace_func () +{ + FILE *file = fopen ("bb.out", "a"); + struct bb_func *f; + struct bb *b; + + if (!file) + perror ("bb.out"); + + if (bb_mode & 1) + { + if (!bb_tracefile) + perror ("bbtrace"); + else +#ifdef HAVE_POPEN + gclose (bb_tracefile); +#else + fclose (bb_tracefile); +#endif /* HAVE_POPEN */ + } + + /* Check functions in `bb.in'. */ + + if (file) + { + long time_value; + const struct bb_func *p; + int printed_something = 0; + struct bb *ptr; + long blk; + + /* This is somewhat type incorrect. */ + time ((void *) &time_value); + + for (p = bb_func_head; p != (struct bb_func *) 0; p = p->next) + { + for (ptr = bb_head; ptr != (struct bb *) 0; ptr = ptr->next) + { + if (!ptr->filename || (p->filename != (char *) 0 && strcmp (p->filename, ptr->filename))) + continue; + for (blk = 0; blk < ptr->ncounts; blk++) + { + if (!strcmp (p->funcname, ptr->functions[blk])) + goto found; + } + } + + if (!printed_something) + { + fprintf (file, "Functions in `bb.in' not executed during basic block profiling on %s\n", ctime ((void *) &time_value)); + printed_something = 1; + } + + fprintf (file, "\tFunction %s", p->funcname); + if (p->filename) + fprintf (file, " of file %s", p->filename); + fprintf (file, "\n" ); + +found: ; + } + + if (printed_something) + fprintf (file, "\n"); + + } + + if (bb_mode & 2) + { + if (!bb_hashbuckets) + { + if (!reported) + { + fprintf (stderr, "Profiler: out of memory\n"); + reported = 1; + } + return; + } + + else if (file) + { + long time_value; + int i; + unsigned long addr_max = 0; + unsigned long cnt_max = 0; + int cnt_len; + int addr_len; + + /* This is somewhat type incorrect, but it avoids worrying about + exactly where time.h is included from. It should be ok unless + a void * differs from other pointer formats, or if sizeof (long) + is < sizeof (time_t). It would be nice if we could assume the + use of rationale standards here. */ + + time ((void *) &time_value); + fprintf (file, "Basic block jump tracing"); + + switch (bb_mode & 12) + { + case 0: + fprintf (file, " (with call)"); + break; + + case 4: + /* Print nothing. */ + break; + + case 8: + fprintf (file, " (with call & ret)"); + break; + + case 12: + fprintf (file, " (with ret)"); + break; + } + + fprintf (file, " finished on %s\n", ctime ((void *) &time_value)); + + for (i = 0; i < BB_BUCKETS; i++) + { + struct bb_edge *bucket = bb_hashbuckets[i]; + for ( ; bucket; bucket = bucket->next ) + { + if (addr_max < bucket->src_addr) + addr_max = bucket->src_addr; + if (addr_max < bucket->dst_addr) + addr_max = bucket->dst_addr; + if (cnt_max < bucket->count) + cnt_max = bucket->count; + } + } + addr_len = num_digits (addr_max, 16); + cnt_len = num_digits (cnt_max, 10); + + for ( i = 0; i < BB_BUCKETS; i++) + { + struct bb_edge *bucket = bb_hashbuckets[i]; + for ( ; bucket; bucket = bucket->next ) + { + fprintf (file, "Jump from block 0x%.*lx to " + "block 0x%.*lx executed %*lu time(s)\n", + addr_len, bucket->src_addr, + addr_len, bucket->dst_addr, + cnt_len, bucket->count); + } + } + + fprintf (file, "\n"); + + } + } + + if (file) + fclose (file); + + /* Free allocated memory. */ + + f = bb_func_head; + while (f) + { + struct bb_func *old = f; + + f = f->next; + if (old->funcname) free (old->funcname); + if (old->filename) free (old->filename); + free (old); + } + + if (bb_stack) + free (bb_stack); + + if (bb_hashbuckets) + { + int i; + + for (i = 0; i < BB_BUCKETS; i++) + { + struct bb_edge *old, *bucket = bb_hashbuckets[i]; + + while (bucket) + { + old = bucket; + bucket = bucket->next; + free (old); + } + } + free (bb_hashbuckets); + } + + for (b = bb_head; b; b = b->next) + if (b->flags) free (b->flags); +} + +/* Called once per program. */ + +static void +__bb_init_prg () +{ + + FILE *file; + char buf[BBINBUFSIZE]; + const char *p; + const char *pos; + enum bb_func_mode m; + +#ifdef ON_EXIT + /* Initialize destructor. */ + ON_EXIT (__bb_exit_func, 0); +#endif + + if (!(file = fopen ("bb.in", "r"))) + return; + + while(fscanf (file, " %" BBINBUFSIZESTR "s ", buf) != EOF) + { + p = buf; + if (*p == '-') + { + m = TRACE_OFF; + p++; + } + else + { + m = TRACE_ON; + } + if (!strcmp (p, "__bb_trace__")) + bb_mode |= 1; + else if (!strcmp (p, "__bb_jumps__")) + bb_mode |= 2; + else if (!strcmp (p, "__bb_hidecall__")) + bb_mode |= 4; + else if (!strcmp (p, "__bb_showret__")) + bb_mode |= 8; + else + { + struct bb_func *f = (struct bb_func *) malloc (sizeof (struct bb_func)); + if (f) + { + unsigned long l; + f->next = bb_func_head; + if ((pos = strchr (p, ':'))) + { + if (!(f->funcname = (char *) malloc (strlen (pos+1)+1))) + continue; + strcpy (f->funcname, pos+1); + l = pos-p; + if ((f->filename = (char *) malloc (l+1))) + { + strncpy (f->filename, p, l); + f->filename[l] = '\0'; + } + else + f->filename = (char *) 0; + } + else + { + if (!(f->funcname = (char *) malloc (strlen (p)+1))) + continue; + strcpy (f->funcname, p); + f->filename = (char *) 0; + } + f->mode = m; + bb_func_head = f; + } + } + } + fclose (file); + +#ifdef HAVE_POPEN + + if (bb_mode & 1) + bb_tracefile = gopen ("bbtrace.gz", "w"); + +#else + + if (bb_mode & 1) + bb_tracefile = fopen ("bbtrace", "w"); + +#endif /* HAVE_POPEN */ + + if (bb_mode & 2) + { + bb_hashbuckets = (struct bb_edge **) + malloc (BB_BUCKETS * sizeof (struct bb_edge *)); + if (bb_hashbuckets) + memset (bb_hashbuckets, 0, BB_BUCKETS * sizeof (struct bb_edge *)); + } + + if (bb_mode & 12) + { + bb_stacksize = 10; + bb_stack = (unsigned long *) malloc (bb_stacksize * sizeof (*bb_stack)); + } + +#ifdef ON_EXIT + /* Initialize destructor. */ + ON_EXIT (__bb_exit_trace_func, 0); +#endif + +} + +/* Called upon entering a basic block. */ + +void +__bb_trace_func () +{ + struct bb_edge *bucket; + + MACHINE_STATE_SAVE("1") + + if (!bb_callcount || (__bb.blocks->flags && (__bb.blocks->flags[__bb.blockno] & TRACE_OFF))) + goto skip; + + bb_dst = __bb.blocks->addresses[__bb.blockno]; + __bb.blocks->counts[__bb.blockno]++; + + if (bb_tracefile) + { + fwrite (&bb_dst, sizeof (unsigned long), 1, bb_tracefile); + } + + if (bb_hashbuckets) + { + struct bb_edge **startbucket, **oldnext; + + oldnext = startbucket + = & bb_hashbuckets[ (((int) bb_src*8) ^ (int) bb_dst) % BB_BUCKETS ]; + bucket = *startbucket; + + for (bucket = *startbucket; bucket; + oldnext = &(bucket->next), bucket = *oldnext) + { + if (bucket->src_addr == bb_src + && bucket->dst_addr == bb_dst) + { + bucket->count++; + *oldnext = bucket->next; + bucket->next = *startbucket; + *startbucket = bucket; + goto ret; + } + } + + bucket = (struct bb_edge *) malloc (sizeof (struct bb_edge)); + + if (!bucket) + { + if (!reported) + { + fprintf (stderr, "Profiler: out of memory\n"); + reported = 1; + } + } + + else + { + bucket->src_addr = bb_src; + bucket->dst_addr = bb_dst; + bucket->next = *startbucket; + *startbucket = bucket; + bucket->count = 1; + } + } + +ret: + bb_src = bb_dst; + +skip: + ; + + MACHINE_STATE_RESTORE("1") + +} + +/* Called when returning from a function and `__bb_showret__' is set. */ + +static void +__bb_trace_func_ret () +{ + struct bb_edge *bucket; + + if (!bb_callcount || (__bb.blocks->flags && (__bb.blocks->flags[__bb.blockno] & TRACE_OFF))) + goto skip; + + if (bb_hashbuckets) + { + struct bb_edge **startbucket, **oldnext; + + oldnext = startbucket + = & bb_hashbuckets[ (((int) bb_dst * 8) ^ (int) bb_src) % BB_BUCKETS ]; + bucket = *startbucket; + + for (bucket = *startbucket; bucket; + oldnext = &(bucket->next), bucket = *oldnext) + { + if (bucket->src_addr == bb_dst + && bucket->dst_addr == bb_src) + { + bucket->count++; + *oldnext = bucket->next; + bucket->next = *startbucket; + *startbucket = bucket; + goto ret; + } + } + + bucket = (struct bb_edge *) malloc (sizeof (struct bb_edge)); + + if (!bucket) + { + if (!reported) + { + fprintf (stderr, "Profiler: out of memory\n"); + reported = 1; + } + } + + else + { + bucket->src_addr = bb_dst; + bucket->dst_addr = bb_src; + bucket->next = *startbucket; + *startbucket = bucket; + bucket->count = 1; + } + } + +ret: + bb_dst = bb_src; + +skip: + ; + +} + +/* Called upon entering the first function of a file. */ + +static void +__bb_init_file (struct bb *blocks) +{ + + const struct bb_func *p; + long blk, ncounts = blocks->ncounts; + const char **functions = blocks->functions; + + /* Set up linked list. */ + blocks->zero_word = 1; + blocks->next = bb_head; + bb_head = blocks; + + blocks->flags = 0; + if (!bb_func_head + || !(blocks->flags = (char *) malloc (sizeof (char) * blocks->ncounts))) + return; + + for (blk = 0; blk < ncounts; blk++) + blocks->flags[blk] = 0; + + for (blk = 0; blk < ncounts; blk++) + { + for (p = bb_func_head; p; p = p->next) + { + if (!strcmp (p->funcname, functions[blk]) + && (!p->filename || !strcmp (p->filename, blocks->filename))) + { + blocks->flags[blk] |= p->mode; + } + } + } + +} + +/* Called when exiting from a function. */ + +void +__bb_trace_ret () +{ + + MACHINE_STATE_SAVE("2") + + if (bb_callcount) + { + if ((bb_mode & 12) && bb_stacksize > bb_callcount) + { + bb_src = bb_stack[bb_callcount]; + if (bb_mode & 8) + __bb_trace_func_ret (); + } + + bb_callcount -= 1; + } + + MACHINE_STATE_RESTORE("2") + +} + +/* Called when entering a function. */ + +void +__bb_init_trace_func (struct bb *blocks, unsigned long blockno) +{ + static int trace_init = 0; + + MACHINE_STATE_SAVE("3") + + if (!blocks->zero_word) + { + if (!trace_init) + { + trace_init = 1; + __bb_init_prg (); + } + __bb_init_file (blocks); + } + + if (bb_callcount) + { + + bb_callcount += 1; + + if (bb_mode & 12) + { + if (bb_callcount >= bb_stacksize) + { + size_t newsize = bb_callcount + 100; + + bb_stack = (unsigned long *) realloc (bb_stack, newsize); + if (! bb_stack) + { + if (!reported) + { + fprintf (stderr, "Profiler: out of memory\n"); + reported = 1; + } + bb_stacksize = 0; + goto stack_overflow; + } + bb_stacksize = newsize; + } + bb_stack[bb_callcount] = bb_src; + + if (bb_mode & 4) + bb_src = 0; + + } + +stack_overflow:; + + } + + else if (blocks->flags && (blocks->flags[blockno] & TRACE_ON)) + { + bb_callcount = 1; + bb_src = 0; + + if (bb_stack) + bb_stack[bb_callcount] = bb_src; + } + + MACHINE_STATE_RESTORE("3") +} + +#endif /* not inhibit_libc */ +#endif /* not BLOCK_PROFILER_CODE */ +#endif /* L_bb */ + +#ifdef L_shtab +unsigned int __shtab[] = { + 0x00000001, 0x00000002, 0x00000004, 0x00000008, + 0x00000010, 0x00000020, 0x00000040, 0x00000080, + 0x00000100, 0x00000200, 0x00000400, 0x00000800, + 0x00001000, 0x00002000, 0x00004000, 0x00008000, + 0x00010000, 0x00020000, 0x00040000, 0x00080000, + 0x00100000, 0x00200000, 0x00400000, 0x00800000, + 0x01000000, 0x02000000, 0x04000000, 0x08000000, + 0x10000000, 0x20000000, 0x40000000, 0x80000000 + }; +#endif + +#ifdef L_clear_cache +/* Clear part of an instruction cache. */ + +#define INSN_CACHE_PLANE_SIZE (INSN_CACHE_SIZE / INSN_CACHE_DEPTH) + +void +__clear_cache (char *beg, char *end) +{ +#ifdef CLEAR_INSN_CACHE + CLEAR_INSN_CACHE (beg, end); +#else +#ifdef INSN_CACHE_SIZE + static char array[INSN_CACHE_SIZE + INSN_CACHE_PLANE_SIZE + INSN_CACHE_LINE_WIDTH]; + static int initialized; + int offset; + void *start_addr + void *end_addr; + typedef (*function_ptr) (); + +#if (INSN_CACHE_SIZE / INSN_CACHE_LINE_WIDTH) < 16 + /* It's cheaper to clear the whole cache. + Put in a series of jump instructions so that calling the beginning + of the cache will clear the whole thing. */ + + if (! initialized) + { + int ptr = (((int) array + INSN_CACHE_LINE_WIDTH - 1) + & -INSN_CACHE_LINE_WIDTH); + int end_ptr = ptr + INSN_CACHE_SIZE; + + while (ptr < end_ptr) + { + *(INSTRUCTION_TYPE *)ptr + = JUMP_AHEAD_INSTRUCTION + INSN_CACHE_LINE_WIDTH; + ptr += INSN_CACHE_LINE_WIDTH; + } + *(INSTRUCTION_TYPE *) (ptr - INSN_CACHE_LINE_WIDTH) = RETURN_INSTRUCTION; + + initialized = 1; + } + + /* Call the beginning of the sequence. */ + (((function_ptr) (((int) array + INSN_CACHE_LINE_WIDTH - 1) + & -INSN_CACHE_LINE_WIDTH)) + ()); + +#else /* Cache is large. */ + + if (! initialized) + { + int ptr = (((int) array + INSN_CACHE_LINE_WIDTH - 1) + & -INSN_CACHE_LINE_WIDTH); + + while (ptr < (int) array + sizeof array) + { + *(INSTRUCTION_TYPE *)ptr = RETURN_INSTRUCTION; + ptr += INSN_CACHE_LINE_WIDTH; + } + + initialized = 1; + } + + /* Find the location in array that occupies the same cache line as BEG. */ + + offset = ((int) beg & -INSN_CACHE_LINE_WIDTH) & (INSN_CACHE_PLANE_SIZE - 1); + start_addr = (((int) (array + INSN_CACHE_PLANE_SIZE - 1) + & -INSN_CACHE_PLANE_SIZE) + + offset); + + /* Compute the cache alignment of the place to stop clearing. */ +#if 0 /* This is not needed for gcc's purposes. */ + /* If the block to clear is bigger than a cache plane, + we clear the entire cache, and OFFSET is already correct. */ + if (end < beg + INSN_CACHE_PLANE_SIZE) +#endif + offset = (((int) (end + INSN_CACHE_LINE_WIDTH - 1) + & -INSN_CACHE_LINE_WIDTH) + & (INSN_CACHE_PLANE_SIZE - 1)); + +#if INSN_CACHE_DEPTH > 1 + end_addr = (start_addr & -INSN_CACHE_PLANE_SIZE) + offset; + if (end_addr <= start_addr) + end_addr += INSN_CACHE_PLANE_SIZE; + + for (plane = 0; plane < INSN_CACHE_DEPTH; plane++) + { + int addr = start_addr + plane * INSN_CACHE_PLANE_SIZE; + int stop = end_addr + plane * INSN_CACHE_PLANE_SIZE; + + while (addr != stop) + { + /* Call the return instruction at ADDR. */ + ((function_ptr) addr) (); + + addr += INSN_CACHE_LINE_WIDTH; + } + } +#else /* just one plane */ + do + { + /* Call the return instruction at START_ADDR. */ + ((function_ptr) start_addr) (); + + start_addr += INSN_CACHE_LINE_WIDTH; + } + while ((start_addr % INSN_CACHE_SIZE) != offset); +#endif /* just one plane */ +#endif /* Cache is large */ +#endif /* Cache exists */ +#endif /* CLEAR_INSN_CACHE */ +} + +#endif /* L_clear_cache */ + +#ifdef L_trampoline + +/* Jump to a trampoline, loading the static chain address. */ + +#if defined(WINNT) && ! defined(__CYGWIN__) && ! defined (_UWIN) + +long getpagesize() +{ +#ifdef _ALPHA_ + return 8192; +#else + return 4096; +#endif +} + +#ifdef i386 +extern int VirtualProtect (char *, int, int, int *) __attribute__((stdcall)); +#endif + +int +mprotect (char *addr, int len, int prot) +{ + int np, op; + + if (prot == 7) + np = 0x40; + else if (prot == 5) + np = 0x20; + else if (prot == 4) + np = 0x10; + else if (prot == 3) + np = 0x04; + else if (prot == 1) + np = 0x02; + else if (prot == 0) + np = 0x01; + + if (VirtualProtect (addr, len, np, &op)) + return 0; + else + return -1; +} + +#endif /* WINNT && ! __CYGWIN__ && ! _UWIN */ + +#ifdef TRANSFER_FROM_TRAMPOLINE +TRANSFER_FROM_TRAMPOLINE +#endif + +#if defined (NeXT) && defined (__MACH__) + +/* Make stack executable so we can call trampolines on stack. + This is called from INITIALIZE_TRAMPOLINE in next.h. */ +#ifdef NeXTStep21 + #include +#else + #include +#endif + +void +__enable_execute_stack (char *addr) +{ + kern_return_t r; + char *eaddr = addr + TRAMPOLINE_SIZE; + vm_address_t a = (vm_address_t) addr; + + /* turn on execute access on stack */ + r = vm_protect (task_self (), a, TRAMPOLINE_SIZE, FALSE, VM_PROT_ALL); + if (r != KERN_SUCCESS) + { + mach_error("vm_protect VM_PROT_ALL", r); + exit(1); + } + + /* We inline the i-cache invalidation for speed */ + +#ifdef CLEAR_INSN_CACHE + CLEAR_INSN_CACHE (addr, eaddr); +#else + __clear_cache ((int) addr, (int) eaddr); +#endif +} + +#endif /* defined (NeXT) && defined (__MACH__) */ + +#ifdef __convex__ + +/* Make stack executable so we can call trampolines on stack. + This is called from INITIALIZE_TRAMPOLINE in convex.h. */ + +#include +#include +#include + +void +__enable_execute_stack () +{ + int fp; + static unsigned lowest = USRSTACK; + unsigned current = (unsigned) &fp & -NBPG; + + if (lowest > current) + { + unsigned len = lowest - current; + mremap (current, &len, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE); + lowest = current; + } + + /* Clear instruction cache in case an old trampoline is in it. */ + asm ("pich"); +} +#endif /* __convex__ */ + +#ifdef __sysV88__ + +/* Modified from the convex -code above. */ + +#include +#include +#include + +void +__enable_execute_stack () +{ + int save_errno; + static unsigned long lowest = USRSTACK; + unsigned long current = (unsigned long) &save_errno & -NBPC; + + /* Ignore errno being set. memctl sets errno to EINVAL whenever the + address is seen as 'negative'. That is the case with the stack. */ + + save_errno=errno; + if (lowest > current) + { + unsigned len=lowest-current; + memctl(current,len,MCT_TEXT); + lowest = current; + } + else + memctl(current,NBPC,MCT_TEXT); + errno=save_errno; +} + +#endif /* __sysV88__ */ + +#ifdef __sysV68__ + +#include +#include + +/* Motorola forgot to put memctl.o in the libp version of libc881.a, + so define it here, because we need it in __clear_insn_cache below */ +/* On older versions of this OS, no memctl or MCT_TEXT are defined; + hence we enable this stuff only if MCT_TEXT is #define'd. */ + +#ifdef MCT_TEXT +asm("\n\ + global memctl\n\ +memctl:\n\ + movq &75,%d0\n\ + trap &0\n\ + bcc.b noerror\n\ + jmp cerror%\n\ +noerror:\n\ + movq &0,%d0\n\ + rts"); +#endif + +/* Clear instruction cache so we can call trampolines on stack. + This is called from FINALIZE_TRAMPOLINE in mot3300.h. */ + +void +__clear_insn_cache () +{ +#ifdef MCT_TEXT + int save_errno; + + /* Preserve errno, because users would be surprised to have + errno changing without explicitly calling any system-call. */ + save_errno = errno; + + /* Keep it simple : memctl (MCT_TEXT) always fully clears the insn cache. + No need to use an address derived from _start or %sp, as 0 works also. */ + memctl(0, 4096, MCT_TEXT); + errno = save_errno; +#endif +} + +#endif /* __sysV68__ */ + +#ifdef __pyr__ + +#undef NULL /* Avoid errors if stdio.h and our stddef.h mismatch. */ +#include +#include +#include +#include +#include + +/* Modified from the convex -code above. + mremap promises to clear the i-cache. */ + +void +__enable_execute_stack () +{ + int fp; + if (mprotect (((unsigned int)&fp/PAGSIZ)*PAGSIZ, PAGSIZ, + PROT_READ|PROT_WRITE|PROT_EXEC)) + { + perror ("mprotect in __enable_execute_stack"); + fflush (stderr); + abort (); + } +} +#endif /* __pyr__ */ + +#if defined (sony_news) && defined (SYSTYPE_BSD) + +#include +#include +#include +#include +#include + +/* cacheflush function for NEWS-OS 4.2. + This function is called from trampoline-initialize code + defined in config/mips/mips.h. */ + +void +cacheflush (char *beg, int size, int flag) +{ + if (syscall (SYS_sysnews, NEWS_CACHEFLUSH, beg, size, FLUSH_BCACHE)) + { + perror ("cache_flush"); + fflush (stderr); + abort (); + } +} + +#endif /* sony_news */ +#endif /* L_trampoline */ + +#ifndef __CYGWIN__ +#ifdef L__main + +#include "gbl-ctors.h" +/* Some systems use __main in a way incompatible with its use in gcc, in these + cases use the macros NAME__MAIN to give a quoted symbol and SYMBOL__MAIN to + give the same symbol without quotes for an alternative entry point. You + must define both, or neither. */ +#ifndef NAME__MAIN +#define NAME__MAIN "__main" +#define SYMBOL__MAIN __main +#endif + +#ifdef INIT_SECTION_ASM_OP +#undef HAS_INIT_SECTION +#define HAS_INIT_SECTION +#endif + +#if !defined (HAS_INIT_SECTION) || !defined (OBJECT_FORMAT_ELF) +/* Run all the global destructors on exit from the program. */ + +void +__do_global_dtors () +{ +#ifdef DO_GLOBAL_DTORS_BODY + DO_GLOBAL_DTORS_BODY; +#else + static func_ptr *p = __DTOR_LIST__ + 1; + while (*p) + { + p++; + (*(p-1)) (); + } +#endif +} +#endif + +#ifndef HAS_INIT_SECTION +/* Run all the global constructors on entry to the program. */ + +#ifndef ON_EXIT +#define ON_EXIT(a, b) +#else +/* Make sure the exit routine is pulled in to define the globals as + bss symbols, just in case the linker does not automatically pull + bss definitions from the library. */ + +extern int _exit_dummy_decl; +int *_exit_dummy_ref = &_exit_dummy_decl; +#endif /* ON_EXIT */ + +void +__do_global_ctors () +{ + DO_GLOBAL_CTORS_BODY; + ON_EXIT (__do_global_dtors, 0); +} +#endif /* no HAS_INIT_SECTION */ + +#if !defined (HAS_INIT_SECTION) || defined (INVOKE__main) +/* Subroutine called automatically by `main'. + Compiling a global function named `main' + produces an automatic call to this function at the beginning. + + For many systems, this routine calls __do_global_ctors. + For systems which support a .init section we use the .init section + to run __do_global_ctors, so we need not do anything here. */ + +void +SYMBOL__MAIN () +{ + /* Support recursive calls to `main': run initializers just once. */ + static int initialized; + if (! initialized) + { + initialized = 1; + __do_global_ctors (); + } +} +#endif /* no HAS_INIT_SECTION or INVOKE__main */ + +#endif /* L__main */ +#endif /* __CYGWIN__ */ + +#ifdef L_ctors + +#include "gbl-ctors.h" + +/* Provide default definitions for the lists of constructors and + destructors, so that we don't get linker errors. These symbols are + intentionally bss symbols, so that gld and/or collect will provide + the right values. */ + +/* We declare the lists here with two elements each, + so that they are valid empty lists if no other definition is loaded. + + If we are using the old "set" extensions to have the gnu linker + collect ctors and dtors, then we __CTOR_LIST__ and __DTOR_LIST__ + must be in the bss/common section. + + Long term no port should use those extensions. But many still do. */ +#if !defined(INIT_SECTION_ASM_OP) && !defined(CTOR_LISTS_DEFINED_EXTERNALLY) +#if defined (ASM_OUTPUT_CONSTRUCTOR) || defined (USE_COLLECT2) +func_ptr __CTOR_LIST__[2] = {0, 0}; +func_ptr __DTOR_LIST__[2] = {0, 0}; +#else +func_ptr __CTOR_LIST__[2]; +func_ptr __DTOR_LIST__[2]; +#endif +#endif /* no INIT_SECTION_ASM_OP and not CTOR_LISTS_DEFINED_EXTERNALLY */ +#endif /* L_ctors */ + +#ifdef L_exit + +#include "gbl-ctors.h" + +#ifdef NEED_ATEXIT +# ifdef ON_EXIT +# undef ON_EXIT +# endif +int _exit_dummy_decl = 0; /* prevent compiler & linker warnings */ +#endif + +#ifndef ON_EXIT + +#ifdef NEED_ATEXIT +# include + +static func_ptr *atexit_chain = 0; +static long atexit_chain_length = 0; +static volatile long last_atexit_chain_slot = -1; + +int atexit (func_ptr func) +{ + if (++last_atexit_chain_slot == atexit_chain_length) + { + atexit_chain_length += 32; + if (atexit_chain) + atexit_chain = (func_ptr *) realloc (atexit_chain, atexit_chain_length + * sizeof (func_ptr)); + else + atexit_chain = (func_ptr *) malloc (atexit_chain_length + * sizeof (func_ptr)); + if (! atexit_chain) + { + atexit_chain_length = 0; + last_atexit_chain_slot = -1; + errno = ENOMEM; + return (-1); + } + } + atexit_chain[last_atexit_chain_slot] = func; + return (0); +} +#endif /* NEED_ATEXIT */ + +/* If we have no known way of registering our own __do_global_dtors + routine so that it will be invoked at program exit time, then we + have to define our own exit routine which will get this to happen. */ + +extern void __do_global_dtors (); +extern void __bb_exit_func (); +extern void _cleanup (); +extern void _exit () __attribute__ ((noreturn)); + +void +exit (int status) +{ +#if !defined (INIT_SECTION_ASM_OP) || !defined (OBJECT_FORMAT_ELF) +#ifdef NEED_ATEXIT + if (atexit_chain) + { + for ( ; last_atexit_chain_slot-- >= 0; ) + { + (*atexit_chain[last_atexit_chain_slot + 1]) (); + atexit_chain[last_atexit_chain_slot + 1] = 0; + } + free (atexit_chain); + atexit_chain = 0; + } +#else /* No NEED_ATEXIT */ + __do_global_dtors (); +#endif /* No NEED_ATEXIT */ +#endif /* !defined (INIT_SECTION_ASM_OP) || !defined (OBJECT_FORMAT_ELF) */ +/* In gbl-ctors.h, ON_EXIT is defined if HAVE_ATEXIT is defined. In + __bb_init_func and _bb_init_prg, __bb_exit_func is registered with + ON_EXIT if ON_EXIT is defined. Thus we must not call __bb_exit_func here + if HAVE_ATEXIT is defined. */ +#ifndef HAVE_ATEXIT +#ifndef inhibit_libc + __bb_exit_func (); +#endif +#endif /* !HAVE_ATEXIT */ +#ifdef EXIT_BODY + EXIT_BODY; +#else + _cleanup (); +#endif + _exit (status); +} + +#else /* ON_EXIT defined */ +int _exit_dummy_decl = 0; /* prevent compiler & linker warnings */ + +# ifndef HAVE_ATEXIT +/* Provide a fake for atexit() using ON_EXIT. */ +int atexit (func_ptr func) +{ + return ON_EXIT (func, NULL); +} +# endif /* HAVE_ATEXIT */ +#endif /* ON_EXIT defined */ + +#endif /* L_exit */ + +#ifdef L_eh + +#include "gthr.h" + +/* Shared exception handling support routines. */ + +extern void __default_terminate (void) __attribute__ ((__noreturn__)); + +void +__default_terminate () +{ + abort (); +} + +void (*__terminate_func)() = __default_terminate; + +void +__terminate () +{ + (*__terminate_func)(); +} + +void * +__throw_type_match (void *catch_type, void *throw_type, void *obj) +{ +#if 0 + printf ("__throw_type_match (): catch_type = %s, throw_type = %s\n", + catch_type, throw_type); +#endif + if (strcmp ((const char *)catch_type, (const char *)throw_type) == 0) + return obj; + return 0; +} + +void +__empty () +{ +} + + +/* Include definitions of EH context and table layout */ + +#include "eh-common.h" +#ifndef inhibit_libc +#include +#endif + +/* Allocate and return a new EH context structure. */ + +extern void __throw (); + +static void * +new_eh_context () +{ + struct eh_full_context { + struct eh_context c; + void *top_elt[2]; + } *ehfc = (struct eh_full_context *) malloc (sizeof *ehfc); + + if (! ehfc) + __terminate (); + + memset (ehfc, 0, sizeof *ehfc); + + ehfc->c.dynamic_handler_chain = (void **) ehfc->top_elt; + + /* This should optimize out entirely. This should always be true, + but just in case it ever isn't, don't allow bogus code to be + generated. */ + + if ((void*)(&ehfc->c) != (void*)ehfc) + __terminate (); + + return &ehfc->c; +} + +#if __GTHREADS +static __gthread_key_t eh_context_key; + +/* Destructor for struct eh_context. */ +static void +eh_context_free (void *ptr) +{ + __gthread_key_dtor (eh_context_key, ptr); + if (ptr) + free (ptr); +} +#endif + +/* Pointer to function to return EH context. */ + +static struct eh_context *eh_context_initialize (); +static struct eh_context *eh_context_static (); +#if __GTHREADS +static struct eh_context *eh_context_specific (); +#endif + +static struct eh_context *(*get_eh_context) () = &eh_context_initialize; + +/* Routine to get EH context. + This one will simply call the function pointer. */ + +void * +__get_eh_context () +{ + return (void *) (*get_eh_context) (); +} + +/* Get and set the language specific info pointer. */ + +void ** +__get_eh_info () +{ + struct eh_context *eh = (*get_eh_context) (); + return &eh->info; +} + +#if __GTHREADS +static void +eh_threads_initialize () +{ + /* Try to create the key. If it fails, revert to static method, + otherwise start using thread specific EH contexts. */ + if (__gthread_key_create (&eh_context_key, &eh_context_free) == 0) + get_eh_context = &eh_context_specific; + else + get_eh_context = &eh_context_static; +} +#endif /* no __GTHREADS */ + +/* Initialize EH context. + This will be called only once, since we change GET_EH_CONTEXT + pointer to another routine. */ + +static struct eh_context * +eh_context_initialize () +{ +#if __GTHREADS + + static __gthread_once_t once = __GTHREAD_ONCE_INIT; + /* Make sure that get_eh_context does not point to us anymore. + Some systems have dummy thread routines in their libc that + return a success (Solaris 2.6 for example). */ + if (__gthread_once (&once, eh_threads_initialize) != 0 + || get_eh_context == &eh_context_initialize) + { + /* Use static version of EH context. */ + get_eh_context = &eh_context_static; + } + +#else /* no __GTHREADS */ + + /* Use static version of EH context. */ + get_eh_context = &eh_context_static; + +#endif /* no __GTHREADS */ + + return (*get_eh_context) (); +} + +/* Return a static EH context. */ + +static struct eh_context * +eh_context_static () +{ + static struct eh_context eh; + static int initialized; + static void *top_elt[2]; + + if (! initialized) + { + initialized = 1; + memset (&eh, 0, sizeof eh); + eh.dynamic_handler_chain = top_elt; + } + return &eh; +} + +#if __GTHREADS +/* Return a thread specific EH context. */ + +static struct eh_context * +eh_context_specific () +{ + struct eh_context *eh; + eh = (struct eh_context *) __gthread_getspecific (eh_context_key); + if (! eh) + { + eh = new_eh_context (); + if (__gthread_setspecific (eh_context_key, (void *) eh) != 0) + __terminate (); + } + + return eh; +} +#endif __GTHREADS + +/* Support routines for setjmp/longjmp exception handling. */ + +/* Calls to __sjthrow are generated by the compiler when an exception + is raised when using the setjmp/longjmp exception handling codegen + method. */ + +#ifdef DONT_USE_BUILTIN_SETJMP +extern void longjmp (void *, int); +#endif + +/* Routine to get the head of the current thread's dynamic handler chain + use for exception handling. */ + +void *** +__get_dynamic_handler_chain () +{ + struct eh_context *eh = (*get_eh_context) (); + return &eh->dynamic_handler_chain; +} + +/* This is used to throw an exception when the setjmp/longjmp codegen + method is used for exception handling. + + We call __terminate if there are no handlers left. Otherwise we run the + cleanup actions off the dynamic cleanup stack, and pop the top of the + dynamic handler chain, and use longjmp to transfer back to the associated + handler. */ + +extern void __sjthrow (void) __attribute__ ((__noreturn__)); + +void +__sjthrow () +{ + struct eh_context *eh = (*get_eh_context) (); + void ***dhc = &eh->dynamic_handler_chain; + void *jmpbuf; + void (*func)(void *, int); + void *arg; + void ***cleanup; + + /* The cleanup chain is one word into the buffer. Get the cleanup + chain. */ + cleanup = (void***)&(*dhc)[1]; + + /* If there are any cleanups in the chain, run them now. */ + if (cleanup[0]) + { + double store[200]; + void **buf = (void**)store; + buf[1] = 0; + buf[0] = (*dhc); + + /* try { */ +#ifdef DONT_USE_BUILTIN_SETJMP + if (! setjmp (&buf[2])) +#else + if (! __builtin_setjmp (&buf[2])) +#endif + { + *dhc = buf; + while (cleanup[0]) + { + func = (void(*)(void*, int))cleanup[0][1]; + arg = (void*)cleanup[0][2]; + + /* Update this before running the cleanup. */ + cleanup[0] = (void **)cleanup[0][0]; + + (*func)(arg, 2); + } + *dhc = buf[0]; + } + /* catch (...) */ + else + { + __terminate (); + } + } + + /* We must call terminate if we try and rethrow an exception, when + there is no exception currently active and when there are no + handlers left. */ + if (! eh->info || (*dhc)[0] == 0) + __terminate (); + + /* Find the jmpbuf associated with the top element of the dynamic + handler chain. The jumpbuf starts two words into the buffer. */ + jmpbuf = &(*dhc)[2]; + + /* Then we pop the top element off the dynamic handler chain. */ + *dhc = (void**)(*dhc)[0]; + + /* And then we jump to the handler. */ + +#ifdef DONT_USE_BUILTIN_SETJMP + longjmp (jmpbuf, 1); +#else + __builtin_longjmp (jmpbuf, 1); +#endif +} + +/* Run cleanups on the dynamic cleanup stack for the current dynamic + handler, then pop the handler off the dynamic handler stack, and + then throw. This is used to skip the first handler, and transfer + control to the next handler in the dynamic handler stack. */ + +extern void __sjpopnthrow (void) __attribute__ ((__noreturn__)); + +void +__sjpopnthrow () +{ + struct eh_context *eh = (*get_eh_context) (); + void ***dhc = &eh->dynamic_handler_chain; + void (*func)(void *, int); + void *arg; + void ***cleanup; + + /* The cleanup chain is one word into the buffer. Get the cleanup + chain. */ + cleanup = (void***)&(*dhc)[1]; + + /* If there are any cleanups in the chain, run them now. */ + if (cleanup[0]) + { + double store[200]; + void **buf = (void**)store; + buf[1] = 0; + buf[0] = (*dhc); + + /* try { */ +#ifdef DONT_USE_BUILTIN_SETJMP + if (! setjmp (&buf[2])) +#else + if (! __builtin_setjmp (&buf[2])) +#endif + { + *dhc = buf; + while (cleanup[0]) + { + func = (void(*)(void*, int))cleanup[0][1]; + arg = (void*)cleanup[0][2]; + + /* Update this before running the cleanup. */ + cleanup[0] = (void **)cleanup[0][0]; + + (*func)(arg, 2); + } + *dhc = buf[0]; + } + /* catch (...) */ + else + { + __terminate (); + } + } + + /* Then we pop the top element off the dynamic handler chain. */ + *dhc = (void**)(*dhc)[0]; + + __sjthrow (); +} + +/* Support code for all exception region-based exception handling. */ + +int +__eh_rtime_match (void *rtime) +{ + void *info; + __eh_matcher matcher; + void *ret; + + info = *(__get_eh_info ()); + matcher = ((__eh_info *)info)->match_function; + if (! matcher) + { +#ifndef inhibit_libc + fprintf (stderr, "Internal Compiler Bug: No runtime type matcher."); +#endif + return 0; + } + ret = (*matcher) (info, rtime, (void *)0); + return (ret != NULL); +} + +/* This value identifies the place from which an exception is being + thrown. */ + +#ifdef EH_TABLE_LOOKUP + +EH_TABLE_LOOKUP + +#else + +#ifdef DWARF2_UNWIND_INFO + + +/* Return the table version of an exception descriptor */ + +short +__get_eh_table_version (exception_descriptor *table) +{ + return table->lang.version; +} + +/* Return the originating table language of an exception descriptor */ + +short +__get_eh_table_language (exception_descriptor *table) +{ + return table->lang.language; +} + +/* This routine takes a PC and a pointer to the exception region TABLE for + its translation unit, and returns the address of the exception handler + associated with the closest exception table handler entry associated + with that PC, or 0 if there are no table entries the PC fits in. + + In the advent of a tie, we have to give the last entry, as it represents + an inner block. */ + +static void * +old_find_exception_handler (void *pc, old_exception_table *table) +{ + if (table) + { + int pos; + int best = -1; + + /* We can't do a binary search because the table isn't guaranteed + to be sorted from function to function. */ + for (pos = 0; table[pos].start_region != (void *) -1; ++pos) + { + if (table[pos].start_region <= pc && table[pos].end_region > pc) + { + /* This can apply. Make sure it is at least as small as + the previous best. */ + if (best == -1 || (table[pos].end_region <= table[best].end_region + && table[pos].start_region >= table[best].start_region)) + best = pos; + } + /* But it is sorted by starting PC within a function. */ + else if (best >= 0 && table[pos].start_region > pc) + break; + } + if (best != -1) + return table[best].exception_handler; + } + + return (void *) 0; +} + +/* find_exception_handler finds the correct handler, if there is one, to + handle an exception. + returns a pointer to the handler which controlled should be transferred + to, or NULL if there is nothing left. + Parameters: + PC - pc where the exception originates. If this is a rethrow, + then this starts out as a pointer to the exception table + entry we wish to rethrow out of. + TABLE - exception table for the current module. + EH_INFO - eh info pointer for this exception. + RETHROW - 1 if this is a rethrow. (see incoming value of PC). + CLEANUP - returned flag indicating whether this is a cleanup handler. +*/ +static void * +find_exception_handler (void *pc, exception_descriptor *table, + __eh_info *eh_info, int rethrow, int *cleanup) +{ + + void *retval = NULL; + *cleanup = 1; + if (table) + { + int pos = 0; + /* The new model assumed the table is sorted inner-most out so the + first region we find which matches is the correct one */ + + exception_table *tab = &(table->table[0]); + + /* Subtract 1 from the PC to avoid hitting the next region */ + if (rethrow) + { + /* pc is actually the region table entry to rethrow out of */ + pos = ((exception_table *) pc) - tab; + pc = ((exception_table *) pc)->end_region - 1; + + /* The label is always on the LAST handler entry for a region, + so we know the next entry is a different region, even if the + addresses are the same. Make sure its not end of table tho. */ + if (tab[pos].start_region != (void *) -1) + pos++; + } + else + pc--; + + /* We can't do a binary search because the table is in inner-most + to outermost address ranges within functions */ + for ( ; tab[pos].start_region != (void *) -1; pos++) + { + if (tab[pos].start_region <= pc && tab[pos].end_region > pc) + { + if (tab[pos].match_info) + { + __eh_matcher matcher = eh_info->match_function; + /* match info but no matcher is NOT a match */ + if (matcher) + { + void *ret = (*matcher)((void *) eh_info, + tab[pos].match_info, table); + if (ret) + { + if (retval == NULL) + retval = tab[pos].exception_handler; + *cleanup = 0; + break; + } + } + } + else + { + if (retval == NULL) + retval = tab[pos].exception_handler; + } + } + } + } + return retval; +} +#endif /* DWARF2_UNWIND_INFO */ +#endif /* EH_TABLE_LOOKUP */ + +#ifdef DWARF2_UNWIND_INFO +/* Support code for exception handling using static unwind information. */ + +#include "frame.h" + +/* This type is used in get_reg and put_reg to deal with ABIs where a void* + is smaller than a word, such as the Irix 6 n32 ABI. We cast twice to + avoid a warning about casting between int and pointer of different + sizes. */ + +typedef int ptr_type __attribute__ ((mode (pointer))); + +#ifdef INCOMING_REGNO +/* Is the saved value for register REG in frame UDATA stored in a register + window in the previous frame? */ + +/* ??? The Sparc INCOMING_REGNO references TARGET_FLAT. This allows us + to use the macro here. One wonders, though, that perhaps TARGET_FLAT + compiled functions won't work with the frame-unwind stuff here. + Perhaps the entireity of in_reg_window should be conditional on having + seen a DW_CFA_GNU_window_save? */ +#define target_flags 0 + +static int +in_reg_window (int reg, frame_state *udata) +{ + if (udata->saved[reg] == REG_SAVED_REG) + return INCOMING_REGNO (reg) == reg; + if (udata->saved[reg] != REG_SAVED_OFFSET) + return 0; + +#ifdef STACK_GROWS_DOWNWARD + return udata->reg_or_offset[reg] > 0; +#else + return udata->reg_or_offset[reg] < 0; +#endif +} +#else +static inline int in_reg_window (int reg, frame_state *udata) { return 0; } +#endif /* INCOMING_REGNO */ + +/* Get the address of register REG as saved in UDATA, where SUB_UDATA is a + frame called by UDATA or 0. */ + +static word_type * +get_reg_addr (unsigned reg, frame_state *udata, frame_state *sub_udata) +{ + while (udata->saved[reg] == REG_SAVED_REG) + { + reg = udata->reg_or_offset[reg]; + if (in_reg_window (reg, udata)) + { + udata = sub_udata; + sub_udata = NULL; + } + } + if (udata->saved[reg] == REG_SAVED_OFFSET) + return (word_type *)(udata->cfa + udata->reg_or_offset[reg]); + else + abort (); +} + +/* Get the value of register REG as saved in UDATA, where SUB_UDATA is a + frame called by UDATA or 0. */ + +static inline void * +get_reg (unsigned reg, frame_state *udata, frame_state *sub_udata) +{ + return (void *)(ptr_type) *get_reg_addr (reg, udata, sub_udata); +} + +/* Overwrite the saved value for register REG in frame UDATA with VAL. */ + +static inline void +put_reg (unsigned reg, void *val, frame_state *udata) +{ + *get_reg_addr (reg, udata, NULL) = (word_type)(ptr_type) val; +} + +/* Copy the saved value for register REG from frame UDATA to frame + TARGET_UDATA. Unlike the previous two functions, this can handle + registers that are not one word large. */ + +static void +copy_reg (unsigned reg, frame_state *udata, frame_state *target_udata) +{ + word_type *preg = get_reg_addr (reg, udata, NULL); + word_type *ptreg = get_reg_addr (reg, target_udata, NULL); + + memcpy (ptreg, preg, __builtin_dwarf_reg_size (reg)); +} + +/* Retrieve the return address for frame UDATA. */ + +static inline void * +get_return_addr (frame_state *udata, frame_state *sub_udata) +{ + return __builtin_extract_return_addr + (get_reg (udata->retaddr_column, udata, sub_udata)); +} + +/* Overwrite the return address for frame UDATA with VAL. */ + +static inline void +put_return_addr (void *val, frame_state *udata) +{ + val = __builtin_frob_return_addr (val); + put_reg (udata->retaddr_column, val, udata); +} + +/* Given the current frame UDATA and its return address PC, return the + information about the calling frame in CALLER_UDATA. */ + +static void * +next_stack_level (void *pc, frame_state *udata, frame_state *caller_udata) +{ + caller_udata = __frame_state_for (pc, caller_udata); + if (! caller_udata) + return 0; + + /* Now go back to our caller's stack frame. If our caller's CFA register + was saved in our stack frame, restore it; otherwise, assume the CFA + register is SP and restore it to our CFA value. */ + if (udata->saved[caller_udata->cfa_reg]) + caller_udata->cfa = get_reg (caller_udata->cfa_reg, udata, 0); + else + caller_udata->cfa = udata->cfa; + caller_udata->cfa += caller_udata->cfa_offset; + + return caller_udata; +} + +/* Hook to call before __terminate if only cleanup handlers remain. */ +void +__unwinding_cleanup () +{ +} + +/* throw_helper performs some of the common grunt work for a throw. This + routine is called by throw and rethrows. This is pretty much split + out from the old __throw routine. An addition has been added which allows + for a dummy call to a routine __unwinding_cleanup() when there are nothing + but cleanups remaining. This allows a debugger to examine the state + at which the throw was executed, before any cleanups, rather than + at the terminate point after the stack has been unwound. + + EH is the current eh_context structure. + PC is the address of the call to __throw. + MY_UDATA is the unwind information for __throw. + OFFSET_P is where we return the SP adjustment offset. */ + +static void * +throw_helper (eh, pc, my_udata, offset_p) + struct eh_context *eh; + void *pc; + frame_state *my_udata; + long *offset_p; +{ + frame_state ustruct2, *udata = &ustruct2; + frame_state ustruct; + frame_state *sub_udata = &ustruct; + void *saved_pc = pc; + void *handler; + void *handler_p; + void *pc_p; + frame_state saved_ustruct; + int new_eh_model; + int cleanup = 0; + int only_cleanup = 0; + int rethrow = 0; + int saved_state = 0; + long args_size; + __eh_info *eh_info = (__eh_info *)eh->info; + + /* Do we find a handler based on a re-throw PC? */ + if (eh->table_index != (void *) 0) + rethrow = 1; + + memcpy (udata, my_udata, sizeof (*udata)); + + handler = (void *) 0; + for (;;) + { + frame_state *p = udata; + udata = next_stack_level (pc, udata, sub_udata); + sub_udata = p; + + /* If we couldn't find the next frame, we lose. */ + if (! udata) + break; + + if (udata->eh_ptr == NULL) + new_eh_model = 0; + else + new_eh_model = (((exception_descriptor *)(udata->eh_ptr))-> + runtime_id_field == NEW_EH_RUNTIME); + + if (rethrow) + { + rethrow = 0; + handler = find_exception_handler (eh->table_index, udata->eh_ptr, + eh_info, 1, &cleanup); + eh->table_index = (void *)0; + } + else + if (new_eh_model) + handler = find_exception_handler (pc, udata->eh_ptr, eh_info, + 0, &cleanup); + else + handler = old_find_exception_handler (pc, udata->eh_ptr); + + /* If we found one, we can stop searching, if its not a cleanup. + for cleanups, we save the state, and keep looking. This allows + us to call a debug hook if there are nothing but cleanups left. */ + if (handler) + { + if (cleanup) + { + if (!saved_state) + { + saved_ustruct = *udata; + handler_p = handler; + pc_p = pc; + saved_state = 1; + only_cleanup = 1; + } + } + else + { + only_cleanup = 0; + break; + } + } + + /* Otherwise, we continue searching. We subtract 1 from PC to avoid + hitting the beginning of the next region. */ + pc = get_return_addr (udata, sub_udata) - 1; + } + + if (saved_state) + { + udata = &saved_ustruct; + handler = handler_p; + pc = pc_p; + if (only_cleanup) + __unwinding_cleanup (); + } + + /* If we haven't found a handler by now, this is an unhandled + exception. */ + if (! handler) + __terminate(); + + eh->handler_label = handler; + + args_size = udata->args_size; + + if (pc == saved_pc) + /* We found a handler in the throw context, no need to unwind. */ + udata = my_udata; + else + { + int i; + + /* Unwind all the frames between this one and the handler by copying + their saved register values into our register save slots. */ + + /* Remember the PC where we found the handler. */ + void *handler_pc = pc; + + /* Start from the throw context again. */ + pc = saved_pc; + memcpy (udata, my_udata, sizeof (*udata)); + + while (pc != handler_pc) + { + frame_state *p = udata; + udata = next_stack_level (pc, udata, sub_udata); + sub_udata = p; + + for (i = 0; i < FIRST_PSEUDO_REGISTER; ++i) + if (i != udata->retaddr_column && udata->saved[i]) + { + /* If you modify the saved value of the return address + register on the SPARC, you modify the return address for + your caller's frame. Don't do that here, as it will + confuse get_return_addr. */ + if (in_reg_window (i, udata) + && udata->saved[udata->retaddr_column] == REG_SAVED_REG + && udata->reg_or_offset[udata->retaddr_column] == i) + continue; + copy_reg (i, udata, my_udata); + } + + pc = get_return_addr (udata, sub_udata) - 1; + } + + /* But we do need to update the saved return address register from + the last frame we unwind, or the handler frame will have the wrong + return address. */ + if (udata->saved[udata->retaddr_column] == REG_SAVED_REG) + { + i = udata->reg_or_offset[udata->retaddr_column]; + if (in_reg_window (i, udata)) + copy_reg (i, udata, my_udata); + } + } + /* udata now refers to the frame called by the handler frame. */ + + /* We adjust SP by the difference between __throw's CFA and the CFA for + the frame called by the handler frame, because those CFAs correspond + to the SP values at the two call sites. We need to further adjust by + the args_size of the handler frame itself to get the handler frame's + SP from before the args were pushed for that call. */ +#ifdef STACK_GROWS_DOWNWARD + *offset_p = udata->cfa - my_udata->cfa + args_size; +#else + *offset_p = my_udata->cfa - udata->cfa - args_size; +#endif + + return handler; +} + + +/* We first search for an exception handler, and if we don't find + it, we call __terminate on the current stack frame so that we may + use the debugger to walk the stack and understand why no handler + was found. + + If we find one, then we unwind the frames down to the one that + has the handler and transfer control into the handler. */ + +/*extern void __throw(void) __attribute__ ((__noreturn__));*/ + +void +__throw () +{ + struct eh_context *eh = (*get_eh_context) (); + void *pc, *handler; + long offset; + + /* XXX maybe make my_ustruct static so we don't have to look it up for + each throw. */ + frame_state my_ustruct, *my_udata = &my_ustruct; + + /* This is required for C++ semantics. We must call terminate if we + try and rethrow an exception, when there is no exception currently + active. */ + if (! eh->info) + __terminate (); + + /* Start at our stack frame. */ +label: + my_udata = __frame_state_for (&&label, my_udata); + if (! my_udata) + __terminate (); + + /* We need to get the value from the CFA register. */ + my_udata->cfa = __builtin_dwarf_cfa (); + + /* Do any necessary initialization to access arbitrary stack frames. + On the SPARC, this means flushing the register windows. */ + __builtin_unwind_init (); + + /* Now reset pc to the right throw point. */ + pc = __builtin_extract_return_addr (__builtin_return_address (0)) - 1; + + handler = throw_helper (eh, pc, my_udata, &offset); + + /* Now go! */ + + __builtin_eh_return ((void *)eh, offset, handler); + + /* Epilogue: restore the handler frame's register values and return + to the stub. */ +} + +/*extern void __rethrow(void *) __attribute__ ((__noreturn__));*/ + +void +__rethrow (index) + void *index; +{ + struct eh_context *eh = (*get_eh_context) (); + void *pc, *handler; + long offset; + + /* XXX maybe make my_ustruct static so we don't have to look it up for + each throw. */ + frame_state my_ustruct, *my_udata = &my_ustruct; + + /* This is required for C++ semantics. We must call terminate if we + try and rethrow an exception, when there is no exception currently + active. */ + if (! eh->info) + __terminate (); + + /* This is the table index we want to rethrow from. The value of + the END_REGION label is used for the PC of the throw, and the + search begins with the next table entry. */ + eh->table_index = index; + + /* Start at our stack frame. */ +label: + my_udata = __frame_state_for (&&label, my_udata); + if (! my_udata) + __terminate (); + + /* We need to get the value from the CFA register. */ + my_udata->cfa = __builtin_dwarf_cfa (); + + /* Do any necessary initialization to access arbitrary stack frames. + On the SPARC, this means flushing the register windows. */ + __builtin_unwind_init (); + + /* Now reset pc to the right throw point. */ + pc = __builtin_extract_return_addr (__builtin_return_address (0)) - 1; + + handler = throw_helper (eh, pc, my_udata, &offset); + + /* Now go! */ + + __builtin_eh_return ((void *)eh, offset, handler); + + /* Epilogue: restore the handler frame's register values and return + to the stub. */ +} +#endif /* DWARF2_UNWIND_INFO */ + +#endif /* L_eh */ + +#ifdef L_pure +#ifndef inhibit_libc +/* This gets us __GNU_LIBRARY__. */ +#undef NULL /* Avoid errors if stdio.h and our stddef.h mismatch. */ +#include + +#ifdef __GNU_LIBRARY__ + /* Avoid forcing the library's meaning of `write' on the user program + by using the "internal" name (for use within the library) */ +#define write(fd, buf, n) __write((fd), (buf), (n)) +#endif +#endif /* inhibit_libc */ + +#define MESSAGE "pure virtual method called\n" + +void +__pure_virtual () +{ +#ifndef inhibit_libc + write (2, MESSAGE, sizeof (MESSAGE) - 1); +#endif + __terminate (); +} +#endif diff --git a/lib/src/libgcc/longlong.h b/lib/src/libgcc/longlong.h new file mode 100644 index 00000000..d0f7cad8 --- /dev/null +++ b/lib/src/libgcc/longlong.h @@ -0,0 +1,242 @@ +// This file is copied from gcc 2.95.2 +// Asm code except mips has been removed + +/* longlong.h -- definitions for mixed size 32/64 bit arithmetic. + Copyright (C) 1991, 92, 94, 95, 96, 1997, 1998 Free Software Foundation, Inc. + + This definition file is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2, or (at your option) any later version. + + This definition file is distributed in the hope that it will be + useful, but WITHOUT ANY WARRANTY; without even the implied + warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef SI_TYPE_SIZE +#define SI_TYPE_SIZE 32 +#endif + +#define __BITS4 (SI_TYPE_SIZE / 4) +#define __ll_B (1L << (SI_TYPE_SIZE / 2)) +#define __ll_lowpart(t) ((USItype) (t) % __ll_B) +#define __ll_highpart(t) ((USItype) (t) / __ll_B) + +/* Define auxiliary asm macros. + + 1) umul_ppmm(high_prod, low_prod, multipler, multiplicand) + multiplies two USItype integers MULTIPLER and MULTIPLICAND, + and generates a two-part USItype product in HIGH_PROD and + LOW_PROD. + + 2) __umulsidi3(a,b) multiplies two USItype integers A and B, + and returns a UDItype product. This is just a variant of umul_ppmm. + + 3) udiv_qrnnd(quotient, remainder, high_numerator, low_numerator, + denominator) divides a two-word unsigned integer, composed by the + integers HIGH_NUMERATOR and LOW_NUMERATOR, by DENOMINATOR and + places the quotient in QUOTIENT and the remainder in REMAINDER. + HIGH_NUMERATOR must be less than DENOMINATOR for correct operation. + If, in addition, the most significant bit of DENOMINATOR must be 1, + then the pre-processor symbol UDIV_NEEDS_NORMALIZATION is defined to 1. + + 4) sdiv_qrnnd(quotient, remainder, high_numerator, low_numerator, + denominator). Like udiv_qrnnd but the numbers are signed. The + quotient is rounded towards 0. + + 5) count_leading_zeros(count, x) counts the number of zero-bits from + the msb to the first non-zero bit. This is the number of steps X + needs to be shifted left to set the msb. Undefined for X == 0. + + 6) add_ssaaaa(high_sum, low_sum, high_addend_1, low_addend_1, + high_addend_2, low_addend_2) adds two two-word unsigned integers, + composed by HIGH_ADDEND_1 and LOW_ADDEND_1, and HIGH_ADDEND_2 and + LOW_ADDEND_2 respectively. The result is placed in HIGH_SUM and + LOW_SUM. Overflow (i.e. carry out) is not stored anywhere, and is + lost. + + 7) sub_ddmmss(high_difference, low_difference, high_minuend, + low_minuend, high_subtrahend, low_subtrahend) subtracts two + two-word unsigned integers, composed by HIGH_MINUEND_1 and + LOW_MINUEND_1, and HIGH_SUBTRAHEND_2 and LOW_SUBTRAHEND_2 + respectively. The result is placed in HIGH_DIFFERENCE and + LOW_DIFFERENCE. Overflow (i.e. carry out) is not stored anywhere, + and is lost. + + If any of these macros are left undefined for a particular CPU, + C macros are used. */ + +/* The CPUs come in alphabetical order below. + + Please add support for more CPUs here, or improve the current support + for the CPUs below! + (E.g. WE32100, IBM360.) */ + +#if defined (__GNUC__) && !defined (NO_ASM) + +/* We sometimes need to clobber "cc" with gcc2, but that would not be + understood by gcc1. Use cpp to avoid major code duplication. */ +#if __GNUC__ < 2 +#define __CLOBBER_CC +#define __AND_CLOBBER_CC +#else /* __GNUC__ >= 2 */ +#define __CLOBBER_CC : "cc" +#define __AND_CLOBBER_CC , "cc" +#endif /* __GNUC__ < 2 */ + +#if defined (__mips__) +#define umul_ppmm(w1, w0, u, v) \ + __asm__ ("multu %2,%3" \ + : "=l" ((USItype) (w0)), \ + "=h" ((USItype) (w1)) \ + : "d" ((USItype) (u)), \ + "d" ((USItype) (v))) +#define UMUL_TIME 10 +#define UDIV_TIME 100 +#endif /* __mips__ */ + +#endif /* __GNUC__ */ + +/* If this machine has no inline assembler, use C macros. */ + +#if !defined (add_ssaaaa) +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + do { \ + USItype __x; \ + __x = (al) + (bl); \ + (sh) = (ah) + (bh) + (__x < (al)); \ + (sl) = __x; \ + } while (0) +#endif + +#if !defined (sub_ddmmss) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + do { \ + USItype __x; \ + __x = (al) - (bl); \ + (sh) = (ah) - (bh) - (__x > (al)); \ + (sl) = __x; \ + } while (0) +#endif + +#if !defined (umul_ppmm) +#define umul_ppmm(w1, w0, u, v) \ + do { \ + USItype __x0, __x1, __x2, __x3; \ + USItype __ul, __vl, __uh, __vh; \ + \ + __ul = __ll_lowpart (u); \ + __uh = __ll_highpart (u); \ + __vl = __ll_lowpart (v); \ + __vh = __ll_highpart (v); \ + \ + __x0 = (USItype) __ul * __vl; \ + __x1 = (USItype) __ul * __vh; \ + __x2 = (USItype) __uh * __vl; \ + __x3 = (USItype) __uh * __vh; \ + \ + __x1 += __ll_highpart (__x0);/* this can't give carry */ \ + __x1 += __x2; /* but this indeed can */ \ + if (__x1 < __x2) /* did we get it? */ \ + __x3 += __ll_B; /* yes, add it in the proper pos. */ \ + \ + (w1) = __x3 + __ll_highpart (__x1); \ + (w0) = __ll_lowpart (__x1) * __ll_B + __ll_lowpart (__x0); \ + } while (0) +#endif + +#if !defined (__umulsidi3) +#define __umulsidi3(u, v) \ + ({DIunion __w; \ + umul_ppmm (__w.s.high, __w.s.low, u, v); \ + __w.ll; }) +#endif + +/* Define this unconditionally, so it can be used for debugging. */ +#define __udiv_qrnnd_c(q, r, n1, n0, d) \ + do { \ + USItype __d1, __d0, __q1, __q0; \ + USItype __r1, __r0, __m; \ + __d1 = __ll_highpart (d); \ + __d0 = __ll_lowpart (d); \ + \ + __r1 = (n1) % __d1; \ + __q1 = (n1) / __d1; \ + __m = (USItype) __q1 * __d0; \ + __r1 = __r1 * __ll_B | __ll_highpart (n0); \ + if (__r1 < __m) \ + { \ + __q1--, __r1 += (d); \ + if (__r1 >= (d)) /* i.e. we didn't get carry when adding to __r1 */\ + if (__r1 < __m) \ + __q1--, __r1 += (d); \ + } \ + __r1 -= __m; \ + \ + __r0 = __r1 % __d1; \ + __q0 = __r1 / __d1; \ + __m = (USItype) __q0 * __d0; \ + __r0 = __r0 * __ll_B | __ll_lowpart (n0); \ + if (__r0 < __m) \ + { \ + __q0--, __r0 += (d); \ + if (__r0 >= (d)) \ + if (__r0 < __m) \ + __q0--, __r0 += (d); \ + } \ + __r0 -= __m; \ + \ + (q) = (USItype) __q1 * __ll_B | __q0; \ + (r) = __r0; \ + } while (0) + +/* If the processor has no udiv_qrnnd but sdiv_qrnnd, go through + __udiv_w_sdiv (defined in libgcc or elsewhere). */ +#if !defined (udiv_qrnnd) && defined (sdiv_qrnnd) +#define udiv_qrnnd(q, r, nh, nl, d) \ + do { \ + USItype __r; \ + (q) = __udiv_w_sdiv (&__r, nh, nl, d); \ + (r) = __r; \ + } while (0) +#endif + +/* If udiv_qrnnd was not defined for this processor, use __udiv_qrnnd_c. */ +#if !defined (udiv_qrnnd) +#define UDIV_NEEDS_NORMALIZATION 1 +#define udiv_qrnnd __udiv_qrnnd_c +#endif + +#if !defined (count_leading_zeros) +//extern const UQItype __clz_tab[]; +#define count_leading_zeros(count, x) \ + do { \ + USItype __xr = (x); \ + USItype __a; \ + \ + if (SI_TYPE_SIZE <= 32) \ + { \ + __a = __xr < ((USItype)1<<2*__BITS4) \ + ? (__xr < ((USItype)1<<__BITS4) ? 0 : __BITS4) \ + : (__xr < ((USItype)1<<3*__BITS4) ? 2*__BITS4 : 3*__BITS4); \ + } \ + else \ + { \ + for (__a = SI_TYPE_SIZE - 8; __a > 0; __a -= 8) \ + if (((__xr >> __a) & 0xff) != 0) \ + break; \ + } \ + \ + (count) = SI_TYPE_SIZE - (__clz_tab[__xr >> __a] + __a); \ + } while (0) +#endif + +#ifndef UDIV_NEEDS_NORMALIZATION +#define UDIV_NEEDS_NORMALIZATION 0 +#endif diff --git a/lib/src/libultra_internal.h b/lib/src/libultra_internal.h index 5639c6ac..bb7e2a0f 100644 --- a/lib/src/libultra_internal.h +++ b/lib/src/libultra_internal.h @@ -20,30 +20,20 @@ typedef struct OSThread_ListHead_s } OSThread_ListHead; // Now fix the symbols to the new one. -extern OSThread_ListHead D_80334890_fix; +extern OSThread_ListHead __osThreadTail_fix; -#define D_80334890 D_80334890_fix.next -#define D_80334894 D_80334890_fix.priority -#define D_80334898 D_80334890_fix.queue -#define D_8033489C D_80334890_fix.tlnext -#define D_803348A0 D_80334890_fix.unk10 - -// Fix for the EEPROM array. -extern u32 D_80365E00[16]; - -// alias the last array element correctly -#define D_80365E3C D_80365E00[15] +#define __osThreadTail __osThreadTail_fix.next +#define D_80334894 __osThreadTail_fix.priority +#define __osRunQueue __osThreadTail_fix.queue +#define __osActiveQueue __osThreadTail_fix.tlnext +#define __osRunningThread __osThreadTail_fix.unk10 #else // Original OSThread_ListHead definitions -extern OSThread *D_80334890; +extern OSThread *__osThreadTail; extern u32 D_80334894; -extern OSThread *D_80334898; -extern OSThread *D_8033489C; -extern OSThread *D_803348A0; - -// Original EEPROM definitions -extern u32 D_80365E00[15]; -extern u32 D_80365E3C; +extern OSThread *__osRunQueue; +extern OSThread *__osActiveQueue; +extern OSThread *__osRunningThread; #endif typedef struct { @@ -53,7 +43,7 @@ typedef struct { OSMesgQueue *eventQueue; OSMesgQueue *accessQueue; s32 (*dma_func)(s32, u32, void *, size_t); -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) s32 (*edma_func)(OSPiHandle*, s32, u32, void *, size_t); #else u64 force_align; @@ -76,9 +66,9 @@ void __osPiGetAccess(void); void __osSetSR(u32); u32 __osGetSR(void); void __osSetFpcCsr(u32); -s32 __osSiRawReadIo(void *, u32 *); -s32 __osSiRawWriteIo(void *, u32); -s32 osPiRawReadIo(u32 a0, u32 *a1); +s32 __osSiRawReadIo(u32, u32 *); +s32 __osSiRawWriteIo(u32, u32); +s32 osPiRawReadIo(u32, u32 *); void __osSpSetStatus(u32); u32 __osSpGetStatus(void); s32 __osSpSetPc(void *); @@ -96,4 +86,5 @@ s32 __osAiDeviceBusy(void); void __osDispatchThread(void); u32 __osGetCause(void); s32 __osAtomicDec(u32 *); +void __osSetHWIntrRoutine(OSHWIntr interrupt, s32 (*handler)(void)); #endif diff --git a/lib/src/math/cosf.c b/lib/src/math/cosf.c index 2b01c12a..9f74cf29 100644 --- a/lib/src/math/cosf.c +++ b/lib/src/math/cosf.c @@ -58,7 +58,6 @@ float cosf(float x) dn = dx * rpi.d + .5; if (0 <= dn) { - n = dn + .5; } else @@ -67,13 +66,15 @@ float cosf(float x) } dn = n; - dx -= (dn - .5) * pihi.d; - dx -= (dn - .5) * pilo.d; + dn -= .5; + dx -= dn * pihi.d; + dx -= dn * pilo.d; + xsq = dx * dx; poly = (((((P[4].d * xsq) + P[3].d) * xsq) + P[2].d) * xsq) + P[1].d; - result = ((dx * xsq) * poly) + dx; + result = dx + ((dx * xsq) * poly); if ((n & 0x1) == 0) { diff --git a/lib/src/math/llmuldiv.c b/lib/src/math/llmuldiv.c index e64b9d0c..2af91aae 100644 --- a/lib/src/math/llmuldiv.c +++ b/lib/src/math/llmuldiv.c @@ -7,7 +7,7 @@ unsigned long long __ull_rem(unsigned long long a0, unsigned long long a1) return a0 % a1; } unsigned long long __ull_div(unsigned long long a0, unsigned long long a1) -{ +{ return a0 / a1; } @@ -34,19 +34,19 @@ unsigned long long __ll_mul(unsigned long long a0, unsigned long long a1) void __ull_divremi(unsigned long long *div, unsigned long long *rem, unsigned long long a2, unsigned short a3) { *div = a2 / a3; - *rem = a2 % a3; -} + *rem = a2 % a3; +} long long __ll_mod(long long a0, long long a1) { long long tmp = a0 % a1; if ((tmp < 0 && a1 > 0) || (tmp > 0 && a1 < 0)) { - tmp += a1; + tmp += a1; } return tmp; } - + long long __ll_rshift(long long a0, long long a1) { return a0 >> a1; diff --git a/lib/src/math/sinf.c b/lib/src/math/sinf.c index bdc83168..0a5076c5 100644 --- a/lib/src/math/sinf.c +++ b/lib/src/math/sinf.c @@ -56,7 +56,7 @@ float sinf(float x) poly = (((((P[4].d * xsq) + P[3].d) * xsq) + P[2].d) * xsq) + P[1].d; - result = ((dx * xsq) * poly) + dx; + result = dx + ((dx * xsq) * poly); return result; } @@ -90,7 +90,7 @@ float sinf(float x) poly = (((((P[4].d * xsq) + P[3].d) * xsq) + P[2].d) * xsq) + P[1].d; - result = ((dx * xsq) * poly) + dx; + result = dx + ((dx * xsq) * poly); if ((n & 0x1) == 0) { diff --git a/lib/src/motor.c b/lib/src/motor.c index 3183fe22..acd58a4f 100644 --- a/lib/src/motor.c +++ b/lib/src/motor.c @@ -2,6 +2,19 @@ #include "PR/os_pi.h" #include "libultra_internal.h" #include "controller.h" +#include "macros.h" + +#ifdef VERSION_CN + +s32 __osMotorAccess(UNUSED OSPfs *pfs, UNUSED s32 action) { + return PFS_ERR_INVALID; +} + +s32 osMotorInit(UNUSED OSMesgQueue *mq, UNUSED OSPfs *pfs, UNUSED int channel) { + return PFS_ERR_DEVICE; +} + +#else void _MakeMotorData(int channel, u16 address, u8 *buffer, OSPifRam *mdata); u32 __osMotorinitialized[MAXCONTROLLERS] = { 0, 0, 0, 0 }; @@ -22,7 +35,7 @@ s32 osMotorStop(OSPfs *pfs) { } __osSiGetAccess(); - _osLastSentSiCmd = CONT_CMD_WRITE_MEMPACK; + __osContLastCmd = CONT_CMD_WRITE_MEMPACK; __osSiRawStartDma(OS_WRITE, &_MotorStopData[pfs->channel]); osRecvMesg(pfs->queue, NULL, OS_MESG_BLOCK); ret = __osSiRawStartDma(OS_READ, &__osPfsPifRam); @@ -58,7 +71,7 @@ s32 osMotorStart(OSPfs *pfs) { __osSiGetAccess(); - _osLastSentSiCmd = CONT_CMD_WRITE_MEMPACK; + __osContLastCmd = CONT_CMD_WRITE_MEMPACK; __osSiRawStartDma(OS_WRITE, &_MotorStartData[pfs->channel]); osRecvMesg(pfs->queue, NULL, OS_MESG_BLOCK); ret = __osSiRawStartDma(OS_READ, &__osPfsPifRam); @@ -86,7 +99,7 @@ void _MakeMotorData(int channel, u16 address, u8 *buffer, OSPifRam *mdata) { int i; ptr = (u8 *) mdata->ramarray; - for (i = 0; i < ARRLEN(mdata->ramarray); i++) { + for (i = 0; i < ARRAY_COUNT(mdata->ramarray); i++) { mdata->ramarray[i] = 0; } mdata->pifstatus = CONT_CMD_EXE; @@ -97,7 +110,7 @@ void _MakeMotorData(int channel, u16 address, u8 *buffer, OSPifRam *mdata) { ramreadformat.address = (address << 0x5) | __osContAddressCrc(address); ramreadformat.datacrc = CONT_CMD_NOP; - for (i = 0; i < ARRLEN(ramreadformat.data); i++) { + for (i = 0; i < ARRAY_COUNT(ramreadformat.data); i++) { ramreadformat.data[i] = *buffer++; } if (channel != 0) { @@ -119,7 +132,7 @@ s32 osMotorInit(OSMesgQueue *mq, OSPfs *pfs, int channel) { pfs->status = 0; pfs->activebank = 128; - for (i = 0; i < ARRLEN(temp); i++) { + for (i = 0; i < ARRAY_COUNT(temp); i++) { temp[i] = 254; } @@ -142,7 +155,7 @@ s32 osMotorInit(OSMesgQueue *mq, OSPfs *pfs, int channel) { return PFS_ERR_DEVICE; } - for (i = 0; i < ARRLEN(temp); i++) { + for (i = 0; i < ARRAY_COUNT(temp); i++) { temp[i] = 128; } @@ -166,7 +179,7 @@ s32 osMotorInit(OSMesgQueue *mq, OSPfs *pfs, int channel) { } if (!__osMotorinitialized[channel]) { - for (i = 0; i < ARRLEN(_motorstartbuf); i++) { + for (i = 0; i < ARRAY_COUNT(_motorstartbuf); i++) { _motorstartbuf[i] = 1; _motorstopbuf[i] = 0; } @@ -176,3 +189,5 @@ s32 osMotorInit(OSMesgQueue *mq, OSPfs *pfs, int channel) { } return 0; } + +#endif diff --git a/lib/src/new_func.h b/lib/src/new_func.h index f966f6d3..824412da 100644 --- a/lib/src/new_func.h +++ b/lib/src/new_func.h @@ -2,27 +2,13 @@ #define NEW_FUNC_H #include "libultra_internal.h" -#include "hardware.h" -#define WAIT_ON_IOBUSY(var) \ - var = HW_REG(PI_STATUS_REG, u32); \ - while (var & PI_STATUS_IOBUSY) \ - var = HW_REG(PI_STATUS_REG, u32); +extern u32 osDDActive; -extern u32 EU_D_80302090; - -extern OSPiHandle *__osDiskHandle; //possibly __osPiTable - -extern volatile u32 __OSGlobalIntMask; -s32 osEPiRawStartDma(OSPiHandle *arg0, s32 dir, u32 cart_addr, void *dram_addr, u32 size); -void func_802F4B08(void); -void func_802F4A20(void); void __osResetGlobalIntMask(u32 mask); -void __osEPiRawWriteIo(OSPiHandle*, u32, u32); -void func_802F71F0(void); -#ifdef VERSION_SH +void osYieldThread(void); +#if defined(VERSION_SH) || defined(VERSION_CN) void __osSetGlobalIntMask(s32 arg0); -s32 __osEPiRawReadIo(OSPiHandle *arg0, u32 devAddr, u32 *arg2); #endif #endif diff --git a/lib/src/osAiGetLength.c b/lib/src/osAiGetLength.c index 08458a7a..ba730b62 100644 --- a/lib/src/osAiGetLength.c +++ b/lib/src/osAiGetLength.c @@ -1,7 +1,6 @@ #include "libultra_internal.h" -#include "osAi.h" -#include "hardware.h" +#include "PR/rcp.h" u32 osAiGetLength() { - return HW_REG(AI_LEN_REG, u32); + return IO_READ(AI_LEN_REG); } diff --git a/lib/src/osAiSetFrequency.c b/lib/src/osAiSetFrequency.c index 5cc8bc93..5aaee8a8 100644 --- a/lib/src/osAiSetFrequency.c +++ b/lib/src/osAiSetFrequency.c @@ -1,34 +1,38 @@ #include "libultra_internal.h" -#include "osAi.h" -#include "hardware.h" +#include "PR/rcp.h" +#include "osint.h" #include "macros.h" -extern s32 osViClock; - s32 osAiSetFrequency(u32 freq) { - register u32 a1; - register s32 a2; + register u32 dacRate; +#ifdef VERSION_CN + register u32 bitRate; +#else + register s32 bitRate; +#endif register float ftmp; ftmp = osViClock / (float) freq + .5f; - a1 = ftmp; + dacRate = ftmp; - if (a1 < 0x84) { + if (dacRate < AI_MIN_DAC_RATE) { return -1; } - a2 = (a1 / 66) & 0xff; - if (a2 > 16) { - a2 = 16; + bitRate = (dacRate / 66) & 0xff; + if (bitRate > AI_MAX_BIT_RATE) { + bitRate = AI_MAX_BIT_RATE; } - HW_REG(AI_DACRATE_REG, u32) = a1 - 1; - HW_REG(AI_BITRATE_REG, u32) = a2 - 1; - HW_REG(AI_CONTROL_REG, u32) = 1; // enable dma - return osViClock / (s32) a1; + IO_WRITE(AI_DACRATE_REG, dacRate - 1); + IO_WRITE(AI_BITRATE_REG, bitRate - 1); +#ifndef VERSION_CN + IO_WRITE(AI_CONTROL_REG, AI_CONTROL_DMA_ON); +#endif + return osViClock / (s32) dacRate; } -#ifndef VERSION_SH +#if !defined(VERSION_SH) && !defined(VERSION_CN) // put some extra jr $ra's down there please UNUSED static void filler1(void) { } diff --git a/lib/src/osAiSetNextBuffer.c b/lib/src/osAiSetNextBuffer.c index cc27ae4c..10b7bd26 100644 --- a/lib/src/osAiSetNextBuffer.c +++ b/lib/src/osAiSetNextBuffer.c @@ -1,8 +1,5 @@ #include "libultra_internal.h" -#include "osAi.h" -#include "hardware.h" - -u8 D_80334820 = 0; +#include "PR/rcp.h" /** * It is worth noting that a previous hardware bug has been fixed by a software @@ -19,22 +16,38 @@ u8 D_80334820 = 0; */ s32 osAiSetNextBuffer(void *buff, u32 len) { - u8 *sp1c = buff; - if (D_80334820 != 0) { - sp1c -= 0x2000; - } - - if ((((uintptr_t) buff + len) & 0x3fff) == 0x2000) { - D_80334820 = 1; - } else { - D_80334820 = 0; - } + static u8 hdwrBugFlag = 0; + char *bptr; +#ifdef VERSION_CN if (__osAiDeviceBusy()) { return -1; } +#endif - HW_REG(AI_DRAM_ADDR_REG, void *) = (void *) osVirtualToPhysical(sp1c); - HW_REG(AI_LEN_REG, u32) = len; + bptr = buff; + + if (hdwrBugFlag != 0) { + bptr -= 0x2000; + } + +#ifdef VERSION_CN + if ((((uintptr_t) buff + len) & 0x1fff) == 0) { +#else + if ((((uintptr_t) buff + len) & 0x3fff) == 0x2000) { +#endif + hdwrBugFlag = 1; + } else { + hdwrBugFlag = 0; + } + +#ifndef VERSION_CN + if (__osAiDeviceBusy()) { + return -1; + } +#endif + + IO_WRITE(AI_DRAM_ADDR_REG, osVirtualToPhysical(bptr)); + IO_WRITE(AI_LEN_REG, len); return 0; } diff --git a/lib/src/osCartRomInit.c b/lib/src/osCartRomInit.c index 84ea3b63..937cf1e1 100644 --- a/lib/src/osCartRomInit.c +++ b/lib/src/osCartRomInit.c @@ -4,8 +4,72 @@ #include "PR/os_pi.h" #include "PR/os.h" #include "libultra_internal.h" +#include "piint.h" -OSPiHandle CartRomHandle; +OSPiHandle __Dom1SpeedParam; + +#ifdef VERSION_CN + +OSPiHandle __CartRomHandle; + +OSPiHandle* osCartRomInit(void) { + register u32 a; + register s32 status; + register u32 prevInt; + register u32 lastLatency; + register u32 lastPageSize; + register u32 lastRelDuration; + register u32 lastPulse; + + static u32 notInitialized = 1; + + __osPiGetAccess(); + + if (!notInitialized) { + __osPiRelAccess(); + return &__CartRomHandle; + } + + notInitialized = 0; + __CartRomHandle.type = DEVICE_TYPE_CART; + __CartRomHandle.baseAddress = PHYS_TO_K1(PI_DOM1_ADDR2); + __CartRomHandle.domain = 0; + __CartRomHandle.speed = 0; + bzero(&__CartRomHandle.transferInfo, sizeof(__OSTranxInfo)); + + WAIT_ON_IO_BUSY(status); + + lastLatency = IO_READ(PI_BSD_DOM1_LAT_REG); + lastPageSize = IO_READ(PI_BSD_DOM1_PGS_REG); + lastRelDuration = IO_READ(PI_BSD_DOM1_RLS_REG); + lastPulse = IO_READ(PI_BSD_DOM1_PWD_REG); + + IO_WRITE(PI_BSD_DOM1_LAT_REG, 0xff); + IO_WRITE(PI_BSD_DOM1_PGS_REG, 0); + IO_WRITE(PI_BSD_DOM1_RLS_REG, 3); + IO_WRITE(PI_BSD_DOM1_PWD_REG, 0xff); + + a = IO_READ(__CartRomHandle.baseAddress); + __CartRomHandle.latency = a & 0xFF; + __CartRomHandle.pageSize = (a >> 0x10) & 0xF; + __CartRomHandle.relDuration = (a >> 0x14) & 0xF; + __CartRomHandle.pulse = (a >> 8) & 0xFF; + + IO_WRITE(PI_BSD_DOM1_LAT_REG, lastLatency); + IO_WRITE(PI_BSD_DOM1_PGS_REG, lastPageSize); + IO_WRITE(PI_BSD_DOM1_RLS_REG, lastRelDuration); + IO_WRITE(PI_BSD_DOM1_PWD_REG, lastPulse); + + prevInt = __osDisableInt(); + __CartRomHandle.next = __osPiTable; + __osPiTable = &__CartRomHandle; + __osRestoreInt(prevInt); + __osPiRelAccess(); + + return &__CartRomHandle; +} + +#else OSPiHandle *osCartRomInit(void) { u32 domain; @@ -13,26 +77,28 @@ OSPiHandle *osCartRomInit(void) { domain = 0; - if (CartRomHandle.baseAddress == PHYS_TO_K1(PI_DOM1_ADDR2)) { - return &CartRomHandle; + if (__Dom1SpeedParam.baseAddress == PHYS_TO_K1(PI_DOM1_ADDR2)) { + return &__Dom1SpeedParam; } - CartRomHandle.type = DEVICE_TYPE_CART; - CartRomHandle.baseAddress = PHYS_TO_K1(PI_DOM1_ADDR2); + __Dom1SpeedParam.type = DEVICE_TYPE_CART; + __Dom1SpeedParam.baseAddress = PHYS_TO_K1(PI_DOM1_ADDR2); osPiRawReadIo(0, &domain); - CartRomHandle.latency = domain & 0xff; - CartRomHandle.pulse = (domain >> 8) & 0xff; - CartRomHandle.pageSize = (domain >> 0x10) & 0xf; - CartRomHandle.relDuration = (domain >> 0x14) & 0xf; - CartRomHandle.domain = PI_DOMAIN1; - //CartRomHandle.speed = 0; + __Dom1SpeedParam.latency = domain & 0xff; + __Dom1SpeedParam.pulse = (domain >> 8) & 0xff; + __Dom1SpeedParam.pageSize = (domain >> 0x10) & 0xf; + __Dom1SpeedParam.relDuration = (domain >> 0x14) & 0xf; + __Dom1SpeedParam.domain = PI_DOMAIN1; + //__Dom1SpeedParam.speed = 0; - bzero(&CartRomHandle.transferInfo, sizeof(__OSTranxInfo)); + bzero(&__Dom1SpeedParam.transferInfo, sizeof(__OSTranxInfo)); saveMask = __osDisableInt(); - CartRomHandle.next = __osPiTable; - __osPiTable = &CartRomHandle; + __Dom1SpeedParam.next = __osPiTable; + __osPiTable = &__Dom1SpeedParam; __osRestoreInt(saveMask); - return &CartRomHandle; + return &__Dom1SpeedParam; } + +#endif diff --git a/lib/src/osContInit.c b/lib/src/osContInit.c index d5454008..ce3aa8ab 100644 --- a/lib/src/osContInit.c +++ b/lib/src/osContInit.c @@ -1,19 +1,27 @@ #include "libultra_internal.h" #include "osContInternal.h" +#include "PR/os.h" +#include "controller.h" +#include "PR/ique.h" void __osPackRequestData(u8); void __osContGetInitData(u8 *, OSContStatus *); u32 _osContInitialized = 0; // probably initialized -extern u64 osClockRate; +#ifdef VERSION_CN +#define CLOCK_RATE (62500000ULL * 3 / 4) +#else +#define CLOCK_RATE osClockRate +#endif // these probably belong in EEPROMlongread or something -u8 _osLastSentSiCmd; -u8 _osContNumControllers; -OSTimer D_80365D28; -OSMesgQueue _osContMesgQueue; -OSMesg _osContMesgBuff[4]; +u8 __osContLastCmd; +u8 __osMaxControllers; +OSTimer __osEepromTimer; +OSMesgQueue __osEepromTimerQ; +OSMesg __osEepromTimerMsg[4]; + s32 osContInit(OSMesgQueue *mq, u8 *bitpattern, OSContStatus *status) { OSMesg mesg; u32 ret = 0; @@ -26,63 +34,86 @@ s32 osContInit(OSMesgQueue *mq, u8 *bitpattern, OSContStatus *status) { } _osContInitialized = 1; currentTime = osGetTime(); - if (500000 * osClockRate / 1000000 > currentTime) { + if (500000 * CLOCK_RATE / 1000000 > currentTime) { osCreateMesgQueue(&timerMesgQueue, &mesg, 1); - osSetTimer(&timer, 500000 * osClockRate / 1000000 - currentTime, 0, &timerMesgQueue, &mesg); + osSetTimer(&timer, 500000 * CLOCK_RATE / 1000000 - currentTime, 0, &timerMesgQueue, &mesg); osRecvMesg(&timerMesgQueue, &mesg, OS_MESG_BLOCK); } - _osContNumControllers = 4; // TODO: figure out what it means -#if defined(VERSION_EU) || defined(VERSION_SH) + __osMaxControllers = MAXCONTROLLERS; +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) __osPackRequestData(0); #else __osPackRequestData(255); #endif - ret = __osSiRawStartDma(OS_WRITE, _osContCmdBuf); + ret = __osSiRawStartDma(OS_WRITE, __osContPifRam.ramarray); osRecvMesg(mq, &mesg, OS_MESG_BLOCK); - ret = __osSiRawStartDma(OS_READ, _osContCmdBuf); + ret = __osSiRawStartDma(OS_READ, __osContPifRam.ramarray); osRecvMesg(mq, &mesg, OS_MESG_BLOCK); __osContGetInitData(bitpattern, status); #if defined(VERSION_EU) || defined(VERSION_SH) - _osLastSentSiCmd = 0; + __osContLastCmd = CONT_CMD_REQUEST_STATUS; +#elif defined(VERSION_CN) + __osContLastCmd = 0xfd; #else - _osLastSentSiCmd = 255; + __osContLastCmd = CONT_CMD_RESET; #endif __osSiCreateAccessQueue(); - osCreateMesgQueue(&_osContMesgQueue, _osContMesgBuff, 1); + osCreateMesgQueue(&__osEepromTimerQ, __osEepromTimerMsg, 1); return ret; } + void __osContGetInitData(u8 *bitpattern, OSContStatus *status) { - OSContPackedRequest *cmdBufPtr; + u8 *cmdBufPtr; OSContPackedRequest response; s32 i; u8 sp7; sp7 = 0; - cmdBufPtr = &(_osContCmdBuf[0].request); - for (i = 0; i < _osContNumControllers; i++, cmdBufPtr++, status++) { + cmdBufPtr = (u8 *) __osContPifRam.ramarray; + for (i = 0; i < __osMaxControllers; i++, cmdBufPtr += sizeof(OSContPackedRequest), status++) { response = *(OSContPackedRequest *) cmdBufPtr; status->errnum = (response.rxLen & 0xc0) >> 4; if (status->errnum == 0) { status->type = response.data2 << 8 | response.data1; +#ifdef VERSION_CN + status->status = __osBbPakAddress[i] != NULL ? 1 : 0; +#else status->status = response.data3; +#endif sp7 |= 1 << i; } } +#ifdef VERSION_CN + if (__osBbIsBb != 0 && __osBbHackFlags != 0) { + OSContStatus tmp; + status -= __osMaxControllers; + sp7 = (sp7 & ~((1 << __osBbHackFlags) | 1)) | + ((sp7 & 1) << __osBbHackFlags) | + ((sp7 & (1 << __osBbHackFlags)) >> __osBbHackFlags); + tmp = *status; + *status = status[__osBbHackFlags]; + status[__osBbHackFlags] = tmp; + } +#endif *bitpattern = sp7; } + void __osPackRequestData(u8 command) { - OSContPackedRequest *cmdBufPtr; + u8 *cmdBufPtr; OSContPackedRequest request; s32 i; - // some kind of weird zeroing code - for (i = 0; i < 0x10; i++) { - *((u32 *) &_osContCmdBuf + i) = 0; +#ifdef VERSION_CN + for (i = 0; i < ARRAY_COUNT(__osContPifRam.ramarray); i++) { +#else + for (i = 0; i < ARRAY_COUNT(__osContPifRam.ramarray) + 1; i++) { +#endif + __osContPifRam.ramarray[i] = 0; } - _osContPifCtrl = 1; - cmdBufPtr = &_osContCmdBuf[0].request; + __osContPifRam.pifstatus = 1; + cmdBufPtr = (u8 *) __osContPifRam.ramarray; request.padOrEnd = 255; request.txLen = 1; request.rxLen = 3; @@ -92,8 +123,9 @@ void __osPackRequestData(u8 command) { request.data3 = 255; request.data4 = 255; - for (i = 0; i < _osContNumControllers; i++) { - *cmdBufPtr++ = request; + for (i = 0; i < __osMaxControllers; i++) { + * (OSContPackedRequest *) cmdBufPtr = request; + cmdBufPtr += sizeof(OSContPackedRequest); } - cmdBufPtr->padOrEnd = 254; + *cmdBufPtr = 254; } diff --git a/lib/src/osContInternal.h b/lib/src/osContInternal.h index 0f628205..997fe4c9 100644 --- a/lib/src/osContInternal.h +++ b/lib/src/osContInternal.h @@ -32,16 +32,4 @@ typedef union { u32 as_raw[2]; } OSContPackedStruct; -#ifdef AVOID_UB -// Fix the OSContPackedStruct array -extern OSContPackedStruct _osContCmdBuf[8]; - -// And fix the last element -#define _osContPifCtrl _osContCmdBuf[7].as_raw[1] -#else -// Original OSContPackedStruct definitions -extern OSContPackedStruct _osContCmdBuf[7]; -extern u32 _osContPifCtrl; -#endif - #endif diff --git a/lib/src/osContStartReadData.c b/lib/src/osContStartReadData.c index 4362223a..0c7abcae 100644 --- a/lib/src/osContStartReadData.c +++ b/lib/src/osContStartReadData.c @@ -1,64 +1,86 @@ #include "libultra_internal.h" #include "osContInternal.h" +#include "PR/ique.h" #include +#include "controller.h" -#ifndef AVOID_UB -ALIGNED8 OSContPackedStruct _osContCmdBuf[7]; -UNUSED static u32 unused; // padding between these two variables -u32 _osContPifCtrl; -#else -// Reordered gcc vars above will disturb the aliasing done to access all 8 members of this array, hence AVOID_UB. -ALIGNED8 OSContPackedStruct _osContCmdBuf[8]; -#endif +ALIGNED8 OSPifRam __osContPifRam; -extern u8 _osLastSentSiCmd; -extern u8 _osContNumControllers; +extern u8 __osContLastCmd; +extern u8 __osMaxControllers; void __osPackReadData(void); + s32 osContStartReadData(OSMesgQueue *mesg) { +#ifdef VERSION_CN + s32 ret; +#else s32 ret = 0; s32 i; +#endif __osSiGetAccess(); - if (_osLastSentSiCmd != 1) { + if (__osContLastCmd != CONT_CMD_READ_BUTTON) { __osPackReadData(); - ret = __osSiRawStartDma(OS_WRITE, _osContCmdBuf); + ret = __osSiRawStartDma(OS_WRITE, __osContPifRam.ramarray); osRecvMesg(mesg, NULL, OS_MESG_BLOCK); } - for (i = 0; i < 0x10; i++) { - *((u32 *) &_osContCmdBuf + i) = 255; +#ifndef VERSION_CN + for (i = 0; i < ARRAY_COUNT(__osContPifRam.ramarray) + 1; i++) { + __osContPifRam.ramarray[i] = 0xff; } + __osContPifRam.pifstatus = 0; +#endif - _osContPifCtrl = 0; - ret = __osSiRawStartDma(OS_READ, _osContCmdBuf); - _osLastSentSiCmd = 1; + ret = __osSiRawStartDma(OS_READ, __osContPifRam.ramarray); +#ifdef VERSION_CN + __osContLastCmd = 0xfd; +#else + __osContLastCmd = CONT_CMD_READ_BUTTON; +#endif __osSiRelAccess(); return ret; } + void osContGetReadData(OSContPad *pad) { - OSContPackedRead *cmdBufPtr; + u8 *cmdBufPtr; OSContPackedRead response; s32 i; - cmdBufPtr = &_osContCmdBuf[0].read; - for (i = 0; i < _osContNumControllers; i++, cmdBufPtr++, pad++) { - response = *cmdBufPtr; + cmdBufPtr = (u8 *) __osContPifRam.ramarray; + for (i = 0; i < __osMaxControllers; i++, cmdBufPtr += sizeof(OSContPackedRead), pad++) { + response = * (OSContPackedRead *) cmdBufPtr; pad->errnum = (response.rxLen & 0xc0) >> 4; if (pad->errnum == 0) { pad->button = response.button; pad->stick_x = response.rawStickX; pad->stick_y = response.rawStickY; } - }; + } +#ifdef VERSION_CN + if (__osBbIsBb != 0 && __osBbHackFlags != 0) { + OSContPad tmp; + pad -= __osMaxControllers; + tmp = *pad; + *pad = pad[__osBbHackFlags]; + pad[__osBbHackFlags] = tmp; + } +#endif } + void __osPackReadData() { - OSContPackedRead *cmdBufPtr; + u8 *cmdBufPtr; OSContPackedRead request; s32 i; - cmdBufPtr = &_osContCmdBuf[0].read; - for (i = 0; i < 0x10; i++) { - *((u32 *) &_osContCmdBuf + i) = 0; + cmdBufPtr = (u8 *) __osContPifRam.ramarray; + +#ifdef VERSION_CN + for (i = 0; i < ARRAY_COUNT(__osContPifRam.ramarray); i++) { +#else + for (i = 0; i < ARRAY_COUNT(__osContPifRam.ramarray) + 1; i++) { +#endif + __osContPifRam.ramarray[i] = 0; } - _osContPifCtrl = 1; + __osContPifRam.pifstatus = 1; request.padOrEnd = 255; request.txLen = 1; request.rxLen = 4; @@ -66,8 +88,9 @@ void __osPackReadData() { request.button = 65535; request.rawStickX = -1; request.rawStickY = -1; - for (i = 0; i < _osContNumControllers; i++) { - *cmdBufPtr++ = request; + for (i = 0; i < __osMaxControllers; i++) { + * (OSContPackedRead *) cmdBufPtr = request; + cmdBufPtr += sizeof(OSContPackedRead); } - cmdBufPtr->padOrEnd = 254; + *cmdBufPtr = 254; } diff --git a/lib/src/osCreateMesgQueue.c b/lib/src/osCreateMesgQueue.c index 727c0af7..c8ac4901 100644 --- a/lib/src/osCreateMesgQueue.c +++ b/lib/src/osCreateMesgQueue.c @@ -1,11 +1,10 @@ #include "libultra_internal.h" void osCreateMesgQueue(OSMesgQueue *mq, OSMesg *msgBuf, s32 count) { - mq->mtqueue = (OSThread *) &D_80334890; //? - mq->fullqueue = (OSThread *) &D_80334890; + mq->mtqueue = (OSThread *) &__osThreadTail; + mq->fullqueue = (OSThread *) &__osThreadTail; mq->validCount = 0; mq->first = 0; mq->msgCount = count; mq->msg = msgBuf; - return; } diff --git a/lib/src/osCreatePiManager.c b/lib/src/osCreatePiManager.c index 890cfe32..7014d9c3 100644 --- a/lib/src/osCreatePiManager.c +++ b/lib/src/osCreatePiManager.c @@ -1,23 +1,25 @@ #include "libultra_internal.h" +#include "PR/os.h" +#include "piint.h" + +#include "macros.h" #define OS_PI_MGR_MESG_BUFF_SIZE 1 -#ifdef VERSION_SH // TODO: In libreultra this is in an include -extern OSPiHandle *CartRomHandle; -extern OSPiHandle *LeoDiskHandle; -#endif +OSDevMgr __osPiDevMgr = { 0 }; -OSMgrArgs __osPiDevMgr = { 0 }; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) OSPiHandle *__osPiTable = NULL; #endif -#ifdef VERSION_SH -OSPiHandle **__osCurrentHandle[2] = { &CartRomHandle, &LeoDiskHandle }; + +#if defined(VERSION_SH) || defined(VERSION_CN) +OSPiHandle *__osCurrentHandle[2] = { &__Dom1SpeedParam, &__Dom2SpeedParam }; #endif -OSThread piMgrThread; -u32 piMgrStack[0x400]; // stack bottom -OSMesgQueue __osPiMesgQueue; -OSMesg piMgrMesgBuff[OS_PI_MGR_MESG_BUFF_SIZE + 1]; + +FORCE_BSS OSThread piMgrThread; +FORCE_BSS u32 piMgrStack[0x400]; // stack bottom +FORCE_BSS OSMesgQueue piEventQueue; +FORCE_BSS OSMesg piEventBuf[OS_PI_MGR_MESG_BUFF_SIZE + 1]; extern u32 gOsPiAccessQueueCreated; extern OSMesgQueue gOsPiMessageQueue; @@ -28,13 +30,13 @@ void osCreatePiManager(OSPri pri, OSMesgQueue *cmdQ, OSMesg *cmdBuf, s32 cmdMsgC OSPri newPri; OSPri currentPri; - if (!__osPiDevMgr.initialized) { + if (!__osPiDevMgr.active) { osCreateMesgQueue(cmdQ, cmdBuf, cmdMsgCnt); - osCreateMesgQueue(&__osPiMesgQueue, &piMgrMesgBuff[0], OS_PI_MGR_MESG_BUFF_SIZE); + osCreateMesgQueue(&piEventQueue, &piEventBuf[0], OS_PI_MGR_MESG_BUFF_SIZE); if (!gOsPiAccessQueueCreated) { __osPiCreateAccessQueue(); } // what is this constant geez - osSetEventMesg(OS_EVENT_PI, &__osPiMesgQueue, (void *) 0x22222222); + osSetEventMesg(OS_EVENT_PI, &piEventQueue, (void *) 0x22222222); newPri = -1; currentPri = osGetThreadPri(NULL); if (currentPri < pri) { @@ -42,14 +44,14 @@ void osCreatePiManager(OSPri pri, OSMesgQueue *cmdQ, OSMesg *cmdBuf, s32 cmdMsgC osSetThreadPri(NULL, pri); } int_disabled = __osDisableInt(); - __osPiDevMgr.initialized = TRUE; - __osPiDevMgr.mgrThread = &piMgrThread; + __osPiDevMgr.active = TRUE; + __osPiDevMgr.thread = &piMgrThread; __osPiDevMgr.cmdQueue = cmdQ; - __osPiDevMgr.eventQueue = &__osPiMesgQueue; - __osPiDevMgr.accessQueue = &gOsPiMessageQueue; - __osPiDevMgr.dma_func = osPiRawStartDma; -#if defined(VERSION_EU) || defined(VERSION_SH) - __osPiDevMgr.edma_func = osEPiRawStartDma; + __osPiDevMgr.evtQueue = &piEventQueue; + __osPiDevMgr.acsQueue = &gOsPiMessageQueue; + __osPiDevMgr.dma = osPiRawStartDma; +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) + __osPiDevMgr.edma = osEPiRawStartDma; #endif osCreateThread(&piMgrThread, 0, __osDevMgrMain, (void *) &__osPiDevMgr, &piMgrStack[0x400], pri); osStartThread(&piMgrThread); diff --git a/lib/src/osCreateThread.c b/lib/src/osCreateThread.c index b4e283f2..1598dcbb 100644 --- a/lib/src/osCreateThread.c +++ b/lib/src/osCreateThread.c @@ -1,4 +1,5 @@ #include "libultra_internal.h" +#include void __osCleanupThread(void); @@ -7,8 +8,9 @@ void __osCleanupThread(void); #pragma GCC diagnostic ignored "-Wpointer-to-int-cast" void osCreateThread(OSThread *thread, OSId id, void (*entry)(void *), void *arg, void *sp, OSPri pri) { - register u32 int_disabled; - u32 tmp; + register u32 saveMask; + OSIntMask mask; + thread->id = id; thread->priority = pri; thread->next = NULL; @@ -17,18 +19,19 @@ void osCreateThread(OSThread *thread, OSId id, void (*entry)(void *), void *arg, thread->context.a0 = (u64) arg; thread->context.sp = (u64) sp - 16; thread->context.ra = (u64) __osCleanupThread; - tmp = OS_IM_ALL; - thread->context.sr = 65283; - thread->context.rcp = (tmp & 0x3f0000) >> 16; - thread->context.fpcsr = (u32) 0x01000800; + + mask = OS_IM_ALL; + thread->context.sr = (mask & OS_IM_CPU) | SR_EXL; + thread->context.rcp = (mask & RCP_IMASK) >> RCP_IMASKSHIFT; + thread->context.fpcsr = (u32) (FPCSR_FS | FPCSR_EV); thread->fp = 0; thread->state = OS_STATE_STOPPED; thread->flags = 0; - int_disabled = __osDisableInt(); - thread->tlnext = D_8033489C; + saveMask = __osDisableInt(); + thread->tlnext = __osActiveQueue; - D_8033489C = thread; - __osRestoreInt(int_disabled); + __osActiveQueue = thread; + __osRestoreInt(saveMask); } #pragma GCC diagnostic pop diff --git a/lib/src/osCreateViManager.c b/lib/src/osCreateViManager.c index 67776ed6..f78c4cbd 100644 --- a/lib/src/osCreateViManager.c +++ b/lib/src/osCreateViManager.c @@ -18,12 +18,19 @@ extern u32 __osBaseCounter; extern u32 __osViIntrCount; void viMgrMain(void *); +#ifdef VERSION_CN +u32 __additional_scanline = 0; +#endif + void osCreateViManager(OSPri pri) { u32 int_disabled; OSPri newPri; OSPri currentPri; if (!viMgrMainArgs.initialized) { __osTimerServicesInit(); +#ifdef VERSION_CN + __additional_scanline = 0; +#endif osCreateMesgQueue(&__osViMesgQueue, &viMgrMesgBuff[0], OS_VI_MANAGER_MESSAGE_BUFF_SIZE); viEventViMesg.hdr.type = 13; viEventViMesg.hdr.pri = 0; @@ -46,7 +53,7 @@ void osCreateViManager(OSPri pri) { viMgrMainArgs.eventQueue = &__osViMesgQueue; viMgrMainArgs.accessQueue = NULL; viMgrMainArgs.dma_func = NULL; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) viMgrMainArgs.edma_func = NULL; #endif diff --git a/lib/src/osDestroyThread.c b/lib/src/osDestroyThread.c index 215ce073..2f5c989d 100644 --- a/lib/src/osDestroyThread.c +++ b/lib/src/osDestroyThread.c @@ -8,28 +8,38 @@ void osDestroyThread(OSThread *thread) { int_disabled = __osDisableInt(); if (thread == NULL) { - thread = D_803348A0; + thread = __osRunningThread; } else if (thread->state != OS_STATE_STOPPED) { __osDequeueThread(thread->queue, thread); } - if (D_8033489C == thread) { - D_8033489C = D_8033489C->tlnext; + if (__osActiveQueue == thread) { + __osActiveQueue = __osActiveQueue->tlnext; } else { - s1 = D_8033489C; + s1 = __osActiveQueue; +#ifdef VERSION_CN + while (s1->priority != -1) { + s2 = s1->tlnext; + if (s2 == thread) { + s1->tlnext = thread->tlnext; + break; + } + s1 = s2; + } +#else s2 = s1->tlnext; while (s2 != NULL) { if (s2 == thread) { s1->tlnext = thread->tlnext; break; - } else { - s1 = s2; - s2 = s1->tlnext; } + s1 = s2; + s2 = s1->tlnext; } +#endif } - if (thread == D_803348A0) { + if (thread == __osRunningThread) { __osDispatchThread(); } diff --git a/lib/src/osEPiRawReadIo.c b/lib/src/osEPiRawReadIo.c new file mode 100644 index 00000000..1f1ab384 --- /dev/null +++ b/lib/src/osEPiRawReadIo.c @@ -0,0 +1,20 @@ +#include "libultra_internal.h" +#include "PR/rcp.h" +#include "piint.h" + +s32 osEPiRawReadIo(OSPiHandle *pihandle, u32 devAddr, u32 *data) { + register s32 stat; +#ifdef VERSION_CN + u32 domain; +#endif + +#ifdef VERSION_CN + EPI_SYNC(pihandle, stat, domain); +#else + WAIT_ON_IO_BUSY(stat); +#endif + + *data = IO_READ(pihandle->baseAddress | devAddr); + + return 0; +} diff --git a/lib/src/osEPiRawStartDma.c b/lib/src/osEPiRawStartDma.c index 0ca8aef9..610b8583 100644 --- a/lib/src/osEPiRawStartDma.c +++ b/lib/src/osEPiRawStartDma.c @@ -1,61 +1,131 @@ #include "libultra_internal.h" -#include "hardware.h" +#include "PR/rcp.h" +#include "PR/ique.h" #include "new_func.h" #include "PR/R4300.h" -// TODO: This define is from piint.h, but including that causes problems... -#define UPDATE_REG(reg, var) \ - if (cHandle->var != pihandle->var) \ - IO_WRITE(reg, pihandle->var); +#include "piint.h" + // TODO: This define is from os.h, but including that causes problems... #define PI_DOMAIN1 0 -// TODO: These defines are from PR/rcp.h, but including that causes problems... -#define IO_WRITE(addr, data) (*(vu32 *) PHYS_TO_K1(addr) = (u32)(data)) -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) extern OSPiHandle *__osCurrentHandle[2]; #endif -s32 osEPiRawStartDma(OSPiHandle *pihandle, s32 dir, u32 cart_addr, void *dram_addr, u32 size) { -#ifdef VERSION_SH +s32 osEPiRawStartDma(OSPiHandle *pihandle, s32 dir, u32 devAddr, void *dram_addr, u32 size) { +#ifdef VERSION_CN + u64 dummyBuf[2]; + u32 status; + u32 domain; + u32 buf; + u32 mask; + u16 *tmp; + u32 i; + u32 end; +#elif defined(VERSION_SH) u32 status; u32 domain; #else - register int status; + register u32 status; #endif - status = HW_REG(PI_STATUS_REG, u32); - while (status & PI_STATUS_ERROR) - status = HW_REG(PI_STATUS_REG, u32); -#ifdef VERSION_SH // TODO: This is the EPI_SYNC macro - domain = pihandle->domain; - if (__osCurrentHandle[domain] != pihandle) { - OSPiHandle *cHandle = __osCurrentHandle[domain]; - if (domain == PI_DOMAIN1) { - UPDATE_REG(PI_BSD_DOM1_LAT_REG, latency); - UPDATE_REG(PI_BSD_DOM1_PGS_REG, pageSize); - UPDATE_REG(PI_BSD_DOM1_RLS_REG, relDuration); - UPDATE_REG(PI_BSD_DOM1_PWD_REG, pulse); - } else { - UPDATE_REG(PI_BSD_DOM2_LAT_REG, latency); - UPDATE_REG(PI_BSD_DOM2_PGS_REG, pageSize); - UPDATE_REG(PI_BSD_DOM2_RLS_REG, relDuration); - UPDATE_REG(PI_BSD_DOM2_PWD_REG, pulse); +#if defined(VERSION_SH) || defined(VERSION_CN) + EPI_SYNC(pihandle, status, domain); +#else + WAIT_ON_IO_BUSY(status); +#endif + +#ifdef VERSION_CN + if (dir == OS_READ) { + mask = 1; + + for (i = 1; i <= pihandle->pageSize + 2; i++) { + mask *= 2; + } + + if ((devAddr & (mask - 1)) == mask - 2) { + osEPiRawReadIo(pihandle, devAddr - 2, &buf); + + tmp = (u16 *) PHYS_TO_K1(dram_addr); + *(tmp++) = (u16) buf; + + devAddr += 2; + dram_addr = tmp; + size -= 2; + + if (size >= 4) { + osEPiRawReadIo(pihandle, devAddr, &buf); + + tmp = (u16 *) dram_addr; + *(tmp++) = buf >> 16; + *(tmp++) = (u16) buf; + + devAddr += 4; + dram_addr = tmp; + size -= 4; + + if (size != 0) { + osEPiRawReadIo(pihandle, devAddr, &buf); + + tmp = (u16 *) PHYS_TO_K1(dram_addr); + *(tmp++) = buf >> 16; + + devAddr += 2; + dram_addr = tmp; + size -= 2; + } + } + } + + end = devAddr + size; + + if (((end & (mask - 1)) == 2) | (size == 2)) { + if (end & 2) { + osEPiRawReadIo(pihandle, end - 2, &buf); + tmp = (u16 *) PHYS_TO_K1(dram_addr) + (size - 2) / 2; + *tmp = buf >> 16; + } else { + osEPiRawReadIo(pihandle, end - 4, &buf); + tmp = (u16 *) PHYS_TO_K1(dram_addr) + (size - 2) / 2; + *tmp = (u16) buf; + } + + size -= 2; + } + + if (size == 0) { + size = 8; + dram_addr = dummyBuf; + devAddr = 0; } - __osCurrentHandle[domain] = pihandle; } #endif - HW_REG(PI_DRAM_ADDR_REG, void *) = (void *) osVirtualToPhysical(dram_addr); - HW_REG(PI_CART_ADDR_REG, void *) = (void *) (((uintptr_t) pihandle->baseAddress | cart_addr) & 0x1fffffff); + IO_WRITE(PI_DRAM_ADDR_REG, osVirtualToPhysical(dram_addr)); + IO_WRITE(PI_CART_ADDR_REG, K1_TO_PHYS(pihandle->baseAddress | devAddr)); + +#ifdef VERSION_CN + if ((u32) dir >= 2U) { + return -1; + } + + if ((pihandle->baseAddress | devAddr) <= 0x400) { + IO_WRITE(dir == OS_READ ? PI_EX_WR_LEN_REG : PI_EX_RD_LEN_REG, size - 1); + } else { + IO_WRITE(dir == OS_READ ? PI_WR_LEN_REG : PI_RD_LEN_REG, size - 1); + } +#else switch (dir) { case OS_READ: - HW_REG(PI_WR_LEN_REG, u32) = size - 1; + IO_WRITE(PI_WR_LEN_REG, size - 1); break; case OS_WRITE: - HW_REG(PI_RD_LEN_REG, u32) = size - 1; + IO_WRITE(PI_RD_LEN_REG, size - 1); break; default: return -1; } +#endif return 0; } + diff --git a/lib/src/osEPiRawWriteIo.c b/lib/src/osEPiRawWriteIo.c new file mode 100644 index 00000000..1f67b70e --- /dev/null +++ b/lib/src/osEPiRawWriteIo.c @@ -0,0 +1,20 @@ +#include "libultra_internal.h" +#include "PR/rcp.h" +#include "piint.h" + +s32 osEPiRawWriteIo(OSPiHandle *pihandle, u32 devAddr, u32 data) { + register u32 stat; +#ifdef VERSION_CN + u32 domain; +#endif + +#ifdef VERSION_CN + EPI_SYNC(pihandle, stat, domain); +#else + WAIT_ON_IO_BUSY(stat); +#endif + + IO_WRITE(pihandle->baseAddress | devAddr, data); + + return 0; +} diff --git a/lib/src/osEepromLongRead.c b/lib/src/osEepromLongRead.c index 3260d138..628690dc 100644 --- a/lib/src/osEepromLongRead.c +++ b/lib/src/osEepromLongRead.c @@ -1,17 +1,14 @@ #include "libultra_internal.h" +#include "controller.h" -extern u64 osClockRate; -extern u8 D_80365D20; -extern u8 _osContNumControllers; -extern OSTimer D_80365D28; // not sure what this is yet -extern OSMesgQueue _osContMesgQueue; -extern OSMesg _osContMesgBuff[4]; - -s32 osEepromLongRead(OSMesgQueue *mq, u8 address, u8 *buffer, int nbytes) { +s32 osEepromLongRead(OSMesgQueue *mq, u8 address, u8 *buffer, s32 nbytes) { s32 status = 0; + +#ifndef VERSION_CN if (address > 0x40) { return -1; } +#endif while (nbytes > 0) { status = osEepromRead(mq, address, buffer); @@ -19,11 +16,13 @@ s32 osEepromLongRead(OSMesgQueue *mq, u8 address, u8 *buffer, int nbytes) { return status; } - nbytes -= 8; + nbytes -= EEPROM_BLOCK_SIZE; address++; - buffer += 8; - osSetTimer(&D_80365D28, 12000 * osClockRate / 1000000, 0, &_osContMesgQueue, _osContMesgBuff); - osRecvMesg(&_osContMesgQueue, NULL, OS_MESG_BLOCK); + buffer += EEPROM_BLOCK_SIZE; +#ifndef VERSION_CN + osSetTimer(&__osEepromTimer, 12000 * osClockRate / 1000000, 0, &__osEepromTimerQ, __osEepromTimerMsg); + osRecvMesg(&__osEepromTimerQ, NULL, OS_MESG_BLOCK); +#endif } return status; diff --git a/lib/src/osEepromLongWrite.c b/lib/src/osEepromLongWrite.c index 69d367e3..97ae82d9 100644 --- a/lib/src/osEepromLongWrite.c +++ b/lib/src/osEepromLongWrite.c @@ -1,18 +1,19 @@ #include "libultra_internal.h" +#include "controller.h" -extern u64 osClockRate; -extern u8 D_80365D20; -extern u8 _osContNumControllers; -extern OSTimer D_80365D28; -extern OSMesgQueue _osContMesgQueue; -extern OSMesg _osContMesgBuff[4]; -// exactly the same as osEepromLongRead except for osEepromWrite call +#ifdef VERSION_CN +#define CLOCK_RATE (62500000ULL * 3 / 4) +#else +#define CLOCK_RATE osClockRate +#endif s32 osEepromLongWrite(OSMesgQueue *mq, u8 address, u8 *buffer, int nbytes) { s32 result = 0; +#ifndef VERSION_CN if (address > 0x40) { return -1; } +#endif while (nbytes > 0) { result = osEepromWrite(mq, address, buffer); @@ -20,11 +21,11 @@ s32 osEepromLongWrite(OSMesgQueue *mq, u8 address, u8 *buffer, int nbytes) { return result; } - nbytes -= 8; + nbytes -= EEPROM_BLOCK_SIZE; address++; - buffer += 8; - osSetTimer(&D_80365D28, 12000 * osClockRate / 1000000, 0, &_osContMesgQueue, _osContMesgBuff); - osRecvMesg(&_osContMesgQueue, NULL, OS_MESG_BLOCK); + buffer += EEPROM_BLOCK_SIZE; + osSetTimer(&__osEepromTimer, 12000 * CLOCK_RATE / 1000000, 0, &__osEepromTimerQ, __osEepromTimerMsg); + osRecvMesg(&__osEepromTimerQ, NULL, OS_MESG_BLOCK); } return result; diff --git a/lib/src/osEepromProbe.c b/lib/src/osEepromProbe.c index d550b846..5924906e 100644 --- a/lib/src/osEepromProbe.c +++ b/lib/src/osEepromProbe.c @@ -1,24 +1,26 @@ +#include "macros.h" #include "libultra_internal.h" -// TODO: merge with osEepromWrite -typedef struct { - u16 unk00; - u8 unk02; - u8 unk03; -} unkStruct; +extern u32 __osBbEepromSize; -s32 __osEepStatus(OSMesgQueue *, unkStruct *); -s32 osEepromProbe(OSMesgQueue *mq) { - s32 status = 0; - unkStruct sp18; +s32 __osEepStatus(OSMesgQueue *, OSContStatus *); +s32 osEepromProbe(UNUSED OSMesgQueue *mq) { + s32 ret = 0; +#ifndef VERSION_CN + OSContStatus status; +#endif __osSiGetAccess(); - status = __osEepStatus(mq, &sp18); - if (status == 0 && (sp18.unk00 & 0x8000) != 0) { - status = 1; - } else { - status = 0; +#ifdef VERSION_CN + if (__osBbEepromSize == 0x200) { + ret = EEPROM_TYPE_4K; + } else if (__osBbEepromSize == 0x800) { + ret = EEPROM_TYPE_16K; } +#else + ret = __osEepStatus(mq, &status); + ret = (ret == 0 && (status.type & CONT_EEPROM) != 0) ? EEPROM_TYPE_4K : 0; +#endif __osSiRelAccess(); - return status; + return ret; } diff --git a/lib/src/osEepromRead.c b/lib/src/osEepromRead.c index 7f3a0292..26de2b62 100644 --- a/lib/src/osEepromRead.c +++ b/lib/src/osEepromRead.c @@ -1,102 +1,115 @@ #include "libultra_internal.h" +#include "PR/ique.h" +#include "controller.h" +#include "macros.h" -extern u8 _osLastSentSiCmd; +#ifdef VERSION_CN -typedef struct { - u16 unk00; - u8 unk02; - u8 unk03; -} unkStruct; -typedef struct { - u8 unk00; - u8 unk01; - u8 unk02; - u8 unk03; - u8 unk04; - u8 unk05; - u8 unk06; - u8 unk07; -} unkStruct3; +s32 osEepromRead(UNUSED OSMesgQueue *mq, u8 address, u8 *buffer) { + s32 ret = 0; + s32 i; -typedef struct { - u8 unk00; - u8 unk01; - u8 unk02; - u8 unk03; - unkStruct3 unk04; -} unkStruct2; - -s32 __osEepStatus(OSMesgQueue *, unkStruct *); -s32 __osPackEepReadData(u8); - -s32 osEepromRead(OSMesgQueue *mq, u8 address, u8 *buffer) { - s32 sp34; - s32 sp30; - u8 *sp2c; - unkStruct sp28; - unkStruct2 sp20; - sp34 = 0; - sp30 = 0; - sp2c = (u8 *) &D_80365E00; - if (address > 0x40) { - return -1; - } __osSiGetAccess(); - sp34 = __osEepStatus(mq, &sp28); - if (sp34 != 0 || sp28.unk00 != 0x8000) { - return 8; + if (__osBbEepromSize == 0x200) { + if (address >= 0x200 / 8) { + ret = -1; + } + } else if (__osBbEepromSize != 0x800) { + ret = 8; } - while (sp28.unk02 & 0x80) { - __osEepStatus(mq, &sp28); - } - __osPackEepReadData(address); - sp34 = __osSiRawStartDma(OS_WRITE, &D_80365E00); - osRecvMesg(mq, NULL, OS_MESG_BLOCK); - for (sp30 = 0; sp30 < 0x10; sp30++) { - (D_80365E00)[sp30] = 255; - } - D_80365E3C = 0; - sp34 = __osSiRawStartDma(OS_READ, D_80365E00); - _osLastSentSiCmd = 4; - osRecvMesg(mq, NULL, OS_MESG_BLOCK); - for (sp30 = 0; sp30 < 4; sp30++) { - sp2c++; - } - sp20 = *(unkStruct2 *) sp2c; - sp34 = (sp20.unk01 & 0xc0) >> 4; - if (sp34 == 0) { - for (sp30 = 0; sp30 < 8; sp30++) { - *buffer++ = ((u8 *) &sp20.unk04)[sp30]; + + if (ret == 0) { + for (i = 0; i < 8; i++) { + buffer[i] = (__osBbEepromAddress + address * 8)[i]; } } + __osSiRelAccess(); - return sp34; + return ret; } -s32 __osPackEepReadData(u8 address) { - u8 *sp14; - unkStruct2 sp8; - s32 sp4; - sp14 = (u8 *) &D_80365E00; - for (sp4 = 0; sp4 < 0x10; sp4++) { - D_80365E00[sp4] = 255; +#else + +void __osPackEepReadData(u8); + +s32 osEepromRead(OSMesgQueue *mq, u8 address, u8 *buffer) { + s32 ret = 0; + s32 i = 0; + u8 *ptr = (u8 *) &__osEepPifRam.ramarray; + OSContStatus sdata; + __OSContEepromFormat eepromformat; + + if (address > EEPROM_MAXBLOCKS) { + return -1; } - D_80365E3C = 1; - sp8.unk00 = 2; - sp8.unk01 = 8; - sp8.unk02 = 4; - sp8.unk03 = address; - for (sp4 = 0; sp4 < 8; sp4++) { - ((u8 *) &sp8.unk04)[sp4] = 0; + + __osSiGetAccess(); + ret = __osEepStatus(mq, &sdata); + if (ret != 0 || sdata.type != CONT_EEPROM) { + + return CONT_NO_RESPONSE_ERROR; } - for (sp4 = 0; sp4 < 4; sp4++) { - *sp14++ = 0; + + while (sdata.status & CONT_EEPROM_BUSY) { + __osEepStatus(mq, &sdata); } - *(unkStruct2 *) sp14 = sp8; - sp14 += 0xc; - *sp14 = 254; -#ifdef AVOID_UB - return 0; -#endif + __osPackEepReadData(address); + + ret = __osSiRawStartDma(OS_WRITE, &__osEepPifRam); + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + + for (i = 0; i < ARRAY_COUNT(__osEepPifRam.ramarray) + 1; i++) { + __osEepPifRam.ramarray[i] = CONT_CMD_NOP; + } + __osEepPifRam.pifstatus = 0; + + ret = __osSiRawStartDma(OS_READ, &__osEepPifRam); + __osContLastCmd = CONT_CMD_READ_EEPROM; + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + + for (i = 0; i < 4; i++) { + ptr++; + } + + eepromformat = *(__OSContEepromFormat *) ptr; + ret = CHNL_ERR(eepromformat); + + if (ret == 0) { + for (i = 0; i < 8; i++) { + *buffer++ = eepromformat.data[i]; + } + } + + __osSiRelAccess(); + return ret; } + +void __osPackEepReadData(u8 address) { + u8 *ptr = (u8 *) &__osEepPifRam.ramarray; + __OSContEepromFormat eepromformat; + s32 i; + + for (i = 0; i < ARRAY_COUNT(__osEepPifRam.ramarray) + 1; i++) { + __osEepPifRam.ramarray[i] = CONT_CMD_NOP; + } + __osEepPifRam.pifstatus = CONT_CMD_EXE; + + eepromformat.txsize = CONT_CMD_READ_EEPROM_TX; + eepromformat.rxsize = CONT_CMD_READ_EEPROM_RX; + eepromformat.cmd = CONT_CMD_READ_EEPROM; + eepromformat.address = address; + for (i = 0; i < ARRAY_COUNT(eepromformat.data); i++) { + eepromformat.data[i] = 0; + } + + for (i = 0; i < 4; i++) { + *ptr++ = 0; + } + + *(__OSContEepromFormat *) ptr = eepromformat; + ptr += sizeof(__OSContEepromFormat); + *ptr = CONT_CMD_END; +} + +#endif diff --git a/lib/src/osEepromWrite.c b/lib/src/osEepromWrite.c index 67c42a59..68069b1b 100644 --- a/lib/src/osEepromWrite.c +++ b/lib/src/osEepromWrite.c @@ -1,170 +1,168 @@ #include "libultra_internal.h" #include "osContInternal.h" +#include "PR/ique.h" +#include "controller.h" +#include "macros.h" + +#ifdef VERSION_CN + +s32 osEepromWrite(UNUSED OSMesgQueue *mq, u8 address, u8 *buffer) { + s32 ret = 0; + s32 i; + + __osSiGetAccess(); + + if (__osBbEepromSize == 0x200) { + if (address >= 0x200 / 8) { + ret = -1; + } + } else if (__osBbEepromSize != 0x800) { + ret = 8; + } + + if (ret == 0) { + for (i = 0; i < 8; i++) { + (__osBbEepromAddress + address * 8)[i] = buffer[i]; + } + } + + __osSiRelAccess(); + return ret; +} -#ifndef AVOID_UB -ALIGNED8 u32 D_80365E00[15]; -u32 D_80365E3C; #else -// Certain code accesses the 16th element (D_80365E3C) in this array, making a seperate -// definition UB when gcc rearranges those. -ALIGNED8 u32 D_80365E00[16]; -#endif -extern u8 _osLastSentSiCmd; -typedef struct { - u16 unk00; - u8 unk02; - u8 unk03; -} unkStruct; -typedef struct { - u8 unk00; - u8 unk01; - u8 unk02; - u8 unk03; - u8 unk04; - u8 unk05; - u8 unk06; - u8 unk07; -} unkStruct3; +OSPifRam __osEepPifRam; -typedef struct { - u8 unk00; - u8 unk01; - u8 unk02; - u8 unk03; - unkStruct3 unk04; -} unkStruct2; - -s32 __osEepStatus(OSMesgQueue *, unkStruct *); -s32 __osPackEepWriteData(u8, u8 *); +void __osPackEepWriteData(u8, u8 *); s32 osEepromWrite(OSMesgQueue *mq, u8 address, u8 *buffer) { - s32 sp34; - s32 sp30; - u8 *sp2c; - unkStruct2 sp20; - unkStruct sp1c; - sp34 = 0; - sp2c = (u8 *) &D_80365E00; + s32 ret = 0; + s32 i; + u8 *ptr = (u8 *) &__osEepPifRam.ramarray; + __OSContEepromFormat eepromformat; + OSContStatus sdata; - if (address > 0x40) { + if (address > EEPROM_MAXBLOCKS) { return -1; } __osSiGetAccess(); - sp34 = __osEepStatus(mq, &sp1c); + ret = __osEepStatus(mq, &sdata); - if (sp34 != 0 || sp1c.unk00 != 0x8000) { - return 8; + if (ret != 0 || sdata.type != CONT_EEPROM) { + return CONT_NO_RESPONSE_ERROR; } - while (sp1c.unk02 & 0x80) { - __osEepStatus(mq, &sp1c); + while (sdata.status & CONT_EEPROM_BUSY) { + __osEepStatus(mq, &sdata); } __osPackEepWriteData(address, buffer); - sp34 = __osSiRawStartDma(OS_WRITE, &D_80365E00); + ret = __osSiRawStartDma(OS_WRITE, &__osEepPifRam); osRecvMesg(mq, NULL, OS_MESG_BLOCK); - for (sp30 = 0; sp30 < 0x10; sp30++) { - (D_80365E00)[sp30] = 255; + for (i = 0; i < ARRAY_COUNT(__osEepPifRam.ramarray) + 1; i++) { + __osEepPifRam.ramarray[i] = CONT_CMD_NOP; } - D_80365E3C = 0; - sp34 = __osSiRawStartDma(OS_READ, D_80365E00); - _osLastSentSiCmd = 5; + __osEepPifRam.pifstatus = 0; + ret = __osSiRawStartDma(OS_READ, &__osEepPifRam); + __osContLastCmd = CONT_CMD_WRITE_EEPROM; osRecvMesg(mq, NULL, OS_MESG_BLOCK); - for (sp30 = 0; sp30 < 4; sp30++) { - sp2c++; + for (i = 0; i < 4; i++) { + ptr++; } - sp20 = *(unkStruct2 *) sp2c; - sp34 = (sp20.unk01 & 0xc0) >> 4; + eepromformat = *(__OSContEepromFormat *) ptr; + ret = CHNL_ERR(eepromformat); __osSiRelAccess(); - return sp34; + return ret; } -s32 __osPackEepWriteData(u8 address, u8 *buffer) { - u8 *sp14; - unkStruct2 sp8; - s32 sp4; - sp14 = (u8 *) &D_80365E00; - for (sp4 = 0; sp4 < 0x10; sp4++) { - D_80365E00[sp4] = 255; +void __osPackEepWriteData(u8 address, u8 *buffer) { + u8 *ptr = (u8 *) &__osEepPifRam.ramarray; + __OSContEepromFormat eepromformat; + s32 i; + + for (i = 0; i < ARRAY_COUNT(__osEepPifRam.ramarray) + 1; i++) { + __osEepPifRam.ramarray[i] = CONT_CMD_NOP; } - D_80365E3C = 1; - sp8.unk00 = 10; - sp8.unk01 = 1; - sp8.unk02 = 5; - sp8.unk03 = address; - for (sp4 = 0; sp4 < 8; sp4++) { - ((u8 *) &sp8.unk04)[sp4] = *buffer++; + __osEepPifRam.pifstatus = CONT_CMD_EXE; + + eepromformat.txsize = CONT_CMD_WRITE_EEPROM_TX; + eepromformat.rxsize = CONT_CMD_WRITE_EEPROM_RX; + eepromformat.cmd = CONT_CMD_WRITE_EEPROM; + eepromformat.address = address; + + for (i = 0; i < ARRAY_COUNT(eepromformat.data); i++) { + eepromformat.data[i] = *buffer++; } - for (sp4 = 0; sp4 < 4; sp4++) { - *sp14++ = 0; + + for (i = 0; i < 4; i++) { + *ptr++ = 0; + } + *(__OSContEepromFormat *) ptr = eepromformat; + ptr += sizeof(__OSContEepromFormat); + *ptr = CONT_CMD_END; +} + +s32 __osEepStatus(OSMesgQueue *mq, OSContStatus *data) { + u32 ret = 0; + s32 i; + u8 *ptr = (u8 *) __osEepPifRam.ramarray; + __OSContRequesFormat requestformat; + + for (i = 0; i < ARRAY_COUNT(__osEepPifRam.ramarray) + 1; i++) { + __osEepPifRam.ramarray[i] = 0; + } + __osEepPifRam.pifstatus = CONT_CMD_EXE; + + ptr = (u8 *) __osEepPifRam.ramarray; + for (i = 0; i < 4; i++) { + *ptr++ = 0; + } + + requestformat.dummy = CONT_CMD_NOP; + requestformat.txsize = CONT_CMD_REQUEST_STATUS_TX; + requestformat.rxsize = CONT_CMD_REQUEST_STATUS_RX; + requestformat.cmd = CONT_CMD_REQUEST_STATUS; + requestformat.typeh = CONT_CMD_NOP; + requestformat.typel = CONT_CMD_NOP; + requestformat.status = CONT_CMD_NOP; + requestformat.dummy1 = CONT_CMD_NOP; + *(__OSContRequesFormat *) ptr = requestformat; + + ptr += sizeof(__OSContRequesFormat); + *ptr = CONT_CMD_END; + + ret = __osSiRawStartDma(OS_WRITE, &__osEepPifRam); + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + + __osContLastCmd = CONT_CMD_WRITE_EEPROM; + + ret = __osSiRawStartDma(OS_READ, &__osEepPifRam); + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + + if (ret != 0) { + return ret; + } + + ptr = (u8 *) __osEepPifRam.ramarray; + for (i = 0; i < 4; i++) { + *ptr++ = 0; + } + + requestformat = *(__OSContRequesFormat *) ptr; + data->errnum = CHNL_ERR(requestformat); + data->type = (requestformat.typel << 8) | requestformat.typeh; + data->status = requestformat.status; + if (data->errnum != 0) { + return data->errnum; } - *(unkStruct2 *) sp14 = sp8; - sp14 += 0xc; - *sp14 = 254; -#ifdef AVOID_UB return 0; +} + #endif -} - -s32 __osEepStatus(OSMesgQueue *a0, unkStruct *a1) { - u32 sp2c = 0; - s32 sp28; - u8 *sp24 = (u8 *) D_80365E00; - unkStruct3 sp1c; - - for (sp28 = 0; sp28 < 0x10; sp28++) { - D_80365E00[sp28] = 0; - } - - D_80365E3C = 1; - sp24 = (u8 *) D_80365E00; - for (sp28 = 0; sp28 < 4; sp28++) { - *sp24++ = 0; - } - - sp1c.unk00 = 255; - sp1c.unk01 = 1; - sp1c.unk02 = 3; - sp1c.unk03 = 0; - sp1c.unk04 = 255; - sp1c.unk05 = 255; - sp1c.unk06 = 255; - sp1c.unk07 = 255; - *(unkStruct3 *) sp24 = sp1c; - - sp24 += 8; - sp24[0] = 254; - - sp2c = __osSiRawStartDma(OS_WRITE, D_80365E00); - osRecvMesg(a0, NULL, OS_MESG_BLOCK); - - _osLastSentSiCmd = 5; - - sp2c = __osSiRawStartDma(OS_READ, D_80365E00); - osRecvMesg(a0, NULL, OS_MESG_BLOCK); - - if (sp2c != 0) { - return sp2c; - } - - sp24 = (u8 *) D_80365E00; - for (sp28 = 0; sp28 < 4; sp28++) { - *sp24++ = 0; - } - - sp1c = *(unkStruct3 *) sp24; - a1->unk03 = (sp1c.unk02 & 0xc0) >> 4; - a1->unk00 = (sp1c.unk05 << 8) | sp1c.unk04; - a1->unk02 = sp1c.unk06; - if (a1->unk03 != 0) { - return a1->unk03; - } - return 0; -} diff --git a/lib/src/osGetThreadPri.c b/lib/src/osGetThreadPri.c index 7b5b58c4..43a0145b 100644 --- a/lib/src/osGetThreadPri.c +++ b/lib/src/osGetThreadPri.c @@ -2,7 +2,7 @@ OSPri osGetThreadPri(OSThread *thread) { if (thread == NULL) { - thread = D_803348A0; + thread = __osRunningThread; } return thread->priority; } diff --git a/lib/src/osInitialize.c b/lib/src/osInitialize.c index ba73024b..33c182df 100644 --- a/lib/src/osInitialize.c +++ b/lib/src/osInitialize.c @@ -1,101 +1,182 @@ #include "libultra_internal.h" -#include "hardware.h" +#include "PR/R4300.h" +#include "piint.h" +#include "PR/rcp.h" +#include "PR/ique.h" #include -#define PIF_ADDR_START (void *) 0x1FC007FC - typedef struct { - u32 instr00; - u32 instr01; - u32 instr02; - u32 instr03; -} exceptionPreamble; + u32 inst1; + u32 inst2; + u32 inst3; + u32 inst4; +} __osExceptionVector; +extern __osExceptionVector __osExceptionPreamble; -#if defined(VERSION_EU) || defined(VERSION_SH) -extern u32 EU_D_802f4330(u32, void (*)); -extern void D_802F4380(); - -#endif -u32 D_80365CD0; // maybe initialized? -u64 osClockRate = 62500000; - -#ifdef VERSION_SH -u32 osViClock = 0x02E6D354; +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) +extern u32 __osSetHWintrRoutine(OSHWIntr, s32 (*)); +extern s32 __osLeoInterrupt(void); #endif -u32 D_80334808 = 0; // used in __osException +u32 __osFinalrom; // maybe initialized? +u64 osClockRate = OS_CLOCK_RATE; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_SH) || defined(VERSION_CN) +u32 osViClock = VI_NTSC_CLOCK; +#endif + +u32 __osShutdown = 0; // used in __osException + +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) u32 EU_D_80336C40; u32 EU_D_80336C44; u32 __OSGlobalIntMask = OS_IM_ALL; -u32 EU_D_80302090 = 0; +u32 osDDActive = 0; u8 EU_unusedZeroes[8] = { 0 }; #endif -#define EXCEPTION_TLB_MISS 0x80000000 -#define EXCEPTION_XTLB_MISS 0x80000080 -#define EXCEPTION_CACHE_ERROR 0x80000100 -#define EXCEPTION_GENERAL 0x80000180 -extern u32 osResetType; -extern exceptionPreamble __osExceptionPreamble; +#ifdef VERSION_CN -void osInitialize(void) { - u32 sp34; - u32 sp30 = 0; +void __createSpeedParam(void) { + __Dom1SpeedParam.type = DEVICE_TYPE_INIT; + __Dom1SpeedParam.latency = IO_READ(PI_BSD_DOM1_LAT_REG); + __Dom1SpeedParam.pulse = IO_READ(PI_BSD_DOM1_PWD_REG); + __Dom1SpeedParam.pageSize = IO_READ(PI_BSD_DOM1_PGS_REG); + __Dom1SpeedParam.relDuration = IO_READ(PI_BSD_DOM1_RLS_REG); -#if defined(VERSION_EU) - UNUSED u32 eu_sp34; - UNUSED u32 eu_sp30; + __Dom2SpeedParam.type = DEVICE_TYPE_INIT; + __Dom2SpeedParam.latency = IO_READ(PI_BSD_DOM2_LAT_REG); + __Dom2SpeedParam.pulse = IO_READ(PI_BSD_DOM2_PWD_REG); + __Dom2SpeedParam.pageSize = IO_READ(PI_BSD_DOM2_PGS_REG); + __Dom2SpeedParam.relDuration = IO_READ(PI_BSD_DOM2_RLS_REG); +} #endif - UNUSED u32 sp2c; - D_80365CD0 = TRUE; - __osSetSR(__osGetSR() | 0x20000000); - __osSetFpcCsr(0x01000800); - while (__osSiRawReadIo(PIF_ADDR_START, &sp34)) { - ; + +#ifdef VERSION_CN +void __osInitialize_common(void) +#else +void osInitialize(void) +#endif +{ + u32 pifdata; +#ifndef VERSION_CN + u32 clock = 0; +#endif +#ifdef VERSION_CN + u32 intrMask1, intrMask2; +#endif + +#ifdef VERSION_EU + u32 leoStatus; + u32 status; +#endif + + UNUSED u32 ptr; + + __osFinalrom = TRUE; + __osSetSR(__osGetSR() | SR_CU1); + __osSetFpcCsr(FPCSR_FS | FPCSR_EV); +#ifdef VERSION_CN + __osSetWatchLo(0x4900000); + intrMask1 = IO_WRITE(MI_HW_INTR_MASK_REG, 0x22000); + intrMask2 = IO_WRITE(MI_HW_INTR_MASK_REG, 0x11000); + __osBbIsBb = (intrMask1 & 0x140) == 0x140 && (intrMask2 & 0x140) == 0 ? 1 : 0; + if (__osBbIsBb != 0 && (IO_READ(PI_MISC_REG) & 0xC0000000) != 0) { + __osBbIsBb = 2; } - while (__osSiRawWriteIo(PIF_ADDR_START, sp34 | 8)) { - ; + if (__osBbIsBb != 0) { + osTvType = TV_TYPE_NTSC; + osRomType = DEVICE_TYPE_CART; + osResetType = RESET_TYPE_COLD_RESET; + osVersion = 1; + osMemSize = 4 * 1024 * 1024; } - *(exceptionPreamble *) EXCEPTION_TLB_MISS = __osExceptionPreamble; - *(exceptionPreamble *) EXCEPTION_XTLB_MISS = __osExceptionPreamble; - *(exceptionPreamble *) EXCEPTION_CACHE_ERROR = __osExceptionPreamble; - *(exceptionPreamble *) EXCEPTION_GENERAL = __osExceptionPreamble; - osWritebackDCache((void *) 0x80000000, - EXCEPTION_GENERAL + sizeof(exceptionPreamble) - EXCEPTION_TLB_MISS); - osInvalICache((void *) 0x80000000, - EXCEPTION_GENERAL + sizeof(exceptionPreamble) - EXCEPTION_TLB_MISS); + if (__osBbIsBb == 0) { +#endif + while (__osSiRawReadIo(PIF_RAM_END - 3, &pifdata)) { + ; + } + while (__osSiRawWriteIo(PIF_RAM_END - 3, pifdata | 8)) { + ; + } +#ifdef VERSION_CN + } +#endif + *(__osExceptionVector *) UT_VEC = __osExceptionPreamble; + *(__osExceptionVector *) XUT_VEC = __osExceptionPreamble; + *(__osExceptionVector *) ECC_VEC = __osExceptionPreamble; + *(__osExceptionVector *) E_VEC = __osExceptionPreamble; + osWritebackDCache((void *) UT_VEC, E_VEC - UT_VEC + sizeof(__osExceptionVector)); + osInvalICache((void *) UT_VEC, E_VEC - UT_VEC + sizeof(__osExceptionVector)); +#ifdef VERSION_CN + __createSpeedParam(); + osUnmapTLBAll(); +#endif osMapTLBRdb(); - osPiRawReadIo(4, &sp30); - sp30 &= ~0xf; - if (sp30) { - osClockRate = sp30; +#ifndef VERSION_CN + osPiRawReadIo(4, &clock); + clock &= ~0xf; + if (clock) { + osClockRate = clock; } +#endif osClockRate = osClockRate * 3 / 4; if (osResetType == RESET_TYPE_COLD_RESET) { bzero(osAppNmiBuffer, sizeof(osAppNmiBuffer)); } -#if defined(VERSION_SH) +#if defined(VERSION_SH) || defined(VERSION_CN) if (osTvType == TV_TYPE_PAL) { - osViClock = 0x02F5B2D2; + osViClock = VI_PAL_CLOCK; } else if (osTvType == TV_TYPE_MPAL) { - osViClock = 0x02E6025C; + osViClock = VI_MPAL_CLOCK; } else { - osViClock = 0x02E6D354; + osViClock = VI_NTSC_CLOCK; } #elif defined(VERSION_EU) - eu_sp30 = HW_REG(PI_STATUS_REG, u32); - while (eu_sp30 & PI_STATUS_ERROR) { - eu_sp30 = HW_REG(PI_STATUS_REG, u32); - }; - if (!((eu_sp34 = HW_REG(ASIC_STATUS, u32)) & _64DD_PRESENT_MASK)) { - EU_D_80302090 = 1; - EU_D_802f4330(1, D_802F4380); + WAIT_ON_IO_BUSY(status); + + if (!((leoStatus = IO_READ(LEO_STATUS)) & LEO_STATUS_PRESENCE_MASK)) { + osDDActive = 1; + __osSetHWIntrRoutine(1, __osLeoInterrupt); } else { - EU_D_80302090 = 0; + osDDActive = 0; } #endif + +#ifdef VERSION_CN + if (__osGetCause() & 0x1000) { + while (TRUE) { + } + } + if (__osBbIsBb == 0) { + __osBbEepromSize = 0x200; + __osBbPakSize = 0x8000; + __osBbFlashSize = 0x20000; + __osBbEepromAddress = (u8 *) 0x803FFE00; + __osBbPakAddress[0] = (u32 *) 0x803F7E00; + __osBbPakAddress[1] = NULL; + __osBbPakAddress[2] = NULL; + __osBbPakAddress[3] = NULL; + __osBbFlashAddress = 0x803E0000; + __osBbSramSize = __osBbFlashSize; + __osBbSramAddress = __osBbFlashAddress; + } + if (__osBbIsBb != 0) { + IO_WRITE(PI_BASE_REG+0x64, IO_READ(PI_BASE_REG+0x64) & 0x7FFFFFFF); + IO_WRITE(MI_HW_INTR_MASK_REG, 0x20000); + IO_WRITE(SI_BASE_REG+0x0C, 0); // a "reserved" register + IO_WRITE(SI_BASE_REG+0x1C, (IO_READ(SI_BASE_REG+0x1C) & 0x80FFFFFF) | 0x2F400000); + } + + IO_WRITE(AI_CONTROL_REG, 1); + IO_WRITE(AI_DACRATE_REG, 0x3fff); + IO_WRITE(AI_BITRATE_REG, 0xf); +#endif } + +#ifdef VERSION_CN +void __osInitialize_autodetect(void) { +} +#endif diff --git a/lib/src/osInitializeIQueWrapper.c b/lib/src/osInitializeIQueWrapper.c new file mode 100644 index 00000000..a65157da --- /dev/null +++ b/lib/src/osInitializeIQueWrapper.c @@ -0,0 +1,21 @@ +#include "ultra64.h" +#include "PR/os.h" + +#ifdef VERSION_CN +s32 osMotorStart(OSPfs *pfs) { + return __osMotorAccess(pfs, MOTOR_START); +} + +s32 osMotorStop(OSPfs *pfs) { + return __osMotorAccess(pfs, MOTOR_STOP); +} + +static void osInitializeWrapper(void) { + __osInitialize_common(); + __osInitialize_autodetect(); +} + +void osInitialize(void) { + osInitializeWrapper(); +} +#endif diff --git a/lib/src/osJamMesg.c b/lib/src/osJamMesg.c index 72513135..a4b5e8ff 100644 --- a/lib/src/osJamMesg.c +++ b/lib/src/osJamMesg.c @@ -3,9 +3,9 @@ s32 osJamMesg(OSMesgQueue *mq, OSMesg msg, s32 flag) { register s32 int_disabled; int_disabled = __osDisableInt(); - while (mq->validCount >= mq->msgCount) { + while (MQ_IS_FULL(mq)) { if (flag == OS_MESG_BLOCK) { - D_803348A0->state = OS_STATE_WAITING; + __osRunningThread->state = OS_STATE_WAITING; __osEnqueueAndYield(&mq->fullqueue); } else { __osRestoreInt(int_disabled); diff --git a/lib/src/osLeoDiskInit.c b/lib/src/osLeoDiskInit.c index 066aab8a..32176cee 100644 --- a/lib/src/osLeoDiskInit.c +++ b/lib/src/osLeoDiskInit.c @@ -1,34 +1,31 @@ #include "libultra_internal.h" -#include "hardware.h" +#include "PR/rcp.h" +#include "PR/os.h" -// this file must include some globally referenced data because it is not called anywhere -// data, comes shortly before _Ldtob I think, before crash_screen - -extern OSPiHandle *__osPiTable; -// bss -OSPiHandle LeoDiskHandle; +OSPiHandle __Dom2SpeedParam; OSPiHandle *__osDiskHandle; OSPiHandle *osLeoDiskInit(void) { - s32 sp1c; - LeoDiskHandle.type = 2; - LeoDiskHandle.baseAddress = (0xa0000000 | 0x05000000); - LeoDiskHandle.latency = 3; - LeoDiskHandle.pulse = 6; - LeoDiskHandle.pageSize = 6; - LeoDiskHandle.relDuration = 2; + s32 saveMask; + + __Dom2SpeedParam.type = DEVICE_TYPE_64DD; + __Dom2SpeedParam.baseAddress = PHYS_TO_K1(PI_DOM2_ADDR1); + __Dom2SpeedParam.latency = 3; + __Dom2SpeedParam.pulse = 6; + __Dom2SpeedParam.pageSize = 6; + __Dom2SpeedParam.relDuration = 2; #ifdef VERSION_SH - LeoDiskHandle.domain = 1; + __Dom2SpeedParam.domain = 1; #endif - HW_REG(PI_BSD_DOM2_LAT_REG, u32) = LeoDiskHandle.latency; - HW_REG(PI_BSD_DOM2_PWD_REG, u32) = LeoDiskHandle.pulse; - HW_REG(PI_BSD_DOM2_PGS_REG, u32) = LeoDiskHandle.pageSize; - HW_REG(PI_BSD_DOM2_RLS_REG, u32) = LeoDiskHandle.relDuration; - bzero(&LeoDiskHandle.transferInfo, sizeof(__OSTranxInfo)); - sp1c = __osDisableInt(); - LeoDiskHandle.next = __osPiTable; - __osPiTable = &LeoDiskHandle; - __osDiskHandle = &LeoDiskHandle; - __osRestoreInt(sp1c); - return &LeoDiskHandle; + IO_WRITE(PI_BSD_DOM2_LAT_REG, __Dom2SpeedParam.latency); + IO_WRITE(PI_BSD_DOM2_PWD_REG, __Dom2SpeedParam.pulse); + IO_WRITE(PI_BSD_DOM2_PGS_REG, __Dom2SpeedParam.pageSize); + IO_WRITE(PI_BSD_DOM2_RLS_REG, __Dom2SpeedParam.relDuration); + bzero(&__Dom2SpeedParam.transferInfo, sizeof(__OSTranxInfo)); + saveMask = __osDisableInt(); + __Dom2SpeedParam.next = __osPiTable; + __osPiTable = &__Dom2SpeedParam; + __osDiskHandle = &__Dom2SpeedParam; + __osRestoreInt(saveMask); + return &__Dom2SpeedParam; } diff --git a/lib/src/osPfsIsPlug.c b/lib/src/osPfsIsPlug.c index 6165e329..5fc5b8fa 100644 --- a/lib/src/osPfsIsPlug.c +++ b/lib/src/osPfsIsPlug.c @@ -1,6 +1,7 @@ #include "PR/os_pi.h" #include "libultra_internal.h" #include "controller.h" +#include "macros.h" OSPifRam __osPfsPifRam; @@ -23,17 +24,17 @@ s32 osPfsIsPlug(OSMesgQueue *queue, u8 *pattern) { ret = __osSiRawStartDma(OS_READ, &__osPfsPifRam); osRecvMesg(queue, &dummy, OS_MESG_BLOCK); __osPfsGetInitData(&bitpattern, data); - for (channel = 0; channel < _osContNumControllers; channel++) { + for (channel = 0; channel < __osMaxControllers; channel++) { if ((data[channel].status & CONT_ADDR_CRC_ER) == 0) { crc_error_cnt--; break; } } - if (_osContNumControllers == channel) { + if (__osMaxControllers == channel) { crc_error_cnt = 0; } if (crc_error_cnt < 1) { - for (channel = 0; channel < _osContNumControllers; channel++) { + for (channel = 0; channel < __osMaxControllers; channel++) { if (data[channel].errnum == 0 && (data[channel].status & CONT_CARD_ON) != 0) { bits |= 1 << channel; } @@ -50,9 +51,9 @@ void __osPfsRequestData(u8 cmd) { __OSContRequesFormat requestformat; int i; - _osLastSentSiCmd = cmd; + __osContLastCmd = cmd; - for (i = 0; i < ARRLEN(__osPfsPifRam.ramarray) + 1; i++) { // also clear pifstatus + for (i = 0; i < ARRAY_COUNT(__osPfsPifRam.ramarray) + 1; i++) { // also clear pifstatus __osPfsPifRam.ramarray[i] = 0; } @@ -67,7 +68,7 @@ void __osPfsRequestData(u8 cmd) { requestformat.typel = CONT_CMD_NOP; requestformat.status = CONT_CMD_NOP; requestformat.dummy1 = CONT_CMD_NOP; - for (i = 0; i < _osContNumControllers; i++) { + for (i = 0; i < __osMaxControllers; i++) { *(__OSContRequesFormat *)ptr = requestformat; ptr += sizeof(__OSContRequesFormat); } @@ -81,7 +82,7 @@ void __osPfsGetInitData(u8 *pattern, OSContStatus *data) { u8 bits; bits = 0; ptr = (u8 *)&__osPfsPifRam; - for (i = 0; i < _osContNumControllers; i++, ptr += sizeof(__OSContRequesFormat)) { + for (i = 0; i < __osMaxControllers; i++, ptr += sizeof(__OSContRequesFormat)) { requestformat = *(__OSContRequesFormat *)ptr; data->errnum = CHNL_ERR(requestformat); if (data->errnum == 0) { diff --git a/lib/src/osPiGetCmdQueue.c b/lib/src/osPiGetCmdQueue.c index 457abc65..ebe4cc6c 100644 --- a/lib/src/osPiGetCmdQueue.c +++ b/lib/src/osPiGetCmdQueue.c @@ -1,9 +1,8 @@ #include "libultra_internal.h" - -extern OSMgrArgs __osPiDevMgr; +#include "piint.h" OSMesgQueue *osPiGetCmdQueue(void) { - if (!__osPiDevMgr.initialized) { + if (!__osPiDevMgr.active) { return NULL; } return __osPiDevMgr.cmdQueue; diff --git a/lib/src/osPiRawReadIo.c b/lib/src/osPiRawReadIo.c index 07270788..a212d7a8 100644 --- a/lib/src/osPiRawReadIo.c +++ b/lib/src/osPiRawReadIo.c @@ -1,14 +1,11 @@ #include "libultra_internal.h" -#include "hardware.h" +#include "PR/rcp.h" +#include "piint.h" -extern u32 osRomBase; +s32 osPiRawReadIo(u32 devAddr, u32 *data) { + register u32 status; -s32 osPiRawReadIo(u32 a0, u32 *a1) { - register int status; - status = HW_REG(PI_STATUS_REG, u32); - while (status & (PI_STATUS_BUSY | PI_STATUS_IOBUSY | PI_STATUS_ERROR)) { - status = HW_REG(PI_STATUS_REG, u32); - } - *a1 = HW_REG(osRomBase | a0, u32); + WAIT_ON_IO_BUSY(status); + *data = IO_READ(osRomBase | devAddr); return 0; } diff --git a/lib/src/osPiRawStartDma.c b/lib/src/osPiRawStartDma.c index ca6044e6..347d1dac 100644 --- a/lib/src/osPiRawStartDma.c +++ b/lib/src/osPiRawStartDma.c @@ -1,56 +1,25 @@ #include "libultra_internal.h" -#include "hardware.h" - -extern u32 osRomBase; // TODO: figure out why this is like this +#include "PR/rcp.h" +#include "piint.h" s32 osPiRawStartDma(s32 dir, u32 cart_addr, void *dram_addr, size_t size) { - register int status; - status = HW_REG(PI_STATUS_REG, u32); - while (status & (PI_STATUS_BUSY | PI_STATUS_IOBUSY | PI_STATUS_ERROR)) { - status = HW_REG(PI_STATUS_REG, u32); - } + register u32 status; - HW_REG(PI_DRAM_ADDR_REG, void *) = (void *) osVirtualToPhysical(dram_addr); + WAIT_ON_IO_BUSY(status); - HW_REG(PI_CART_ADDR_REG, void *) = (void *) (((uintptr_t) osRomBase | cart_addr) & 0x1fffffff); + IO_WRITE(PI_DRAM_ADDR_REG, osVirtualToPhysical(dram_addr)); + + IO_WRITE(PI_CART_ADDR_REG, K1_TO_PHYS((uintptr_t) osRomBase | cart_addr)); switch (dir) { - case 0: - HW_REG(PI_WR_LEN_REG, u32) = size - 1; + case OS_READ: + IO_WRITE(PI_WR_LEN_REG, size - 1); break; - case 1: - HW_REG(PI_RD_LEN_REG, u32) = size - 1; + case OS_WRITE: + IO_WRITE(PI_RD_LEN_REG, size - 1); break; default: return -1; - break; } return 0; } - -#ifdef VERSION_EU -/*s32 osPiRawStartDma_2(s32 dir, u32 cart_addr, void *dram_addr, size_t size) { - register int status; - status = HW_REG(PI_STATUS_REG, u32); - while (status & (PI_STATUS_BUSY | PI_STATUS_IOBUSY | PI_STATUS_ERROR)) { - status = HW_REG(PI_STATUS_REG, u32); - } - - HW_REG(PI_DRAM_ADDR_REG, void *) = (void *) osVirtualToPhysical(dram_addr); - - HW_REG(PI_CART_ADDR_REG, void *) = (void *) (((uintptr_t) osRomBase | cart_addr) & 0x1fffffff); - - switch (dir) { - case 0: - HW_REG(PI_WR_LEN_REG, u32) = size - 1; - break; - case 1: - HW_REG(PI_RD_LEN_REG, u32) = size - 1; - break; - default: - return -1; - break; - } - return 0; -}*/ -#endif diff --git a/lib/src/osPiStartDma.c b/lib/src/osPiStartDma.c index f71d9e23..0a07d530 100644 --- a/lib/src/osPiStartDma.c +++ b/lib/src/osPiStartDma.c @@ -1,12 +1,11 @@ #include "libultra_internal.h" - -extern OSMgrArgs __osPiDevMgr; +#include "piint.h" s32 osPiStartDma(OSIoMesg *mb, s32 priority, s32 direction, uintptr_t devAddr, void *vAddr, size_t nbytes, OSMesgQueue *mq) { register s32 result; register OSMesgQueue *cmdQueue; - if (!__osPiDevMgr.initialized) { + if (!__osPiDevMgr.active) { return -1; } @@ -22,7 +21,7 @@ s32 osPiStartDma(OSIoMesg *mb, s32 priority, s32 direction, uintptr_t devAddr, v mb->dramAddr = vAddr; mb->devAddr = devAddr; mb->size = nbytes; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) mb->piHandle = NULL; #endif diff --git a/lib/src/osRecvMesg.c b/lib/src/osRecvMesg.c index 057ec9f0..db68e2cc 100644 --- a/lib/src/osRecvMesg.c +++ b/lib/src/osRecvMesg.c @@ -2,16 +2,16 @@ s32 osRecvMesg(OSMesgQueue *mq, OSMesg *msg, s32 flag) { register u32 int_disabled; - register OSThread *thread; int_disabled = __osDisableInt(); while (!mq->validCount) { if (!flag) { __osRestoreInt(int_disabled); return -1; + } else { + __osRunningThread->state = OS_STATE_WAITING; + __osEnqueueAndYield(&mq->mtqueue); } - D_803348A0->state = OS_STATE_WAITING; - __osEnqueueAndYield(&mq->mtqueue); } if (msg != NULL) { @@ -22,8 +22,7 @@ s32 osRecvMesg(OSMesgQueue *mq, OSMesg *msg, s32 flag) { mq->validCount--; if (mq->fullqueue->next != NULL) { - thread = __osPopThread(&mq->fullqueue); - osStartThread(thread); + osStartThread(__osPopThread(&mq->fullqueue)); } __osRestoreInt(int_disabled); diff --git a/lib/src/osSendMesg.c b/lib/src/osSendMesg.c index f0d02fff..596ca729 100644 --- a/lib/src/osSendMesg.c +++ b/lib/src/osSendMesg.c @@ -3,12 +3,11 @@ s32 osSendMesg(OSMesgQueue *mq, OSMesg msg, s32 flag) { register u32 int_disabled; register s32 index; - register OSThread *s2; int_disabled = __osDisableInt(); - while (mq->validCount >= mq->msgCount) { + while (MQ_IS_FULL(mq)) { if (flag == OS_MESG_BLOCK) { - D_803348A0->state = 8; + __osRunningThread->state = 8; __osEnqueueAndYield(&mq->fullqueue); } else { __osRestoreInt(int_disabled); @@ -21,8 +20,7 @@ s32 osSendMesg(OSMesgQueue *mq, OSMesg msg, s32 flag) { mq->validCount++; if (mq->mtqueue->next != NULL) { - s2 = __osPopThread(&mq->mtqueue); - osStartThread(s2); + osStartThread(__osPopThread(&mq->mtqueue)); } __osRestoreInt(int_disabled); diff --git a/lib/src/osSetEventMesg.c b/lib/src/osSetEventMesg.c index 4610b4b1..3c50487a 100644 --- a/lib/src/osSetEventMesg.c +++ b/lib/src/osSetEventMesg.c @@ -1,18 +1,30 @@ #include "libultra_internal.h" +#include "osint.h" -typedef struct OSEventMessageStruct_0_s { - OSMesgQueue *queue; - OSMesg msg; -} OSEventMessageStruct_0; +__OSEventState __osEventStateTab[OS_NUM_EVENTS]; -OSEventMessageStruct_0 __osEventStateTab[16]; +#ifdef VERSION_CN +u32 __osPreNMI = 0; +#endif void osSetEventMesg(OSEvent e, OSMesgQueue *mq, OSMesg msg) { register u32 int_disabled; - OSEventMessageStruct_0 *msgs; + __OSEventState *msgs; int_disabled = __osDisableInt(); + msgs = __osEventStateTab + e; - msgs->queue = mq; - msgs->msg = msg; + msgs->messageQueue = mq; + msgs->message = msg; + +#ifdef VERSION_CN + if (e == OS_EVENT_PRENMI) { + if (__osShutdown && !__osPreNMI) { + osSendMesg(mq, msg, OS_MESG_NOBLOCK); + } + + __osPreNMI = TRUE; + } +#endif + __osRestoreInt(int_disabled); } diff --git a/lib/src/osSetThreadPri.c b/lib/src/osSetThreadPri.c index 1c782534..84a9a4c1 100644 --- a/lib/src/osSetThreadPri.c +++ b/lib/src/osSetThreadPri.c @@ -3,20 +3,20 @@ void osSetThreadPri(OSThread *thread, OSPri pri) { register u32 int_disabled = __osDisableInt(); if (thread == NULL) { - thread = D_803348A0; + thread = __osRunningThread; } if (thread->priority != pri) { thread->priority = pri; - if (thread != D_803348A0) { + if (thread != __osRunningThread) { if (thread->state != OS_STATE_STOPPED) { __osDequeueThread(thread->queue, thread); __osEnqueueThread(thread->queue, thread); } } - if (D_803348A0->priority < D_80334898->priority) { - D_803348A0->state = OS_STATE_RUNNABLE; - __osEnqueueAndYield(&D_80334898); + if (__osRunningThread->priority < __osRunQueue->priority) { + __osRunningThread->state = OS_STATE_RUNNABLE; + __osEnqueueAndYield(&__osRunQueue); } } diff --git a/lib/src/osSetTimer.c b/lib/src/osSetTimer.c index fc1258cf..54dcc3aa 100644 --- a/lib/src/osSetTimer.c +++ b/lib/src/osSetTimer.c @@ -1,23 +1,49 @@ #include "libultra_internal.h" +#include "osint.h" -extern OSTimer *__osTimerList; -extern u64 __osInsertTimer(OSTimer *); +#pragma GCC diagnostic ignored "-Wunused-but-set-variable" -u32 osSetTimer(OSTimer *t, OSTime countdown, OSTime interval, OSMesgQueue *mq, OSMesg msg) { +u32 osSetTimer(OSTimer *timer, OSTime countdown, OSTime interval, OSMesgQueue *mq, OSMesg msg) { OSTime time; - t->next = NULL; - t->prev = NULL; - t->interval = interval; - if (countdown != 0) { - t->remaining = countdown; +#ifdef VERSION_CN + OSTimer *next; + u32 count; + u32 remaining; + u32 prevInt; +#endif + + timer->next = NULL; + timer->prev = NULL; + timer->interval = interval; + timer->remaining = countdown != 0 ? countdown : interval; + timer->mq = mq; + timer->msg = msg; + +#ifdef VERSION_CN + prevInt = __osDisableInt(); + if (__osTimerList->next == __osTimerList) { } else { - t->remaining = interval; + next = __osTimerList->next; + count = osGetCount(); + remaining = count - __osTimerCounter; + + if (remaining < next->remaining) { + next->remaining -= remaining; + } else { + next->remaining = 1; + } } - t->mq = mq; - t->msg = msg; - time = __osInsertTimer(t); - if (__osTimerList->next == t) { + + time = __osInsertTimer(timer); + __osSetTimerIntr(__osTimerList->next->remaining); + + __osRestoreInt(prevInt); +#else + time = __osInsertTimer(timer); + if (__osTimerList->next == timer) { __osSetTimerIntr(time); } +#endif + return 0; } diff --git a/lib/src/osSpTaskLoadGo.c b/lib/src/osSpTaskLoadGo.c index 2843b442..6adb6cf9 100644 --- a/lib/src/osSpTaskLoadGo.c +++ b/lib/src/osSpTaskLoadGo.c @@ -1,5 +1,5 @@ #include "libultra_internal.h" -#include "hardware.h" +#include "PR/rcp.h" #include #define _osVirtualToPhysical(ptr) \ @@ -7,10 +7,11 @@ ptr = (void *) osVirtualToPhysical(ptr); \ } -OSTask D_803638B0; +FORCE_BSS OSTask tmpTask; + OSTask *_VirtualToPhysicalTask(OSTask *task) { OSTask *physicalTask; - physicalTask = &D_803638B0; + physicalTask = &tmpTask; bcopy(task, physicalTask, sizeof(OSTask)); _osVirtualToPhysical(physicalTask->t.ucode); _osVirtualToPhysical(physicalTask->t.ucode_data); @@ -29,9 +30,9 @@ void osSpTaskLoad(OSTask *task) { physicalTask->t.ucode_data = physicalTask->t.yield_data_ptr; physicalTask->t.ucode_data_size = physicalTask->t.yield_data_size; task->t.flags &= ~M_TASK_FLAG0; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) if (physicalTask->t.flags & M_TASK_FLAG2) { - physicalTask->t.ucode = (u64*)HW_REG((uintptr_t)task->t.yield_data_ptr + 0xBFC, u64*); + physicalTask->t.ucode = (u64 *) IO_READ((uintptr_t)task->t.yield_data_ptr + 0xBFC); } #endif } diff --git a/lib/src/osSpTaskYielded.c b/lib/src/osSpTaskYielded.c index fa0dcbc2..67616950 100644 --- a/lib/src/osSpTaskYielded.c +++ b/lib/src/osSpTaskYielded.c @@ -4,11 +4,7 @@ OSYieldResult osSpTaskYielded(OSTask *task) { s32 status; u32 int_disabledult; status = __osSpGetStatus(); - if (status & SPSTATUS_SIGNAL1_SET) { - int_disabledult = 1; - } else { - int_disabledult = 0; - } + int_disabledult = (status & SPSTATUS_SIGNAL1_SET) != 0 ? 1 : 0; if (status & SPSTATUS_SIGNAL0_SET) { task->t.flags |= int_disabledult; task->t.flags &= ~(M_TASK_FLAG1); diff --git a/lib/src/osStartThread.c b/lib/src/osStartThread.c index c241e388..af51060e 100644 --- a/lib/src/osStartThread.c +++ b/lib/src/osStartThread.c @@ -2,36 +2,34 @@ void osStartThread(OSThread *thread) { register u32 int_disabled; - register uintptr_t state; int_disabled = __osDisableInt(); - state = thread->state; - if (state != OS_STATE_STOPPED) { - if (state == OS_STATE_WAITING) { - do { - } while (0); - thread->state = OS_STATE_RUNNABLE; - __osEnqueueThread(&D_80334898, thread); - } - } else { - if (thread->queue == NULL || thread->queue == &D_80334898) { + switch (thread->state) { + case OS_STATE_WAITING: thread->state = OS_STATE_RUNNABLE; + __osEnqueueThread(&__osRunQueue, thread); + break; + case OS_STATE_STOPPED: + if (thread->queue == NULL || thread->queue == &__osRunQueue) { + thread->state = OS_STATE_RUNNABLE; - __osEnqueueThread(&D_80334898, thread); - } else { - thread->state = OS_STATE_WAITING; - __osEnqueueThread(thread->queue, thread); - state = (uintptr_t) __osPopThread(thread->queue); - __osEnqueueThread(&D_80334898, (OSThread *) state); - } + __osEnqueueThread(&__osRunQueue, thread); + } else { + thread->state = OS_STATE_WAITING; + __osEnqueueThread(thread->queue, thread); + __osEnqueueThread(&__osRunQueue, __osPopThread(thread->queue)); + } + break; } - if (D_803348A0 == NULL) { + + if (__osRunningThread == NULL) { __osDispatchThread(); } else { - if (D_803348A0->priority < D_80334898->priority) { - D_803348A0->state = OS_STATE_RUNNABLE; - __osEnqueueAndYield(&D_80334898); + if (__osRunningThread->priority < __osRunQueue->priority) { + __osRunningThread->state = OS_STATE_RUNNABLE; + __osEnqueueAndYield(&__osRunQueue); } } + __osRestoreInt(int_disabled); } diff --git a/lib/src/osSyncPrintf.c b/lib/src/osSyncPrintf.c new file mode 100644 index 00000000..f9a89861 --- /dev/null +++ b/lib/src/osSyncPrintf.c @@ -0,0 +1,11 @@ +#include "macros.h" + +#ifdef VERSION_CN + +// ? +void func_cn_80304B30(void) {} + +void osSyncPrintf(UNUSED const char *fmt, ...) {} +void osAsyncPrintf(UNUSED const char *fmt, ...) {} + +#endif diff --git a/lib/src/osTimer.c b/lib/src/osTimer.c index 2c13925b..a9dbbc20 100644 --- a/lib/src/osTimer.c +++ b/lib/src/osTimer.c @@ -11,10 +11,8 @@ void __osTimerServicesInit(void) { __osCurrentTime = 0; __osBaseCounter = 0; __osViIntrCount = 0; - __osTimerList->prev = __osTimerList; - __osTimerList->next = __osTimerList->prev; - __osTimerList->remaining = 0; - __osTimerList->interval = __osTimerList->remaining; + __osTimerList->next = __osTimerList->prev = __osTimerList; + __osTimerList->interval = __osTimerList->remaining = 0; __osTimerList->mq = NULL; __osTimerList->msg = NULL; } @@ -28,7 +26,7 @@ void __osTimerInterrupt(void) { return; } - while (TRUE) { + for (;;) { t = __osTimerList->next; if (t == __osTimerList) { __osSetCompare(0); @@ -41,28 +39,33 @@ void __osTimerInterrupt(void) { if (elapsedCycles < t->remaining) { t->remaining -= elapsedCycles; __osSetTimerIntr(t->remaining); - return; - } else { - t->prev->next = t->next; - t->next->prev = t->prev; - t->next = NULL; - t->prev = NULL; - if (t->mq != NULL) { - osSendMesg(t->mq, t->msg, OS_MESG_NOBLOCK); - } - if (t->interval != 0) { - t->remaining = t->interval; - __osInsertTimer(t); - } + break; + } + t->prev->next = t->next; + t->next->prev = t->prev; + t->next = NULL; + t->prev = NULL; + if (t->mq != NULL) { + osSendMesg(t->mq, t->msg, OS_MESG_NOBLOCK); + } + if (t->interval != 0) { + t->remaining = t->interval; + __osInsertTimer(t); } } } void __osSetTimerIntr(OSTime time) { OSTime newTime; - s32 savedMask = __osDisableInt(); + s32 savedMask; +#ifdef VERSION_CN + if (time < 468) { + time = 468; + } +#endif + savedMask = __osDisableInt(); __osTimerCounter = osGetCount(); - newTime = time + __osTimerCounter; + newTime = __osTimerCounter + time; __osSetCompare(newTime); __osRestoreInt(savedMask); } diff --git a/lib/src/osViData.c b/lib/src/osViData.c index 6f392106..42923b54 100644 --- a/lib/src/osViData.c +++ b/lib/src/osViData.c @@ -1,7 +1,85 @@ #include "libultra_internal.h" -#if defined(VERSION_EU) || defined(VERSION_SH) -OSViMode D_80334990 = { +#ifdef VERSION_CN + +OSViMode osViModeNtscLan1 = { + /*type*/ 2, + /*comRegs*/ + { /*ctrl*/ 4382, + /*width*/ 320, + /*burst*/ 65348153, + /*vSync*/ 525, + /*hSync*/ 3093, + /*leap*/ 202705941, + /*hStart*/ 7078636, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 }, + { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } +}; + +OSViMode osViModePalLan1 = { + /*type*/ 16, + /*comRegs*/ + { /*ctrl*/ 4382, + /*width*/ 320, + /*burst*/ 72621626, + /*vSync*/ 625, + /*hSync*/ 1510505, + /*leap*/ 208604269, + /*hStart*/ 8389376, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 6226489, + /*vBurst*/ 590443, + /*vIntr*/ 2 }, + { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 6226489, + /*vBurst*/ 590443, + /*vIntr*/ 2 } } +}; + +OSViMode osViModeMpalLan1 = { + /*type*/ 30, + /*comRegs*/ + { /*ctrl*/ 4382, + /*width*/ 320, + /*burst*/ 73735737, + /*vSync*/ 525, + /*hSync*/ 265233, + /*leap*/ 202968090, + /*hStart*/ 7078636, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 }, + { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } +}; + +#elif defined(VERSION_EU) || defined(VERSION_SH) + +OSViMode osViModePalLan1 = { /*type*/ 16, /*comRegs*/ { /*ctrl*/ 12574, @@ -35,7 +113,7 @@ OSViMode D_80334990 = { /*vIntr*/ 2 } } }; -OSViMode D_803349E0 = { +OSViMode osViModeMpalLan1 = { /*type*/ 30, //osViModePalLan1 /*comRegs*/ { /*ctrl*/ 12574, @@ -60,32 +138,7 @@ OSViMode D_803349E0 = { /*vIntr*/ 2 } } }; -OSViMode D_80302FD0 = { - /*type*/ 2, - /*comRegs*/ - { /*ctrl*/ 12574, - /*width*/ 320, - /*burst*/ 65348153, - /*vSync*/ 525, - /*hSync*/ 3093, - /*leap*/ 202705941, - /*hStart*/ 7078636, - /*xScale*/ 512, - /*vCurrent*/ 0 }, - /*fldRegs*/ - { { /*origin*/ 640, - /*yScale*/ 1024, - /*vStart*/ 2425343, - /*vBurst*/ 918020, - /*vIntr*/ 2 }, - { /*origin*/ 640, - /*yScale*/ 1024, - /*vStart*/ 2425343, - /*vBurst*/ 918020, - /*vIntr*/ 2 } } -}; -#else -OSViMode D_80334990 = { +OSViMode osViModeNtscLan1 = { /*type*/ 2, /*comRegs*/ { /*ctrl*/ 12574, @@ -110,7 +163,34 @@ OSViMode D_80334990 = { /*vIntr*/ 2 } } }; -OSViMode D_803349E0 = { +#else + +OSViMode osViModePalLan1 = { + /*type*/ 2, + /*comRegs*/ + { /*ctrl*/ 12574, + /*width*/ 320, + /*burst*/ 65348153, + /*vSync*/ 525, + /*hSync*/ 3093, + /*leap*/ 202705941, + /*hStart*/ 7078636, + /*xScale*/ 512, + /*vCurrent*/ 0 }, + /*fldRegs*/ + { { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 }, + { /*origin*/ 640, + /*yScale*/ 1024, + /*vStart*/ 2425343, + /*vBurst*/ 918020, + /*vIntr*/ 2 } } +}; + +OSViMode osViModeMpalLan1 = { /*type*/ 16, /*comRegs*/ { /*ctrl*/ 12574, diff --git a/lib/src/osViSetMode.c b/lib/src/osViSetMode.c index 716596fb..1820f257 100644 --- a/lib/src/osViSetMode.c +++ b/lib/src/osViSetMode.c @@ -1,9 +1,16 @@ #include "libultra_internal.h" +extern u32 __osBbIsBb; + extern OSViContext *__osViNext; void osViSetMode(OSViMode *mode) { register u32 int_disabled = __osDisableInt(); +#ifdef VERSION_CN + if (__osBbIsBb != 0) { + mode->comRegs.ctrl &= ~0x2000; + } +#endif __osViNext->modep = mode; __osViNext->unk00 = 1; __osViNext->features = __osViNext->modep->comRegs.ctrl; diff --git a/lib/src/osViTable.c b/lib/src/osViTable.c index 424f7cca..553f0e9f 100644 --- a/lib/src/osViTable.c +++ b/lib/src/osViTable.c @@ -1,10 +1,26 @@ #include "libultra_internal.h" +#if defined(VERSION_SH) || defined(VERSION_CN) +#define COMMON_BURST 72621626 +#define COMMON_HSYNC 1510505 +#define COMMON_LEAP 208604269 +#else +#define COMMON_BURST 67380026 +#define COMMON_HSYNC 1379433 +#define COMMON_LEAP 208604270 +#endif + +#ifdef VERSION_CN +#define CN_SUB 8192 +#else +#define CN_SUB 0 +#endif + OSViMode osViModeTable[] = { /*osViModeNtscLpn1*/ { /*type*/ 0, /*comRegs*/ - { /*ctrl*/ 12814, + { /*ctrl*/ 12814 - CN_SUB, /*width*/ 320, /*burst*/ 65348153, /*vSync*/ 525, @@ -27,7 +43,7 @@ OSViMode osViModeTable[] = { /*osViModeNtscLpf1*/ { /*type*/ 1, /*comRegs*/ - { /*ctrl*/ 12878, + { /*ctrl*/ 12878 - CN_SUB, /*width*/ 320, /*burst*/ 65348153, /*vSync*/ 524, @@ -50,7 +66,7 @@ OSViMode osViModeTable[] = { /*osViModeNtscLan1*/ { /*type*/ 2, /*comRegs*/ - { /*ctrl*/ 12574, + { /*ctrl*/ 12574 - CN_SUB, /*width*/ 320, /*burst*/ 65348153, /*vSync*/ 525, @@ -73,7 +89,7 @@ OSViMode osViModeTable[] = { /*osViModeNtscLaf1*/ { /*type*/ 3, /*comRegs*/ - { /*ctrl*/ 12382, + { /*ctrl*/ 12382 - CN_SUB, /*width*/ 320, /*burst*/ 65348153, /*vSync*/ 524, @@ -96,7 +112,7 @@ OSViMode osViModeTable[] = { /*osViModeNtscLpn2*/ { /*type*/ 4, /*comRegs*/ - { /*ctrl*/ 13071, + { /*ctrl*/ 13071 - CN_SUB, /*width*/ 320, /*burst*/ 65348153, /*vSync*/ 525, @@ -119,7 +135,7 @@ OSViMode osViModeTable[] = { /*osViModeNtscLpf2*/ { /*type*/ 5, /*comRegs*/ - { /*ctrl*/ 12879, + { /*ctrl*/ 12879 - CN_SUB, /*width*/ 320, /*burst*/ 65348153, /*vSync*/ 524, @@ -142,7 +158,7 @@ OSViMode osViModeTable[] = { /*osViModeNtscLan2*/ { /*type*/ 6, /*comRegs*/ - { /*ctrl*/ 12319, + { /*ctrl*/ 12319 - CN_SUB, /*width*/ 320, /*burst*/ 65348153, /*vSync*/ 525, @@ -165,7 +181,7 @@ OSViMode osViModeTable[] = { /*osViModeNtscLaf2*/ { /*type*/ 7, /*comRegs*/ - { /*ctrl*/ 12383, + { /*ctrl*/ 12383 - CN_SUB, /*width*/ 320, /*burst*/ 65348153, /*vSync*/ 524, @@ -188,7 +204,7 @@ OSViMode osViModeTable[] = { /*osViModeNtscHpn1*/ { /*type*/ 8, /*comRegs*/ - { /*ctrl*/ 12878, + { /*ctrl*/ 12878 - CN_SUB, /*width*/ 1280, /*burst*/ 65348153, /*vSync*/ 524, @@ -211,7 +227,7 @@ OSViMode osViModeTable[] = { /*osViModeNtscHpf1*/ { /*type*/ 9, /*comRegs*/ - { /*ctrl*/ 12878, + { /*ctrl*/ 12878 - CN_SUB, /*width*/ 640, /*burst*/ 65348153, /*vSync*/ 524, @@ -234,7 +250,7 @@ OSViMode osViModeTable[] = { /*osViModeNtscHan1*/ { /*type*/ 10, /*comRegs*/ - { /*ctrl*/ 12382, + { /*ctrl*/ 12382 - CN_SUB, /*width*/ 1280, /*burst*/ 65348153, /*vSync*/ 524, @@ -257,7 +273,7 @@ OSViMode osViModeTable[] = { /*osViModeNtscHaf1*/ { /*type*/ 11, /*comRegs*/ - { /*ctrl*/ 12382, + { /*ctrl*/ 12382 - CN_SUB, /*width*/ 640, /*burst*/ 65348153, /*vSync*/ 524, @@ -280,7 +296,7 @@ OSViMode osViModeTable[] = { /*osViModeNtscHpn2*/ { /*type*/ 12, /*comRegs*/ - { /*ctrl*/ 13135, + { /*ctrl*/ 13135 - CN_SUB, /*width*/ 1280, /*burst*/ 65348153, /*vSync*/ 524, @@ -303,7 +319,7 @@ OSViMode osViModeTable[] = { /*osViModeNtscHpf2*/ { /*type*/ 13, /*comRegs*/ - { /*ctrl*/ 12879, + { /*ctrl*/ 12879 - CN_SUB, /*width*/ 640, /*burst*/ 65348153, /*vSync*/ 524, @@ -324,25 +340,16 @@ OSViMode osViModeTable[] = { /*vBurst*/ 918020, /*vIntr*/ 2 } } }, -#if defined(VERSION_JP) || defined(VERSION_EU) || defined(VERSION_SH) +#ifndef VERSION_US /*osViModePalLpn1*/ { /*type*/ 14, /*comRegs*/ - { /*ctrl*/ 12814, + { /*ctrl*/ 12814 - CN_SUB, /*width*/ 320, -#ifdef VERSION_SH - /*burst*/ 72621626, -#else - /*burst*/ 67380026, -#endif + /*burst*/ COMMON_BURST, /*vSync*/ 625, -#ifdef VERSION_SH - /*hSync*/ 1510505, - /*leap*/ 208604269, -#else - /*hSync*/ 1379433, - /*leap*/ 208604270, -#endif + /*hSync*/ COMMON_HSYNC, + /*leap*/ COMMON_LEAP, /*hStart*/ 8389376, /*xScale*/ 512, /*vCurrent*/ 0 }, @@ -360,21 +367,12 @@ OSViMode osViModeTable[] = { /*osViModePalLpf1*/ { /*type*/ 15, /*comRegs*/ - { /*ctrl*/ 12878, + { /*ctrl*/ 12878 - CN_SUB, /*width*/ 320, -#ifdef VERSION_SH - /*burst*/ 72621626, -#else - /*burst*/ 67380026, -#endif + /*burst*/ COMMON_BURST, /*vSync*/ 624, -#ifdef VERSION_SH - /*hSync*/ 1510505, - /*leap*/ 208604269, -#else - /*hSync*/ 1379433, - /*leap*/ 208604270, -#endif + /*hSync*/ COMMON_HSYNC, + /*leap*/ COMMON_LEAP, /*hStart*/ 8389376, /*xScale*/ 512, /*vCurrent*/ 0 }, @@ -392,21 +390,12 @@ OSViMode osViModeTable[] = { /*osViModePalLan1*/ { /*type*/ 16, /*comRegs*/ - { /*ctrl*/ 12574, + { /*ctrl*/ 12574 - CN_SUB, /*width*/ 320, -#ifdef VERSION_SH - /*burst*/ 72621626, -#else - /*burst*/ 67380026, -#endif + /*burst*/ COMMON_BURST, /*vSync*/ 625, -#ifdef VERSION_SH - /*hSync*/ 1510505, - /*leap*/ 208604269, -#else - /*hSync*/ 1379433, - /*leap*/ 208604270, -#endif + /*hSync*/ COMMON_HSYNC, + /*leap*/ COMMON_LEAP, /*hStart*/ 8389376, /*xScale*/ 512, /*vCurrent*/ 0 }, @@ -424,21 +413,12 @@ OSViMode osViModeTable[] = { /*osViModePalLaf1*/ { /*type*/ 17, /*comRegs*/ - { /*ctrl*/ 12382, + { /*ctrl*/ 12382 - CN_SUB, /*width*/ 320, -#ifdef VERSION_SH - /*burst*/ 72621626, -#else - /*burst*/ 67380026, -#endif + /*burst*/ COMMON_BURST, /*vSync*/ 624, -#ifdef VERSION_SH - /*hSync*/ 1510505, - /*leap*/ 208604269, -#else - /*hSync*/ 1379433, - /*leap*/ 208604270, -#endif + /*hSync*/ COMMON_HSYNC, + /*leap*/ COMMON_LEAP, /*hStart*/ 8389376, /*xScale*/ 512, /*vCurrent*/ 0 }, @@ -456,21 +436,12 @@ OSViMode osViModeTable[] = { /*osViModePalLpn2*/ { /*type*/ 18, /*comRegs*/ - { /*ctrl*/ 13071, + { /*ctrl*/ 13071 - CN_SUB, /*width*/ 320, -#ifdef VERSION_SH - /*burst*/ 72621626, -#else - /*burst*/ 67380026, -#endif + /*burst*/ COMMON_BURST, /*vSync*/ 625, -#ifdef VERSION_SH - /*hSync*/ 1510505, - /*leap*/ 208604269, -#else - /*hSync*/ 1379433, - /*leap*/ 208604270, -#endif + /*hSync*/ COMMON_HSYNC, + /*leap*/ COMMON_LEAP, /*hStart*/ 8389376, /*xScale*/ 512, /*vCurrent*/ 0 }, @@ -488,21 +459,12 @@ OSViMode osViModeTable[] = { /*osViModePalLpf2*/ { /*type*/ 19, /*comRegs*/ - { /*ctrl*/ 12879, + { /*ctrl*/ 12879 - CN_SUB, /*width*/ 320, -#ifdef VERSION_SH - /*burst*/ 72621626, -#else - /*burst*/ 67380026, -#endif + /*burst*/ COMMON_BURST, /*vSync*/ 624, -#ifdef VERSION_SH - /*hSync*/ 1510505, - /*leap*/ 208604269, -#else - /*hSync*/ 1379433, - /*leap*/ 208604270, -#endif + /*hSync*/ COMMON_HSYNC, + /*leap*/ COMMON_LEAP, /*hStart*/ 8389376, /*xScale*/ 512, /*vCurrent*/ 0 }, @@ -520,21 +482,12 @@ OSViMode osViModeTable[] = { /*osViModePalLan2*/ { /*type*/ 20, /*comRegs*/ - { /*ctrl*/ 12319, + { /*ctrl*/ 12319 - CN_SUB, /*width*/ 320, -#ifdef VERSION_SH - /*burst*/ 72621626, -#else - /*burst*/ 67380026, -#endif + /*burst*/ COMMON_BURST, /*vSync*/ 625, -#ifdef VERSION_SH - /*hSync*/ 1510505, - /*leap*/ 208604269, -#else - /*hSync*/ 1379433, - /*leap*/ 208604270, -#endif + /*hSync*/ COMMON_HSYNC, + /*leap*/ COMMON_LEAP, /*hStart*/ 8389376, /*xScale*/ 512, /*vCurrent*/ 0 }, @@ -552,21 +505,12 @@ OSViMode osViModeTable[] = { /*osViModePalLaf2*/ { /*type*/ 21, /*comRegs*/ - { /*ctrl*/ 12383, + { /*ctrl*/ 12383 - CN_SUB, /*width*/ 320, -#ifdef VERSION_SH - /*burst*/ 72621626, -#else - /*burst*/ 67380026, -#endif + /*burst*/ COMMON_BURST, /*vSync*/ 624, -#ifdef VERSION_SH - /*hSync*/ 1510505, - /*leap*/ 208604269, -#else - /*hSync*/ 1379433, - /*leap*/ 208604270, -#endif + /*hSync*/ COMMON_HSYNC, + /*leap*/ COMMON_LEAP, /*hStart*/ 8389376, /*xScale*/ 512, /*vCurrent*/ 0 }, @@ -584,21 +528,12 @@ OSViMode osViModeTable[] = { /*osViModePalHpn1*/ { /*type*/ 22, /*comRegs*/ - { /*ctrl*/ 12878, + { /*ctrl*/ 12878 - CN_SUB, /*width*/ 1280, -#ifdef VERSION_SH - /*burst*/ 72621626, -#else - /*burst*/ 67380026, -#endif + /*burst*/ COMMON_BURST, /*vSync*/ 624, -#ifdef VERSION_SH - /*hSync*/ 1510505, - /*leap*/ 208604269, -#else - /*hSync*/ 1379433, - /*leap*/ 208604270, -#endif + /*hSync*/ COMMON_HSYNC, + /*leap*/ COMMON_LEAP, /*hStart*/ 8389376, /*xScale*/ 1024, /*vCurrent*/ 0 }, @@ -616,21 +551,12 @@ OSViMode osViModeTable[] = { /*osViModePalHpf1*/ { /*type*/ 23, /*comRegs*/ - { /*ctrl*/ 12878, + { /*ctrl*/ 12878 - CN_SUB, /*width*/ 640, -#ifdef VERSION_SH - /*burst*/ 72621626, -#else - /*burst*/ 67380026, -#endif + /*burst*/ COMMON_BURST, /*vSync*/ 624, -#ifdef VERSION_SH - /*hSync*/ 1510505, - /*leap*/ 208604269, -#else - /*hSync*/ 1379433, - /*leap*/ 208604270, -#endif + /*hSync*/ COMMON_HSYNC, + /*leap*/ COMMON_LEAP, /*hStart*/ 8389376, /*xScale*/ 1024, /*vCurrent*/ 0 }, @@ -648,21 +574,12 @@ OSViMode osViModeTable[] = { /*osViModePalHan1*/ { /*type*/ 24, /*comRegs*/ - { /*ctrl*/ 12382, + { /*ctrl*/ 12382 - CN_SUB, /*width*/ 1280, -#ifdef VERSION_SH - /*burst*/ 72621626, -#else - /*burst*/ 67380026, -#endif + /*burst*/ COMMON_BURST, /*vSync*/ 624, -#ifdef VERSION_SH - /*hSync*/ 1510505, - /*leap*/ 208604269, -#else - /*hSync*/ 1379433, - /*leap*/ 208604270, -#endif + /*hSync*/ COMMON_HSYNC, + /*leap*/ COMMON_LEAP, /*hStart*/ 8389376, /*xScale*/ 1024, /*vCurrent*/ 0 }, @@ -680,21 +597,12 @@ OSViMode osViModeTable[] = { /*osViModePalHaf1*/ { /*type*/ 25, /*comRegs*/ - { /*ctrl*/ 12382, + { /*ctrl*/ 12382 - CN_SUB, /*width*/ 640, -#ifdef VERSION_SH - /*burst*/ 72621626, -#else - /*burst*/ 67380026, -#endif + /*burst*/ COMMON_BURST, /*vSync*/ 624, -#ifdef VERSION_SH - /*hSync*/ 1510505, - /*leap*/ 208604269, -#else - /*hSync*/ 1379433, - /*leap*/ 208604270, -#endif + /*hSync*/ COMMON_HSYNC, + /*leap*/ COMMON_LEAP, /*hStart*/ 8389376, /*xScale*/ 1024, /*vCurrent*/ 0 }, @@ -712,21 +620,12 @@ OSViMode osViModeTable[] = { /*osViModePalHpn2*/ { /*type*/ 26, /*comRegs*/ - { /*ctrl*/ 13135, + { /*ctrl*/ 13135 - CN_SUB, /*width*/ 1280, -#ifdef VERSION_SH - /*burst*/ 72621626, -#else - /*burst*/ 67380026, -#endif + /*burst*/ COMMON_BURST, /*vSync*/ 624, -#ifdef VERSION_SH - /*hSync*/ 1510505, - /*leap*/ 208604269, -#else - /*hSync*/ 1379433, - /*leap*/ 208604270, -#endif + /*hSync*/ COMMON_HSYNC, + /*leap*/ COMMON_LEAP, /*hStart*/ 8389376, /*xScale*/ 1024, /*vCurrent*/ 0 }, @@ -744,21 +643,12 @@ OSViMode osViModeTable[] = { /*osViModePalHpf2*/ { /*type*/ 27, /*comRegs*/ - { /*ctrl*/ 12879, + { /*ctrl*/ 12879 - CN_SUB, /*width*/ 640, -#ifdef VERSION_SH - /*burst*/ 72621626, -#else - /*burst*/ 67380026, -#endif + /*burst*/ COMMON_BURST, /*vSync*/ 624, -#ifdef VERSION_SH - /*hSync*/ 1510505, - /*leap*/ 208604269, -#else - /*hSync*/ 1379433, - /*leap*/ 208604270, -#endif + /*hSync*/ COMMON_HSYNC, + /*leap*/ COMMON_LEAP, /*hStart*/ 8389376, /*xScale*/ 1024, /*vCurrent*/ 0 }, @@ -774,11 +664,12 @@ OSViMode osViModeTable[] = { /*vBurst*/ 852585, /*vIntr*/ 2 } } }, #endif -#if defined(VERSION_US) || defined(VERSION_EU) || defined (VERSION_SH) + +#ifndef VERSION_JP /*osViModePalLpn1*/ { /*type*/ 28, /*comRegs*/ - { /*ctrl*/ 12814, + { /*ctrl*/ 12814 - CN_SUB, /*width*/ 320, /*burst*/ 73735737, /*vSync*/ 525, @@ -801,7 +692,7 @@ OSViMode osViModeTable[] = { /*osViModePalLpf1*/ { /*type*/ 29, /*comRegs*/ - { /*ctrl*/ 12878, + { /*ctrl*/ 12878 - CN_SUB, /*width*/ 320, /*burst*/ 73735737, /*vSync*/ 524, @@ -824,7 +715,7 @@ OSViMode osViModeTable[] = { /*osViModePalLan1*/ { /*type*/ 30, /*comRegs*/ - { /*ctrl*/ 12574, + { /*ctrl*/ 12574 - CN_SUB, /*width*/ 320, /*burst*/ 73735737, /*vSync*/ 525, @@ -847,7 +738,7 @@ OSViMode osViModeTable[] = { /*osViModePalLaf1*/ { /*type*/ 31, /*comRegs*/ - { /*ctrl*/ 12382, + { /*ctrl*/ 12382 - CN_SUB, /*width*/ 320, /*burst*/ 73735737, /*vSync*/ 524, @@ -870,7 +761,7 @@ OSViMode osViModeTable[] = { /*osViModePalLpn2*/ { /*type*/ 32, /*comRegs*/ - { /*ctrl*/ 13071, + { /*ctrl*/ 13071 - CN_SUB, /*width*/ 320, /*burst*/ 73735737, /*vSync*/ 525, @@ -893,7 +784,7 @@ OSViMode osViModeTable[] = { /*osViModePalLpf2*/ { /*type*/ 33, /*comRegs*/ - { /*ctrl*/ 12879, + { /*ctrl*/ 12879 - CN_SUB, /*width*/ 320, /*burst*/ 73735737, /*vSync*/ 524, @@ -916,7 +807,7 @@ OSViMode osViModeTable[] = { /*osViModePalLan2*/ { /*type*/ 34, /*comRegs*/ - { /*ctrl*/ 12319, + { /*ctrl*/ 12319 - CN_SUB, /*width*/ 320, /*burst*/ 73735737, /*vSync*/ 525, @@ -939,7 +830,7 @@ OSViMode osViModeTable[] = { /*osViModePalLaf2*/ { /*type*/ 35, /*comRegs*/ - { /*ctrl*/ 12383, + { /*ctrl*/ 12383 - CN_SUB, /*width*/ 320, /*burst*/ 73735737, /*vSync*/ 524, @@ -962,7 +853,7 @@ OSViMode osViModeTable[] = { /*osViModePalHpn1*/ { /*type*/ 36, /*comRegs*/ - { /*ctrl*/ 12878, + { /*ctrl*/ 12878 - CN_SUB, /*width*/ 1280, /*burst*/ 73735737, /*vSync*/ 524, @@ -985,7 +876,7 @@ OSViMode osViModeTable[] = { /*osViModePalHpf1*/ { /*type*/ 37, /*comRegs*/ - { /*ctrl*/ 12878, + { /*ctrl*/ 12878 - CN_SUB, /*width*/ 640, /*burst*/ 73735737, /*vSync*/ 524, @@ -1008,7 +899,7 @@ OSViMode osViModeTable[] = { /*osViModePalHan1*/ { /*type*/ 38, /*comRegs*/ - { /*ctrl*/ 12382, + { /*ctrl*/ 12382 - CN_SUB, /*width*/ 1280, /*burst*/ 73735737, /*vSync*/ 524, @@ -1031,7 +922,7 @@ OSViMode osViModeTable[] = { /*osViModePalHaf1*/ { /*type*/ 39, /*comRegs*/ - { /*ctrl*/ 12382, + { /*ctrl*/ 12382 - CN_SUB, /*width*/ 640, /*burst*/ 73735737, /*vSync*/ 524, @@ -1054,7 +945,7 @@ OSViMode osViModeTable[] = { /*osViModePalHpn2*/ { /*type*/ 40, /*comRegs*/ - { /*ctrl*/ 13135, + { /*ctrl*/ 13135 - CN_SUB, /*width*/ 1280, /*burst*/ 73735737, /*vSync*/ 524, @@ -1077,7 +968,7 @@ OSViMode osViModeTable[] = { /*osViModePalHpf2*/ { /*type*/ 41, /*comRegs*/ - { /*ctrl*/ 12879, + { /*ctrl*/ 12879 - CN_SUB, /*width*/ 640, /*burst*/ 73735737, /*vSync*/ 524, @@ -1099,3 +990,7 @@ OSViMode osViModeTable[] = { /*vIntr*/ 2 } } } #endif }; + +#ifdef VERSION_CN +s8 unk_cn_803191c0[] = {0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x0E, 0x00, 0x00, 0x01, 0x40, 0x04, 0x54, 0x1E, 0x3A, 0x00, 0x00, 0x02, 0x71, 0x00, 0x17, 0x0C, 0x69, 0x0C, 0x6F, 0x0C, 0x6D, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x2F, 0x02, 0x69, 0x00, 0x09, 0x02, 0x6B, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x2F, 0x02, 0x69, 0x00, 0x09, 0x02, 0x6B, 0x00, 0x00, 0x00, 0x02, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x4E, 0x00, 0x00, 0x01, 0x40, 0x04, 0x54, 0x1E, 0x3A, 0x00, 0x00, 0x02, 0x70, 0x00, 0x17, 0x0C, 0x69, 0x0C, 0x6F, 0x0C, 0x6D, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x01, 0x00, 0x04, 0x00, 0x00, 0x2D, 0x02, 0x67, 0x00, 0x09, 0x02, 0x6B, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x80, 0x03, 0x00, 0x04, 0x00, 0x00, 0x2F, 0x02, 0x69, 0x00, 0x0D, 0x02, 0x69, 0x00, 0x00, 0x00, 0x02, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x1E, 0x00, 0x00, 0x01, 0x40, 0x04, 0x54, 0x1E, 0x3A, 0x00, 0x00, 0x02, 0x71, 0x00, 0x17, 0x0C, 0x69, 0x0C, 0x6F, 0x0C, 0x6D, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x2F, 0x02, 0x69, 0x00, 0x09, 0x02, 0x6B, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x2F, 0x02, 0x69, 0x00, 0x09, 0x02, 0x6B, 0x00, 0x00, 0x00, 0x02, 0x2D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x5E, 0x00, 0x00, 0x01, 0x40, 0x04, 0x54, 0x1E, 0x3A, 0x00, 0x00, 0x02, 0x70, 0x00, 0x17, 0x0C, 0x69, 0x0C, 0x6F, 0x0C, 0x6D, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x01, 0x00, 0x04, 0x00, 0x00, 0x2D, 0x02, 0x67, 0x00, 0x09, 0x02, 0x6B, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x80, 0x03, 0x00, 0x04, 0x00, 0x00, 0x2F, 0x02, 0x69, 0x00, 0x0D, 0x02, 0x69, 0x00, 0x00, 0x00, 0x02, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x0F, 0x00, 0x00, 0x01, 0x40, 0x04, 0x54, 0x1E, 0x3A, 0x00, 0x00, 0x02, 0x71, 0x00, 0x17, 0x0C, 0x69, 0x0C, 0x6F, 0x0C, 0x6D, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x2F, 0x02, 0x69, 0x00, 0x09, 0x02, 0x6B, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x2F, 0x02, 0x69, 0x00, 0x09, 0x02, 0x6B, 0x00, 0x00, 0x00, 0x02, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x4F, 0x00, 0x00, 0x01, 0x40, 0x04, 0x54, 0x1E, 0x3A, 0x00, 0x00, 0x02, 0x70, 0x00, 0x17, 0x0C, 0x69, 0x0C, 0x6F, 0x0C, 0x6D, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x2D, 0x02, 0x67, 0x00, 0x09, 0x02, 0x6B, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x04, 0x00, 0x00, 0x2F, 0x02, 0x69, 0x00, 0x0D, 0x02, 0x69, 0x00, 0x00, 0x00, 0x02, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1F, 0x00, 0x00, 0x01, 0x40, 0x04, 0x54, 0x1E, 0x3A, 0x00, 0x00, 0x02, 0x71, 0x00, 0x17, 0x0C, 0x69, 0x0C, 0x6F, 0x0C, 0x6D, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x2F, 0x02, 0x69, 0x00, 0x09, 0x02, 0x6B, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x2F, 0x02, 0x69, 0x00, 0x09, 0x02, 0x6B, 0x00, 0x00, 0x00, 0x02, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x5F, 0x00, 0x00, 0x01, 0x40, 0x04, 0x54, 0x1E, 0x3A, 0x00, 0x00, 0x02, 0x70, 0x00, 0x17, 0x0C, 0x69, 0x0C, 0x6F, 0x0C, 0x6D, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x2D, 0x02, 0x67, 0x00, 0x09, 0x02, 0x6B, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x04, 0x00, 0x00, 0x2F, 0x02, 0x69, 0x00, 0x0D, 0x02, 0x69, 0x00, 0x00, 0x00, 0x02, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x4E, 0x00, 0x00, 0x05, 0x00, 0x04, 0x54, 0x1E, 0x3A, 0x00, 0x00, 0x02, 0x70, 0x00, 0x17, 0x0C, 0x69, 0x0C, 0x6F, 0x0C, 0x6D, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x2D, 0x02, 0x67, 0x00, 0x09, 0x02, 0x6B, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x2F, 0x02, 0x69, 0x00, 0x0D, 0x02, 0x69, 0x00, 0x00, 0x00, 0x02, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x4E, 0x00, 0x00, 0x02, 0x80, 0x04, 0x54, 0x1E, 0x3A, 0x00, 0x00, 0x02, 0x70, 0x00, 0x17, 0x0C, 0x69, 0x0C, 0x6F, 0x0C, 0x6D, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x2D, 0x02, 0x67, 0x00, 0x09, 0x02, 0x6B, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0A, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x2F, 0x02, 0x69, 0x00, 0x0D, 0x02, 0x69, 0x00, 0x00, 0x00, 0x02, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x5E, 0x00, 0x00, 0x05, 0x00, 0x04, 0x54, 0x1E, 0x3A, 0x00, 0x00, 0x02, 0x70, 0x00, 0x17, 0x0C, 0x69, 0x0C, 0x6F, 0x0C, 0x6D, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x2D, 0x02, 0x67, 0x00, 0x09, 0x02, 0x6B, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x2F, 0x02, 0x69, 0x00, 0x0D, 0x02, 0x69, 0x00, 0x00, 0x00, 0x02, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x5E, 0x00, 0x00, 0x02, 0x80, 0x04, 0x54, 0x1E, 0x3A, 0x00, 0x00, 0x02, 0x70, 0x00, 0x17, 0x0C, 0x69, 0x0C, 0x6F, 0x0C, 0x6D, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x2D, 0x02, 0x67, 0x00, 0x09, 0x02, 0x6B, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0A, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x2F, 0x02, 0x69, 0x00, 0x0D, 0x02, 0x69, 0x00, 0x00, 0x00, 0x02, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x4F, 0x00, 0x00, 0x05, 0x00, 0x04, 0x54, 0x1E, 0x3A, 0x00, 0x00, 0x02, 0x70, 0x00, 0x17, 0x0C, 0x69, 0x0C, 0x6F, 0x0C, 0x6D, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x2D, 0x02, 0x67, 0x00, 0x09, 0x02, 0x6B, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x2F, 0x02, 0x69, 0x00, 0x0D, 0x02, 0x69, 0x00, 0x00, 0x00, 0x02, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x4F, 0x00, 0x00, 0x02, 0x80, 0x04, 0x54, 0x1E, 0x3A, 0x00, 0x00, 0x02, 0x70, 0x00, 0x17, 0x0C, 0x69, 0x0C, 0x6F, 0x0C, 0x6D, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x2D, 0x02, 0x67, 0x00, 0x09, 0x02, 0x6B, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x14, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x2F, 0x02, 0x69, 0x00, 0x0D, 0x02, 0x69, 0x00, 0x00, 0x00, 0x02}; +#endif diff --git a/lib/src/osVirtualToPhysical.c b/lib/src/osVirtualToPhysical.c index b1fb1a55..b6e3d2db 100644 --- a/lib/src/osVirtualToPhysical.c +++ b/lib/src/osVirtualToPhysical.c @@ -1,10 +1,11 @@ #include "libultra_internal.h" +#include "PR/R4300.h" uintptr_t osVirtualToPhysical(void *addr) { - if ((uintptr_t) addr >= 0x80000000 && (uintptr_t) addr < 0xa0000000) { - return ((uintptr_t) addr & 0x1fffffff); - } else if ((uintptr_t) addr >= 0xa0000000 && (uintptr_t) addr < 0xc0000000) { - return ((uintptr_t) addr & 0x1fffffff); + if (IS_KSEG0(addr)) { + return K0_TO_PHYS(addr); + } else if (IS_KSEG1(addr)) { + return (K1_TO_PHYS(addr)); } else { return __osProbeTLB(addr); } diff --git a/lib/src/osYieldThread.c b/lib/src/osYieldThread.c new file mode 100644 index 00000000..1685890e --- /dev/null +++ b/lib/src/osYieldThread.c @@ -0,0 +1,8 @@ +#include "libultra_internal.h" + +void osYieldThread(void) { + register u32 saveMask = __osDisableInt(); + __osRunningThread->state = OS_STATE_RUNNABLE; + __osEnqueueAndYield(&__osRunQueue); + __osRestoreInt(saveMask); +} diff --git a/lib/src/osint.h b/lib/src/osint.h index ba5d7db5..0be4830b 100644 --- a/lib/src/osint.h +++ b/lib/src/osint.h @@ -7,11 +7,6 @@ typedef struct __OSEventState OSMesgQueue *messageQueue; OSMesg message; } __OSEventState; -extern struct __osThreadTail -{ - OSThread *next; - OSPri priority; -} __osThreadTail; //maybe should be in exceptasm.h? extern void __osEnqueueAndYield(OSThread **); @@ -27,12 +22,12 @@ extern u32 __osProbeTLB(void *); extern int __osSpDeviceBusy(void); #ifdef AVOID_UB -extern OSThread_ListHead D_80334890_fix; +extern OSThread_ListHead __osThreadTail_fix; #else extern OSThread *__osRunningThread; -extern OSThread *D_8033489C; +extern OSThread *__osActiveQueue; extern OSThread *__osFaultedThread; -extern OSThread *D_80334898; +extern OSThread *__osRunQueue; #endif extern OSTimer *__osTimerList; @@ -47,6 +42,7 @@ extern __OSEventState __osEventStateTab[OS_NUM_EVENTS]; //not sure if this should be here extern s32 osViClock; +extern u32 __osShutdown; extern void __osTimerServicesInit(void); extern s32 __osAiDeviceBusy(void); extern int __osDpDeviceBusy(void); diff --git a/lib/src/pfsgetstatus.c b/lib/src/pfsgetstatus.c index 3497bfa3..520cb345 100644 --- a/lib/src/pfsgetstatus.c +++ b/lib/src/pfsgetstatus.c @@ -1,68 +1,26 @@ #include "libultra_internal.h" #include "controller.h" -void __osPfsRequestOneChannel(int channel); -void __osPfsGetOneChannelData(int channel, OSContStatus *data); - -s32 __osPfsGetStatus(OSMesgQueue *queue, int channel) { - s32 ret; +s32 __osPfsGetStatus(OSMesgQueue *queue, s32 channel) { + s32 ret = 0; OSMesg dummy; - OSContStatus data; - ret = 0; - __osPfsRequestOneChannel(channel); + u8 pattern; + OSContStatus data[4]; + + __osPfsRequestData(CONT_CMD_REQUEST_STATUS); ret = __osSiRawStartDma(OS_WRITE, &__osPfsPifRam); osRecvMesg(queue, &dummy, OS_MESG_BLOCK); ret = __osSiRawStartDma(OS_READ, &__osPfsPifRam); osRecvMesg(queue, &dummy, OS_MESG_BLOCK); - __osPfsGetOneChannelData(channel, &data); - if (((data.status & CONT_CARD_ON) != 0) && ((data.status & CONT_CARD_PULL) != 0)) { + __osPfsGetInitData(&pattern, data); + if (data[channel].status & CONT_CARD_ON && data[channel].status & CONT_CARD_PULL) { return PFS_ERR_NEW_PACK; } - if ((data.errnum != 0) || ((data.status & CONT_CARD_ON) == 0)) { + if (data[channel].errnum || !(data[channel].status & CONT_CARD_ON)) { return PFS_ERR_NOPACK; } - if ((data.status & CONT_ADDR_CRC_ER) != 0) { + if (data[channel].status & CONT_ADDR_CRC_ER) { return PFS_ERR_CONTRFAIL; } return ret; } - -void __osPfsRequestOneChannel(int channel) { - u8 *ptr; - __OSContRequesFormatShort requestformat; - int i; - - _osLastSentSiCmd = CONT_CMD_REQUEST_STATUS; - __osPfsPifRam.pifstatus = CONT_CMD_EXE; - ptr = (u8 *)&__osPfsPifRam; - - requestformat.txsize = CONT_CMD_REQUEST_STATUS_TX; - requestformat.rxsize = CONT_CMD_REQUEST_STATUS_RX; - requestformat.cmd = CONT_CMD_REQUEST_STATUS; - requestformat.typeh = CONT_CMD_NOP; - requestformat.typel = CONT_CMD_NOP; - requestformat.status = CONT_CMD_NOP; - for (i = 0; i < channel; i++) { - *ptr++ = 0; - } - - *(__OSContRequesFormatShort *)ptr = requestformat; - ptr += sizeof(__OSContRequesFormatShort); - *ptr = CONT_CMD_END; -} - -void __osPfsGetOneChannelData(int channel, OSContStatus *data) { - u8 *ptr; - __OSContRequesFormatShort requestformat; - int i; - ptr = (u8*)&__osPfsPifRam; - for (i = 0; i < channel; i++) { - ptr++; - } - requestformat = *(__OSContRequesFormatShort *)ptr; - data->errnum = CHNL_ERR(requestformat); - if (data->errnum == 0) { - data->type = (requestformat.typel << 8) | (requestformat.typeh); - data->status = requestformat.status; - } -} diff --git a/lib/src/piint.h b/lib/src/piint.h index f2793962..335abddc 100644 --- a/lib/src/piint.h +++ b/lib/src/piint.h @@ -88,16 +88,20 @@ #define LEO_CMD_TYPE_2 2 //TODO: name #define LEO_ERROR_GOOD 0 +#define LEO_ERROR_3 3 // #define LEO_ERROR_4 4 //maybe busy? +#define LEO_ERROR_6 6 // +#define LEO_ERROR_17 17 // #define LEO_ERROR_22 22 // #define LEO_ERROR_23 23 //unrecovered read error? #define LEO_ERROR_24 24 //no reference position found? #define LEO_ERROR_29 29 // +#define LEO_ERROR_75 75 // extern OSDevMgr __osPiDevMgr; extern OSPiHandle *__osCurrentHandle[2]; -extern OSPiHandle CartRomHandle; -extern OSPiHandle LeoDiskHandle; +extern OSPiHandle __Dom1SpeedParam; +extern OSPiHandle __Dom2SpeedParam; extern OSMesgQueue __osPiAccessQueue; extern u32 __osPiAccessQueueEnabled; @@ -110,38 +114,78 @@ OSMesgQueue *osPiGetCmdQueue(void); #define OS_RAMROM_STACKSIZE 1024 -#define WAIT_ON_IOBUSY(stat) \ +#define WAIT_ON_IO_BUSY(stat) \ stat = IO_READ(PI_STATUS_REG); \ while (stat & (PI_STATUS_IO_BUSY | PI_STATUS_DMA_BUSY)) \ stat = IO_READ(PI_STATUS_REG); +#ifdef VERSION_EU +#define WAIT_ON_LEO_IO_BUSY(stat) \ + stat = IO_READ(PI_STATUS_REG); \ + while (stat & PI_STATUS_IO_BUSY) \ + stat = IO_READ(PI_STATUS_REG); +#else +#define WAIT_ON_LEO_IO_BUSY WAIT_ON_IO_BUSY +#endif + #define UPDATE_REG(reg, var) \ if (cHandle->var != pihandle->var) \ IO_WRITE(reg, pihandle->var); -#define EPI_SYNC(pihandle, stat, domain) \ - \ - WAIT_ON_IOBUSY(stat) \ - \ - domain = pihandle->domain; \ - if (__osCurrentHandle[domain] != pihandle) \ - { \ - OSPiHandle *cHandle = __osCurrentHandle[domain]; \ - if (domain == PI_DOMAIN1) \ - { \ - UPDATE_REG(PI_BSD_DOM1_LAT_REG, latency); \ - UPDATE_REG(PI_BSD_DOM1_PGS_REG, pageSize); \ - UPDATE_REG(PI_BSD_DOM1_RLS_REG, relDuration); \ - UPDATE_REG(PI_BSD_DOM1_PWD_REG, pulse); \ - } \ - else \ - { \ - UPDATE_REG(PI_BSD_DOM2_LAT_REG, latency); \ - UPDATE_REG(PI_BSD_DOM2_PGS_REG, pageSize); \ - UPDATE_REG(PI_BSD_DOM2_RLS_REG, relDuration); \ - UPDATE_REG(PI_BSD_DOM2_PWD_REG, pulse); \ - } \ - __osCurrentHandle[domain] = pihandle; \ +#ifdef VERSION_CN +#define EPI_SYNC(pihandle, stat, domain) \ + \ + WAIT_ON_IO_BUSY(stat) \ + \ + domain = pihandle->domain; \ + if (__osCurrentHandle[domain]->type != pihandle->type) \ + { \ + OSPiHandle *cHandle = __osCurrentHandle[domain]; \ + if (domain == PI_DOMAIN1) \ + { \ + UPDATE_REG(PI_BSD_DOM1_LAT_REG, latency); \ + UPDATE_REG(PI_BSD_DOM1_PGS_REG, pageSize); \ + UPDATE_REG(PI_BSD_DOM1_RLS_REG, relDuration); \ + UPDATE_REG(PI_BSD_DOM1_PWD_REG, pulse); \ + } \ + else \ + { \ + UPDATE_REG(PI_BSD_DOM2_LAT_REG, latency); \ + UPDATE_REG(PI_BSD_DOM2_PGS_REG, pageSize); \ + UPDATE_REG(PI_BSD_DOM2_RLS_REG, relDuration); \ + UPDATE_REG(PI_BSD_DOM2_PWD_REG, pulse); \ + } \ + cHandle->type = pihandle->type; \ + cHandle->latency = pihandle->latency; \ + cHandle->pageSize = pihandle->pageSize; \ + cHandle->relDuration = pihandle->relDuration; \ + cHandle->pulse = pihandle->pulse; \ } +#else +#define EPI_SYNC(pihandle, stat, domain) \ + \ + WAIT_ON_IO_BUSY(stat) \ + \ + domain = pihandle->domain; \ + if (__osCurrentHandle[domain] != pihandle) \ + { \ + OSPiHandle *cHandle = __osCurrentHandle[domain]; \ + if (domain == PI_DOMAIN1) \ + { \ + UPDATE_REG(PI_BSD_DOM1_LAT_REG, latency); \ + UPDATE_REG(PI_BSD_DOM1_PGS_REG, pageSize); \ + UPDATE_REG(PI_BSD_DOM1_RLS_REG, relDuration); \ + UPDATE_REG(PI_BSD_DOM1_PWD_REG, pulse); \ + } \ + else \ + { \ + UPDATE_REG(PI_BSD_DOM2_LAT_REG, latency); \ + UPDATE_REG(PI_BSD_DOM2_PGS_REG, pageSize); \ + UPDATE_REG(PI_BSD_DOM2_RLS_REG, relDuration); \ + UPDATE_REG(PI_BSD_DOM2_PWD_REG, pulse); \ + } \ + __osCurrentHandle[domain] = pihandle; \ + } +#endif #endif diff --git a/lib/src/printf.h b/lib/src/printf.h index 5d798a19..a4222930 100644 --- a/lib/src/printf.h +++ b/lib/src/printf.h @@ -2,6 +2,12 @@ #define _PRINTF_H_ #include +#ifdef VERSION_CN +typedef char fmt_type; +#else +typedef u8 fmt_type; +#endif + typedef struct { union { @@ -22,7 +28,7 @@ typedef struct /* 28 */ s32 width; /* 2c */ u32 size; /* 30 */ u32 flags; - /* 34 */ u8 length; + /* 34 */ fmt_type length; } printf_struct; #define FLAGS_SPACE 1 @@ -31,6 +37,6 @@ typedef struct #define FLAGS_HASH 8 #define FLAGS_ZERO 16 s32 _Printf(char *(*prout)(char *, const char *, size_t), char *dst, const char *fmt, va_list args); -void _Litob(printf_struct *args, u8 type); -void _Ldtob(printf_struct *args, u8 type); +void _Litob(printf_struct *args, fmt_type type); +void _Ldtob(printf_struct *args, fmt_type type); #endif diff --git a/lib/src/string.c b/lib/src/string.c index dbffaa1d..fafe7fa9 100644 --- a/lib/src/string.c +++ b/lib/src/string.c @@ -1,6 +1,29 @@ #include "libultra_internal.h" #include +#ifdef VERSION_CN + +char *strchr(const char *str, s32 ch) { + char c = ch; + while (*str != c) { + if (*str == 0) { + return NULL; + } + str++; + } + return (char *) str; +} + +size_t strlen(const char *str) { + const char *ptr = str; + while (*ptr) { + ptr++; + } + return ptr - str; +} + +#endif + void *memcpy(void *dst, const void *src, size_t size) { u8 *_dst = dst; const u8 *_src = src; @@ -11,6 +34,8 @@ void *memcpy(void *dst, const void *src, size_t size) { return dst; } +#ifndef VERSION_CN + size_t strlen(const char *str) { const u8 *ptr = (const u8 *) str; while (*ptr) { @@ -29,3 +54,5 @@ char *strchr(const char *str, s32 ch) { } return (char *) str; } + +#endif diff --git a/lib/src/unk_shindou_file_3.c b/lib/src/unk_shindou_file_3.c deleted file mode 100644 index d18e7b3c..00000000 --- a/lib/src/unk_shindou_file_3.c +++ /dev/null @@ -1,26 +0,0 @@ -#include "libultra_internal.h" -#include "controller.h" - -s32 func_8030A5C0(OSMesgQueue *arg0, s32 arg1) { // TODO: This is almost certainly __osPfsGetStatus. - s32 sp34 = 0; - OSMesg sp30; - u8 sp2f; - OSContStatus sp1c[4]; - __osPfsRequestData(0); - sp34 = __osSiRawStartDma(1, &__osPfsPifRam); - osRecvMesg(arg0, &sp30, 1); - sp34 = __osSiRawStartDma(0, &__osPfsPifRam); - osRecvMesg(arg0, &sp30, 1); - __osPfsGetInitData(&sp2f, sp1c); - if (sp1c[arg1].status & CONT_CARD_ON && sp1c[arg1].status & CONT_CARD_PULL) { - return 2; - } - if (sp1c[arg1].errnum || !(sp1c[arg1].status & CONT_CARD_ON)) { - return 1; - } - if (sp1c[arg1].status & CONT_ADDR_CRC_ER) { - return 4; - } - return sp34; - -} diff --git a/rsp/audio.s b/rsp/audio.s index 901a7d0d..852979f0 100644 --- a/rsp/audio.s +++ b/rsp/audio.s @@ -8,6 +8,12 @@ .error "armips 0.11 or newer is required" .endif +.ifdef VERSION_SH +.definelabel VERSION_SH_CN, 1 +.elseifdef VERSION_CN +.definelabel VERSION_SH_CN, 1 +.endif + .macro jumpTableEntry, addr .dh addr & 0xFFFF .endmacro @@ -35,7 +41,7 @@ dispatchTable: jumpTableEntry cmd_SPNOOP jumpTableEntry cmd_ADPCM jumpTableEntry cmd_CLEARBUFF -.ifdef VERSION_SH +.ifdef VERSION_SH_CN jumpTableEntry cmd_SPNOOP jumpTableEntry cmd_ADDMIXER @@ -98,7 +104,7 @@ data0040: .dh 0x0000, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000 // 0x00000090 .dh 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0001 // 0x000000a0 .dh 0x2000, 0x4000, 0x6000, 0x8000, 0xa000, 0xc000, 0xe000, 0xffff // 0x000000b0 -.ifdef VERSION_SH +.ifdef VERSION_SH_CN .dh 0x0000, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 .dh 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 .endif @@ -134,7 +140,7 @@ data0040: .dh 0xffb6, 0x1338, 0x655e, 0x07ab, 0xffbf, 0x11f0, 0x65cd, 0x087d // 0x00000290 .dh 0xffc8, 0x10b4, 0x6626, 0x095a, 0xffd0, 0x0f83, 0x6669, 0x0a44 // 0x000002a0 .dh 0xffd8, 0x0e5f, 0x6696, 0x0b39, 0xffdf, 0x0d46, 0x66ad, 0x0c39 // 0x000002b0 -.ifdef VERSION_SH +.ifdef VERSION_SH_CN .dh 0xFFFF, 0xDFFF, 0xBFFF, 0x9FFF, 0x7FFF, 0x5FFF, 0x3FFF, 0x1FFF .dh 0x0000, 0x2000, 0x4000, 0x6000, 0x8000, 0xA000, 0xC000, 0xE000 .dh 0x0000, 0x0002, 0x0004, 0x0006, 0x0008, 0x000A, 0x000C, 0x000E @@ -142,7 +148,7 @@ data0040: .definelabel segmentTable, 0x320 -.ifdef VERSION_SH +.ifdef VERSION_SH_CN .definelabel audioStruct, 0x320 .else .definelabel audioStruct, 0x360 @@ -161,7 +167,7 @@ audio_rate_hi_left equ 0x12 // 0x372 (shared) audio_rate_lo_left equ 0x14 // 0x374 audio_target_right equ 0x16 // 0x376 audio_rate_hi_right equ 0x18 // 0x378 -.ifdef VERSION_SH +.ifdef VERSION_SH_CN .definelabel audio_rate_lo_right, 0x04 // 0x37a .else .definelabel audio_rate_lo_right, 0x1a // 0x37a @@ -169,7 +175,7 @@ audio_rate_hi_right equ 0x18 // 0x378 audio_dry_gain equ 0x1c // 0x37c audio_wet_gain equ 0x1e // 0x37e -.ifdef VERSION_SH +.ifdef VERSION_SH_CN .definelabel nextTaskEntry, 0x340 .definelabel adpcmTable, 0x3c0 .else @@ -203,7 +209,7 @@ audio_wet_gain equ 0x1e // 0x37e nop jal audio_04001150 nop -.ifndef VERSION_SH +.ifndef VERSION_SH_CN addi $2, $zero, 0x000f addi $1, $zero, segmentTable @@audio_040010c8: @@ -254,14 +260,14 @@ audio_04001150: addi $5, $ra, 0x0000 add $2, $zero, $28 addi $3, $27, 0x0000 -.ifdef VERSION_SH +.ifdef VERSION_SH_CN addi $4, $3, -0x80 .else addi $4, $3, -0x0140 .endif blez $4, @@audio_0400116c addi $1, $zero, nextTaskEntry -.ifdef VERSION_SH +.ifdef VERSION_SH_CN addi $3, $zero, 0x80 .else addi $3, $zero, 0x0140 @@ -305,21 +311,21 @@ dma_write_start: cmd_CLEARBUFF: andi $3, $25, 0xffff beqz $3, cmd_SPNOOP -.ifndef VERSION_SH +.ifndef VERSION_SH_CN addi $4, $zero, dmemBase .endif andi $2, $26, 0xffff -.ifndef VERSION_SH +.ifndef VERSION_SH_CN add $2, $2, $4 .endif -.ifdef VERSION_SH +.ifdef VERSION_SH_CN vxor $v0, $v0, $v0 .else vxor $v1, $v1, $v1 .endif addi $3, $3, -0x10 @@audio_040011f8: -.ifdef VERSION_SH +.ifdef VERSION_SH_CN sdv $v0[0], 0x0($2) sdv $v0[0], 0x8($2) .else @@ -332,7 +338,7 @@ cmd_CLEARBUFF: j cmd_SPNOOP nop -.ifndef VERSION_SH +.ifndef VERSION_SH_CN cmd_LOADBUFF: lhu $3, (audio_count)($24) beqz $3, cmd_SPNOOP @@ -390,7 +396,7 @@ cmd_LOADADPCM: mtc0 $zero, SP_SEMAPHORE .endif cmd_SEGMENT: -.ifndef VERSION_SH +.ifndef VERSION_SH_CN sll $3, $25, 8 // Least significant 24-bits offset srl $3, $3, 8 srl $2, $25, 24 // Most significant 8-bits segment number @@ -400,7 +406,7 @@ cmd_SEGMENT: sw $3, (segmentTable)($4) .endif -.ifndef VERSION_SH +.ifndef VERSION_SH_CN cmd_SETBUFF: addi $1, $26, dmemBase srl $2, $25, 16 @@ -420,7 +426,7 @@ cmd_SETBUFF: sh $2, (audio_aux_buf1)($24) .endif -.ifdef VERSION_SH +.ifdef VERSION_SH_CN cmd_SETBUFF: srl $2, $25, 16 sh $26, 0($24) @@ -459,7 +465,7 @@ cmd_SETVOL: sh $25, (audio_rate_lo_right)($24) cmd_INTERLEAVE: -.ifdef VERSION_SH +.ifdef VERSION_SH_CN andi $a0, $k0, 0xffff srl $at, $k0, 12 andi $at, $at, 0xff0 @@ -511,7 +517,7 @@ cmd_INTERLEAVE: addi $3, $3, 0x10 .endif bgtz $1, @@audio_040013a8 -.ifdef VERSION_SH +.ifdef VERSION_SH_CN ssv $v2[6], 0xFE($a0) .else addi $4, $4, 0x20 @@ -523,11 +529,11 @@ cmd_DMEMMOVE: andi $1, $25, 0xffff beqz $1, cmd_SPNOOP andi $2, $26, 0xffff -.ifndef VERSION_SH +.ifndef VERSION_SH_CN addi $2, $2, dmemBase .endif srl $3, $25, 16 -.ifndef VERSION_SH +.ifndef VERSION_SH_CN addi $3, $3, dmemBase .endif @@audio_04001424: @@ -545,7 +551,7 @@ cmd_DMEMMOVE: cmd_SETLOOP: sll $1, $25, 8 srl $1, $1, 8 -.ifndef VERSION_SH +.ifndef VERSION_SH_CN srl $3, $25, 24 sll $3, $3, 2 lw $2, (segmentTable)($3) @@ -553,7 +559,7 @@ cmd_SETLOOP: sw $1, (audio_loop_value)($24) .endif j cmd_SPNOOP -.ifdef VERSION_SH +.ifdef VERSION_SH_CN sw $at, 0x10($t8) .else nop @@ -571,27 +577,27 @@ cmd_ADPCM: vxor $v14, $v14, $v14 lhu $18, (audio_count)($24) vxor $v15, $v15, $v15 -.ifndef VERSION_SH +.ifndef VERSION_SH_CN lui $1, 0x00ff .endif vxor $v16, $v16, $v16 -.ifdef VERSION_SH +.ifdef VERSION_SH_CN sll $s1, $t9, 8 .else ori $1, $1, 0xffff .endif vxor $v17, $v17, $v17 -.ifndef VERSION_SH +.ifndef VERSION_SH_CN and $17, $25, $1 .endif vxor $v18, $v18, $v18 -.ifdef VERSION_SH +.ifdef VERSION_SH_CN srl $s1, $s1, 8 .else srl $2, $25, 24 .endif vxor $v19, $v19, $v19 -.ifndef VERSION_SH +.ifndef VERSION_SH_CN sll $2, $2, 2 lw $3, (segmentTable)($2) add $17, $17, $3 // last frame addr @@ -616,7 +622,7 @@ cmd_ADPCM: nop mtc0 $zero, SP_SEMAPHORE @@audio_0400150c: -.ifdef VERSION_SH +.ifdef VERSION_SH_CN addi $16, $zero, 0x0050 .else addi $16, $zero, 0x0030 @@ -754,7 +760,7 @@ cmd_ADPCM: mtc0 $zero, SP_SEMAPHORE cmd_POLEF: // unused by SM64 -.ifndef VERSION_SH +.ifndef VERSION_SH_CN lqv $v31[0], 0x0000($zero) vxor $v28, $v28, $v28 lhu $21, (audio_in_buf)($24) @@ -790,14 +796,14 @@ cmd_POLEF: // unused by SM64 addi $3, $zero, 7 .endif @@dma_read_busy: -.ifndef VERSION_SH +.ifndef VERSION_SH_CN mfc0 $5, SP_DMA_BUSY bnez $5, @@dma_read_busy nop mtc0 $zero, SP_SEMAPHORE .endif @@audio_040017a0: -.ifndef VERSION_SH +.ifndef VERSION_SH_CN addi $13, $zero, adpcmTable addi $1, $zero, 0x0004 mtc2 $1, $v14[0] @@ -824,7 +830,7 @@ cmd_POLEF: // unused by SM64 ldv $v30[8], 0x08($21) .endif @@audio_04001800: -.ifndef VERSION_SH +.ifndef VERSION_SH_CN vmudh $v16, $v25, $v28[6] addi $21, $21, 0x10 vmadh $v16, $v24, $v28[7] @@ -853,13 +859,13 @@ cmd_POLEF: // unused by SM64 addi $3, $zero, 7 .endif @@dma_write_busy: -.ifndef VERSION_SH +.ifndef VERSION_SH_CN mfc0 $5, SP_DMA_BUSY bnez $5, @@dma_write_busy nop .endif @@audio_04001874: -.ifndef VERSION_SH +.ifndef VERSION_SH_CN j cmd_SPNOOP mtc0 $zero, SP_SEMAPHORE .endif @@ -868,7 +874,7 @@ cmd_RESAMPLE: lh $8, (audio_in_buf)($24) lh $19, (audio_out_buf)($24) lh $18, (audio_count)($24) -.ifdef VERSION_SH +.ifdef VERSION_SH_CN sll $v0, $t9, 8 srl $v0, $v0, 8 .else @@ -902,7 +908,7 @@ cmd_RESAMPLE: @@audio_040018e8: andi $10, $7, 0x02 // A_LOOP? A_OUT? beqz $10, @@audio_04001908 -.ifdef VERSION_SH +.ifdef VERSION_SH_CN ldv $v16[0], 0x00($23) addi $t0, $t0, -4 ssv $v16[0], 0x00($t0) @@ -919,7 +925,7 @@ cmd_RESAMPLE: .endif @@audio_04001908: -.ifdef VERSION_SH +.ifdef VERSION_SH_CN andi $t2, $a3, 4 beqz $t2, @@audio_c4104 nop @@ -937,19 +943,19 @@ cmd_RESAMPLE: @@audio_c4104: .endif addi $8, $8, -8 -.ifdef VERSION_SH +.ifdef VERSION_SH_CN sdv $v16[0], 0x00($8) .endif @@audio_c410c: lsv $v23[14], 0x08($23) // saved pitch_accumulator -.ifdef VERSION_SH +.ifdef VERSION_SH_CN ldv $v16[0], 0x00($8) .else ldv $v16[0], 0x00($23) // saved next 4 unprocessed samples sdv $v16[0], 0x00($8) // store them before the input samples .endif mtc2 $8, $v18[4] -.ifdef VERSION_SH +.ifdef VERSION_SH_CN addi $10, $zero, 0x100 .else addi $10, $zero, 0xc0 @@ -958,7 +964,7 @@ cmd_RESAMPLE: mtc2 $26, $v18[8] // pitch addi $10, $zero, 0x40 mtc2 $10, $v18[10] -.ifdef VERSION_SH +.ifdef VERSION_SH_CN addi $9, $zero, 0x60 .else addi $9, $zero, data0040 @@ -1073,7 +1079,7 @@ cmd_RESAMPLE: ssv $v23[0], 0x08($23) ldv $v16[0], 0x00($17) sdv $v16[0], 0x00($23) -.ifndef VERSION_SH +.ifndef VERSION_SH_CN lh $6, (audio_in_buf)($24) addi $17, $17, 8 sub $5, $17, $6 @@ -1099,7 +1105,7 @@ cmd_RESAMPLE: j cmd_SPNOOP mtc0 $zero, SP_SEMAPHORE -.ifdef VERSION_SH +.ifdef VERSION_SH_CN cmd_DMEMMOVE2: srl $t7, $k0, 16 andi $t7, $t7, 0xff @@ -1175,7 +1181,7 @@ cmd_DOWNSAMPLE_HALF: nop .endif -.ifndef VERSION_SH +.ifndef VERSION_SH_CN cmd_ENVMIXER: lui $4, 0x00ff ori $4, $4, 0xffff @@ -1417,7 +1423,7 @@ cmd_MIXER: nop .endif -.ifdef VERSION_SH +.ifdef VERSION_SH_CN cmd_ENVMIXER: vxor $v4, $v4, $v4 vxor $v0, $v0, $v0 diff --git a/sm64.cn.sha1 b/sm64.cn.sha1 new file mode 100644 index 00000000..0fbba07c --- /dev/null +++ b/sm64.cn.sha1 @@ -0,0 +1 @@ +2e1db2780985a1f068077dc0444b685f39cd90ec build/cn/sm64.cn.z64 diff --git a/sm64.ld b/sm64.ld index 250de7a5..c88b5c0e 100755 --- a/sm64.ld +++ b/sm64.ld @@ -1,14 +1,20 @@ OUTPUT_ARCH (mips) /* include/segments.h defines SEG_POOL_START, SEG_POOL_END, SEG_BUFFERS, - * SEG_GODDARD, SEG_MAIN, SEG_ENGINE, SEG_FRAMEBUFFERS */ + * SEG_GODDARD, SEG_ENGINE, SEG_FRAMEBUFFERS */ #include "segments.h" #include "config.h" +#ifndef USE_EXT_RAM +#define ADDR_OR_ALIGN(addr) (addr) +#else +#define ADDR_OR_ALIGN(addr) ALIGN(0x1000) +#endif + #define BEGIN_SEG(name, addr) \ _##name##SegmentStart = ADDR(.name); \ _##name##SegmentRomStart = __romPos; \ - .name addr : AT(__romPos) + .name (addr) : AT(__romPos) #define END_SEG(name) \ _##name##SegmentEnd = ADDR(.name) + SIZEOF(.name); \ @@ -23,1105 +29,1323 @@ OUTPUT_ARCH (mips) _##name##SegmentNoloadEnd = ADDR(.name.noload) + SIZEOF(.name.noload); #define MIO0_SEG(name, segAddr) \ - BEGIN_SEG(name##_mio0, segAddr) \ - { \ - BUILD_DIR/bin/name.mio0.o(.data); \ - . = ALIGN(0x10); \ - } \ - END_SEG(name##_mio0) + BEGIN_SEG(name##_mio0, segAddr) \ + { \ + BUILD_DIR/bin/name.mio0.o(.data); \ + . = ALIGN(0x10); \ + } \ + END_SEG(name##_mio0) #define MIO0_EU_SEG(name, segAddr) \ - BEGIN_SEG(name##_mio0, segAddr) \ - { \ - BUILD_DIR/bin/eu/name.mio0.o(.data); \ - . = ALIGN(0x10); \ - } \ - END_SEG(name##_mio0) + BEGIN_SEG(name##_mio0, segAddr) \ + { \ + BUILD_DIR/bin/eu/name.mio0.o(.data); \ + . = ALIGN(0x10); \ + } \ + END_SEG(name##_mio0) #define STANDARD_LEVEL(name) \ - BEGIN_SEG(name##_segment_7, 0x07000000) \ - { \ - BUILD_DIR/levels/name/leveldata.mio0.o(.data); \ - . = ALIGN(0x10); \ - } \ - END_SEG(name##_segment_7) \ - BEGIN_SEG(name, 0x0E000000) \ - { \ - BUILD_DIR/levels/name/script.o(.data); \ - BUILD_DIR/levels/name/geo.o(.data); \ - } \ - END_SEG(name) + BEGIN_SEG(name##_segment_7, 0x07000000) \ + { \ + BUILD_DIR/levels/name/leveldata.mio0.o(.data); \ + . = ALIGN(0x10); \ + } \ + END_SEG(name##_segment_7) \ + BEGIN_SEG(name, 0x0E000000) \ + { \ + BUILD_DIR/levels/name/script.o(.data); \ + BUILD_DIR/levels/name/geo.o(.data); \ + } \ + END_SEG(name) #define STANDARD_OBJECTS(name, segAddr, geoAddr) \ - BEGIN_SEG(name##_mio0, segAddr) \ - { \ - BUILD_DIR/actors/name.mio0.o(.data); \ - . = ALIGN(0x10); \ - } \ - END_SEG(name##_mio0) \ - BEGIN_SEG(name##_geo, geoAddr) \ - { \ - BUILD_DIR/actors/name##_geo.o(.data); \ - } \ - END_SEG(name##_geo) + BEGIN_SEG(name##_mio0, segAddr) \ + { \ + BUILD_DIR/actors/name.mio0.o(.data); \ + . = ALIGN(0x10); \ + } \ + END_SEG(name##_mio0) \ + BEGIN_SEG(name##_geo, geoAddr) \ + { \ + BUILD_DIR/actors/name##_geo.o(.data); \ + } \ + END_SEG(name##_geo) + +#define CREATE_LO_HI_PAIR(name, value) \ + name##Hi = (value) >> 16; \ + name##Lo = (value) & 0xffff; SECTIONS { - __romPos = 0; + __romPos = 0; - BEGIN_SEG(boot, 0x04000000) - { - BUILD_DIR/asm/rom_header.o(.text); - BUILD_DIR/asm/boot.o(.text); - } - END_SEG(boot) + BEGIN_SEG(boot, 0x04000000) + { + BUILD_DIR/asm/rom_header.o(.text); + BUILD_DIR/asm/boot.o(.text); + BUILD_DIR/asm/ipl3_font.o(.text); + } + END_SEG(boot) - . = 0x80000400; - BEGIN_NOLOAD(zbuffer) { - BUILD_DIR/src/buffers/zbuffer.o(.bss*); - } + . = 0x80000400; + BEGIN_NOLOAD(zbuffer) { + BUILD_DIR/src/buffers/zbuffer.o(.bss*); + } - /* lib/src/__osDevMgrMain.c and lib/src/osCreateViManager.c contain infinite - * loops compiled without -g, which cause the return statements and the .o - * files themselves to be aligned to 32-byte boundaries. But the linker - * Nintendo used did not respect .o file alignment, and aligned the files - * only to 16 bytes, in some cases misaligning them. We force the same to - * happen using the SUBALIGN directive. This is harmless; the alignment is - * just an optimization. */ - BEGIN_SEG(main, SEG_MAIN) SUBALIGN(16) - { - BUILD_DIR/asm/entry.o(.text); - BUILD_DIR/src/game/crash_screen.o(.text); - BUILD_DIR/src/game/main.o(.text); - BUILD_DIR/src/game/game_init.o(.text); - BUILD_DIR/src/game/sound_init.o(.text); -#if ENABLE_RUMBLE - BUILD_DIR/src/game/rumble_init.o(.text); +#ifdef VERSION_CN + gZBufferEnd = .; #endif - BUILD_DIR/src/game/level_update.o(.text); - BUILD_DIR/src/game/interaction.o(.text); - BUILD_DIR/src/game/mario.o(.text); - BUILD_DIR/src/game/mario_step.o(.text); - BUILD_DIR/src/game/mario_actions_cutscene.o(.text); - BUILD_DIR/src/game/mario_actions_automatic.o(.text); - BUILD_DIR/src/game/mario_actions_stationary.o(.text); - BUILD_DIR/src/game/mario_actions_moving.o(.text); - BUILD_DIR/src/game/mario_actions_airborne.o(.text); - BUILD_DIR/src/game/mario_actions_submerged.o(.text); - BUILD_DIR/src/game/mario_actions_object.o(.text); - BUILD_DIR/src/game/level_geo.o(.text); - BUILD_DIR/src/game/mario_misc.o(.text); - BUILD_DIR/src/game/memory.o(.text); - BUILD_DIR/src/game/save_file.o(.text); - BUILD_DIR/src/game/area.o(.text); - BUILD_DIR/src/game/rendering_graph_node.o(.text); - BUILD_DIR/src/game/profiler.o(.text); - BUILD_DIR/asm/decompress.o(.text); - BUILD_DIR/src/game/camera.o(.text); - BUILD_DIR/src/game/debug_course.o(.text); - BUILD_DIR/src/game/object_list_processor.o(.text); -#ifndef VERSION_EU - BUILD_DIR/src/game/object_helpers.o(.text); -#endif - BUILD_DIR/src/game/behavior_actions.o(.text); - BUILD_DIR/src/game/platform_displacement.o(.text); -#ifndef VERSION_EU - BUILD_DIR/src/game/object_collision.o(.text); - BUILD_DIR/src/game/spawn_object.o(.text); -#endif - BUILD_DIR/src/game/spawn_sound.o(.text); - BUILD_DIR/src/game/debug.o(.text); - BUILD_DIR/src/game/screen_transition.o(.text); - BUILD_DIR/src/game/shadow.o(.text); - BUILD_DIR/src/game/skybox.o(.text); - BUILD_DIR/src/game/moving_texture.o(.text); - BUILD_DIR/src/game/geo_misc.o(.text); - BUILD_DIR/src/game/paintings.o(.text); - BUILD_DIR/src/game/print.o(.text); - BUILD_DIR/src/game/ingame_menu.o(.text); - BUILD_DIR/src/game/envfx_snow.o(.text); - BUILD_DIR/src/game/envfx_bubbles.o(.text); - BUILD_DIR/src/game/macro_special_objects.o(.text); - BUILD_DIR/src/game/hud.o(.text); - BUILD_DIR/src/game/obj_behaviors.o(.text); - BUILD_DIR/src/game/obj_behaviors_2.o(.text); -#ifdef VERSION_SH - BUILD_DIR/src/audio/synthesis_sh.o(.text); + + . = SEG_BUFFERS; + BEGIN_NOLOAD(buffers) + { + BUILD_DIR/src/buffers/buffers.o(.bss*); +#if defined(VERSION_SH) || defined(VERSION_CN) + BUILD_DIR/src/audio/port_sh.o(.bss*); #else - BUILD_DIR/src/audio/synthesis.o(.text); + BUILD_DIR/src/audio/globals_start.o(.bss*); + BUILD_DIR/src/audio/synthesis.o(.bss*); + BUILD_DIR/src/audio/heap.o(.bss*); + BUILD_DIR/src/audio/load.o(.bss*); + BUILD_DIR/src/audio/data.o(.bss*); #endif - BUILD_DIR/src/audio/heap.o(.text); - BUILD_DIR/src/audio/load.o(.text); -#ifdef VERSION_SH - BUILD_DIR/src/audio/load_sh.o(.text); - BUILD_DIR/src/audio/port_sh.o(.text); -#endif - BUILD_DIR/src/audio/playback.o(.text); - BUILD_DIR/src/audio/effects.o(.text); - BUILD_DIR/src/audio/seqplayer.o(.text); -#ifdef VERSION_SH - BUILD_DIR/libultra.a:osDriveRomInit.o(.text); -#endif - BUILD_DIR/src/audio/external.o(.text); - BUILD_DIR/src/audio/port_eu.o(.text); -#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); - BUILD_DIR/libultra.a:osInitialize.o(.text); - BUILD_DIR/libultra.a:osSetTime.o(.text); - BUILD_DIR/libultra.a:osGetTime.o(.text); - BUILD_DIR/libultra.a:osWritebackDCacheAll.o(.text); - BUILD_DIR/libultra.a:osViBlack.o(.text); - BUILD_DIR/libultra.a:osViSwapBuffer.o(.text); - BUILD_DIR/libultra.a:__osGetCurrFaultedThread.o(.text); - BUILD_DIR/libultra.a:osSetEventMesg.o(.text); - BUILD_DIR/libultra.a:osRecvMesg.o(.text); - BUILD_DIR/libultra.a:parameters.o(.text); - BUILD_DIR/libultra.a:osCreateMesgQueue.o(.text); - BUILD_DIR/libultra.a:osCreateThread.o(.text); - BUILD_DIR/libultra.a:osStartThread.o(.text); - BUILD_DIR/libultra.a:osMapTLB.o(.text); - BUILD_DIR/libultra.a:osUnmapTLBAll.o(.text); - BUILD_DIR/libultra.a:sprintf.o(.text); - BUILD_DIR/libultra.a:osViSetEvent.o(.text); - BUILD_DIR/libultra.a:osSpTaskLoadGo.o(.text); - BUILD_DIR/libultra.a:osSpTaskYield.o(.text); - BUILD_DIR/libultra.a:osSendMesg.o(.text); - BUILD_DIR/libultra.a:osSpTaskYielded.o(.text); - BUILD_DIR/libultra.a:osCreateViManager.o(.text); - BUILD_DIR/libultra.a:osViSetMode.o(.text); - BUILD_DIR/libultra.a:osViSetSpecialFeatures.o(.text); - BUILD_DIR/libultra.a:osCreatePiManager.o(.text); - BUILD_DIR/libultra.a:osSetThreadPri.o(.text); - BUILD_DIR/libultra.a:osViSwapBuffer.o(.text); - BUILD_DIR/libultra.a:sqrtf.o(.text); - BUILD_DIR/libultra.a:osContStartReadData.o(.text); - BUILD_DIR/libultra.a:osContInit.o(.text); - BUILD_DIR/libultra.a:osEepromProbe.o(.text); -#if ENABLE_RUMBLE - BUILD_DIR/libultra.a:motor.o(.text); -#endif - BUILD_DIR/libultra.a:osInvalDCache.o(.text); - BUILD_DIR/libultra.a:osPiStartDma.o(.text); - BUILD_DIR/libultra.a:bzero.o(.text); - BUILD_DIR/libultra.a:osInvalICache.o(.text); - BUILD_DIR/libultra.a:osEepromLongRead.o(.text); - BUILD_DIR/libultra.a:osEepromLongWrite.o(.text); - BUILD_DIR/libultra.a:bcopy.o(.text); - BUILD_DIR/libultra.a:guOrthoF.o(.text); - BUILD_DIR/libultra.a:guPerspectiveF.o(.text); - BUILD_DIR/libultra.a:llconv.o(.text); - BUILD_DIR/libultra.a:cosf.o(.text); - BUILD_DIR/libultra.a:sinf.o(.text); - BUILD_DIR/libultra.a:guTranslateF.o(.text); - BUILD_DIR/libultra.a:guRotateF.o(.text); - BUILD_DIR/libultra.a:guScaleF.o(.text); - BUILD_DIR/libultra.a:osAiSetFrequency.o(.text); -#ifdef VERSION_SH - BUILD_DIR/libultra.a:osCartRomInit.o(.text); - BUILD_DIR/libultra.a:epidma.o(.text); -#endif #ifdef VERSION_EU - BUILD_DIR/libultra.a:alBnkfNew.o(.text); -#endif - BUILD_DIR/libultra.a:osAiGetLength.o(.text); - BUILD_DIR/libultra.a:osAiSetNextBuffer.o(.text); -#ifdef VERSION_SH - BUILD_DIR/libultra.a:osGetCount.o(.text); - BUILD_DIR/libultra.a:__osDisableInt.o(.text); - BUILD_DIR/libultra.a:__osRestoreInt.o(.text); -#endif - BUILD_DIR/libultra.a:_Litob.o(.text); - BUILD_DIR/libultra.a:_Ldtob.o(.text); - BUILD_DIR/libultra.a:__osSetSR.o(.text); - BUILD_DIR/libultra.a:__osGetSR.o(.text); - BUILD_DIR/libultra.a:__osSetFpcCsr.o(.text); - BUILD_DIR/libultra.a:__osSiRawReadIo.o(.text); - BUILD_DIR/libultra.a:__osSiRawWriteIo.o(.text); - BUILD_DIR/libultra.a:__osExceptionPreamble.o(.text); - BUILD_DIR/libultra.a:osWritebackDCache.o(.text); - BUILD_DIR/libultra.a:osMapTLBRdb.o(.text); - BUILD_DIR/libultra.a:osPiRawReadIo.o(.text); - BUILD_DIR/libultra.a:EU_D_802f4330.o(.text); - BUILD_DIR/libultra.a:D_802F4380.o(.text); - BUILD_DIR/libultra.a:func_802F4A20.o(.text); - BUILD_DIR/libultra.a:osTimer.o(.text); -#ifdef VERSION_EU - BUILD_DIR/libultra.a:__osDisableInt.o(.text); - BUILD_DIR/libultra.a:__osRestoreInt.o(.text); - BUILD_DIR/libultra.a:osGetCount.o(.text); -#endif - BUILD_DIR/libultra.a:__osViInit.o(.text); - BUILD_DIR/libultra.a:__osDequeueThread.o(.text); - BUILD_DIR/libultra.a:osVirtualToPhysical.o(.text); - BUILD_DIR/libultra.a:__osSpSetStatus.o(.text); - BUILD_DIR/libultra.a:__osSpSetPc.o(.text); - BUILD_DIR/libultra.a:__osSpRawStartDma.o(.text); - BUILD_DIR/libultra.a:__osSpDeviceBusy.o(.text); - BUILD_DIR/libultra.a:__osSpGetStatus.o(.text); - BUILD_DIR/libultra.a:osGetThreadPri.o(.text); - BUILD_DIR/libultra.a:__osViGetCurrentContext.o(.text); - BUILD_DIR/libultra.a:__osViSwapContext.o(.text); -#ifdef VERSION_SH - BUILD_DIR/libultra.a:osLeoDiskInit.o(.text); -#endif - BUILD_DIR/libultra.a:__osPiCreateAccessQueue.o(.text); - BUILD_DIR/libultra.a:osPiRawStartDma.o(.text); - BUILD_DIR/libultra.a:osEPiRawStartDma.o(.text); - BUILD_DIR/libultra.a:__osDevMgrMain.o(.text); - BUILD_DIR/libultra.a:__osSiCreateAccessQueue.o(.text); - BUILD_DIR/libultra.a:__osSiRawStartDma.o(.text); - BUILD_DIR/libultra.a:osSetTimer.o(.text); - BUILD_DIR/libultra.a:osEepromWrite.o(.text); -#if ENABLE_RUMBLE - BUILD_DIR/libultra.a:osPfsIsPlug.o(.text); - BUILD_DIR/libultra.a:crc.o(.text); - BUILD_DIR/libultra.a:contramwrite.o(.text); - BUILD_DIR/libultra.a:contramread.o(.text); -#endif - BUILD_DIR/libultra.a:osJamMesg.o(.text); - BUILD_DIR/libultra.a:osPiGetCmdQueue.o(.text); - BUILD_DIR/libultra.a:osEepromRead.o(.text); - BUILD_DIR/libultra.a:guMtxF2L.o(.text); - BUILD_DIR/libultra.a:guNormalize.o(.text); - BUILD_DIR/libultra.a:__osAiDeviceBusy.o(.text); - BUILD_DIR/libultra.a:ldiv.o(.text); - BUILD_DIR/libultra.a:__osSiDeviceBusy.o(.text); -#ifdef VERSION_SH - BUILD_DIR/libultra.a:leointerrupt.o(.text); -#endif - BUILD_DIR/libultra.a:osSetIntMask.o(.text); - BUILD_DIR/libultra.a:osDestroyThread.o(.text); -#ifdef VERSION_EU - BUILD_DIR/libultra.a:osLeoDiskInit.o(.text); -#endif - BUILD_DIR/libultra.a:__osSetCompare.o(.text); - BUILD_DIR/libultra.a:__osDequeueThread.o(.text); - BUILD_DIR/libultra.a:__osProbeTLB.o(.text); - BUILD_DIR/libultra.a:__osResetGlobalIntMask.o(.text); - BUILD_DIR/libultra.a:__osEPiRawWriteIo.o(.text); -#ifdef VERSION_SH - BUILD_DIR/libultra.a:__osEPiRawReadIo.o(.text); - BUILD_DIR/libultra.a:__osSetGlobalIntMask.o(.text); -#endif - BUILD_DIR/libultra.a:func_802F71F0.o(.text); -#if ENABLE_RUMBLE - BUILD_DIR/libultra.a:unk_shindou_file_3.o(.text); -#endif - BUILD_DIR/lib/rsp.o(.text); + . = ALIGN(0x200); #else - BUILD_DIR/src/game*.o(.text); - BUILD_DIR/src/audio*.o(.text); - BUILD_DIR/libultra.a:parameters.o(.text); - BUILD_DIR/libultra.a:osSetTime.o(.text); - BUILD_DIR/libultra.a:osMapTLB.o(.text); - BUILD_DIR/libultra.a:osUnmapTLBAll.o(.text); - BUILD_DIR/libultra.a:sprintf.o(.text); - BUILD_DIR/libultra.a:osCreateMesgQueue.o(.text); - BUILD_DIR/libultra.a:osSetEventMesg.o(.text); - BUILD_DIR/libultra.a:osViSetEvent.o(.text); - BUILD_DIR/libultra.a:osCreateThread.o(.text); - BUILD_DIR/libultra.a:osRecvMesg.o(.text); - BUILD_DIR/libultra.a:osSpTaskLoadGo.o(.text); - BUILD_DIR/libultra.a:osSpTaskYield.o(.text); - BUILD_DIR/libultra.a:osSendMesg.o(.text); - BUILD_DIR/libultra.a:osSpTaskYielded.o(.text); - BUILD_DIR/libultra.a:osStartThread.o(.text); - BUILD_DIR/libultra.a:osWritebackDCacheAll.o(.text); - BUILD_DIR/libultra.a:osCreateViManager.o(.text); - BUILD_DIR/libultra.a:osViSetMode.o(.text); - BUILD_DIR/libultra.a:osViBlack.o(.text); - BUILD_DIR/libultra.a:osViSetSpecialFeatures.o(.text); - BUILD_DIR/libultra.a:osCreatePiManager.o(.text); - BUILD_DIR/libultra.a:osSetThreadPri.o(.text); - BUILD_DIR/libultra.a:osInitialize.o(.text); - BUILD_DIR/libultra.a:osViSwapBuffer.o(.text); - BUILD_DIR/libultra.a:sqrtf.o(.text); - BUILD_DIR/libultra.a:osContStartReadData.o(.text); - BUILD_DIR/libultra.a:osContInit.o(.text); - BUILD_DIR/libultra.a:osEepromProbe.o(.text); -#if ENABLE_RUMBLE - BUILD_DIR/libultra.a:motor.o(.text); + . = ALIGN(0x1000); #endif - BUILD_DIR/libultra.a:llmuldiv.o(.text); - BUILD_DIR/libultra.a:llmuldiv_gcc.o(.text); - BUILD_DIR/libultra.a:osInvalDCache.o(.text); - BUILD_DIR/libultra.a:osPiStartDma.o(.text); - BUILD_DIR/libultra.a:bzero.o(.text); - BUILD_DIR/libultra.a:osInvalICache.o(.text); - BUILD_DIR/libultra.a:osEepromLongRead.o(.text); - BUILD_DIR/libultra.a:osEepromLongWrite.o(.text); - BUILD_DIR/libultra.a:bcopy.o(.text); - BUILD_DIR/libultra.a:guOrthoF.o(.text); - BUILD_DIR/libultra.a:guPerspectiveF.o(.text); - BUILD_DIR/libultra.a:osGetTime.o(.text); - BUILD_DIR/libultra.a:llconv.o(.text); - BUILD_DIR/libultra.a:cosf.o(.text); - BUILD_DIR/libultra.a:sinf.o(.text); - BUILD_DIR/libultra.a:guTranslateF.o(.text); - BUILD_DIR/libultra.a:guRotateF.o(.text); - BUILD_DIR/libultra.a:guScaleF.o(.text); - BUILD_DIR/libultra.a:osAiSetFrequency.o(.text); - BUILD_DIR/libultra.a:alBnkfNew.o(.text); - BUILD_DIR/libultra.a:osWritebackDCache.o(.text); - BUILD_DIR/libultra.a:osAiGetLength.o(.text); - BUILD_DIR/libultra.a:osAiSetNextBuffer.o(.text); - BUILD_DIR/libultra.a:osTimer.o(.text); - BUILD_DIR/libultra.a:_Printf.o(.text); - BUILD_DIR/libultra.a:string.o(.text); - BUILD_DIR/libultra.a:__osDequeueThread.o(.text); - BUILD_DIR/libultra.a:__osDisableInt.o(.text); - BUILD_DIR/libultra.a:__osRestoreInt.o(.text); - BUILD_DIR/libultra.a:__osViInit.o(.text); - BUILD_DIR/libultra.a:__osExceptionPreamble.o(.text); - BUILD_DIR/libultra.a:osVirtualToPhysical.o(.text); - BUILD_DIR/libultra.a:__osSpSetStatus.o(.text); - BUILD_DIR/libultra.a:__osSpSetPc.o(.text); - BUILD_DIR/libultra.a:__osSpRawStartDma.o(.text); - BUILD_DIR/libultra.a:__osSpDeviceBusy.o(.text); - BUILD_DIR/libultra.a:__osSpGetStatus.o(.text); - BUILD_DIR/libultra.a:osGetThreadPri.o(.text); - BUILD_DIR/libultra.a:__osViGetCurrentContext.o(.text); - BUILD_DIR/libultra.a:__osViSwapContext.o(.text); - BUILD_DIR/libultra.a:osGetCount.o(.text); - BUILD_DIR/libultra.a:__osPiCreateAccessQueue.o(.text); - BUILD_DIR/libultra.a:osPiRawStartDma.o(.text); - BUILD_DIR/libultra.a:__osDevMgrMain.o(.text); - BUILD_DIR/libultra.a:__osSetSR.o(.text); - BUILD_DIR/libultra.a:__osGetSR.o(.text); - BUILD_DIR/libultra.a:__osSetFpcCsr.o(.text); - BUILD_DIR/libultra.a:__osSiRawReadIo.o(.text); - BUILD_DIR/libultra.a:__osSiRawWriteIo.o(.text); - BUILD_DIR/libultra.a:osMapTLBRdb.o(.text); - BUILD_DIR/libultra.a:osPiRawReadIo.o(.text); +#if defined(VERSION_SH) || defined(VERSION_CN) + . += 0xB000; +#endif + BUILD_DIR/src/buffers/gfx_output_buffer.o(.bss*); + } + END_NOLOAD(buffers) + + /* lib/src/__osDevMgrMain.c and lib/src/osCreateViManager.c contain infinite + * loops compiled without -g, which cause the return statements and the .o + * files themselves to be aligned to 32-byte boundaries. But the linker + * Nintendo used did not respect .o file alignment, and aligned the files + * only to 16 bytes, in some cases misaligning them. We force the same to + * happen using the SUBALIGN directive. This is harmless; the alignment is + * just an optimization. */ + BEGIN_SEG(main, ) +#ifndef VERSION_CN + SUBALIGN(16) +#endif + { + BUILD_DIR/asm/entry.o(.text); + BUILD_DIR/src/game/crash_screen.o(.text); + BUILD_DIR/src/game/main.o(.text); + BUILD_DIR/src/game/game_init.o(.text); +#ifdef VERSION_CN + . += 0x10; +#endif + BUILD_DIR/src/game/sound_init.o(.text); +#if ENABLE_RUMBLE + BUILD_DIR/src/game/rumble_init.o(.text); +#endif + BUILD_DIR/src/game/level_update.o(.text); + BUILD_DIR/src/game/interaction.o(.text); + BUILD_DIR/src/game/mario.o(.text); + BUILD_DIR/src/game/mario_step.o(.text); + BUILD_DIR/src/game/mario_actions_cutscene.o(.text); + BUILD_DIR/src/game/mario_actions_automatic.o(.text); + BUILD_DIR/src/game/mario_actions_stationary.o(.text); + BUILD_DIR/src/game/mario_actions_moving.o(.text); + BUILD_DIR/src/game/mario_actions_airborne.o(.text); + BUILD_DIR/src/game/mario_actions_submerged.o(.text); + BUILD_DIR/src/game/mario_actions_object.o(.text); + BUILD_DIR/src/game/level_geo.o(.text); + BUILD_DIR/src/game/mario_misc.o(.text); + BUILD_DIR/src/game/memory.o(.text); + BUILD_DIR/src/game/save_file.o(.text); + BUILD_DIR/src/game/area.o(.text); + BUILD_DIR/src/game/rendering_graph_node.o(.text); + BUILD_DIR/src/game/profiler.o(.text); + BUILD_DIR/asm/decompress.o(.text); + BUILD_DIR/src/game/camera.o(.text); + BUILD_DIR/src/game/debug_course.o(.text); + BUILD_DIR/src/game/object_list_processor.o(.text); +#ifndef VERSION_EU + BUILD_DIR/src/game/object_helpers.o(.text); +#endif + BUILD_DIR/src/game/behavior_actions.o(.text); + BUILD_DIR/src/game/platform_displacement.o(.text); +#ifndef VERSION_EU + BUILD_DIR/src/game/object_collision.o(.text); + BUILD_DIR/src/game/spawn_object.o(.text); +#endif + BUILD_DIR/src/game/spawn_sound.o(.text); + BUILD_DIR/src/game/debug.o(.text); + BUILD_DIR/src/game/screen_transition.o(.text); + BUILD_DIR/src/game/shadow.o(.text); + BUILD_DIR/src/game/skybox.o(.text); + BUILD_DIR/src/game/moving_texture.o(.text); + BUILD_DIR/src/game/geo_misc.o(.text); + BUILD_DIR/src/game/paintings.o(.text); + BUILD_DIR/src/game/print.o(.text); + BUILD_DIR/src/game/ingame_menu.o(.text); + BUILD_DIR/src/game/envfx_snow.o(.text); + BUILD_DIR/src/game/envfx_bubbles.o(.text); + BUILD_DIR/src/game/macro_special_objects.o(.text); + BUILD_DIR/src/game/hud.o(.text); + BUILD_DIR/src/game/obj_behaviors.o(.text); + BUILD_DIR/src/game/obj_behaviors_2.o(.text); +#if defined(VERSION_SH) || defined(VERSION_CN) + BUILD_DIR/src/audio/synthesis_sh.o(.text); +#else + BUILD_DIR/src/audio/synthesis.o(.text); +#endif + BUILD_DIR/src/audio/heap.o(.text); + BUILD_DIR/src/audio/load.o(.text); +#if defined(VERSION_SH) || defined(VERSION_CN) + BUILD_DIR/src/audio/load_sh.o(.text); + BUILD_DIR/src/audio/port_sh.o(.text); +#endif + BUILD_DIR/src/audio/playback.o(.text); + BUILD_DIR/src/audio/effects.o(.text); + BUILD_DIR/src/audio/seqplayer.o(.text); +#if defined(VERSION_SH) || defined(VERSION_CN) + BUILD_DIR/libultra.a:osDriveRomInit.o(.text); +#endif + BUILD_DIR/src/audio/external.o(.text); + BUILD_DIR/src/audio/port_eu.o(.text); + +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) +#ifdef VERSION_CN + BUILD_DIR/libultra.a:osInitializeIQueWrapper.o(.text); + BUILD_DIR/libultra.a:osAiGetLength.o(.text); + BUILD_DIR/libultra.a:osAiSetFrequency.o(.text); + BUILD_DIR/libultra.a:osAiSetNextBuffer.o(.text); + BUILD_DIR/libultra.a:osInvalDCache.o(.text); + BUILD_DIR/libultra.a:osInvalICache.o(.text); + BUILD_DIR/libultra.a:osWritebackDCacheAll.o(.text); + BUILD_DIR/libultra.a:osContStartReadData.o(.text); + BUILD_DIR/libultra.a:osContInit.o(.text); + BUILD_DIR/libultra.a:osVirtualToPhysical.o(.text); + BUILD_DIR/libultra.a:sqrtf.o(.text); + BUILD_DIR/libultra.a:cosf.o(.text); + BUILD_DIR/libultra.a:guOrthoF.o(.text); + BUILD_DIR/libultra.a:guPerspectiveF.o(.text); + BUILD_DIR/libultra.a:sinf.o(.text); + BUILD_DIR/libultra.a:bcopy.o(.text); + BUILD_DIR/libultra.a:bzero.o(.text); + BUILD_DIR/libultra.a:llmuldiv.o(.text); + BUILD_DIR/libultra.a:llconv.o(.text); +#endif + BUILD_DIR/libultra.a:string.o(.text); + BUILD_DIR/libultra.a:_Printf.o(.text); +#ifdef VERSION_CN + BUILD_DIR/libultra.a:sprintf.o(.text); + BUILD_DIR/libultra.a:osSyncPrintf.o(.text); + BUILD_DIR/libultra.a:osCreateMesgQueue.o(.text); + BUILD_DIR/libultra.a:osRecvMesg.o(.text); + BUILD_DIR/libultra.a:osSendMesg.o(.text); + BUILD_DIR/libultra.a:osSetEventMesg.o(.text); + BUILD_DIR/libultra.a:osGetCount.o(.text); + BUILD_DIR/libultra.a:osSpTaskLoadGo.o(.text); + BUILD_DIR/libultra.a:osSpTaskYield.o(.text); + BUILD_DIR/libultra.a:osSpTaskYielded.o(.text); + BUILD_DIR/libultra.a:__osSiRawStartDma.o(.text); + BUILD_DIR/libultra.a:__osSiCreateAccessQueue.o(.text); + BUILD_DIR/libultra.a:osCreateThread.o(.text); + BUILD_DIR/libultra.a:osSetThreadPri.o(.text); + BUILD_DIR/libultra.a:osStartThread.o(.text); + BUILD_DIR/libultra.a:__osDequeueThread.o(.text); + BUILD_DIR/libultra.a:__osGetCurrFaultedThread.o(.text); + BUILD_DIR/libultra.a:osGetTime.o(.text); + BUILD_DIR/libultra.a:osSetTime.o(.text); + BUILD_DIR/libultra.a:osSetTimer.o(.text); + BUILD_DIR/libultra.a:osTimer.o(.text); + BUILD_DIR/libultra.a:osMapTLB.o(.text); + BUILD_DIR/libultra.a:__osProbeTLB.o(.text); + BUILD_DIR/libultra.a:osUnmapTLBAll.o(.text); + BUILD_DIR/libultra.a:osCreateViManager.o(.text); + BUILD_DIR/libultra.a:osViSetEvent.o(.text); + BUILD_DIR/libultra.a:osViSetMode.o(.text); + BUILD_DIR/libultra.a:osViSetSpecialFeatures.o(.text); + BUILD_DIR/libultra.a:osViSwapBuffer.o(.text); + BUILD_DIR/libultra.a:__osViSwapContext.o(.text); + BUILD_DIR/libultra.a:osViBlack.o(.text); + BUILD_DIR/libultra.a:guMtxIdentF.o(.text); + BUILD_DIR/libultra.a:guMtxF2L.o(.text); + BUILD_DIR/libultra.a:guScale.o(.text); + BUILD_DIR/libultra.a:guTranslate.o(.text); + BUILD_DIR/libultra.a:guRotateF.o(.text); + BUILD_DIR/libultra.a:osEepromProbe.o(.text); + BUILD_DIR/libultra.a:osEepromLongWrite.o(.text); + BUILD_DIR/libultra.a:osEepromLongRead.o(.text); + BUILD_DIR/libultra.a:__osExceptionPreamble.o(.text); + BUILD_DIR/libultra.a:__osDisableInt.o(.text); + BUILD_DIR/libultra.a:__osRestoreInt.o(.text); + BUILD_DIR/libultra.a:osSetIntMask.o(.text); + BUILD_DIR/libultra.a:osCreatePiManager.o(.text); + BUILD_DIR/libultra.a:osEPiRawStartDma.o(.text); + BUILD_DIR/libultra.a:epidma.o(.text); + BUILD_DIR/libultra.a:osCartRomInit.o(.text); + BUILD_DIR/libultra.a:__osDevMgrMain.o(.text); + BUILD_DIR/libultra.a:__osPiCreateAccessQueue.o(.text); + BUILD_DIR/libultra.a:osPiStartDma.o(.text); + BUILD_DIR/libultra.a:iQueKernelCalls.o(.text); + BUILD_DIR/libultra.a:motor.o(.text); + BUILD_DIR/libultra.a:parameters.o(.text); + BUILD_DIR/libultra.a:osInitialize.o(.text); + BUILD_DIR/libultra.a:__osAiDeviceBusy.o(.text); + BUILD_DIR/libultra.a:osWritebackDCache.o(.text); + BUILD_DIR/libultra.a:_Litob.o(.text); + BUILD_DIR/libultra.a:_Ldtob.o(.text); + BUILD_DIR/libultra.a:osJamMesg.o(.text); + BUILD_DIR/libultra.a:__osGetCause.o(.text); + BUILD_DIR/libultra.a:__osGetSR.o(.text); + BUILD_DIR/libultra.a:__osSetFpcCsr.o(.text); + BUILD_DIR/libultra.a:__osSetSR.o(.text); + BUILD_DIR/libultra.a:__osSetWatchLo.o(.text); + BUILD_DIR/libultra.a:__osSetCompare.o(.text); + BUILD_DIR/libultra.a:__osSpDeviceBusy.o(.text); + BUILD_DIR/libultra.a:__osSpGetStatus.o(.text); + BUILD_DIR/libultra.a:__osSpSetStatus.o(.text); + BUILD_DIR/libultra.a:__osSpSetPc.o(.text); + BUILD_DIR/libultra.a:__osSpRawStartDma.o(.text); + BUILD_DIR/libultra.a:__osSiRawReadIo.o(.text); + BUILD_DIR/libultra.a:__osSiRawWriteIo.o(.text); + BUILD_DIR/libultra.a:osDestroyThread.o(.text); + BUILD_DIR/libultra.a:osGetThreadPri.o(.text); + BUILD_DIR/libultra.a:osYieldThread.o(.text); + BUILD_DIR/libultra.a:osMapTLBRdb.o(.text); + BUILD_DIR/libultra.a:__osViInit.o(.text); + BUILD_DIR/libultra.a:__osViGetCurrentContext.o(.text); + BUILD_DIR/libultra.a:guNormalize.o(.text); + BUILD_DIR/libultra.a:osEepromRead.o(.text); + BUILD_DIR/libultra.a:osEepromWrite.o(.text); + BUILD_DIR/libultra.a:__osSetGlobalIntMask.o(.text); + BUILD_DIR/libultra.a:__osResetGlobalIntMask.o(.text); + BUILD_DIR/libultra.a:osPiRawStartDma.o(.text); + BUILD_DIR/libultra.a:osPiGetCmdQueue.o(.text); + BUILD_DIR/libultra.a:osEPiRawReadIo.o(.text); + BUILD_DIR/libultra.a:osEPiRawWriteIo.o(.text); + BUILD_DIR/libultra.a:ldiv.o(.text); + BUILD_DIR/libultra.a:__osSiDeviceBusy.o(.text); +#endif +#ifndef VERSION_CN + BUILD_DIR/libultra.a:llmuldiv.o(.text); + BUILD_DIR/libultra.a:osInitialize.o(.text); + BUILD_DIR/libultra.a:osSetTime.o(.text); + BUILD_DIR/libultra.a:osGetTime.o(.text); + BUILD_DIR/libultra.a:osWritebackDCacheAll.o(.text); + BUILD_DIR/libultra.a:osViBlack.o(.text); + BUILD_DIR/libultra.a:osViSwapBuffer.o(.text); + BUILD_DIR/libultra.a:__osGetCurrFaultedThread.o(.text); + BUILD_DIR/libultra.a:osSetEventMesg.o(.text); + BUILD_DIR/libultra.a:osRecvMesg.o(.text); + BUILD_DIR/libultra.a:parameters.o(.text); + BUILD_DIR/libultra.a:osCreateMesgQueue.o(.text); + BUILD_DIR/libultra.a:osCreateThread.o(.text); + BUILD_DIR/libultra.a:osStartThread.o(.text); + BUILD_DIR/libultra.a:osMapTLB.o(.text); + BUILD_DIR/libultra.a:osUnmapTLBAll.o(.text); + BUILD_DIR/libultra.a:sprintf.o(.text); + BUILD_DIR/libultra.a:osViSetEvent.o(.text); + BUILD_DIR/libultra.a:osSpTaskLoadGo.o(.text); + BUILD_DIR/libultra.a:osSpTaskYield.o(.text); + BUILD_DIR/libultra.a:osSendMesg.o(.text); + BUILD_DIR/libultra.a:osSpTaskYielded.o(.text); + BUILD_DIR/libultra.a:osCreateViManager.o(.text); + BUILD_DIR/libultra.a:osViSetMode.o(.text); + BUILD_DIR/libultra.a:osViSetSpecialFeatures.o(.text); + BUILD_DIR/libultra.a:osCreatePiManager.o(.text); + BUILD_DIR/libultra.a:osSetThreadPri.o(.text); + BUILD_DIR/libultra.a:sqrtf.o(.text); + BUILD_DIR/libultra.a:osContStartReadData.o(.text); + BUILD_DIR/libultra.a:osContInit.o(.text); + BUILD_DIR/libultra.a:osEepromProbe.o(.text); +#if ENABLE_RUMBLE + BUILD_DIR/libultra.a:motor.o(.text); +#endif + BUILD_DIR/libultra.a:osInvalDCache.o(.text); + BUILD_DIR/libultra.a:osPiStartDma.o(.text); + BUILD_DIR/libultra.a:bzero.o(.text); + BUILD_DIR/libultra.a:osInvalICache.o(.text); + BUILD_DIR/libultra.a:osEepromLongRead.o(.text); + BUILD_DIR/libultra.a:osEepromLongWrite.o(.text); + BUILD_DIR/libultra.a:bcopy.o(.text); + BUILD_DIR/libultra.a:guOrthoF.o(.text); + BUILD_DIR/libultra.a:guPerspectiveF.o(.text); + BUILD_DIR/libultra.a:llconv.o(.text); + BUILD_DIR/libultra.a:cosf.o(.text); + BUILD_DIR/libultra.a:sinf.o(.text); + BUILD_DIR/libultra.a:guTranslateF.o(.text); + BUILD_DIR/libultra.a:guRotateF.o(.text); + BUILD_DIR/libultra.a:guScaleF.o(.text); + BUILD_DIR/libultra.a:osAiSetFrequency.o(.text); +#endif +#ifdef VERSION_SH + BUILD_DIR/libultra.a:osCartRomInit.o(.text); + BUILD_DIR/libultra.a:epidma.o(.text); +#endif +#ifdef VERSION_EU + BUILD_DIR/libultra.a:alBnkfNew.o(.text); +#endif +#ifndef VERSION_CN + BUILD_DIR/libultra.a:osAiGetLength.o(.text); + BUILD_DIR/libultra.a:osAiSetNextBuffer.o(.text); +#endif +#ifdef VERSION_SH + BUILD_DIR/libultra.a:osGetCount.o(.text); + BUILD_DIR/libultra.a:__osDisableInt.o(.text); + BUILD_DIR/libultra.a:__osRestoreInt.o(.text); +#endif +#ifndef VERSION_CN + BUILD_DIR/libultra.a:_Litob.o(.text); + BUILD_DIR/libultra.a:_Ldtob.o(.text); + BUILD_DIR/libultra.a:__osSetSR.o(.text); + BUILD_DIR/libultra.a:__osGetSR.o(.text); + BUILD_DIR/libultra.a:__osSetFpcCsr.o(.text); + BUILD_DIR/libultra.a:__osSiRawReadIo.o(.text); + BUILD_DIR/libultra.a:__osSiRawWriteIo.o(.text); + BUILD_DIR/libultra.a:__osExceptionPreamble.o(.text); + BUILD_DIR/libultra.a:osWritebackDCache.o(.text); + BUILD_DIR/libultra.a:osMapTLBRdb.o(.text); +#endif + BUILD_DIR/libultra.a:osPiRawReadIo.o(.text); + BUILD_DIR/libultra.a:__osSetHWintrRoutine.o(.text); +#ifdef VERSION_EU + BUILD_DIR/libultra.a:leointerrupt.o(.text); +#endif +#ifndef VERSION_CN + BUILD_DIR/libultra.a:osTimer.o(.text); +#endif +#ifdef VERSION_EU + BUILD_DIR/libultra.a:__osDisableInt.o(.text); + BUILD_DIR/libultra.a:__osRestoreInt.o(.text); + BUILD_DIR/libultra.a:osGetCount.o(.text); +#endif +#ifndef VERSION_CN + BUILD_DIR/libultra.a:__osViInit.o(.text); + BUILD_DIR/libultra.a:__osDequeueThread.o(.text); + BUILD_DIR/libultra.a:osVirtualToPhysical.o(.text); + BUILD_DIR/libultra.a:__osSpSetStatus.o(.text); + BUILD_DIR/libultra.a:__osSpSetPc.o(.text); + BUILD_DIR/libultra.a:__osSpRawStartDma.o(.text); + BUILD_DIR/libultra.a:__osSpDeviceBusy.o(.text); + BUILD_DIR/libultra.a:__osSpGetStatus.o(.text); + BUILD_DIR/libultra.a:osGetThreadPri.o(.text); + BUILD_DIR/libultra.a:__osViGetCurrentContext.o(.text); + BUILD_DIR/libultra.a:__osViSwapContext.o(.text); +#ifdef VERSION_SH + BUILD_DIR/libultra.a:osLeoDiskInit.o(.text); +#endif + BUILD_DIR/libultra.a:__osPiCreateAccessQueue.o(.text); + BUILD_DIR/libultra.a:osPiRawStartDma.o(.text); + BUILD_DIR/libultra.a:osEPiRawStartDma.o(.text); + BUILD_DIR/libultra.a:__osDevMgrMain.o(.text); + BUILD_DIR/libultra.a:__osSiCreateAccessQueue.o(.text); + BUILD_DIR/libultra.a:__osSiRawStartDma.o(.text); + BUILD_DIR/libultra.a:osSetTimer.o(.text); + BUILD_DIR/libultra.a:osEepromWrite.o(.text); +#endif +#if ENABLE_RUMBLE + BUILD_DIR/libultra.a:osPfsIsPlug.o(.text); + BUILD_DIR/libultra.a:crc.o(.text); + BUILD_DIR/libultra.a:contramwrite.o(.text); + BUILD_DIR/libultra.a:contramread.o(.text); +#endif +#ifndef VERSION_CN + BUILD_DIR/libultra.a:osJamMesg.o(.text); + BUILD_DIR/libultra.a:osPiGetCmdQueue.o(.text); + BUILD_DIR/libultra.a:osEepromRead.o(.text); + BUILD_DIR/libultra.a:guMtxF2L.o(.text); + BUILD_DIR/libultra.a:guNormalize.o(.text); + BUILD_DIR/libultra.a:__osAiDeviceBusy.o(.text); + BUILD_DIR/libultra.a:ldiv.o(.text); + BUILD_DIR/libultra.a:__osSiDeviceBusy.o(.text); +#endif +#ifdef VERSION_SH + BUILD_DIR/libultra.a:leointerrupt.o(.text); +#endif + BUILD_DIR/libultra.a:osSetIntMask.o(.text); +#ifndef VERSION_CN + BUILD_DIR/libultra.a:osDestroyThread.o(.text); +#endif +#ifdef VERSION_EU + BUILD_DIR/libultra.a:osLeoDiskInit.o(.text); +#endif +#ifndef VERSION_CN + BUILD_DIR/libultra.a:__osSetCompare.o(.text); + BUILD_DIR/libultra.a:__osProbeTLB.o(.text); + BUILD_DIR/libultra.a:__osResetGlobalIntMask.o(.text); + BUILD_DIR/libultra.a:osEPiRawWriteIo.o(.text); +#endif +#ifdef VERSION_SH + BUILD_DIR/libultra.a:osEPiRawReadIo.o(.text); + BUILD_DIR/libultra.a:__osSetGlobalIntMask.o(.text); +#endif +#ifndef VERSION_CN + BUILD_DIR/libultra.a:osYieldThread.o(.text); +#endif +#if ENABLE_RUMBLE + BUILD_DIR/libultra.a:pfsgetstatus.o(.text); +#endif +#ifdef VERSION_CN + BUILD_DIR/libgcc.a:_divdi3.o(.text); + BUILD_DIR/libgcc.a:_moddi3.o(.text); + BUILD_DIR/libgcc.a:_udivdi3.o(.text); + BUILD_DIR/libgcc.a:_umoddi3.o(.text); + BUILD_DIR/libgcc.a:_cmpdi2.o(.text); + BUILD_DIR/libgcc.a:_floatdidf.o(.text); + BUILD_DIR/libgcc.a:_floatdisf.o(.text); + BUILD_DIR/libgcc.a:_fixunsdfdi.o(.text); + BUILD_DIR/libgcc.a:_fixdfdi.o(.text); + BUILD_DIR/libgcc.a:_fixunssfdi.o(.text); + BUILD_DIR/libgcc.a:_fixsfdi.o(.text); +#endif + BUILD_DIR/lib/rsp.o(.text); +#else + BUILD_DIR/src/game*.o(.text); + BUILD_DIR/src/audio*.o(.text); + BUILD_DIR/libultra.a:parameters.o(.text); + BUILD_DIR/libultra.a:osSetTime.o(.text); + BUILD_DIR/libultra.a:osMapTLB.o(.text); + BUILD_DIR/libultra.a:osUnmapTLBAll.o(.text); + BUILD_DIR/libultra.a:sprintf.o(.text); + BUILD_DIR/libultra.a:osCreateMesgQueue.o(.text); + BUILD_DIR/libultra.a:osSetEventMesg.o(.text); + BUILD_DIR/libultra.a:osViSetEvent.o(.text); + BUILD_DIR/libultra.a:osCreateThread.o(.text); + BUILD_DIR/libultra.a:osRecvMesg.o(.text); + BUILD_DIR/libultra.a:osSpTaskLoadGo.o(.text); + BUILD_DIR/libultra.a:osSpTaskYield.o(.text); + BUILD_DIR/libultra.a:osSendMesg.o(.text); + BUILD_DIR/libultra.a:osSpTaskYielded.o(.text); + BUILD_DIR/libultra.a:osStartThread.o(.text); + BUILD_DIR/libultra.a:osWritebackDCacheAll.o(.text); + BUILD_DIR/libultra.a:osCreateViManager.o(.text); + BUILD_DIR/libultra.a:osViSetMode.o(.text); + BUILD_DIR/libultra.a:osViBlack.o(.text); + BUILD_DIR/libultra.a:osViSetSpecialFeatures.o(.text); + BUILD_DIR/libultra.a:osCreatePiManager.o(.text); + BUILD_DIR/libultra.a:osSetThreadPri.o(.text); + BUILD_DIR/libultra.a:osInitialize.o(.text); + BUILD_DIR/libultra.a:osViSwapBuffer.o(.text); + BUILD_DIR/libultra.a:sqrtf.o(.text); + BUILD_DIR/libultra.a:osContStartReadData.o(.text); + BUILD_DIR/libultra.a:osContInit.o(.text); + BUILD_DIR/libultra.a:osEepromProbe.o(.text); +#if ENABLE_RUMBLE + BUILD_DIR/libultra.a:motor.o(.text); +#endif + BUILD_DIR/libultra.a:llmuldiv.o(.text); + BUILD_DIR/libultra.a:llmuldiv_gcc.o(.text); + BUILD_DIR/libultra.a:osInvalDCache.o(.text); + BUILD_DIR/libultra.a:osPiStartDma.o(.text); + BUILD_DIR/libultra.a:bzero.o(.text); + BUILD_DIR/libultra.a:osInvalICache.o(.text); + BUILD_DIR/libultra.a:osEepromLongRead.o(.text); + BUILD_DIR/libultra.a:osEepromLongWrite.o(.text); + BUILD_DIR/libultra.a:bcopy.o(.text); + BUILD_DIR/libultra.a:guOrthoF.o(.text); + BUILD_DIR/libultra.a:guPerspectiveF.o(.text); + BUILD_DIR/libultra.a:osGetTime.o(.text); + BUILD_DIR/libultra.a:llconv.o(.text); + BUILD_DIR/libultra.a:cosf.o(.text); + BUILD_DIR/libultra.a:sinf.o(.text); + BUILD_DIR/libultra.a:guTranslateF.o(.text); + BUILD_DIR/libultra.a:guRotateF.o(.text); + BUILD_DIR/libultra.a:guScaleF.o(.text); + BUILD_DIR/libultra.a:osAiSetFrequency.o(.text); + BUILD_DIR/libultra.a:alBnkfNew.o(.text); + BUILD_DIR/libultra.a:osWritebackDCache.o(.text); + BUILD_DIR/libultra.a:osAiGetLength.o(.text); + BUILD_DIR/libultra.a:osAiSetNextBuffer.o(.text); + BUILD_DIR/libultra.a:osTimer.o(.text); + BUILD_DIR/libultra.a:_Printf.o(.text); + BUILD_DIR/libultra.a:string.o(.text); + BUILD_DIR/libultra.a:__osDequeueThread.o(.text); + BUILD_DIR/libultra.a:__osDisableInt.o(.text); + BUILD_DIR/libultra.a:__osRestoreInt.o(.text); + BUILD_DIR/libultra.a:__osViInit.o(.text); + BUILD_DIR/libultra.a:__osExceptionPreamble.o(.text); + BUILD_DIR/libultra.a:osVirtualToPhysical.o(.text); + BUILD_DIR/libultra.a:__osSpSetStatus.o(.text); + BUILD_DIR/libultra.a:__osSpSetPc.o(.text); + BUILD_DIR/libultra.a:__osSpRawStartDma.o(.text); + BUILD_DIR/libultra.a:__osSpDeviceBusy.o(.text); + BUILD_DIR/libultra.a:__osSpGetStatus.o(.text); + BUILD_DIR/libultra.a:osGetThreadPri.o(.text); + BUILD_DIR/libultra.a:__osViGetCurrentContext.o(.text); + BUILD_DIR/libultra.a:__osViSwapContext.o(.text); + BUILD_DIR/libultra.a:osGetCount.o(.text); + BUILD_DIR/libultra.a:__osPiCreateAccessQueue.o(.text); + BUILD_DIR/libultra.a:osPiRawStartDma.o(.text); + BUILD_DIR/libultra.a:__osDevMgrMain.o(.text); + BUILD_DIR/libultra.a:__osSetSR.o(.text); + BUILD_DIR/libultra.a:__osGetSR.o(.text); + BUILD_DIR/libultra.a:__osSetFpcCsr.o(.text); + BUILD_DIR/libultra.a:__osSiRawReadIo.o(.text); + BUILD_DIR/libultra.a:__osSiRawWriteIo.o(.text); + BUILD_DIR/libultra.a:osMapTLBRdb.o(.text); + BUILD_DIR/libultra.a:osPiRawReadIo.o(.text); #ifdef VERSION_JP - . += 0x40; + . += 0x40; #endif - BUILD_DIR/libultra.a:__osSiCreateAccessQueue.o(.text); - BUILD_DIR/libultra.a:__osSiRawStartDma.o(.text); - BUILD_DIR/libultra.a:osSetTimer.o(.text); - BUILD_DIR/libultra.a:osEepromWrite.o(.text); + BUILD_DIR/libultra.a:__osSiCreateAccessQueue.o(.text); + BUILD_DIR/libultra.a:__osSiRawStartDma.o(.text); + BUILD_DIR/libultra.a:osSetTimer.o(.text); + BUILD_DIR/libultra.a:osEepromWrite.o(.text); #if ENABLE_RUMBLE - BUILD_DIR/libultra.a:osPfsIsPlug.o(.text); - BUILD_DIR/libultra.a:crc.o(.text); - BUILD_DIR/libultra.a:contramwrite.o(.text); - BUILD_DIR/libultra.a:contramread.o(.text); + BUILD_DIR/libultra.a:osPfsIsPlug.o(.text); + BUILD_DIR/libultra.a:crc.o(.text); + BUILD_DIR/libultra.a:contramwrite.o(.text); + BUILD_DIR/libultra.a:contramread.o(.text); #endif - BUILD_DIR/libultra.a:osJamMesg.o(.text); - BUILD_DIR/libultra.a:osPiGetCmdQueue.o(.text); - BUILD_DIR/libultra.a:osEepromRead.o(.text); - BUILD_DIR/libultra.a:guMtxF2L.o(.text); - BUILD_DIR/libultra.a:guMtxIdentF.o(.text); - BUILD_DIR/libultra.a:guNormalize.o(.text); - BUILD_DIR/libultra.a:__osAiDeviceBusy.o(.text); - BUILD_DIR/libultra.a:__osSetCompare.o(.text); - BUILD_DIR/libultra.a:_Litob.o(.text); - BUILD_DIR/libultra.a:_Ldtob.o(.text); - BUILD_DIR/libultra.a:kdebugserver.o(.text); - BUILD_DIR/libultra.a:__osSyncPutChars.o(.text); - BUILD_DIR/libultra.a:osSetIntMask.o(.text); - BUILD_DIR/libultra.a:osDestroyThread.o(.text); - BUILD_DIR/libultra.a:__osProbeTLB.o(.text); - BUILD_DIR/libultra.a:__osSiDeviceBusy.o(.text); - BUILD_DIR/libultra.a:ldiv.o(.text); - BUILD_DIR/libultra.a:__osGetCause.o(.text); - BUILD_DIR/libultra.a:__osAtomicDec.o(.text); - BUILD_DIR/libultra.a:guLookAtRef.o(.text); /* Fast3DEX2 only */ + BUILD_DIR/libultra.a:osJamMesg.o(.text); + BUILD_DIR/libultra.a:osPiGetCmdQueue.o(.text); + BUILD_DIR/libultra.a:osEepromRead.o(.text); + BUILD_DIR/libultra.a:guMtxF2L.o(.text); + BUILD_DIR/libultra.a:guMtxIdentF.o(.text); + BUILD_DIR/libultra.a:guNormalize.o(.text); + BUILD_DIR/libultra.a:__osAiDeviceBusy.o(.text); + BUILD_DIR/libultra.a:__osSetCompare.o(.text); + BUILD_DIR/libultra.a:_Litob.o(.text); + BUILD_DIR/libultra.a:_Ldtob.o(.text); + BUILD_DIR/libultra.a:kdebugserver.o(.text); + BUILD_DIR/libultra.a:__osSyncPutChars.o(.text); + BUILD_DIR/libultra.a:osSetIntMask.o(.text); + BUILD_DIR/libultra.a:osDestroyThread.o(.text); + BUILD_DIR/libultra.a:__osProbeTLB.o(.text); + BUILD_DIR/libultra.a:__osSiDeviceBusy.o(.text); + BUILD_DIR/libultra.a:ldiv.o(.text); + BUILD_DIR/libultra.a:__osGetCause.o(.text); + BUILD_DIR/libultra.a:__osAtomicDec.o(.text); + BUILD_DIR/libultra.a:guLookAtRef.o(.text); /* Fast3DEX2 only */ #if ENABLE_RUMBLE - BUILD_DIR/libultra.a:unk_shindou_file_3.o(.text); + BUILD_DIR/libultra.a:pfsgetstatus.o(.text); #endif - BUILD_DIR/lib/rsp.o(.text); + BUILD_DIR/lib/rsp.o(.text); #endif - /* data */ - BUILD_DIR/src/game/crash_screen.o(.data*); - BUILD_DIR/src/game/main.o(.data*); - BUILD_DIR/src/game/game_init.o(.data*); - BUILD_DIR/src/game/sound_init.o(.data*); + /* data */ + BUILD_DIR/src/game/crash_screen.o(.data*); + BUILD_DIR/src/game/main.o(.data*); + BUILD_DIR/src/game/game_init.o(.data*); + BUILD_DIR/src/game/sound_init.o(.data*); #if ENABLE_RUMBLE - BUILD_DIR/src/game/rumble_init.o(.data*); + BUILD_DIR/src/game/rumble_init.o(.data*); #endif - BUILD_DIR/src/game/level_update.o(.data*); - BUILD_DIR/src/game/interaction.o(.data*); - BUILD_DIR/src/game/mario.o(.data*); - BUILD_DIR/src/game/mario_step.o(.data*); - BUILD_DIR/src/game/mario_actions_cutscene.o(.data*); - BUILD_DIR/src/game/mario_actions_moving.o(.data*); - BUILD_DIR/src/game/mario_actions_submerged.o(.data*); - BUILD_DIR/src/game/mario_actions_object.o(.data*); - BUILD_DIR/src/game/mario_misc.o(.data*); - BUILD_DIR/src/game/memory.o(.data*); - BUILD_DIR/src/game/save_file.o(.data*); - BUILD_DIR/src/game/area.o(.data*); - BUILD_DIR/src/game/rendering_graph_node.o(.data*); - BUILD_DIR/src/game/profiler.o(.data*); - BUILD_DIR/src/game/camera.o(.data*); - BUILD_DIR/src/game/object_list_processor.o(.data*); + BUILD_DIR/src/game/level_update.o(.data*); + BUILD_DIR/src/game/interaction.o(.data*); + BUILD_DIR/src/game/mario.o(.data*); + BUILD_DIR/src/game/mario_step.o(.data*); + BUILD_DIR/src/game/mario_actions_cutscene.o(.data*); + BUILD_DIR/src/game/mario_actions_moving.o(.data*); + BUILD_DIR/src/game/mario_actions_submerged.o(.data*); + BUILD_DIR/src/game/mario_actions_object.o(.data*); + BUILD_DIR/src/game/mario_misc.o(.data*); + BUILD_DIR/src/game/memory.o(.data*); + BUILD_DIR/src/game/save_file.o(.data*); + BUILD_DIR/src/game/area.o(.data*); + BUILD_DIR/src/game/rendering_graph_node.o(.data*); + BUILD_DIR/src/game/profiler.o(.data*); + BUILD_DIR/src/game/camera.o(.data*); + BUILD_DIR/src/game/object_list_processor.o(.data*); #ifndef VERSION_EU - BUILD_DIR/src/game/object_helpers.o(.data*); + BUILD_DIR/src/game/object_helpers.o(.data*); #endif - BUILD_DIR/src/game/behavior_actions.o(.data*); - BUILD_DIR/src/game/platform_displacement.o(.data*); - BUILD_DIR/src/game/spawn_sound.o(.data*); - BUILD_DIR/src/game/debug.o(.data*); - BUILD_DIR/src/game/screen_transition.o(.data*); - BUILD_DIR/src/game/shadow.o(.data*); - BUILD_DIR/src/game/skybox.o(.data*); - BUILD_DIR/src/game/moving_texture.o(.data*); - BUILD_DIR/src/game/geo_misc.o(.data*); - BUILD_DIR/src/game/paintings.o(.data*); - BUILD_DIR/src/game/print.o(.data*); - BUILD_DIR/src/game/ingame_menu.o(.data*); - BUILD_DIR/src/game/envfx_snow.o(.data*); - BUILD_DIR/src/game/envfx_bubbles.o(.data*); - BUILD_DIR/src/game/macro_special_objects.o(.data*); - BUILD_DIR/src/game/hud.o(.data*); - BUILD_DIR/src/game/obj_behaviors.o(.data*); - BUILD_DIR/src/game/obj_behaviors_2.o(.data*); + BUILD_DIR/src/game/behavior_actions.o(.data*); + BUILD_DIR/src/game/platform_displacement.o(.data*); + BUILD_DIR/src/game/spawn_sound.o(.data*); + BUILD_DIR/src/game/debug.o(.data*); + BUILD_DIR/src/game/screen_transition.o(.data*); + BUILD_DIR/src/game/shadow.o(.data*); + BUILD_DIR/src/game/skybox.o(.data*); + BUILD_DIR/src/game/moving_texture.o(.data*); + BUILD_DIR/src/game/geo_misc.o(.data*); + BUILD_DIR/src/game/paintings.o(.data*); + BUILD_DIR/src/game/print.o(.data*); + BUILD_DIR/src/game/ingame_menu.o(.data*); + BUILD_DIR/src/game/envfx_snow.o(.data*); + BUILD_DIR/src/game/envfx_bubbles.o(.data*); + BUILD_DIR/src/game/macro_special_objects.o(.data*); + BUILD_DIR/src/game/hud.o(.data*); + BUILD_DIR/src/game/obj_behaviors.o(.data*); + BUILD_DIR/src/game/obj_behaviors_2.o(.data*); #ifndef VERSION_EU - /* wildcard doesn't match on EU due to files being moved to engine/ */ - BUILD_DIR/src/game*.o(.data*); + /* wildcard doesn't match on EU due to files being moved to engine/ */ + BUILD_DIR/src/game*.o(.data*); #endif -#ifdef VERSION_SH - BUILD_DIR/src/audio/synthesis_sh.o(.data*); +#if defined(VERSION_SH) || defined(VERSION_CN) + BUILD_DIR/src/audio/synthesis_sh.o(.data*); #else - BUILD_DIR/src/audio/synthesis.o(.data*); + BUILD_DIR/src/audio/synthesis.o(.data*); #endif - BUILD_DIR/src/audio/heap.o(.data*); - BUILD_DIR/src/audio/load.o(.data*); - BUILD_DIR/src/audio/playback.o(.data*); - BUILD_DIR/src/audio/effects.o(.data*); - BUILD_DIR/src/audio/seqplayer.o(.data*); -#ifdef VERSION_SH - BUILD_DIR/src/audio/data.o(.data*); - BUILD_DIR/src/audio/shindou_debug_prints.o(.data*); - BUILD_DIR/src/audio/port_sh.o(.data*); - BUILD_DIR/src/audio/external.o(.data*); - BUILD_DIR/src/audio/audio_session_presets_sh.o(.data*); + BUILD_DIR/src/audio/heap.o(.data*); + BUILD_DIR/src/audio/load.o(.data*); + BUILD_DIR/src/audio/playback.o(.data*); + BUILD_DIR/src/audio/effects.o(.data*); + BUILD_DIR/src/audio/seqplayer.o(.data*); +#if defined(VERSION_SH) || defined(VERSION_CN) + BUILD_DIR/src/audio/data.o(.data*); + BUILD_DIR/src/audio/shindou_debug_prints.o(.data*); + BUILD_DIR/src/audio/port_sh.o(.data*); + BUILD_DIR/src/audio/external.o(.data*); + BUILD_DIR/src/audio/audio_session_presets_sh.o(.data*); #else - BUILD_DIR/src/audio/external.o(.data*); - BUILD_DIR/src/audio/port_eu.o(.data*); - BUILD_DIR/src/audio/data.o(.data*); + BUILD_DIR/src/audio/external.o(.data*); + BUILD_DIR/src/audio/port_eu.o(.data*); + BUILD_DIR/src/audio/data.o(.data*); #endif -#if defined(VERSION_EU) || defined(VERSION_SH) - BUILD_DIR/libultra.a:_Printf.o(.data*); - BUILD_DIR/libultra.a:osInitialize.o(.data*); - BUILD_DIR/libultra.a:osCreateViManager.o(.data*); - BUILD_DIR/libultra.a:osViTable.o(.data*); - BUILD_DIR/libultra.a:osCreatePiManager.o(.data*); - BUILD_DIR/libultra.a:osContInit.o(.data*); -#if ENABLE_RUMBLE - BUILD_DIR/libultra.a:motor.o(.data*); -#endif - BUILD_DIR/libultra.a:osAiSetNextBuffer.o(.data*); - BUILD_DIR/libultra.a:_Litob.o(.data*); - BUILD_DIR/libultra.a:__osExceptionPreamble.o(.data*); - BUILD_DIR/libultra.a:osTimer.o(.data*); - BUILD_DIR/libultra.a:__osViInit.o(.data*); - BUILD_DIR/libultra.a:__osDequeueThread.o(.data*); - BUILD_DIR/libultra.a:__osPiCreateAccessQueue.o(.data*); - BUILD_DIR/libultra.a:__osSiCreateAccessQueue.o(.data*); - BUILD_DIR/libultra.a:osViData.o(.data*); -#else - BUILD_DIR/libultra.a:osViTable.o(.data*); - BUILD_DIR/libultra.a:osCreateViManager.o(.data*); - BUILD_DIR/libultra.a:osCreatePiManager.o(.data*); - BUILD_DIR/libultra.a:osInitialize.o(.data*); - BUILD_DIR/libultra.a:osContInit.o(.data*); -#if ENABLE_RUMBLE - BUILD_DIR/libultra.a:motor.o(.data*); -#endif - BUILD_DIR/libultra.a:osAiSetNextBuffer.o(.data*); - BUILD_DIR/libultra.a:osTimer.o(.data*); - BUILD_DIR/libultra.a:_Printf.o(.data*); - BUILD_DIR/libultra.a:__osDequeueThread.o(.data*); - BUILD_DIR/libultra.a:__osViInit.o(.data*); - BUILD_DIR/libultra.a:__osExceptionPreamble.o(.data*); - BUILD_DIR/libultra.a:__osPiCreateAccessQueue.o(.data*); - BUILD_DIR/libultra.a:__osSiCreateAccessQueue.o(.data*); - BUILD_DIR/libultra.a:_Litob.o(.data*); - BUILD_DIR/libultra.a:_Ldtob.o(.data*); - BUILD_DIR/libultra.a:osViData.o(.data*); - BUILD_DIR/libultra.a:kdebugserver.o(.data*); - BUILD_DIR/libultra.a:__osSyncPutChars.o(.data*); - BUILD_DIR/libultra.a:guRotateF.o(.data*); - BUILD_DIR/libultra.a:*.o(.data*); +#ifdef VERSION_CN + BUILD_DIR/libultra.a:osAiSetNextBuffer.o(.data*); + BUILD_DIR/libultra.a:osContInit.o(.data*); + BUILD_DIR/libultra.a:_Printf.o(.data*); + BUILD_DIR/libultra.a:osSetEventMesg.o(.data*); + BUILD_DIR/libultra.a:__osSiCreateAccessQueue.o(.data*); + BUILD_DIR/libultra.a:__osDequeueThread.o(.data*); + BUILD_DIR/libultra.a:osTimer.o(.data*); + BUILD_DIR/libultra.a:osCreateViManager.o(.data*); + BUILD_DIR/libultra.a:osViTable.o(.data*); + BUILD_DIR/libultra.a:guRotateF.o(.data*); + BUILD_DIR/libultra.a:__osExceptionPreamble.o(.data*); + BUILD_DIR/libultra.a:osCreatePiManager.o(.data*); + BUILD_DIR/libultra.a:osCartRomInit.o(.data*); + BUILD_DIR/libultra.a:__osPiCreateAccessQueue.o(.data*); + BUILD_DIR/libultra.a:osInitialize.o(.data*); + BUILD_DIR/libultra.a:_Litob.o(.data*); + BUILD_DIR/libultra.a:__osViInit.o(.data*); + BUILD_DIR/libultra.a:osViData.o(.data*); #endif - /* rodata */ - BUILD_DIR/src/game/crash_screen.o(.rodata*); - BUILD_DIR/src/game/main.o(.rodata*); - BUILD_DIR/src/game/game_init.o(.rodata*); - BUILD_DIR/src/game/sound_init.o(.rodata*); - BUILD_DIR/src/game/level_update.o(.rodata*); - BUILD_DIR/src/game/interaction.o(.rodata*); - BUILD_DIR/src/game/mario.o(.rodata*); - BUILD_DIR/src/game/mario_step.o(.rodata*); - BUILD_DIR/src/game/mario_actions_cutscene.o(.rodata*); - BUILD_DIR/src/game/mario_actions_automatic.o(.rodata*); - BUILD_DIR/src/game/mario_actions_stationary.o(.rodata*); - BUILD_DIR/src/game/mario_actions_moving.o(.rodata*); - BUILD_DIR/src/game/mario_actions_airborne.o(.rodata*); - BUILD_DIR/src/game/mario_actions_submerged.o(.rodata*); - BUILD_DIR/src/game/mario_actions_object.o(.rodata*); - BUILD_DIR/src/game/mario_misc.o(.rodata*); - BUILD_DIR/src/game/area.o(.rodata*); - BUILD_DIR/src/game/rendering_graph_node.o(.rodata*); - BUILD_DIR/src/game/camera.o(.rodata*); - BUILD_DIR/src/game/object_list_processor.o(.rodata*); -#ifndef VERSION_EU - BUILD_DIR/src/game/object_helpers.o(.rodata*); +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) + BUILD_DIR/libultra.a:_Printf.o(.data*); + BUILD_DIR/libultra.a:osInitialize.o(.data*); + BUILD_DIR/libultra.a:osCreateViManager.o(.data*); + BUILD_DIR/libultra.a:osViTable.o(.data*); + BUILD_DIR/libultra.a:osCreatePiManager.o(.data*); + BUILD_DIR/libultra.a:osContInit.o(.data*); +#if ENABLE_RUMBLE + BUILD_DIR/libultra.a:motor.o(.data*); #endif - BUILD_DIR/src/game/behavior_actions.o(.rodata*); -#ifndef VERSION_EU - BUILD_DIR/src/game/object_collision.o(.rodata*); - BUILD_DIR/src/game/spawn_object.o(.rodata*); + BUILD_DIR/libultra.a:osAiSetNextBuffer.o(.data*); + BUILD_DIR/libultra.a:_Litob.o(.data*); + BUILD_DIR/libultra.a:__osExceptionPreamble.o(.data*); + BUILD_DIR/libultra.a:osTimer.o(.data*); + BUILD_DIR/libultra.a:__osViInit.o(.data*); + BUILD_DIR/libultra.a:__osDequeueThread.o(.data*); + BUILD_DIR/libultra.a:__osPiCreateAccessQueue.o(.data*); + BUILD_DIR/libultra.a:__osSiCreateAccessQueue.o(.data*); + BUILD_DIR/libultra.a:osViData.o(.data*); +#else + BUILD_DIR/libultra.a:osViTable.o(.data*); + BUILD_DIR/libultra.a:osCreateViManager.o(.data*); + BUILD_DIR/libultra.a:osCreatePiManager.o(.data*); + BUILD_DIR/libultra.a:osInitialize.o(.data*); + BUILD_DIR/libultra.a:osContInit.o(.data*); +#if ENABLE_RUMBLE + BUILD_DIR/libultra.a:motor.o(.data*); #endif - BUILD_DIR/libultra.a:__osDisableInt.o(.text); - BUILD_DIR/libultra.a:__osRestoreInt.o(.text); - BUILD_DIR/src/game/spawn_sound.o(.rodata*); - BUILD_DIR/src/game/debug.o(.rodata*); - BUILD_DIR/src/game/screen_transition.o(.rodata*); - BUILD_DIR/src/game/shadow.o(.rodata*); - BUILD_DIR/src/game/skybox.o(.rodata*); - BUILD_DIR/src/game/moving_texture.o(.rodata*); - BUILD_DIR/src/game/geo_misc.o(.rodata*); - BUILD_DIR/src/game/paintings.o(.rodata*); - BUILD_DIR/src/game/print.o(.rodata*); - BUILD_DIR/src/game/ingame_menu.o(.rodata*); - BUILD_DIR/src/game/envfx_snow.o(.rodata*); - BUILD_DIR/src/game/envfx_bubbles.o(.rodata*); - BUILD_DIR/src/game/macro_special_objects.o(.rodata*); - BUILD_DIR/src/game/hud.o(.rodata*); - BUILD_DIR/src/game/obj_behaviors.o(.rodata*); - BUILD_DIR/src/game/obj_behaviors_2.o(.rodata*); + BUILD_DIR/libultra.a:osAiSetNextBuffer.o(.data*); + BUILD_DIR/libultra.a:osTimer.o(.data*); + BUILD_DIR/libultra.a:_Printf.o(.data*); + BUILD_DIR/libultra.a:__osDequeueThread.o(.data*); + BUILD_DIR/libultra.a:__osViInit.o(.data*); + BUILD_DIR/libultra.a:__osExceptionPreamble.o(.data*); + BUILD_DIR/libultra.a:__osPiCreateAccessQueue.o(.data*); + BUILD_DIR/libultra.a:__osSiCreateAccessQueue.o(.data*); + BUILD_DIR/libultra.a:_Litob.o(.data*); + BUILD_DIR/libultra.a:_Ldtob.o(.data*); + BUILD_DIR/libultra.a:osViData.o(.data*); + BUILD_DIR/libultra.a:kdebugserver.o(.data*); + BUILD_DIR/libultra.a:__osSyncPutChars.o(.data*); + BUILD_DIR/libultra.a:guRotateF.o(.data*); + BUILD_DIR/libultra.a:*.o(.data*); +#endif + + /* rodata */ + BUILD_DIR/src/game/crash_screen.o(.rodata*); + BUILD_DIR/src/game/main.o(.rodata*); + BUILD_DIR/src/game/game_init.o(.rodata*); + BUILD_DIR/src/game/sound_init.o(.rodata*); + BUILD_DIR/src/game/rumble_init.o(.rodata*); + BUILD_DIR/src/game/level_update.o(.rodata*); + BUILD_DIR/src/game/interaction.o(.rodata*); + BUILD_DIR/src/game/mario.o(.rodata*); + BUILD_DIR/src/game/mario_step.o(.rodata*); + BUILD_DIR/src/game/mario_actions_cutscene.o(.rodata*); + BUILD_DIR/src/game/mario_actions_automatic.o(.rodata*); + BUILD_DIR/src/game/mario_actions_stationary.o(.rodata*); + BUILD_DIR/src/game/mario_actions_moving.o(.rodata*); + BUILD_DIR/src/game/mario_actions_airborne.o(.rodata*); + BUILD_DIR/src/game/mario_actions_submerged.o(.rodata*); + BUILD_DIR/src/game/mario_actions_object.o(.rodata*); + BUILD_DIR/src/game/mario_misc.o(.rodata*); + BUILD_DIR/src/game/memory.o(.rodata*); + BUILD_DIR/src/game/area.o(.rodata*); + BUILD_DIR/src/game/rendering_graph_node.o(.rodata*); + BUILD_DIR/src/game/camera.o(.rodata*); + BUILD_DIR/src/game/object_list_processor.o(.rodata*); +#ifndef VERSION_EU + BUILD_DIR/src/game/object_helpers.o(.rodata*); +#endif + BUILD_DIR/src/game/behavior_actions.o(.rodata*); +#ifndef VERSION_EU + BUILD_DIR/src/game/object_collision.o(.rodata*); + BUILD_DIR/src/game/spawn_object.o(.rodata*); +#endif + BUILD_DIR/libultra.a:__osDisableInt.o(.text); + BUILD_DIR/libultra.a:__osRestoreInt.o(.text); + BUILD_DIR/src/game/spawn_sound.o(.rodata*); + BUILD_DIR/src/game/debug.o(.rodata*); + BUILD_DIR/src/game/screen_transition.o(.rodata*); + BUILD_DIR/src/game/shadow.o(.rodata*); + BUILD_DIR/src/game/skybox.o(.rodata*); + BUILD_DIR/src/game/moving_texture.o(.rodata*); + BUILD_DIR/src/game/geo_misc.o(.rodata*); + BUILD_DIR/src/game/paintings.o(.rodata*); + BUILD_DIR/src/game/print.o(.rodata*); + BUILD_DIR/src/game/ingame_menu.o(.rodata*); + BUILD_DIR/src/game/envfx_snow.o(.rodata*); + BUILD_DIR/src/game/envfx_bubbles.o(.rodata*); + BUILD_DIR/src/game/macro_special_objects.o(.rodata*); + BUILD_DIR/src/game/hud.o(.rodata*); + BUILD_DIR/src/game/obj_behaviors.o(.rodata*); + BUILD_DIR/src/game/obj_behaviors_2.o(.rodata*); #if defined(VERSION_JP) || defined(VERSION_US) - BUILD_DIR/src/game*.o(.rodata*); + BUILD_DIR/src/game*.o(.rodata*); #endif -#ifdef VERSION_SH - BUILD_DIR/src/audio/synthesis_sh.o(.rodata*); - BUILD_DIR/src/audio/heap.o(.rodata*); - BUILD_DIR/src/audio/load_sh.o(.rodata*); - BUILD_DIR/src/audio/port_sh.o(.rodata*); +#if defined(VERSION_SH) || defined(VERSION_CN) + BUILD_DIR/src/audio/synthesis_sh.o(.rodata*); + BUILD_DIR/src/audio/heap.o(.rodata*); + BUILD_DIR/src/audio/load_sh.o(.rodata*); + BUILD_DIR/src/audio/port_sh.o(.rodata*); #else - BUILD_DIR/src/audio/synthesis.o(.rodata*); - BUILD_DIR/src/audio/heap.o(.rodata*); - BUILD_DIR/src/audio/load.o(.rodata*); + BUILD_DIR/src/audio/synthesis.o(.rodata*); + BUILD_DIR/src/audio/heap.o(.rodata*); + BUILD_DIR/src/audio/load.o(.rodata*); #endif - BUILD_DIR/src/audio/playback.o(.rodata*); - BUILD_DIR/src/audio/effects.o(.rodata*); - BUILD_DIR/src/audio/seqplayer.o(.rodata*); - BUILD_DIR/src/audio/external.o(.rodata*); - BUILD_DIR/src/audio/port_eu.o(.rodata*); - BUILD_DIR/src/audio*.o(.rodata*); + BUILD_DIR/src/audio/playback.o(.rodata*); + BUILD_DIR/src/audio/effects.o(.rodata*); + BUILD_DIR/src/audio/seqplayer.o(.rodata*); + BUILD_DIR/src/audio/external.o(.rodata*); + BUILD_DIR/src/audio/port_eu.o(.rodata*); + BUILD_DIR/src/audio*.o(.rodata*); #if defined(VERSION_EU) || defined(VERSION_SH) - BUILD_DIR/libultra.a:_Printf.o(.rodata*); + BUILD_DIR/libultra.a:_Printf.o(.rodata*); #endif - BUILD_DIR/libultra.a:guPerspectiveF.o(.rodata*); - BUILD_DIR/libultra.a:llconv.o(.rodata*); - BUILD_DIR/libultra.a:cosf.o(.rodata*); - BUILD_DIR/libultra.a:sinf.o(.rodata*); - BUILD_DIR/libultra.a:guRotateF.o(.rodata*); +#ifndef VERSION_CN + BUILD_DIR/libultra.a:guPerspectiveF.o(.rodata*); +#endif + BUILD_DIR/libultra.a:llconv.o(.rodata*); + BUILD_DIR/libultra.a:cosf.o(.rodata*); +#ifdef VERSION_CN + BUILD_DIR/libultra.a:guPerspectiveF.o(.rodata*); +#endif + BUILD_DIR/libultra.a:sinf.o(.rodata*); + BUILD_DIR/libultra.a:guRotateF.o(.rodata*); #if defined(VERSION_EU) || defined(VERSION_SH) - BUILD_DIR/libultra.a:_Litob.o(.rodata*); - BUILD_DIR/libultra.a:_Ldtob.o(.rodata*); - BUILD_DIR/libultra.a:__osExceptionPreamble.o(.rodata*); - BUILD_DIR/libultra.a:__osDevMgrMain.o(.rodata*); - BUILD_DIR/libultra.a:NaN.o(.rodata*); + BUILD_DIR/libultra.a:_Litob.o(.rodata*); + BUILD_DIR/libultra.a:_Ldtob.o(.rodata*); + BUILD_DIR/libultra.a:__osExceptionPreamble.o(.rodata*); + BUILD_DIR/libultra.a:__osDevMgrMain.o(.rodata*); + BUILD_DIR/libultra.a:NaN.o(.rodata*); #else - BUILD_DIR/libultra.a:_Printf.o(.rodata*); - BUILD_DIR/libultra.a:__osExceptionPreamble.o(.rodata*); - BUILD_DIR/libultra.a:NaN.o(.rodata*); - BUILD_DIR/libultra.a:_Litob.o(.rodata*); - BUILD_DIR/libultra.a:_Ldtob.o(.rodata*); + BUILD_DIR/libultra.a:_Printf.o(.rodata*); + BUILD_DIR/libultra.a:__osExceptionPreamble.o(.rodata*); +#ifdef VERSION_CN + BUILD_DIR/libultra.a:osSetIntMask.o(.rodata*); + BUILD_DIR/libultra.a:__osDevMgrMain.o(.rodata*); +#endif + BUILD_DIR/libultra.a:NaN.o(.rodata*); + BUILD_DIR/libultra.a:_Litob.o(.rodata*); + BUILD_DIR/libultra.a:_Ldtob.o(.rodata*); #endif - BUILD_DIR/libultra.a:osSetIntMask.o(.rodata*); - BUILD_DIR/libultra.a:guLookAtRef.o(.rodata*); /* Fast3DEX2 only */ + BUILD_DIR/libultra.a:osSetIntMask.o(.rodata*); + BUILD_DIR/libultra.a:guLookAtRef.o(.rodata*); /* Fast3DEX2 only */ + +#ifdef VERSION_CN + BUILD_DIR/libgcc.a:_divdi3.o(.rodata*); + BUILD_DIR/libgcc.a:_moddi3.o(.rodata*); + BUILD_DIR/libgcc.a:_udivdi3.o(.rodata*); + BUILD_DIR/libgcc.a:_umoddi3.o(.rodata*); + BUILD_DIR/libgcc.a:_cmpdi2.o(.rodata*); + BUILD_DIR/libgcc.a:_floatdidf.o(.rodata*); + BUILD_DIR/libgcc.a:_floatdisf.o(.rodata*); + BUILD_DIR/libgcc.a:_fixunsdfdi.o(.rodata*); + BUILD_DIR/libgcc.a:_fixdfdi.o(.rodata*); + BUILD_DIR/libgcc.a:_fixunssfdi.o(.rodata*); + BUILD_DIR/libgcc.a:_fixsfdi.o(.rodata*); +#endif #ifndef VERSION_EU - BUILD_DIR/libultra.a:*.o(.rodata*); + BUILD_DIR/libultra.a:*.o(.rodata*); #endif - /* audio blobs, should really be moved into a separate file */ -#ifdef VERSION_SH - BUILD_DIR/src/audio/load_sh.o(.data*); + /* audio blobs, should really be moved into a separate file */ +#if defined(VERSION_SH) || defined(VERSION_CN) + BUILD_DIR/src/audio/load_sh.o(.data*); #endif - BUILD_DIR/lib/rsp.o(.rodata*); - } - END_SEG(main) - BEGIN_NOLOAD(main) - { - BUILD_DIR/src/game/crash_screen.o(.bss*); - BUILD_DIR/src/game/main.o(.bss*); - BUILD_DIR/src/game/game_init.o(.bss*); - BUILD_DIR/src/game/sound_init.o(.bss*); + BUILD_DIR/lib/rsp.o(.rodata*); + } + END_SEG(main) + + BEGIN_NOLOAD(main) + { + BUILD_DIR/src/game/cn_common_syms_1.o(.bss*); + BUILD_DIR/src/game/crash_screen.o(.bss*); + BUILD_DIR/src/game/main.o(.bss*); + BUILD_DIR/src/game/game_init.o(.bss*); + BUILD_DIR/src/game/sound_init.o(.bss*); #if ENABLE_RUMBLE - BUILD_DIR/src/game/rumble_init.o(.bss*); + BUILD_DIR/src/game/rumble_init.o(.bss*); #endif - BUILD_DIR/src/game/level_update.o(.bss*); - BUILD_DIR/src/game/interaction.o(.bss*); - BUILD_DIR/src/game/mario.o(.bss*); - BUILD_DIR/src/game/mario_actions_cutscene.o(.bss*); - BUILD_DIR/src/game/mario_actions_moving.o(.bss*); - BUILD_DIR/src/game/mario_actions_submerged.o(.bss*); - BUILD_DIR/src/game/mario_misc.o(.bss*); - BUILD_DIR/src/game/memory.o(.bss*); - BUILD_DIR/src/game/save_file.o(.bss*); - BUILD_DIR/src/game/area.o(.bss*); - BUILD_DIR/src/game/rendering_graph_node.o(.bss*); - BUILD_DIR/src/game/profiler.o(.bss*); - BUILD_DIR/src/game/camera.o(.bss*); - BUILD_DIR/src/game/object_list_processor.o(.bss*); + BUILD_DIR/src/game/level_update.o(.bss*); + BUILD_DIR/src/game/interaction.o(.bss*); + BUILD_DIR/src/game/mario.o(.bss*); + BUILD_DIR/src/game/mario_actions_cutscene.o(.bss*); + BUILD_DIR/src/game/mario_actions_moving.o(.bss*); + BUILD_DIR/src/game/mario_actions_submerged.o(.bss*); + BUILD_DIR/src/game/mario_misc.o(.bss*); + BUILD_DIR/src/game/memory.o(.bss*); + BUILD_DIR/src/game/save_file.o(.bss*); + BUILD_DIR/src/game/area.o(.bss*); + BUILD_DIR/src/game/rendering_graph_node.o(.bss*); + BUILD_DIR/src/game/profiler.o(.bss*); + BUILD_DIR/src/game/camera.o(.bss*); + BUILD_DIR/src/game/object_list_processor.o(.bss*); #ifndef VERSION_EU - BUILD_DIR/src/game/object_helpers.o(.bss*); + BUILD_DIR/src/game/object_helpers.o(.bss*); #endif - BUILD_DIR/src/game/behavior_actions.o(.bss*); - BUILD_DIR/src/game/debug.o(.bss*); - BUILD_DIR/src/game/shadow.o(.bss*); - BUILD_DIR/src/game/skybox.o(.bss*); - BUILD_DIR/src/game/moving_texture.o(.bss*); - BUILD_DIR/src/game/geo_misc.o(.bss*); - BUILD_DIR/src/game/paintings.o(.bss*); - BUILD_DIR/src/game/print.o(.bss*); - BUILD_DIR/src/game/ingame_menu.o(.bss*); - BUILD_DIR/src/game/envfx_snow.o(.bss*); - BUILD_DIR/src/game/envfx_bubbles.o(.bss*); - BUILD_DIR/src/game/macro_special_objects.o(.bss*); - BUILD_DIR/src/game/hud.o(.bss*); - BUILD_DIR/src/game/obj_behaviors.o(.bss*); - BUILD_DIR/src/game/obj_behaviors_2.o(.bss*); -#ifndef VERSION_EU - BUILD_DIR/src/game*.o(.bss*); + BUILD_DIR/src/game/behavior_actions.o(.bss*); + BUILD_DIR/src/game/debug.o(.bss*); + BUILD_DIR/src/game/shadow.o(.bss*); + BUILD_DIR/src/game/skybox.o(.bss*); + BUILD_DIR/src/game/moving_texture.o(.bss*); + BUILD_DIR/src/game/geo_misc.o(.bss*); + BUILD_DIR/src/game/paintings.o(.bss*); + BUILD_DIR/src/game/print.o(.bss*); + BUILD_DIR/src/game/ingame_menu.o(.bss*); + BUILD_DIR/src/game/envfx_snow.o(.bss*); + BUILD_DIR/src/game/envfx_bubbles.o(.bss*); + BUILD_DIR/src/game/macro_special_objects.o(.bss*); + BUILD_DIR/src/game/hud.o(.bss*); + BUILD_DIR/src/game/obj_behaviors.o(.bss*); + BUILD_DIR/src/game/obj_behaviors_2.o(.bss*); +#if !defined(VERSION_EU) && !defined(VERSION_CN) + BUILD_DIR/src/game*.o(.bss*); #endif - BUILD_DIR/src/audio/external.o(.bss*); + BUILD_DIR/src/audio/external.o(.bss*); #ifdef VERSION_EU - BUILD_DIR/src/audio/port_eu.o(.bss*); + BUILD_DIR/src/audio/port_eu.o(.bss*); #endif -#ifdef VERSION_SH - BUILD_DIR/src/audio/globals_start.o(.bss*); - BUILD_DIR/src/audio/synthesis_sh.o(.bss*); - BUILD_DIR/src/audio/heap.o(.bss*); - BUILD_DIR/src/audio/load_sh.o(.bss*); - BUILD_DIR/src/audio/data.o(.bss*); +#if defined(VERSION_SH) || defined(VERSION_CN) + BUILD_DIR/src/audio/globals_start.o(.bss*); + BUILD_DIR/src/audio/synthesis_sh.o(.bss*); + BUILD_DIR/src/audio/heap.o(.bss*); + BUILD_DIR/src/audio/load_sh.o(.bss*); + BUILD_DIR/src/audio/data.o(.bss*); #endif -#if defined(VERSION_EU) || defined(VERSION_SH) - BUILD_DIR/libultra.a:osInitialize.o(.bss*); - BUILD_DIR/libultra.a:osSetEventMesg.o(.bss*); - BUILD_DIR/libultra.a:osSpTaskLoadGo.o(.bss*); - BUILD_DIR/libultra.a:osCreateViManager.o(.bss*); - BUILD_DIR/libultra.a:osCreatePiManager.o(.bss*); - BUILD_DIR/libultra.a:osContStartReadData.o(.bss*); - BUILD_DIR/libultra.a:osContInit.o(.bss*); -#if ENABLE_RUMBLE - BUILD_DIR/libultra.a:motor.o(.bss*); +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) + BUILD_DIR/libultra.a:osInitialize.o(.bss*); + BUILD_DIR/libultra.a:osSetEventMesg.o(.bss*); + BUILD_DIR/libultra.a:osSpTaskLoadGo.o(.bss*); +#ifdef VERSION_CN + BUILD_DIR/libultra.a:__osSiCreateAccessQueue.o(.bss*); #endif - BUILD_DIR/libultra.a:guRotateF.o(.bss*); + BUILD_DIR/libultra.a:osCreateViManager.o(.bss*); + BUILD_DIR/libultra.a:osCreatePiManager.o(.bss*); + BUILD_DIR/libultra.a:osContStartReadData.o(.bss*); + BUILD_DIR/libultra.a:osContInit.o(.bss*); +#if ENABLE_RUMBLE + BUILD_DIR/libultra.a:motor.o(.bss*); +#endif + BUILD_DIR/libultra.a:guRotateF.o(.bss*); #ifdef VERSION_SH - BUILD_DIR/libultra.a:osCartRomInit.o(.bss*); + BUILD_DIR/libultra.a:osCartRomInit.o(.bss*); #endif #ifdef VERSION_EU - BUILD_DIR/libultra.a:leointerrupt.o(.bss*); + BUILD_DIR/libultra.a:leointerrupt.o(.bss*); #endif - BUILD_DIR/libultra.a:osTimer.o(.bss*); + BUILD_DIR/libultra.a:osTimer.o(.bss*); #ifdef VERSION_SH - BUILD_DIR/libultra.a:osLeoDiskInit.o(.bss*); + BUILD_DIR/libultra.a:osLeoDiskInit.o(.bss*); +#endif + BUILD_DIR/libultra.a:__osPiCreateAccessQueue.o(.bss*); +#ifndef VERSION_CN + BUILD_DIR/libultra.a:__osSiCreateAccessQueue.o(.bss*); #endif - BUILD_DIR/libultra.a:__osPiCreateAccessQueue.o(.bss*); - BUILD_DIR/libultra.a:__osSiCreateAccessQueue.o(.bss*); #if ENABLE_RUMBLE - BUILD_DIR/libultra.a:osPfsIsPlug.o(.bss*); + BUILD_DIR/libultra.a:osPfsIsPlug.o(.bss*); #endif - BUILD_DIR/libultra.a:osEepromWrite.o(.bss*); - BUILD_DIR/libultra.a:kdebugserver.o(.bss*); + BUILD_DIR/libultra.a:osEepromWrite.o(.bss*); + BUILD_DIR/libultra.a:kdebugserver.o(.bss*); #ifdef VERSION_SH - BUILD_DIR/libultra.a:leointerrupt.o(.bss*); + BUILD_DIR/libultra.a:leointerrupt.o(.bss*); #endif #ifdef VERSION_EU - BUILD_DIR/libultra.a:osLeoDiskInit.o(.bss*); + BUILD_DIR/libultra.a:osLeoDiskInit.o(.bss*); #endif - BUILD_DIR/libultra.a:_Printf.o(.bss*); - BUILD_DIR/libultra.a:osAiSetNextBuffer.o(.bss*); - BUILD_DIR/libultra.a:EU_D_802f4330.o(.bss*); + BUILD_DIR/libultra.a:_Printf.o(.bss*); + BUILD_DIR/libultra.a:osAiSetNextBuffer.o(.bss*); + BUILD_DIR/libultra.a:__osSetHWintrRoutine.o(.bss*); #else - BUILD_DIR/libultra.a:osSetEventMesg.o(.bss*); - BUILD_DIR/libultra.a:osSpTaskLoadGo.o(.bss*); - BUILD_DIR/libultra.a:osCreateViManager.o(.bss*); - BUILD_DIR/libultra.a:osCreatePiManager.o(.bss*); - BUILD_DIR/libultra.a:osInitialize.o(.bss*); - BUILD_DIR/libultra.a:osContStartReadData.o(.bss*); - BUILD_DIR/libultra.a:osContInit.o(.bss*); + BUILD_DIR/libultra.a:osSetEventMesg.o(.bss*); + BUILD_DIR/libultra.a:osSpTaskLoadGo.o(.bss*); + BUILD_DIR/libultra.a:osCreateViManager.o(.bss*); + BUILD_DIR/libultra.a:osCreatePiManager.o(.bss*); + BUILD_DIR/libultra.a:osInitialize.o(.bss*); + BUILD_DIR/libultra.a:osContStartReadData.o(.bss*); + BUILD_DIR/libultra.a:osContInit.o(.bss*); #if ENABLE_RUMBLE - BUILD_DIR/libultra.a:motor.o(.bss*); + BUILD_DIR/libultra.a:motor.o(.bss*); #endif - BUILD_DIR/libultra.a:guRotateF.o(.bss*); - BUILD_DIR/libultra.a:osTimer.o(.bss*); - BUILD_DIR/libultra.a:_Printf.o(.bss*); - BUILD_DIR/libultra.a:__osPiCreateAccessQueue.o(.bss*); - BUILD_DIR/libultra.a:__osSiCreateAccessQueue.o(.bss*); + BUILD_DIR/libultra.a:guRotateF.o(.bss*); + BUILD_DIR/libultra.a:osTimer.o(.bss*); + BUILD_DIR/libultra.a:_Printf.o(.bss*); + BUILD_DIR/libultra.a:__osPiCreateAccessQueue.o(.bss*); + BUILD_DIR/libultra.a:__osSiCreateAccessQueue.o(.bss*); #if ENABLE_RUMBLE - BUILD_DIR/libultra.a:osPfsIsPlug.o(.bss*); + BUILD_DIR/libultra.a:osPfsIsPlug.o(.bss*); #endif - BUILD_DIR/libultra.a:osEepromWrite.o(.bss*); - BUILD_DIR/libultra.a:kdebugserver_stack.o(.bss*); - BUILD_DIR/libultra.a:kdebugserver.o(.bss*); + BUILD_DIR/libultra.a:osEepromWrite.o(.bss*); + BUILD_DIR/libultra.a:kdebugserver_stack.o(.bss*); + BUILD_DIR/libultra.a:kdebugserver.o(.bss*); #endif - BUILD_DIR/libultra.a:*.o(.bss*); - . = ALIGN(0x8); - } - END_NOLOAD(main) - _mainSegmentNoloadSizeLo = SIZEOF (.main.noload) & 0xffff; - _mainSegmentNoloadSizeHi = SIZEOF (.main.noload) >> 16; - ASSERT((. <= SEG_ENGINE), "Error: main segment extended into engine.") + BUILD_DIR/libultra.a:*.o(.bss*); - BEGIN_SEG(engine, SEG_ENGINE) - { - BUILD_DIR/src/engine/math_util.o(.text); - BUILD_DIR/src/engine/graph_node.o(.text); - BUILD_DIR/src/engine/graph_node_manager.o(.text); - BUILD_DIR/src/engine/geo_layout.o(.text); - BUILD_DIR/src/engine/level_script.o(.text); - BUILD_DIR/src/engine/surface_collision.o(.text); - BUILD_DIR/src/engine/surface_load.o(.text); - BUILD_DIR/src/engine/behavior_script.o(.text); + BUILD_DIR/src/game/cn_common_syms_2.o(.bss*); + + . = ALIGN(0x8); + } + END_NOLOAD(main) + +#ifdef VERSION_CN + // Hack for CN to make asm/entry.s match, since we aren't using + // the original assembler and so can't get lui/ori from la pseudo + CREATE_LO_HI_PAIR(_mainSegmentNoloadStart, ADDR (.main.noload)) + CREATE_LO_HI_PAIR(gIdleThreadStack, gIdleThreadStack) + CREATE_LO_HI_PAIR(main_func, main_func) +#endif + + CREATE_LO_HI_PAIR(_mainSegmentNoloadSize, SIZEOF (.main.noload)) + + BEGIN_SEG(engine, ADDR_OR_ALIGN(SEG_ENGINE)) + { + BUILD_DIR/src/engine/math_util.o(.text); + BUILD_DIR/src/engine/graph_node.o(.text); + BUILD_DIR/src/engine/graph_node_manager.o(.text); + BUILD_DIR/src/engine/geo_layout.o(.text); + BUILD_DIR/src/engine/level_script.o(.text); + BUILD_DIR/src/engine/surface_collision.o(.text); + BUILD_DIR/src/engine/surface_load.o(.text); + BUILD_DIR/src/engine/behavior_script.o(.text); #ifdef VERSION_EU - BUILD_DIR/src/game/object_collision.o(.text); - BUILD_DIR/src/game/spawn_object.o(.text); - BUILD_DIR/src/game/object_helpers.o(.text); + BUILD_DIR/src/game/object_collision.o(.text); + BUILD_DIR/src/game/spawn_object.o(.text); + BUILD_DIR/src/game/object_helpers.o(.text); #endif - BUILD_DIR/src/engine*.o(.text); - /* data */ - BUILD_DIR/src/engine/graph_node.o(.data*); - BUILD_DIR/src/engine/graph_node_manager.o(.data*); - BUILD_DIR/src/engine/math_util.o(.data*); - BUILD_DIR/src/engine/geo_layout.o(.data*); - BUILD_DIR/src/engine/level_script.o(.data*); - BUILD_DIR/src/engine/behavior_script.o(.data*); + BUILD_DIR/src/engine*.o(.text); + /* data */ + BUILD_DIR/src/engine/graph_node.o(.data*); + BUILD_DIR/src/engine/graph_node_manager.o(.data*); + BUILD_DIR/src/engine/math_util.o(.data*); + BUILD_DIR/src/engine/geo_layout.o(.data*); + BUILD_DIR/src/engine/level_script.o(.data*); + BUILD_DIR/src/engine/behavior_script.o(.data*); #ifdef VERSION_EU - BUILD_DIR/src/game/object_collision.o(.data*); - BUILD_DIR/src/game/spawn_object.o(.data*); - BUILD_DIR/src/game/object_helpers.o(.data*); + BUILD_DIR/src/game/object_collision.o(.data*); + BUILD_DIR/src/game/spawn_object.o(.data*); + BUILD_DIR/src/game/object_helpers.o(.data*); #endif - BUILD_DIR/src/engine*.o(.data*); - /* rodata */ - BUILD_DIR/src/engine/math_util.o(.rodata*); - BUILD_DIR/src/engine/level_script.o(.rodata*); - BUILD_DIR/src/engine/surface_collision.o(.rodata*); - BUILD_DIR/src/engine/surface_load.o(.rodata*); + BUILD_DIR/src/engine*.o(.data*); + /* rodata */ + BUILD_DIR/src/engine/math_util.o(.rodata*); + BUILD_DIR/src/engine/level_script.o(.rodata*); + BUILD_DIR/src/engine/surface_collision.o(.rodata*); + BUILD_DIR/src/engine/surface_load.o(.rodata*); #ifdef VERSION_EU - BUILD_DIR/src/game/object_collision.o(.rodata*); - BUILD_DIR/src/game/spawn_object.o(.rodata*); - BUILD_DIR/src/game/object_helpers.o(.rodata*); + BUILD_DIR/src/game/object_collision.o(.rodata*); + BUILD_DIR/src/game/spawn_object.o(.rodata*); + BUILD_DIR/src/game/object_helpers.o(.rodata*); #endif - BUILD_DIR/src/engine*.o(.rodata*); - } - END_SEG(engine) - BEGIN_NOLOAD(engine) - { - BUILD_DIR/src/engine/math_util.o(.bss*); - BUILD_DIR/src/engine/geo_layout.o(.bss*); - BUILD_DIR/src/engine/level_script.o(.bss*); - BUILD_DIR/src/engine/surface_collision.o(.bss*); - BUILD_DIR/src/engine/surface_load.o(.bss*); - BUILD_DIR/src/engine/behavior_script.o(.bss*); +#ifdef VERSION_CN + BUILD_DIR/src/engine/stub.o(.rodata*); +#endif + BUILD_DIR/src/engine*.o(.rodata*); + } + END_SEG(engine) + BEGIN_NOLOAD(engine) + { + BUILD_DIR/src/engine/math_util.o(.bss*); + BUILD_DIR/src/engine/geo_layout.o(.bss*); + BUILD_DIR/src/engine/level_script.o(.bss*); + BUILD_DIR/src/engine/surface_collision.o(.bss*); + BUILD_DIR/src/engine/surface_load.o(.bss*); + BUILD_DIR/src/engine/behavior_script.o(.bss*); #ifdef VERSION_EU - BUILD_DIR/src/game/object_collision.o(.bss*); - BUILD_DIR/src/game/spawn_object.o(.bss*); - BUILD_DIR/src/game/object_helpers.o(.bss*); + BUILD_DIR/src/game/object_collision.o(.bss*); + BUILD_DIR/src/game/spawn_object.o(.bss*); + BUILD_DIR/src/game/object_helpers.o(.bss*); #endif - BUILD_DIR/src/engine*.o(.bss*); - } - END_NOLOAD(engine) + BUILD_DIR/src/engine*.o(.bss*); + } + END_NOLOAD(engine) - ASSERT((. <= SEG_FRAMEBUFFERS), "Error: engine segment extended into framebuffers.") + . = ADDR_OR_ALIGN(SEG_FRAMEBUFFERS); + BEGIN_NOLOAD(framebuffers) + { + BUILD_DIR/src/buffers/framebuffers.o(.bss*); + } + END_NOLOAD(framebuffers) - . = SEG_FRAMEBUFFERS; - BEGIN_NOLOAD(framebuffers) - { - BUILD_DIR/src/buffers/framebuffers.o(.bss*); - } - END_NOLOAD(framebuffers) + BEGIN_SEG(entry, 0x10000000) + { + BUILD_DIR/levels/entry.o(.data); + } + END_SEG(entry) - __expansionRamStart = 0x80400000; - ASSERT((. <= __expansionRamStart), "Error: RDRAM expanded into Expansion RAM, despite Expansion RAM not being defined.") - - BEGIN_SEG(entry, 0x10000000) - { - BUILD_DIR/levels/entry.o(.data); - } - END_SEG(entry) - - /* load MIO0 and level data */ - MIO0_SEG(segment2, 0x02000000) + /* load MIO0 and level data */ + MIO0_SEG(segment2, 0x02000000) #ifdef VERSION_EU - MIO0_EU_SEG(translation_en, 0x19000000) - MIO0_EU_SEG(translation_fr, 0x19000000) - MIO0_EU_SEG(translation_de, 0x19000000) + MIO0_EU_SEG(translation_en, 0x19000000) + MIO0_EU_SEG(translation_fr, 0x19000000) + MIO0_EU_SEG(translation_de, 0x19000000) #endif - /* mario actor group */ - STANDARD_OBJECTS(group0, 0x04000000, 0x17000000) + /* mario actor group */ + STANDARD_OBJECTS(group0, 0x04000000, 0x17000000) - /* load the other actor groups */ - STANDARD_OBJECTS(group1, 0x05000000, 0x0C000000) - STANDARD_OBJECTS(group2, 0x05000000, 0x0C000000) - STANDARD_OBJECTS(group3, 0x05000000, 0x0C000000) - STANDARD_OBJECTS(group4, 0x05000000, 0x0C000000) - STANDARD_OBJECTS(group5, 0x05000000, 0x0C000000) - STANDARD_OBJECTS(group6, 0x05000000, 0x0C000000) - STANDARD_OBJECTS(group7, 0x05000000, 0x0C000000) - STANDARD_OBJECTS(group8, 0x05000000, 0x0C000000) - STANDARD_OBJECTS(group9, 0x05000000, 0x0C000000) - STANDARD_OBJECTS(group10, 0x05000000, 0x0C000000) - STANDARD_OBJECTS(group11, 0x05000000, 0x0C000000) - STANDARD_OBJECTS(group12, 0x06000000, 0x0D000000) - STANDARD_OBJECTS(group13, 0x06000000, 0x0D000000) - STANDARD_OBJECTS(group14, 0x06000000, 0x0D000000) - STANDARD_OBJECTS(group15, 0x06000000, 0x0D000000) - STANDARD_OBJECTS(group16, 0x06000000, 0x0D000000) - STANDARD_OBJECTS(group17, 0x06000000, 0x0D000000) + /* load the other actor groups */ + STANDARD_OBJECTS(group1, 0x05000000, 0x0C000000) + STANDARD_OBJECTS(group2, 0x05000000, 0x0C000000) + STANDARD_OBJECTS(group3, 0x05000000, 0x0C000000) + STANDARD_OBJECTS(group4, 0x05000000, 0x0C000000) + STANDARD_OBJECTS(group5, 0x05000000, 0x0C000000) + STANDARD_OBJECTS(group6, 0x05000000, 0x0C000000) + STANDARD_OBJECTS(group7, 0x05000000, 0x0C000000) + STANDARD_OBJECTS(group8, 0x05000000, 0x0C000000) + STANDARD_OBJECTS(group9, 0x05000000, 0x0C000000) + STANDARD_OBJECTS(group10, 0x05000000, 0x0C000000) + STANDARD_OBJECTS(group11, 0x05000000, 0x0C000000) + STANDARD_OBJECTS(group12, 0x06000000, 0x0D000000) + STANDARD_OBJECTS(group13, 0x06000000, 0x0D000000) + STANDARD_OBJECTS(group14, 0x06000000, 0x0D000000) + STANDARD_OBJECTS(group15, 0x06000000, 0x0D000000) + STANDARD_OBJECTS(group16, 0x06000000, 0x0D000000) + STANDARD_OBJECTS(group17, 0x06000000, 0x0D000000) - /* load the common actor groups */ - STANDARD_OBJECTS(common0, 0x08000000, 0x0F000000) - STANDARD_OBJECTS(common1, 0x03000000, 0x16000000) + /* load the common actor groups */ + STANDARD_OBJECTS(common0, 0x08000000, 0x0F000000) + STANDARD_OBJECTS(common1, 0x03000000, 0x16000000) - /* use segmented addressing for behaviors */ - BEGIN_SEG(behavior, 0x13000000) - { - BUILD_DIR/data/behavior_data.o(.data); - } - END_SEG(behavior) + /* use segmented addressing for behaviors */ + BEGIN_SEG(behavior, 0x13000000) + { + BUILD_DIR/data/behavior_data.o(.data); + } + END_SEG(behavior) - /* 0x8016F000 21D7D0-255EC0 [386F0] */ - BEGIN_SEG(goddard, SEG_GODDARD) - { - BUILD_DIR/src/menu/title_screen.o(.text); - BUILD_DIR/src/menu/intro_geo.o(.text); - BUILD_DIR/src/menu/file_select.o(.text); - BUILD_DIR/src/menu/star_select.o(.text); - BUILD_DIR/src/menu*.o(.text); - BUILD_DIR/libgoddard.a:gd_main.o(.text); - BUILD_DIR/libgoddard.a:gd_memory.o(.text); - BUILD_DIR/libgoddard.a:sfx.o(.text); - BUILD_DIR/libgoddard.a:draw_objects.o(.text); - BUILD_DIR/libgoddard.a:objects.o(.text); - BUILD_DIR/libgoddard.a:skin_movement.o(.text); - BUILD_DIR/libgoddard.a:particles.o(.text); - BUILD_DIR/libgoddard.a:dynlist_proc.o(.text); - BUILD_DIR/libgoddard.a:old_menu.o(.text); - BUILD_DIR/libgoddard.a:debug_utils.o(.text); - BUILD_DIR/libgoddard.a:joints.o(.text); - BUILD_DIR/libgoddard.a:skin.o(.text); - BUILD_DIR/libgoddard.a:gd_math.o(.text); - BUILD_DIR/libgoddard.a:shape_helper.o(.text); - BUILD_DIR/libgoddard.a:renderer.o(.text); - BUILD_DIR/libgoddard.a:*.o(.text); - /* data, rodata, per file */ - BUILD_DIR/src/menu/title_screen.o(.data*); - BUILD_DIR/src/menu/title_screen.o(.rodata*); - BUILD_DIR/src/menu/intro_geo.o(.data*); - BUILD_DIR/src/menu/file_select.o(.data*); - BUILD_DIR/src/menu/file_select.o(.rodata*); - BUILD_DIR/src/menu/star_select.o(.data*); - BUILD_DIR/src/menu/star_select.o(.rodata*); - BUILD_DIR/src/menu*.o(.data*); - BUILD_DIR/src/menu*.o(.rodata*); - /* goddard subsystem data */ - BUILD_DIR/libgoddard.a:gd_main.o(.data*); - BUILD_DIR/libgoddard.a:draw_objects.o(.data*); - BUILD_DIR/libgoddard.a:objects.o(.data*); - BUILD_DIR/libgoddard.a:particles.o(.data*); - BUILD_DIR/libgoddard.a:dynlist_proc.o(.data*); - BUILD_DIR/libgoddard.a:debug_utils.o(.data*); - BUILD_DIR/libgoddard.a:joints.o(.data*); - BUILD_DIR/libgoddard.a:shape_helper.o(.data*); - BUILD_DIR/libgoddard.a:renderer.o(.data*); - /* goddard subsystem rodata */ - BUILD_DIR/libgoddard.a:gd_main.o(.rodata*); - BUILD_DIR/libgoddard.a:gd_memory.o(.rodata*); - BUILD_DIR/libgoddard.a:draw_objects.o(.rodata*); - BUILD_DIR/libgoddard.a:objects.o(.rodata*); - BUILD_DIR/libgoddard.a:skin_movement.o(.rodata*); - BUILD_DIR/libgoddard.a:particles.o(.rodata*); - BUILD_DIR/libgoddard.a:dynlist_proc.o(.rodata*); - BUILD_DIR/libgoddard.a:old_menu.o(.rodata*); - BUILD_DIR/libgoddard.a:debug_utils.o(.rodata*); - BUILD_DIR/libgoddard.a:joints.o(.rodata*); - BUILD_DIR/libgoddard.a:skin.o(.rodata*); - BUILD_DIR/libgoddard.a:gd_math.o(.rodata*); - BUILD_DIR/libgoddard.a:shape_helper.o(.rodata*); - BUILD_DIR/libgoddard.a:renderer.o(.rodata*); - } - END_SEG(goddard) - BEGIN_NOLOAD(goddard) - { - BUILD_DIR/src/menu/intro_geo.o(.bss*); - BUILD_DIR/src/menu/file_select.o(.bss*); - BUILD_DIR/src/menu/star_select.o(.bss*); - BUILD_DIR/src/menu*.o(.bss*); - BUILD_DIR/libgoddard.a:gd_main.o(.bss*); - BUILD_DIR/libgoddard.a:gd_memory.o(.bss*); - BUILD_DIR/libgoddard.a:sfx.o(.bss*); - BUILD_DIR/libgoddard.a:draw_objects.o(.bss*); - BUILD_DIR/libgoddard.a:objects.o(.bss*); - BUILD_DIR/libgoddard.a:skin_movement.o(.bss*); - BUILD_DIR/libgoddard.a:particles.o(.bss*); - BUILD_DIR/libgoddard.a:dynlist_proc.o(.bss*); - BUILD_DIR/libgoddard.a:old_menu.o(.bss*); - BUILD_DIR/libgoddard.a:debug_utils.o(.bss*); - BUILD_DIR/libgoddard.a:joints.o(.bss*); - BUILD_DIR/libgoddard.a:skin.o(.bss*); - BUILD_DIR/libgoddard.a:shape_helper.o(.bss*); - BUILD_DIR/libgoddard.a:renderer.o(.bss*); - BUILD_DIR/libgoddard.a:*.o(.bss*); - } - END_NOLOAD(goddard) + /* 0x8016F000 21D7D0-255EC0 [386F0] */ + BEGIN_SEG(goddard, SEG_GODDARD) + { + BUILD_DIR/src/menu/title_screen.o(.text); + BUILD_DIR/src/menu/intro_geo.o(.text); + BUILD_DIR/src/menu/file_select.o(.text); + BUILD_DIR/src/menu/star_select.o(.text); + BUILD_DIR/src/menu*.o(.text); + BUILD_DIR/libgoddard.a:gd_main.o(.text); + BUILD_DIR/libgoddard.a:gd_memory.o(.text); + BUILD_DIR/libgoddard.a:sfx.o(.text); + BUILD_DIR/libgoddard.a:draw_objects.o(.text); + BUILD_DIR/libgoddard.a:objects.o(.text); + BUILD_DIR/libgoddard.a:skin_movement.o(.text); + BUILD_DIR/libgoddard.a:particles.o(.text); + BUILD_DIR/libgoddard.a:dynlist_proc.o(.text); + BUILD_DIR/libgoddard.a:old_menu.o(.text); + BUILD_DIR/libgoddard.a:debug_utils.o(.text); + BUILD_DIR/libgoddard.a:joints.o(.text); + BUILD_DIR/libgoddard.a:skin.o(.text); + BUILD_DIR/libgoddard.a:gd_math.o(.text); + BUILD_DIR/libgoddard.a:shape_helper.o(.text); + BUILD_DIR/libgoddard.a:renderer.o(.text); + BUILD_DIR/libgoddard.a:*.o(.text); + /* data, rodata, per file */ + BUILD_DIR/src/menu/title_screen.o(.data*); + BUILD_DIR/src/menu/title_screen.o(.rodata*); + BUILD_DIR/src/menu/intro_geo.o(.data*); + BUILD_DIR/src/menu/file_select.o(.data*); + BUILD_DIR/src/menu/file_select.o(.rodata*); + BUILD_DIR/src/menu/star_select.o(.data*); + BUILD_DIR/src/menu/star_select.o(.rodata*); + BUILD_DIR/src/menu*.o(.data*); + BUILD_DIR/src/menu*.o(.rodata*); + /* goddard subsystem data */ + BUILD_DIR/libgoddard.a:gd_main.o(.data*); + BUILD_DIR/libgoddard.a:draw_objects.o(.data*); + BUILD_DIR/libgoddard.a:objects.o(.data*); + BUILD_DIR/libgoddard.a:particles.o(.data*); + BUILD_DIR/libgoddard.a:dynlist_proc.o(.data*); + BUILD_DIR/libgoddard.a:debug_utils.o(.data*); + BUILD_DIR/libgoddard.a:joints.o(.data*); + BUILD_DIR/libgoddard.a:shape_helper.o(.data*); + BUILD_DIR/libgoddard.a:renderer.o(.data*); + /* goddard subsystem rodata */ + BUILD_DIR/libgoddard.a:gd_main.o(.rodata*); + BUILD_DIR/libgoddard.a:gd_memory.o(.rodata*); + BUILD_DIR/libgoddard.a:draw_objects.o(.rodata*); + BUILD_DIR/libgoddard.a:objects.o(.rodata*); + BUILD_DIR/libgoddard.a:skin_movement.o(.rodata*); + BUILD_DIR/libgoddard.a:particles.o(.rodata*); + BUILD_DIR/libgoddard.a:dynlist_proc.o(.rodata*); + BUILD_DIR/libgoddard.a:old_menu.o(.rodata*); + BUILD_DIR/libgoddard.a:debug_utils.o(.rodata*); + BUILD_DIR/libgoddard.a:joints.o(.rodata*); + BUILD_DIR/libgoddard.a:skin.o(.rodata*); + BUILD_DIR/libgoddard.a:gd_math.o(.rodata*); + BUILD_DIR/libgoddard.a:shape_helper.o(.rodata*); + BUILD_DIR/libgoddard.a:renderer.o(.rodata*); + } + END_SEG(goddard) + BEGIN_NOLOAD(goddard) + { + BUILD_DIR/src/menu/intro_geo.o(.bss*); + BUILD_DIR/src/menu/file_select.o(.bss*); + BUILD_DIR/src/menu/star_select.o(.bss*); + BUILD_DIR/src/menu*.o(.bss*); + BUILD_DIR/libgoddard.a:gd_main.o(.bss*); + BUILD_DIR/libgoddard.a:gd_memory.o(.bss*); + BUILD_DIR/libgoddard.a:sfx.o(.bss*); + BUILD_DIR/libgoddard.a:draw_objects.o(.bss*); + BUILD_DIR/libgoddard.a:objects.o(.bss*); + BUILD_DIR/libgoddard.a:skin_movement.o(.bss*); + BUILD_DIR/libgoddard.a:particles.o(.bss*); + BUILD_DIR/libgoddard.a:dynlist_proc.o(.bss*); + BUILD_DIR/libgoddard.a:old_menu.o(.bss*); + BUILD_DIR/libgoddard.a:debug_utils.o(.bss*); + BUILD_DIR/libgoddard.a:joints.o(.bss*); + BUILD_DIR/libgoddard.a:skin.o(.bss*); + BUILD_DIR/libgoddard.a:shape_helper.o(.bss*); + BUILD_DIR/libgoddard.a:renderer.o(.bss*); + BUILD_DIR/libgoddard.a:*.o(.bss*); + } + END_NOLOAD(goddard) - ASSERT((. <= SEG_POOL_END), "Error: extended past pool end.") + /* 0x268020 0x268020-0 [0] */ + BEGIN_SEG(intro, 0x14000000) + { + BUILD_DIR/levels/intro/script.o(.data); + BUILD_DIR/levels/intro/geo.o(.data); + } + END_SEG(intro) + BEGIN_SEG(intro_segment_7, 0x07000000) + { + BUILD_DIR/levels/intro/leveldata.mio0.o(.data); + . = ALIGN(0x10); + } + END_SEG(intro_segment_7) - . = SEG_BUFFERS; - BEGIN_NOLOAD(buffers) - { - BUILD_DIR/src/buffers/buffers.o(.bss*); - BUILD_DIR/src/audio/globals_start.o(.bss*); -#ifdef VERSION_SH - BUILD_DIR/src/audio/port_sh.o(.bss*); -#else - BUILD_DIR/src/audio/synthesis.o(.bss*); - BUILD_DIR/src/audio/heap.o(.bss*); - BUILD_DIR/src/audio/load.o(.bss*); - BUILD_DIR/src/audio/data.o(.bss*); -#endif - BUILD_DIR/src/audio*.o(.bss*); + MIO0_SEG(debug_level_select, 0x07000000) + MIO0_SEG(title_screen_bg, 0x0A000000) -#ifdef VERSION_EU - . = ALIGN(0x200); -#else - . = ALIGN(0x1000); -#endif -#ifdef VERSION_SH - . += 0xB000; -#endif - BUILD_DIR/src/buffers/gfx_output_buffer.o(.bss*); - } - END_NOLOAD(buffers) + /* 271B20-2A42A0 [32780] */ + BEGIN_SEG(gd_dynlists, 0x04000000) + { + BUILD_DIR/libgoddard.a:dynlist_test_cube.o(.data); + BUILD_DIR/libgoddard.a:dynlist_unused.o(.data); + BUILD_DIR/libgoddard.a:dynlist_mario_face.o(.data); + BUILD_DIR/libgoddard.a:dynlists_mario_eyes.o(.data); + BUILD_DIR/libgoddard.a:dynlists_mario_eyebrows_mustache.o(.data); + BUILD_DIR/libgoddard.a:dynlist_mario_master.o(.data); + BUILD_DIR/libgoddard.a:anim_mario_mustache_right.o(.data); + BUILD_DIR/libgoddard.a:anim_mario_mustache_left.o(.data); + BUILD_DIR/libgoddard.a:anim_mario_lips_1.o(.data); + BUILD_DIR/libgoddard.a:anim_mario_lips_2.o(.data); + BUILD_DIR/libgoddard.a:anim_mario_eyebrows_1.o(.data); + BUILD_DIR/libgoddard.a:anim_group_1.o(.data); + BUILD_DIR/libgoddard.a:anim_group_2.o(.data); + BUILD_DIR/libgoddard.a:dynlist_test_cube.o(.rodata*); + BUILD_DIR/libgoddard.a:dynlist_unused.o(.rodata*); + BUILD_DIR/libgoddard.a:*.o(.data); + BUILD_DIR/libgoddard.a:*.o(.rodata); + } + END_SEG(gd_dynlists) - ASSERT((. <= SEG_MAIN), "Error: buffers segment extended into main") + gMainLevels = __romPos; - /* 0x268020 0x268020-0 [0] */ - BEGIN_SEG(intro, 0x14000000) - { - BUILD_DIR/levels/intro/script.o(.data); - BUILD_DIR/levels/intro/geo.o(.data); - } - END_SEG(intro) - BEGIN_SEG(intro_segment_7, 0x07000000) - { - BUILD_DIR/levels/intro/leveldata.mio0.o(.data); - . = ALIGN(0x10); - } - END_SEG(intro_segment_7) + BEGIN_SEG(menu, 0x14000000) + { + BUILD_DIR/levels/menu/script.o(.data); + BUILD_DIR/levels/menu/geo.o(.data); + } + END_SEG(menu) + BEGIN_SEG(menu_segment_7, 0x07000000) + { + BUILD_DIR/levels/menu/leveldata.mio0.o(.data); + . = ALIGN(0x10); + } + END_SEG(menu_segment_7) - MIO0_SEG(debug_level_select, 0x07000000) - MIO0_SEG(title_screen_bg, 0x0A000000) + BEGIN_SEG(scripts, 0x15000000) + { + BUILD_DIR/levels/scripts.o(.data); + } + END_SEG(scripts) - /* 271B20-2A42A0 [32780] */ - BEGIN_SEG(gd_dynlists, 0x04000000) - { - BUILD_DIR/libgoddard.a:dynlist_test_cube.o(.data); - BUILD_DIR/libgoddard.a:dynlist_unused.o(.data); - BUILD_DIR/libgoddard.a:dynlist_mario_face.o(.data); - BUILD_DIR/libgoddard.a:dynlists_mario_eyes.o(.data); - BUILD_DIR/libgoddard.a:dynlists_mario_eyebrows_mustache.o(.data); - BUILD_DIR/libgoddard.a:dynlist_mario_master.o(.data); - BUILD_DIR/libgoddard.a:anim_mario_mustache_right.o(.data); - BUILD_DIR/libgoddard.a:anim_mario_mustache_left.o(.data); - BUILD_DIR/libgoddard.a:anim_mario_lips_1.o(.data); - BUILD_DIR/libgoddard.a:anim_mario_lips_2.o(.data); - BUILD_DIR/libgoddard.a:anim_mario_eyebrows_1.o(.data); - BUILD_DIR/libgoddard.a:anim_group_1.o(.data); - BUILD_DIR/libgoddard.a:anim_group_2.o(.data); - BUILD_DIR/libgoddard.a:dynlist_test_cube.o(.rodata*); - BUILD_DIR/libgoddard.a:dynlist_unused.o(.rodata*); - BUILD_DIR/libgoddard.a:*.o(.data); - BUILD_DIR/libgoddard.a:*.o(.rodata); - } - END_SEG(gd_dynlists) + MIO0_SEG(water_skybox, 0x0A000000) + MIO0_SEG(ccm_skybox, 0x0A000000) + MIO0_SEG(clouds_skybox, 0x0A000000) + MIO0_SEG(bitfs_skybox, 0x0A000000) + MIO0_SEG(wdw_skybox, 0x0A000000) + MIO0_SEG(cloud_floor_skybox, 0x0A000000) + MIO0_SEG(ssl_skybox, 0x0A000000) + MIO0_SEG(bbh_skybox, 0x0A000000) + MIO0_SEG(bidw_skybox, 0x0A000000) + MIO0_SEG(bits_skybox, 0x0A000000) - gMainLevels = __romPos; - - BEGIN_SEG(menu, 0x14000000) - { - BUILD_DIR/levels/menu/script.o(.data); - BUILD_DIR/levels/menu/geo.o(.data); - } - END_SEG(menu) - BEGIN_SEG(menu_segment_7, 0x07000000) - { - BUILD_DIR/levels/menu/leveldata.mio0.o(.data); - . = ALIGN(0x10); - } - END_SEG(menu_segment_7) - - BEGIN_SEG(scripts, 0x15000000) - { - BUILD_DIR/levels/scripts.o(.data); - } - END_SEG(scripts) - - MIO0_SEG(water_skybox, 0x0A000000) - MIO0_SEG(ccm_skybox, 0x0A000000) - MIO0_SEG(clouds_skybox, 0x0A000000) - MIO0_SEG(bitfs_skybox, 0x0A000000) - MIO0_SEG(wdw_skybox, 0x0A000000) - MIO0_SEG(cloud_floor_skybox, 0x0A000000) - MIO0_SEG(ssl_skybox, 0x0A000000) - MIO0_SEG(bbh_skybox, 0x0A000000) - MIO0_SEG(bidw_skybox, 0x0A000000) - MIO0_SEG(bits_skybox, 0x0A000000) - - // Texture bins - MIO0_SEG(fire, 0x09000000) - MIO0_SEG(spooky, 0x09000000) - MIO0_SEG(generic, 0x09000000) - MIO0_SEG(water, 0x09000000) - MIO0_SEG(sky, 0x09000000) - MIO0_SEG(snow, 0x09000000) - MIO0_SEG(cave, 0x09000000) - MIO0_SEG(machine, 0x09000000) - MIO0_SEG(mountain, 0x09000000) - MIO0_SEG(grass, 0x09000000) - MIO0_SEG(outside, 0x09000000) - MIO0_SEG(inside, 0x09000000) - MIO0_SEG(effect, 0x0B000000) + // Texture bins + MIO0_SEG(fire, 0x09000000) + MIO0_SEG(spooky, 0x09000000) + MIO0_SEG(generic, 0x09000000) + MIO0_SEG(water, 0x09000000) + MIO0_SEG(sky, 0x09000000) + MIO0_SEG(snow, 0x09000000) + MIO0_SEG(cave, 0x09000000) + MIO0_SEG(machine, 0x09000000) + MIO0_SEG(mountain, 0x09000000) + MIO0_SEG(grass, 0x09000000) + MIO0_SEG(outside, 0x09000000) + MIO0_SEG(inside, 0x09000000) + MIO0_SEG(effect, 0x0B000000) #define STUB_LEVEL(_0, _1, _2, _3, _4, _5, _6, _7, _8) #define DEFINE_LEVEL(_0, _1, _2, folder, _4, _5, _6, _7, _8, _9, _10) STANDARD_LEVEL(folder) - #include "levels/level_defines.h" + #include "levels/level_defines.h" #undef STUB_LEVEL #undef DEFINE_LEVEL - /* 4E9FA0-? [?] */ - BEGIN_SEG(assets, __romPos) - { - BUILD_DIR/assets/mario_anim_data.o(.data); - BUILD_DIR/assets/mario_anim_data.o(.rodata); - BUILD_DIR/assets/demo_data.o(.data); - BUILD_DIR/sound/sound_data.o(.data); - } - END_SEG(assets) + /* 4E9FA0-? [?] */ + BEGIN_SEG(assets, __romPos) + { + BUILD_DIR/assets/mario_anim_data.o(.data); + BUILD_DIR/assets/mario_anim_data.o(.rodata); + BUILD_DIR/assets/demo_data.o(.data); + BUILD_DIR/sound/sound_data.o(.data); + } + END_SEG(assets) - /* Discard everything not specifically mentioned above. */ - /DISCARD/ : - { - *(*); - } + /* Discard everything not specifically mentioned above. */ + /DISCARD/ : + { + *(*); + } + + ASSERT((_goddardSegmentNoloadEnd <= SEG_POOL_END), "Error: menu segment extended past pool end") + ASSERT((_mainSegmentNoloadEnd <= _engineSegmentStart), "Error: main segment extended into engine.") + ASSERT((_engineSegmentNoloadEnd <= _framebuffersSegmentNoloadStart), "Error: engine segment extended into framebuffers.") + ASSERT((_framebuffersSegmentNoloadEnd <= RDRAM_END), "Error: framebuffers segment extended past RDRAM end") } diff --git a/sound/sequences.json b/sound/sequences.json index 1470c97d..c1a5dc6a 100644 --- a/sound/sequences.json +++ b/sound/sequences.json @@ -34,5 +34,5 @@ "1F_cutscene_victory": ["1A"], "20_cutscene_ending": ["23"], "21_menu_file_select": ["24"], - "22_cutscene_lakitu": {"ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH"], "banks": ["1B"]} + "22_cutscene_lakitu": {"ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH", "VERSION_CN"], "banks": ["1B"]} } diff --git a/sound/sequences/00_sound_player.s b/sound/sequences/00_sound_player.s index 1d1e0173..9d7dd557 100644 --- a/sound/sequences/00_sound_player.s +++ b/sound/sequences/00_sound_player.s @@ -6,7 +6,7 @@ sequence_start: seq_setmutebhv 0x60 seq_setmutescale 0 -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) seq_setvol 100 #else seq_setvol 127 @@ -89,7 +89,7 @@ chan_dyncall .poll_023589: chan_delay1 chan_ioreadval 0 -chan_bltz .skip_023589 // if we have a signal: +chan_bltz .skip_023589 // if we have a signal: chan_beqz .force_stop_023589 // told to stop chan_jump .start_playing_023589 // told to play something else .skip_023589: @@ -2074,7 +2074,7 @@ chan_setlayer 0, .layer_C3C chan_end .layer_C3C: -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) layer_transpose 2 #endif layer_portamento 0x82, 41, 127 @@ -2113,7 +2113,7 @@ chan_setlayer 0, .layer_C6C chan_end .layer_C6C: -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) layer_transpose 1 #endif layer_portamento 0x82, 44, 200 @@ -2693,13 +2693,13 @@ layer_jump .layer_C4E layer_end #endif -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) .chan_unused_F9A_eu: chan_setbank 8 chan_setinstr 0 chan_setlayer 0, .layer_FA2_eu chan_end - + .layer_FA2_eu: layer_delay 0x5 layer_end @@ -3402,7 +3402,7 @@ chan_setbank 9 chan_setinstr 3 chan_setval 40 chan_call .set_reverb -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) chan_setreverb 40 #endif chan_setlayer 0, .layer_141A @@ -3410,7 +3410,7 @@ chan_end .layer_141A: layer_transpose 24 -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) layer_note1 51, 0xc, 90 #endif layer_note1 39, 0x4, 90 @@ -4155,7 +4155,7 @@ layer_end chan_setlayer 1, .layer_1902 chan_setlayer 2, .layer_1907 #else - #if defined(VERSION_EU) || defined(VERSION_SH) + #if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) chan_setbank 9 chan_setinstr 3 #else @@ -7509,7 +7509,7 @@ layer_end chan_reservenotes 4 chan_setbank 9 chan_setinstr 2 -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) chan_setval 15 .set EXIT_PIPE_NOTE_VELOCITY, 106 #else @@ -7831,7 +7831,7 @@ chan_end .layer_3146: layer_delay 0x6 - #ifdef VERSION_SH + #if defined(VERSION_SH) || defined(VERSION_CN) .set RED_COIN_NOTE_VELOCITY_SUB, 10 #else .set RED_COIN_NOTE_VELOCITY_SUB, 0 @@ -8153,7 +8153,7 @@ envelope_goto 2 .envelope_341C: envelope_line 25 32760 envelope_line 60 10000 -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) envelope_hang #else envelope_goto 2 diff --git a/sound/sound_banks/07.json b/sound/sound_banks/07.json index 4b37d3c3..ec5bc9ed 100644 --- a/sound/sound_banks/07.json +++ b/sound/sound_banks/07.json @@ -106,7 +106,7 @@ "sound": "0C" }, "inst13": { - "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH"], + "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH", "VERSION_CN"], "release_rate": 208, "envelope": "envelope5", "sound": "0D_chain_chomp_bark" diff --git a/sound/sound_banks/08_mario.json b/sound/sound_banks/08_mario.json index 0bf286ee..a4d44b52 100644 --- a/sound/sound_banks/08_mario.json +++ b/sound/sound_banks/08_mario.json @@ -91,67 +91,67 @@ "sound": "0F_mario_snoring2" }, "inst16": { - "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH"], + "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH", "VERSION_CN"], "release_rate": 208, "envelope": "envelope0", "sound": "10_mario_doh" }, "inst17": { - "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH"], + "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH", "VERSION_CN"], "release_rate": 208, "envelope": "envelope0", "sound": "11_mario_game_over" }, "inst18": { - "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH"], + "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH", "VERSION_CN"], "release_rate": 208, "envelope": "envelope0", "sound": "12_mario_hello" }, "inst19": { - "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH"], + "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH", "VERSION_CN"], "release_rate": 208, "envelope": "envelope0", "sound": "13_mario_press_start_to_play" }, "inst20": { - "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH"], + "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH", "VERSION_CN"], "release_rate": 208, "envelope": "envelope0", "sound": "14_mario_twirl_bounce" }, "inst21": { - "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH"], + "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH", "VERSION_CN"], "release_rate": 208, "envelope": "envelope0", "sound": "15_mario_snoring3" }, "inst22": { - "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH"], + "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH", "VERSION_CN"], "release_rate": 208, "envelope": "envelope0", - "sound": {"ifdef": ["VERSION_SH"], "then": "16_mario_bye_bye", "else": "16_mario_so_longa_bowser"} + "sound": {"ifdef": ["VERSION_SH", "VERSION_CN"], "then": "16_mario_bye_bye", "else": "16_mario_so_longa_bowser"} }, "inst23": { - "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH"], + "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH", "VERSION_CN"], "release_rate": 208, "envelope": "envelope0", "sound": "17_mario_ima_tired" }, "inst24": { - "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH"], + "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH", "VERSION_CN"], "release_rate": 208, "envelope": "envelope0", "sound": "18_mario_waha" }, "inst25": { - "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH"], + "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH", "VERSION_CN"], "release_rate": 208, "envelope": "envelope0", "sound": "19_mario_yippee" }, "inst26": { - "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH"], + "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH", "VERSION_CN"], "release_rate": 208, "envelope": "envelope0", "sound": "1A_mario_lets_a_go" diff --git a/sound/sound_banks/0A_mario_peach.json b/sound/sound_banks/0A_mario_peach.json index 79286d5d..9707fb63 100644 --- a/sound/sound_banks/0A_mario_peach.json +++ b/sound/sound_banks/0A_mario_peach.json @@ -81,55 +81,55 @@ "sound": "0D_mario_thank_you_playing_my_game" }, "inst14": { - "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH"], + "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH", "VERSION_CN"], "release_rate": 208, "envelope": "envelope0", "sound": "0E_peach_dear_mario" }, "inst15": { - "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH"], + "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH", "VERSION_CN"], "release_rate": 208, "envelope": "envelope0", "sound": "0F_peach_mario" }, "inst16": { - "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH"], + "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH", "VERSION_CN"], "release_rate": 208, "envelope": "envelope0", "sound": "10_peach_power_of_the_stars" }, "inst17": { - "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH"], + "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH", "VERSION_CN"], "release_rate": 208, "envelope": "envelope0", "sound": "11_peach_thanks_to_you" }, "inst18": { - "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH"], + "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH", "VERSION_CN"], "release_rate": 208, "envelope": "envelope0", "sound": "12_peach_thank_you_mario" }, "inst19": { - "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH"], + "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH", "VERSION_CN"], "release_rate": 208, "envelope": "envelope0", "sound": "13_peach_something_special" }, "inst20": { - "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH"], + "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH", "VERSION_CN"], "release_rate": 208, "envelope": "envelope0", "sound": "14_peach_bake_a_cake" }, "inst21": { - "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH"], + "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH", "VERSION_CN"], "release_rate": 208, "envelope": "envelope0", "sound": "15_peach_for_mario" }, "inst22": { - "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH"], + "ifdef": ["VERSION_US", "VERSION_EU", "VERSION_SH", "VERSION_CN"], "release_rate": 208, "envelope": "envelope0", "sound": "16_peach_mario2" diff --git a/sound/sound_banks/0B.json b/sound/sound_banks/0B.json index 1ec7d90a..3004e5f8 100644 --- a/sound/sound_banks/0B.json +++ b/sound/sound_banks/0B.json @@ -51,29 +51,29 @@ "normal_range_lo": 29, "normal_range_hi": 63, "envelope": "envelope0", - "sound_lo": "3B_banjo_2", - "sound": "3C_acoustic_guitar", - "sound_hi": "3D" + "sound_lo": "3B_acoustic_guitar_A1", + "sound": "3C_acoustic_guitar_E3", + "sound_hi": "3D_acoustic_guitar_B6" }, "inst1": { "release_rate": 208, "envelope": "envelope1", - "sound": "2E_accordion" + "sound": "2E_accordion_C4" }, "inst2": { "release_rate": 208, "envelope": "envelope2", - "sound": "2E_accordion" + "sound": "2E_accordion_C4" }, "inst3": { "release_rate": 208, "envelope": "envelope3", - "sound": "16_french_horns" + "sound": "16_french_horns_C3" }, "inst4": { "release_rate": 208, "envelope": "envelope4", - "sound": "16_french_horns" + "sound": "16_french_horns_C3" }, "inst5": { "release_rate": 10, diff --git a/sound/sound_banks/0C.json b/sound/sound_banks/0C.json index 2b35bbe1..9c2089ac 100644 --- a/sound/sound_banks/0C.json +++ b/sound/sound_banks/0C.json @@ -93,69 +93,69 @@ "normal_range_lo": 29, "normal_range_hi": 63, "envelope": "envelope0", - "sound_lo": "3B_banjo_2", - "sound": "3C_acoustic_guitar", - "sound_hi": "3D" + "sound_lo": "3B_acoustic_guitar_A1", + "sound": "3C_acoustic_guitar_E3", + "sound_hi": "3D_acoustic_guitar_B6" }, "inst1": { "release_rate": 24, "normal_range_lo": 29, "normal_range_hi": 61, "envelope": "envelope1", - "sound_lo": "3B_banjo_2", - "sound": "3C_acoustic_guitar", - "sound_hi": "3D" + "sound_lo": "3B_acoustic_guitar_A1", + "sound": "3C_acoustic_guitar_E3", + "sound_hi": "3D_acoustic_guitar_B6" }, "inst2": { "release_rate": 38, "normal_range_lo": 29, "normal_range_hi": 61, "envelope": "envelope2", - "sound_lo": "3B_banjo_2", - "sound": "3C_acoustic_guitar", - "sound_hi": "3D" + "sound_lo": "3B_acoustic_guitar_A1", + "sound": "3C_acoustic_guitar_E3", + "sound_hi": "3D_acoustic_guitar_B6" }, "inst3": { "release_rate": 38, "normal_range_lo": 29, "normal_range_hi": 61, "envelope": "envelope3", - "sound_lo": "3B_banjo_2", - "sound": "3C_acoustic_guitar", - "sound_hi": "3D" + "sound_lo": "3B_acoustic_guitar_A1", + "sound": "3C_acoustic_guitar_E3", + "sound_hi": "3D_acoustic_guitar_B6" }, "inst4": { "release_rate": 38, "normal_range_lo": 29, "normal_range_hi": 61, "envelope": "envelope4", - "sound_lo": "3B_banjo_2", - "sound": "3C_acoustic_guitar", - "sound_hi": "3D" + "sound_lo": "3B_acoustic_guitar_A1", + "sound": "3C_acoustic_guitar_E3", + "sound_hi": "3D_acoustic_guitar_B6" }, "inst5": { "release_rate": 38, "normal_range_lo": 29, "normal_range_hi": 61, "envelope": "envelope5", - "sound_lo": "3B_banjo_2", - "sound": "3C_acoustic_guitar", - "sound_hi": "3D" + "sound_lo": "3B_acoustic_guitar_A1", + "sound": "3C_acoustic_guitar_E3", + "sound_hi": "3D_acoustic_guitar_B6" }, "inst6": { "release_rate": 208, "envelope": "envelope6", - "sound": "21_sine_bass" + "sound": "21_sine_bass_Bb2" }, "inst7": { "release_rate": 114, "envelope": "envelope7", - "sound": "34_alto_flute" + "sound": "34_alto_flute_A4" }, "inst8": { "release_rate": 208, "envelope": "envelope8", - "sound": "34_alto_flute" + "sound": "34_alto_flute_A4" }, "percussion": [ {"release_rate": 10, "pan": 62, "envelope": "envelope9", "sound": {"sample": "06_kick_drum_1", "tuning": 0.210224}}, @@ -251,7 +251,7 @@ "inst12": { "release_rate": 10, "envelope": "envelope13", - "sound": "42_vibraphone" + "sound": "42_vibraphone_F#4" } }, "instrument_list": [ diff --git a/sound/sound_banks/0D.json b/sound/sound_banks/0D.json index 6d02f429..25f9028c 100644 --- a/sound/sound_banks/0D.json +++ b/sound/sound_banks/0D.json @@ -74,40 +74,40 @@ "release_rate": 100, "normal_range_lo": 41, "envelope": "envelope0", - "sound_lo": "00", - "sound": "01_banjo_1" + "sound_lo": "00_banjo_D2", + "sound": "01_banjo_A2" }, "inst1": { "release_rate": 100, "normal_range_lo": 41, "envelope": "envelope1", - "sound_lo": "00", - "sound": "01_banjo_1" + "sound_lo": "00_banjo_D2", + "sound": "01_banjo_A2" }, "inst2": { "release_rate": 180, "envelope": "envelope2", - "sound": "02" + "sound": "02_violin_B2" }, "inst3": { "release_rate": 208, "envelope": "envelope3", - "sound": "02" + "sound": "02_violin_B2" }, "inst4": { "release_rate": 76, "envelope": "envelope4", - "sound": "03_human_whistle" + "sound": "03_human_whistle_C3" }, "inst5": { "release_rate": 53, "envelope": "envelope5", - "sound": "04_bright_piano" + "sound": "04_bright_piano_G#3" }, "inst6": { "release_rate": 208, "envelope": "envelope6", - "sound": "05_acoustic_bass" + "sound": "05_acoustic_bass_A1" }, "percussion": [ {"release_rate": 10, "pan": 62, "envelope": "envelope7", "sound": {"sample": "06_kick_drum_1", "tuning": 0.210224}}, diff --git a/sound/sound_banks/0E.json b/sound/sound_banks/0E.json index c4404e47..76f9544f 100644 --- a/sound/sound_banks/0E.json +++ b/sound/sound_banks/0E.json @@ -51,49 +51,49 @@ "normal_range_lo": 27, "normal_range_hi": 46, "envelope": "envelope0", - "sound_lo": "23_strings_1", - "sound": "24_strings_2", - "sound_hi": "25_strings_3" + "sound_lo": "23_strings_Eb2", + "sound": "24_strings_G#2", + "sound_hi": "25_strings_F#3" }, "inst1": { "release_rate": 15, "normal_range_lo": 27, "normal_range_hi": 46, "envelope": "envelope1", - "sound_lo": "23_strings_1", - "sound": "24_strings_2", - "sound_hi": "25_strings_3" + "sound_lo": "23_strings_Eb2", + "sound": "24_strings_G#2", + "sound_hi": "25_strings_F#3" }, "inst2": { "release_rate": 15, "normal_range_lo": 27, "normal_range_hi": 46, "envelope": "envelope2", - "sound_lo": "23_strings_1", - "sound": "24_strings_2", - "sound_hi": "25_strings_3" + "sound_lo": "23_strings_Eb2", + "sound": "24_strings_G#2", + "sound_hi": "25_strings_F#3" }, "inst3": { "release_rate": 43, "normal_range_hi": 47, "envelope": "envelope3", - "sound": "46_pizzicato_strings_1", - "sound_hi": "47_pizzicato_strings_2" + "sound": "46_pizzicato_strings_Bb2", + "sound_hi": "47_pizzicato_strings_Bb3" }, "inst4": { "release_rate": 119, "envelope": "envelope4", - "sound": "2D_trombone" + "sound": "2D_trombone_Bb2" }, "inst5": { "release_rate": 10, "envelope": "envelope5", - "sound": "26_crystal_rhodes" + "sound": "26_crystal_rhodes_C4" }, "inst6": { "release_rate": 10, "envelope": "envelope6", - "sound": "26_crystal_rhodes" + "sound": "26_crystal_rhodes_C4" } }, "instrument_list": [ diff --git a/sound/sound_banks/0F.json b/sound/sound_banks/0F.json index 4924e196..e5722fa7 100644 --- a/sound/sound_banks/0F.json +++ b/sound/sound_banks/0F.json @@ -33,24 +33,24 @@ "normal_range_lo": 55, "normal_range_hi": 56, "envelope": "envelope0", - "sound_lo": "2A", - "sound": "2B", - "sound_hi": "2C" + "sound_lo": "2A_tabla_riff_1", + "sound": "2B_tabla_riff_2", + "sound_hi": "2C_tabla_riff_3" }, "inst1": { "release_rate": 10, "envelope": "envelope1", - "sound": "22_boys_choir" + "sound": "22_boys_choir_Bb4" }, "inst2": { "release_rate": 90, "envelope": "envelope2", - "sound": "28_sitar_1" + "sound": "28_sitar_1_A2" }, "inst3": { "release_rate": 10, "envelope": "envelope3", - "sound": "39_sitar_2" + "sound": "39_sitar_2_C#3" } }, "instrument_list": [ diff --git a/sound/sound_banks/10.json b/sound/sound_banks/10.json index 1edec836..99e240cb 100644 --- a/sound/sound_banks/10.json +++ b/sound/sound_banks/10.json @@ -49,32 +49,32 @@ "inst0": { "release_rate": 10, "envelope": "envelope0", - "sound": "3E_monk_choir" + "sound": "3E_monk_choir_B2" }, "inst1": { "release_rate": 10, "envelope": "envelope1", - "sound": "3E_monk_choir" + "sound": "3E_monk_choir_B2" }, "inst2": { "release_rate": 208, "envelope": "envelope2", - "sound": "3F" + "sound": "3F_small_gamelan" }, "inst3": { "release_rate": 10, "envelope": "envelope3", - "sound": "40_bell" + "sound": "40_fu_yin_gong_C4" }, "inst4": { "release_rate": 10, "envelope": "envelope4", - "sound": "40_bell" + "sound": "40_fu_yin_gong_C4" }, "inst5": { "release_rate": 10, "envelope": "envelope5", - "sound": "40_bell" + "sound": "40_fu_yin_gong_C4" }, "percussion": [ {"release_rate": 10, "pan": 62, "envelope": "envelope6", "sound": {"sample": "06_kick_drum_1", "tuning": 0.210224}}, diff --git a/sound/sound_banks/11.json b/sound/sound_banks/11.json index 69dc21c1..01d71023 100644 --- a/sound/sound_banks/11.json +++ b/sound/sound_banks/11.json @@ -94,37 +94,37 @@ "inst1": { "release_rate": 208, "envelope": "envelope1", - "sound": "21_sine_bass" + "sound": "21_sine_bass_Bb2" }, "inst2": { "release_rate": 208, "envelope": "envelope2", - "sound": "35_gospel_organ" + "sound": "35_gospel_organ_F4" }, "inst3": { "release_rate": 10, "envelope": "envelope3", - "sound": "48_steel_drum" + "sound": "48_steel_drum_C#3" }, "inst4": { "release_rate": 208, "envelope": "envelope4", - "sound": "19_brass" + "sound": "19_brass_Eb3" }, "inst5": { "release_rate": 208, "envelope": "envelope5", - "sound": "1A_slap_bass" + "sound": "1A_slap_bass_G#2" }, "inst6": { "release_rate": 128, "envelope": "envelope6", - "sound": "1B_organ_2" + "sound": "1B_percussive_synth_Eb3" }, "inst7": { "release_rate": 208, "envelope": "envelope7", - "sound": "1C" + "sound": "1C_les_paul_guitar_E2" }, "percussion": [ {"release_rate": 10, "pan": 62, "envelope": "envelope8", "sound": {"sample": "06_kick_drum_1", "tuning": 0.210224}}, diff --git a/sound/sound_banks/12.json b/sound/sound_banks/12.json index 93f34b34..b6bd1ba9 100644 --- a/sound/sound_banks/12.json +++ b/sound/sound_banks/12.json @@ -61,17 +61,17 @@ "inst0": { "release_rate": 10, "envelope": "envelope0", - "sound": "30_rarefaction-lahna" + "sound": "30_rarefaction-lahna_E4" }, "inst1": { "release_rate": 208, "envelope": "envelope1", - "sound": "31_rarefaction-convolution" + "sound": "31_rarefaction-convolution_Eb2" }, "inst2": { "release_rate": 208, "envelope": "envelope2", - "sound": "31_rarefaction-convolution" + "sound": "31_rarefaction-convolution_Eb2" }, "inst3": { "release_rate": 10, @@ -101,21 +101,21 @@ "inst6": { "release_rate": 208, "envelope": "envelope6", - "sound": "29_orchestra_hit" + "sound": "29_orchestra_hit_C3" }, "inst7": { "release_rate": 114, "envelope": "envelope7", - "sound": "34_alto_flute" + "sound": "34_alto_flute_A4" }, "inst8": { "release_rate": 15, "normal_range_lo": 27, "normal_range_hi": 46, "envelope": "envelope8", - "sound_lo": "23_strings_1", - "sound": "24_strings_2", - "sound_hi": "25_strings_3" + "sound_lo": "23_strings_Eb2", + "sound": "24_strings_G#2", + "sound_hi": "25_strings_F#3" } }, "instrument_list": [ diff --git a/sound/sound_banks/13.json b/sound/sound_banks/13.json index 53da9e97..46bf8b39 100644 --- a/sound/sound_banks/13.json +++ b/sound/sound_banks/13.json @@ -57,23 +57,23 @@ "normal_range_lo": 27, "normal_range_hi": 46, "envelope": "envelope0", - "sound_lo": "23_strings_1", - "sound": "24_strings_2", - "sound_hi": "25_strings_3" + "sound_lo": "23_strings_Eb2", + "sound": "24_strings_G#2", + "sound_hi": "25_strings_F#3" }, "inst1": { "release_rate": 15, "normal_range_lo": 27, "normal_range_hi": 46, "envelope": "envelope1", - "sound_lo": "23_strings_1", - "sound": "24_strings_2", - "sound_hi": "25_strings_3" + "sound_lo": "23_strings_Eb2", + "sound": "24_strings_G#2", + "sound_hi": "25_strings_F#3" }, "inst2": { "release_rate": 208, "envelope": "envelope2", - "sound": "21_sine_bass" + "sound": "21_sine_bass_Bb2" }, "percussion": [ {"release_rate": 10, "pan": 62, "envelope": "envelope3", "sound": {"sample": "06_kick_drum_1", "tuning": 0.210224}}, @@ -160,12 +160,12 @@ "inst5": { "release_rate": 10, "envelope": "envelope6", - "sound": "26_crystal_rhodes" + "sound": "26_crystal_rhodes_C4" }, "inst6": { "release_rate": 10, "envelope": "envelope7", - "sound": "26_crystal_rhodes" + "sound": "26_crystal_rhodes_C4" } }, "instrument_list": [ diff --git a/sound/sound_banks/14_piranha_music_box.json b/sound/sound_banks/14_piranha_music_box.json index 2a920394..1aa3f78e 100644 --- a/sound/sound_banks/14_piranha_music_box.json +++ b/sound/sound_banks/14_piranha_music_box.json @@ -1,6 +1,6 @@ { "date": "1996-03-19", - "sample_bank": {"ifdef": ["VERSION_SH"], "then": "instruments", "else": "piranha_music_box"}, + "sample_bank": {"ifdef": ["VERSION_SH", "VERSION_CN"], "then": "instruments", "else": "piranha_music_box"}, "envelopes": { "envelope0": [ [6, 32700], @@ -37,27 +37,27 @@ "inst0": { "release_rate": 119, "envelope": "envelope0", - "sound": {"ifdef": ["VERSION_SH"], "then": "3A_music_box", "else": "00_music_box"} + "sound": {"ifdef": ["VERSION_SH", "VERSION_CN"], "then": "3A_music_box_C5", "else": "00_music_box_C5"} }, "inst1": { "release_rate": 119, "envelope": "envelope1", - "sound": {"ifdef": ["VERSION_SH"], "then": "3A_music_box", "else": "00_music_box"} + "sound": {"ifdef": ["VERSION_SH", "VERSION_CN"], "then": "3A_music_box_C5", "else": "00_music_box_C5"} }, "inst2": { "release_rate": 119, "envelope": "envelope2", - "sound": {"ifdef": ["VERSION_SH"], "then": "3A_music_box", "else": "00_music_box"} + "sound": {"ifdef": ["VERSION_SH", "VERSION_CN"], "then": "3A_music_box_C5", "else": "00_music_box_C5"} }, "inst3": { "release_rate": 119, "envelope": "envelope3", - "sound": {"ifdef": ["VERSION_SH"], "then": "3A_music_box", "else": "00_music_box"} + "sound": {"ifdef": ["VERSION_SH", "VERSION_CN"], "then": "3A_music_box_C5", "else": "00_music_box_C5"} }, "inst4": { "release_rate": 119, "envelope": "envelope4", - "sound": {"ifdef": ["VERSION_SH"], "then": "3A_music_box", "else": "00_music_box"} + "sound": {"ifdef": ["VERSION_SH", "VERSION_CN"], "then": "3A_music_box_C5", "else": "00_music_box_C5"} } }, "instrument_list": [ diff --git a/sound/sound_banks/15.json b/sound/sound_banks/15.json index c89e2e94..eb45ef4d 100644 --- a/sound/sound_banks/15.json +++ b/sound/sound_banks/15.json @@ -81,22 +81,22 @@ "inst2": { "release_rate": 10, "envelope": "envelope2", - "sound": "21_sine_bass" + "sound": "21_sine_bass_Bb2" }, "inst3": { "release_rate": 208, "envelope": "envelope3", - "sound": "1A_slap_bass" + "sound": "1A_slap_bass_G#2" }, "inst4": { "release_rate": 114, "envelope": "envelope4", - "sound": "21_sine_bass" + "sound": "21_sine_bass_Bb2" }, "inst5": { "release_rate": 53, "envelope": "envelope5", - "sound": "04_bright_piano" + "sound": "04_bright_piano_G#3" }, "inst6": { "release_rate": 208, @@ -106,12 +106,12 @@ "inst7": { "release_rate": 10, "envelope": "envelope7", - "sound": "22_boys_choir" + "sound": "22_boys_choir_Bb4" }, "inst8": { "release_rate": 10, "envelope": "envelope8", - "sound": "22_boys_choir" + "sound": "22_boys_choir_Bb4" }, "percussion": [ {"release_rate": 10, "pan": 62, "envelope": "envelope9", "sound": {"sample": "06_kick_drum_1", "tuning": 0.210224}}, diff --git a/sound/sound_banks/16_course_start.json b/sound/sound_banks/16_course_start.json index cd348d2f..3e4bca2b 100644 --- a/sound/sound_banks/16_course_start.json +++ b/sound/sound_banks/16_course_start.json @@ -1,6 +1,6 @@ { "date": "1996-03-19", - "sample_bank": {"ifdef": ["VERSION_SH"], "then": "instruments", "else": "course_start"}, + "sample_bank": {"ifdef": ["VERSION_SH", "VERSION_CN"], "then": "instruments", "else": "course_start"}, "envelopes": { "envelope0": [ [2, 32700], @@ -19,12 +19,12 @@ "inst0": { "release_rate": 208, "envelope": "envelope0", - "sound": {"ifdef": ["VERSION_SH"], "then": "45b_la", "else": "00_la"} + "sound": {"ifdef": ["VERSION_SH", "VERSION_CN"], "then": "45b_la_E3", "else": "00_la_E3"} }, "inst1": { "release_rate": 208, "envelope": "envelope1", - "sound": {"ifdef": ["VERSION_SH"], "then": "45b_la", "else": "00_la"} + "sound": {"ifdef": ["VERSION_SH", "VERSION_CN"], "then": "45b_la_E3", "else": "00_la_E3"} } }, "instrument_list": [ diff --git a/sound/sound_banks/17.json b/sound/sound_banks/17.json index d0fab404..63563ca2 100644 --- a/sound/sound_banks/17.json +++ b/sound/sound_banks/17.json @@ -63,37 +63,37 @@ "normal_range_lo": 29, "normal_range_hi": 63, "envelope": "envelope0", - "sound_lo": "3B_banjo_2", - "sound": "3C_acoustic_guitar", - "sound_hi": "3D" + "sound_lo": "3B_acoustic_guitar_A1", + "sound": "3C_acoustic_guitar_E3", + "sound_hi": "3D_acoustic_guitar_B6" }, "inst1": { "release_rate": 208, "envelope": "envelope1", - "sound": "05_acoustic_bass" + "sound": "05_acoustic_bass_A1" }, "inst2": { "release_rate": 15, "normal_range_lo": 27, "normal_range_hi": 46, "envelope": "envelope2", - "sound_lo": "23_strings_1", - "sound": "24_strings_2", - "sound_hi": "25_strings_3" + "sound_lo": "23_strings_Eb2", + "sound": "24_strings_G#2", + "sound_hi": "25_strings_F#3" }, "inst3": { "release_rate": 15, "normal_range_lo": 27, "normal_range_hi": 46, "envelope": "envelope3", - "sound_lo": "23_strings_1", - "sound": "24_strings_2", - "sound_hi": "25_strings_3" + "sound_lo": "23_strings_Eb2", + "sound": "24_strings_G#2", + "sound_hi": "25_strings_F#3" }, "inst4": { "release_rate": 10, "envelope": "envelope4", - "sound": "26_crystal_rhodes" + "sound": "26_crystal_rhodes_C4" }, "percussion": [ {"release_rate": 10, "pan": 62, "envelope": "envelope5", "sound": {"sample": "06_kick_drum_1", "tuning": 0.210224}}, diff --git a/sound/sound_banks/18.json b/sound/sound_banks/18.json index 6f09dbb4..da40131f 100644 --- a/sound/sound_banks/18.json +++ b/sound/sound_banks/18.json @@ -61,22 +61,22 @@ "inst0": { "release_rate": 208, "envelope": "envelope0", - "sound": "35_gospel_organ" + "sound": "35_gospel_organ_F4" }, "inst1": { "release_rate": 208, "envelope": "envelope1", - "sound": "36_sawtooth_synth" + "sound": "36_sawtooth_synth_Eb1" }, "inst2": { "release_rate": 208, "envelope": "envelope2", - "sound": "37_square_synth" + "sound": "37_square_synth_C5" }, "inst3": { "release_rate": 208, "envelope": "envelope3", - "sound": "29_orchestra_hit" + "sound": "29_orchestra_hit_C3" }, "percussion": [ {"release_rate": 10, "pan": 62, "envelope": "envelope4", "sound": {"sample": "06_kick_drum_1", "tuning": 0.210224}}, diff --git a/sound/sound_banks/19.json b/sound/sound_banks/19.json index 1591ea88..2d743fd3 100644 --- a/sound/sound_banks/19.json +++ b/sound/sound_banks/19.json @@ -79,50 +79,50 @@ "inst0": { "release_rate": 10, "envelope": "envelope0", - "sound": "22_boys_choir" + "sound": "22_boys_choir_Bb4" }, "inst1": { "release_rate": 208, "envelope": "envelope1", - "sound": "19_brass" + "sound": "19_brass_Eb3" }, "inst2": { "release_rate": 15, "normal_range_lo": 27, "normal_range_hi": 46, "envelope": "envelope2", - "sound_lo": "23_strings_1", - "sound": "24_strings_2", - "sound_hi": "25_strings_3" + "sound_lo": "23_strings_Eb2", + "sound": "24_strings_G#2", + "sound_hi": "25_strings_F#3" }, "inst3": { "release_rate": 90, "envelope": "envelope3", - "sound": "28_sitar_1" + "sound": "28_sitar_1_A2" }, "inst4": { "release_rate": 208, "envelope": "envelope4", - "sound": "29_orchestra_hit" + "sound": "29_orchestra_hit_C3" }, "inst5": { "release_rate": 100, "normal_range_lo": 55, "normal_range_hi": 56, "envelope": "envelope5", - "sound_lo": "2A", - "sound": "2B", - "sound_hi": "2C" + "sound_lo": "2A_tabla_riff_1", + "sound": "2B_tabla_riff_2", + "sound_hi": "2C_tabla_riff_3" }, "inst6": { "release_rate": 208, "envelope": "envelope6", - "sound": "19_brass" + "sound": "19_brass_Eb3" }, "inst7": { "release_rate": 10, "envelope": "envelope7", - "sound": "22_boys_choir" + "sound": "22_boys_choir_Bb4" }, "percussion": [ {"release_rate": 10, "pan": 62, "envelope": "envelope8", "sound": {"sample": "06_kick_drum_1", "tuning": 0.210224}}, diff --git a/sound/sound_banks/1A.json b/sound/sound_banks/1A.json index a648d86a..1b8c21bc 100644 --- a/sound/sound_banks/1A.json +++ b/sound/sound_banks/1A.json @@ -61,34 +61,34 @@ "inst0": { "release_rate": 67, "envelope": "envelope0", - "sound": "17_trumpet" + "sound": "17_trumpet_C#3" }, "inst1": { "release_rate": 119, "envelope": "envelope1", - "sound": "2D_trombone" + "sound": "2D_trombone_Bb2" }, "inst2": { "release_rate": 208, "envelope": "envelope2", - "sound": "16_french_horns" + "sound": "16_french_horns_C3" }, "inst3": { "release_rate": 24, "normal_range_lo": 42, "envelope": "envelope3", - "sound_lo": "14_strings_5", - "sound": "15_strings_4" + "sound_lo": "14_strings_Eb2", + "sound": "15_strings_B3" }, "inst4": { "release_rate": 208, "envelope": "envelope4", - "sound": "19_brass" + "sound": "19_brass_Eb3" }, "inst5": { "release_rate": 10, "envelope": "envelope5", - "sound": "26_crystal_rhodes" + "sound": "26_crystal_rhodes_C4" }, "inst6": { "release_rate": 10, diff --git a/sound/sound_banks/1B.json b/sound/sound_banks/1B.json index 472df84a..754cac38 100644 --- a/sound/sound_banks/1B.json +++ b/sound/sound_banks/1B.json @@ -62,32 +62,32 @@ "release_rate": 24, "normal_range_lo": 42, "envelope": "envelope0", - "sound_lo": "14_strings_5", - "sound": "15_strings_4" + "sound_lo": "14_strings_Eb2", + "sound": "15_strings_B3" }, "inst1": { "release_rate": 24, "normal_range_lo": 42, "envelope": "envelope1", - "sound_lo": "14_strings_5", - "sound": "15_strings_4" + "sound_lo": "14_strings_Eb2", + "sound": "15_strings_B3" }, "inst2": { "release_rate": 208, "envelope": "envelope2", - "sound": "16_french_horns" + "sound": "16_french_horns_C3" }, "inst3": { "release_rate": 67, "envelope": "envelope3", - "sound": "17_trumpet" + "sound": "17_trumpet_C#3" }, "inst4": { "release_rate": 24, "normal_range_lo": 42, "envelope": "envelope4", - "sound_lo": "14_strings_5", - "sound": "15_strings_4" + "sound_lo": "14_strings_Eb2", + "sound": "15_strings_B3" }, "inst5": { "release_rate": 10, diff --git a/sound/sound_banks/1C_endless_stairs.json b/sound/sound_banks/1C_endless_stairs.json index 2f4f5058..fd74be20 100644 --- a/sound/sound_banks/1C_endless_stairs.json +++ b/sound/sound_banks/1C_endless_stairs.json @@ -43,38 +43,38 @@ "inst0": { "release_rate": 119, "envelope": "envelope0", - "sound": "3A_music_box" + "sound": "3A_music_box_C5" }, "inst1": { "release_rate": 119, "envelope": "envelope1", - "sound": "3A_music_box" + "sound": "3A_music_box_C5" }, "inst2": { "release_rate": 119, "envelope": "envelope2", - "sound": "3A_music_box" + "sound": "3A_music_box_C5" }, "inst3": { "release_rate": 24, "normal_range_lo": 42, "envelope": "envelope3", - "sound_lo": "14_strings_5", - "sound": "15_strings_4" + "sound_lo": "14_strings_Eb2", + "sound": "15_strings_B3" }, "inst4": { "release_rate": 24, "normal_range_lo": 42, "envelope": "envelope4", - "sound_lo": "14_strings_5", - "sound": "15_strings_4" + "sound_lo": "14_strings_Eb2", + "sound": "15_strings_B3" }, "inst5": { "release_rate": 24, "normal_range_lo": 42, "envelope": "envelope5", - "sound_lo": "14_strings_5", - "sound": "15_strings_4" + "sound_lo": "14_strings_Eb2", + "sound": "15_strings_B3" } }, "instrument_list": [ diff --git a/sound/sound_banks/1D_bowser_organ.json b/sound/sound_banks/1D_bowser_organ.json index 64f26213..31f752e2 100644 --- a/sound/sound_banks/1D_bowser_organ.json +++ b/sound/sound_banks/1D_bowser_organ.json @@ -1,6 +1,6 @@ { "date": "1996-03-19", - "sample_bank": {"ifdef": ["VERSION_SH"], "then": "instruments", "else": "bowser_organ"}, + "sample_bank": {"ifdef": ["VERSION_SH", "VERSION_CN"], "then": "instruments", "else": "bowser_organ"}, "envelopes": { "envelope0": [ [2, 32700], @@ -44,41 +44,41 @@ "release_rate": 19, "normal_range_hi": 50, "envelope": "envelope0", - "sound": {"ifdef": ["VERSION_SH"], "then": "34b_organ", "else": "00_organ_1"}, - "sound_hi": {"ifdef": ["VERSION_SH"], "then": "34c_organ_lq", "else": "01_organ_1_lq"} + "sound": {"ifdef": ["VERSION_SH", "VERSION_CN"], "then": "34b_organ_C3", "else": "00_organ_C3"}, + "sound_hi": {"ifdef": ["VERSION_SH", "VERSION_CN"], "then": "34c_organ_C4", "else": "01_organ_C4"} }, "inst1": { "release_rate": 19, "normal_range_hi": 50, "envelope": "envelope1", - "sound": {"ifdef": ["VERSION_SH"], "then": "34b_organ", "else": "00_organ_1"}, - "sound_hi": {"ifdef": ["VERSION_SH"], "then": "34c_organ_lq", "else": "01_organ_1_lq"} + "sound": {"ifdef": ["VERSION_SH", "VERSION_CN"], "then": "34b_organ_C3", "else": "00_organ_C3"}, + "sound_hi": {"ifdef": ["VERSION_SH", "VERSION_CN"], "then": "34c_organ_C4", "else": "01_organ_C4"} }, "inst2": { "release_rate": 19, "normal_range_hi": 50, "envelope": "envelope2", - "sound": {"ifdef": ["VERSION_SH"], "then": "34b_organ", "else": "00_organ_1"}, - "sound_hi": {"ifdef": ["VERSION_SH"], "then": "34c_organ_lq", "else": "01_organ_1_lq"} + "sound": {"ifdef": ["VERSION_SH", "VERSION_CN"], "then": "34b_organ_C3", "else": "00_organ_C3"}, + "sound_hi": {"ifdef": ["VERSION_SH", "VERSION_CN"], "then": "34c_organ_C4", "else": "01_organ_C4"} }, "inst3": { "release_rate": 19, "normal_range_hi": 50, "envelope": "envelope3", - "sound": {"ifdef": ["VERSION_SH"], "then": "34b_organ", "else": "00_organ_1"}, - "sound_hi": {"ifdef": ["VERSION_SH"], "then": "34c_organ_lq", "else": "01_organ_1_lq"} + "sound": {"ifdef": ["VERSION_SH", "VERSION_CN"], "then": "34b_organ_C3", "else": "00_organ_C3"}, + "sound_hi": {"ifdef": ["VERSION_SH", "VERSION_CN"], "then": "34c_organ_C4", "else": "01_organ_C4"} }, "inst4": { "release_rate": 19, "normal_range_hi": 50, "envelope": "envelope4", - "sound": {"ifdef": ["VERSION_SH"], "then": "34b_organ", "else": "00_organ_1"}, - "sound_hi": {"ifdef": ["VERSION_SH"], "then": "34c_organ_lq", "else": "01_organ_1_lq"} + "sound": {"ifdef": ["VERSION_SH", "VERSION_CN"], "then": "34b_organ_C3", "else": "00_organ_C3"}, + "sound_hi": {"ifdef": ["VERSION_SH", "VERSION_CN"], "then": "34c_organ_C4", "else": "01_organ_C4"} }, "inst5": { "release_rate": 10, "envelope": "envelope5", - "sound": {"ifdef": ["VERSION_SH"], "then": "22_boys_choir", "else": "02_boys_choir"} + "sound": {"ifdef": ["VERSION_SH", "VERSION_CN"], "then": "22_boys_choir_Bb4", "else": "02_boys_choir_Bb4"} } }, "instrument_list": [ diff --git a/sound/sound_banks/1E.json b/sound/sound_banks/1E.json index 2b458354..4cca82c7 100644 --- a/sound/sound_banks/1E.json +++ b/sound/sound_banks/1E.json @@ -31,30 +31,30 @@ "inst0": { "release_rate": 255, "envelope": "envelope0", - "sound": "27_harpsichord" + "sound": "27_harpsichord_F3" }, "inst1": { "release_rate": 255, "envelope": "envelope1", - "sound": "27_harpsichord" + "sound": "27_harpsichord_F3" }, "inst2": { "release_rate": 15, "normal_range_lo": 27, "normal_range_hi": 46, "envelope": "envelope2", - "sound_lo": "23_strings_1", - "sound": "24_strings_2", - "sound_hi": "25_strings_3" + "sound_lo": "23_strings_Eb2", + "sound": "24_strings_G#2", + "sound_hi": "25_strings_F#3" }, "inst3": { "release_rate": 15, "normal_range_lo": 27, "normal_range_hi": 46, "envelope": "envelope3", - "sound_lo": "23_strings_1", - "sound": "24_strings_2", - "sound_hi": "25_strings_3" + "sound_lo": "23_strings_Eb2", + "sound": "24_strings_G#2", + "sound_hi": "25_strings_F#3" } }, "instrument_list": [ diff --git a/sound/sound_banks/1F.json b/sound/sound_banks/1F.json index 66d2697f..da585e59 100644 --- a/sound/sound_banks/1F.json +++ b/sound/sound_banks/1F.json @@ -31,12 +31,12 @@ "inst0": { "release_rate": 208, "envelope": "envelope0", - "sound": "2E_accordion" + "sound": "2E_accordion_C4" }, "inst1": { "release_rate": 208, "envelope": "envelope1", - "sound": "2E_accordion" + "sound": "2E_accordion_C4" }, "inst2": { "release_rate": 208, diff --git a/sound/sound_banks/20.json b/sound/sound_banks/20.json index 498a3824..5e1773a0 100644 --- a/sound/sound_banks/20.json +++ b/sound/sound_banks/20.json @@ -25,21 +25,21 @@ "inst0": { "release_rate": 208, "envelope": "envelope0", - "sound": "16_french_horns" + "sound": "16_french_horns_C3" }, "inst1": { "release_rate": 208, "envelope": "envelope1", - "sound": "16_french_horns" + "sound": "16_french_horns_C3" }, "inst2": { "release_rate": 15, "normal_range_lo": 27, "normal_range_hi": 46, "envelope": "envelope2", - "sound_lo": "23_strings_1", - "sound": "24_strings_2", - "sound_hi": "25_strings_3" + "sound_lo": "23_strings_Eb2", + "sound": "24_strings_G#2", + "sound_hi": "25_strings_F#3" } }, "instrument_list": [ diff --git a/sound/sound_banks/21.json b/sound/sound_banks/21.json index c33c4e87..e14426a2 100644 --- a/sound/sound_banks/21.json +++ b/sound/sound_banks/21.json @@ -25,17 +25,17 @@ "inst0": { "release_rate": 208, "envelope": "envelope0", - "sound": "2E_accordion" + "sound": "2E_accordion_C4" }, "inst1": { "release_rate": 208, "envelope": "envelope1", - "sound": "2E_accordion" + "sound": "2E_accordion_C4" }, "inst2": { "release_rate": 10, "envelope": "envelope2", - "sound": "26_crystal_rhodes" + "sound": "26_crystal_rhodes_C4" } }, "instrument_list": [ diff --git a/sound/sound_banks/22.json b/sound/sound_banks/22.json index 3a80b4aa..7e2ba768 100644 --- a/sound/sound_banks/22.json +++ b/sound/sound_banks/22.json @@ -49,22 +49,22 @@ "inst0": { "release_rate": 208, "envelope": "envelope0", - "sound": "19_brass" + "sound": "19_brass_Eb3" }, "inst1": { "release_rate": 208, "envelope": "envelope1", - "sound": "1A_slap_bass" + "sound": "1A_slap_bass_G#2" }, "inst2": { "release_rate": 128, "envelope": "envelope2", - "sound": "1B_organ_2" + "sound": "1B_percussive_synth_Eb3" }, "inst3": { "release_rate": 208, "envelope": "envelope3", - "sound": "1C" + "sound": "1C_les_paul_guitar_E2" }, "percussion": [ {"release_rate": 10, "pan": 62, "envelope": "envelope4", "sound": {"sample": "06_kick_drum_1", "tuning": 0.210224}}, diff --git a/sound/sound_banks/23.json b/sound/sound_banks/23.json index 848d2f79..46e9ca50 100644 --- a/sound/sound_banks/23.json +++ b/sound/sound_banks/23.json @@ -45,42 +45,42 @@ "normal_range_lo": 27, "normal_range_hi": 46, "envelope": "envelope0", - "sound_lo": "23_strings_1", - "sound": "24_strings_2", - "sound_hi": "25_strings_3" + "sound_lo": "23_strings_Eb2", + "sound": "24_strings_G#2", + "sound_hi": "25_strings_F#3" }, "inst1": { "release_rate": 15, "normal_range_lo": 27, "normal_range_hi": 46, "envelope": "envelope1", - "sound_lo": "23_strings_1", - "sound": "24_strings_2", - "sound_hi": "25_strings_3" + "sound_lo": "23_strings_Eb2", + "sound": "24_strings_G#2", + "sound_hi": "25_strings_F#3" }, "inst2": { "release_rate": 15, "normal_range_lo": 27, "normal_range_hi": 46, "envelope": "envelope2", - "sound_lo": "23_strings_1", - "sound": "24_strings_2", - "sound_hi": "25_strings_3" + "sound_lo": "23_strings_Eb2", + "sound": "24_strings_G#2", + "sound_hi": "25_strings_F#3" }, "inst3": { "release_rate": 10, "envelope": "envelope3", - "sound": "26_crystal_rhodes" + "sound": "26_crystal_rhodes_C4" }, "inst4": { "release_rate": 10, "envelope": "envelope4", - "sound": "26_crystal_rhodes" + "sound": "26_crystal_rhodes_C4" }, "inst5": { "release_rate": 255, "envelope": "envelope5", - "sound": "27_harpsichord" + "sound": "27_harpsichord_F3" } }, "instrument_list": [ diff --git a/sound/sound_banks/24.json b/sound/sound_banks/24.json index d205b003..828ad682 100644 --- a/sound/sound_banks/24.json +++ b/sound/sound_banks/24.json @@ -37,19 +37,19 @@ "inst0": { "release_rate": 43, "envelope": "envelope0", - "sound": "41_pan_flute" + "sound": "41_pan_flute_C3" }, "inst1": { "release_rate": 24, "normal_range_lo": 42, "envelope": "envelope1", - "sound_lo": "14_strings_5", - "sound": "15_strings_4" + "sound_lo": "14_strings_Eb2", + "sound": "15_strings_B3" }, "inst2": { "release_rate": 43, "envelope": "envelope3", - "sound": "41_pan_flute" + "sound": "41_pan_flute_C3" }, "percussion": [ {"release_rate": 10, "pan": 62, "envelope": "envelope2", "sound": {"sample": "06_kick_drum_1", "tuning": 0.210224}}, @@ -120,7 +120,7 @@ "inst3": { "release_rate": 10, "envelope": "envelope4", - "sound": "22_boys_choir" + "sound": "22_boys_choir_Bb4" } }, "instrument_list": [ diff --git a/sound/sound_banks/25.json b/sound/sound_banks/25.json index 82db2dc8..10e1dda7 100644 --- a/sound/sound_banks/25.json +++ b/sound/sound_banks/25.json @@ -97,34 +97,34 @@ "inst0": { "release_rate": 19, "envelope": "envelope0", - "sound": "43_harmonica" + "sound": "43_harmonica_C4" }, "inst1": { "release_rate": 208, "envelope": "envelope1", - "sound": "1A_slap_bass" + "sound": "1A_slap_bass_G#2" }, "inst2": { "release_rate": 208, "envelope": "envelope2", - "sound": "1C" + "sound": "1C_les_paul_guitar_E2" }, "inst3": { "release_rate": 10, "envelope": "envelope3", - "sound": "26_crystal_rhodes" + "sound": "26_crystal_rhodes_C4" }, "inst4": { "release_rate": 34, "envelope": "envelope4", - "sound": "44_grand_piano" + "sound": "44_grand_piano_F#5" }, "inst5": { "release_rate": 53, "normal_range_hi": 50, "envelope": "envelope5", - "sound": "16_french_horns", - "sound_hi": "45_french_horns_lq" + "sound": "16_french_horns_C3", + "sound_hi": "45_french_horns_C4" }, "inst6": { "release_rate": 10, @@ -154,31 +154,31 @@ "inst9": { "release_rate": 43, "envelope": "envelope9", - "sound": "41_pan_flute" + "sound": "41_pan_flute_C3" }, "inst10": { "release_rate": 15, "normal_range_lo": 27, "normal_range_hi": 46, "envelope": "envelope10", - "sound_lo": "23_strings_1", - "sound": "24_strings_2", - "sound_hi": "25_strings_3" + "sound_lo": "23_strings_Eb2", + "sound": "24_strings_G#2", + "sound_hi": "25_strings_F#3" }, "inst11": { "release_rate": 10, "envelope": "envelope12", - "sound": "44_grand_piano" + "sound": "44_grand_piano_F#5" }, "inst12": { "release_rate": 10, "envelope": "envelope13", - "sound": "26_crystal_rhodes" + "sound": "26_crystal_rhodes_C4" }, "inst13": { "release_rate": 34, "envelope": "envelope14", - "sound": "43_harmonica" + "sound": "43_harmonica_C4" }, "percussion": [ {"release_rate": 10, "pan": 62, "envelope": "envelope11", "sound": {"sample": "06_kick_drum_1", "tuning": 0.210224}}, diff --git a/sound/sound_data.c b/sound/sound_data.c index 84c6616a..2984889c 100644 --- a/sound/sound_data.c +++ b/sound/sound_data.c @@ -10,7 +10,7 @@ unsigned char gMusicData[] = { #include "sound/sequences.bin.inc.c" }; -#ifndef VERSION_SH +#if !defined(VERSION_SH) && !defined(VERSION_CN) unsigned char gBankSetsData[] = { #include "sound/bank_sets.inc.c" }; diff --git a/src/audio/audio_session_presets_sh.c b/src/audio/audio_session_presets_sh.c index 958ec15a..6da66159 100644 --- a/src/audio/audio_session_presets_sh.c +++ b/src/audio/audio_session_presets_sh.c @@ -1,7 +1,7 @@ #include "internal.h" #include "data.h" -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) struct ReverbSettingsEU sReverbSettings[] = { {0x01, 0x30, 0x2fff, 0x0000, 0x0000, -1, 0x3000, 0x0000, 0x0000}, diff --git a/src/audio/data.c b/src/audio/data.c index f8495bbb..f5217f08 100644 --- a/src/audio/data.c +++ b/src/audio/data.c @@ -100,7 +100,7 @@ u16 gAudioCosineTable[128] = { // Transforms a pitch scale factor in -127..127 into a frequency scale factor // between -1 and +1 octave. // gPitchBendFrequencyScale[k] = 0.5 * 2^(k/127) -#ifndef VERSION_SH +#if !defined(VERSION_SH) && !defined(VERSION_CN) #if defined(VERSION_EU) f32 gPitchBendFrequencyScale[256] = { 0.5f, @@ -186,7 +186,7 @@ struct NoteSubEu gZeroNoteSub = { 0 }; struct NoteSubEu gDefaultNoteSub = { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, { NULL } }; #endif -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) s16 sSawtoothWaves[256] = { 0, 1023, 2047, 3071, 4095, 5119, 6143, 7167, 8191, 9215, 10239, 11263, 0x2FFF, 13311, 0x37FF, 15359, 0x3FFF, 17407, 0x47FF, 19455, 0x4FFF, 21503, @@ -379,7 +379,7 @@ s16 sSawtoothWave[0x40] = { s16 *gWaveSamples[4] = { sSawtoothWave, sTriangleWave, sSineWave, sSquareWave }; #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) s32 unk_sh_data_0[2] = {0, 0}; f32 gPitchBendFrequencyScale[256] = { 0.5f, 0.5f, 0.502736f, 0.505488f, 0.508254f, 0.511036f, 0.513833f, 0.516645f, 0.519472f, @@ -414,7 +414,7 @@ f32 gPitchBendFrequencyScale[256] = { }; #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) f32 unk_sh_data_1[] = { 0.890899f, 0.890899f, 0.89171f, 0.892521f, 0.893333f, 0.894146f, 0.89496f, 0.895774f, 0.89659f, 0.897406f, 0.898222f, 0.89904f, 0.899858f, 0.900677f, 0.901496f, 0.902317f, @@ -486,7 +486,7 @@ u8 unk_sh_data2[4] = { 0, 0, 0, 0 }; struct NoteSubEu gZeroNoteSub = { 0 }; struct NoteSubEu gDefaultNoteSub = { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, { NULL }, -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) 0 #endif }; @@ -506,11 +506,11 @@ u8 euUnknownData_8030194c[4] = { 0x40, 0x20, 0x10, 0x08 }; u16 gHeadsetPanQuantization[0x10] = { 0x40, 0x40, 0x30, 0x30, 0x20, 0x20, 0x10, 0, 0, 0, }; -#elif !defined(VERSION_SH) +#elif defined(VERSION_JP) || defined(VERSION_US) u16 gHeadsetPanQuantization[10] = { 0x40, 0x30, 0x20, 0x10, 0, 0, 0, 0, 0, 0 }; #endif -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) s16 euUnknownData_80301950[64] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, @@ -710,7 +710,7 @@ f32 gVolRampingRhs128[128] = { }; #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) u16 unk_sh_data_3[] = { // 30 entries // pattern: @@ -879,7 +879,7 @@ u16 unk_sh_data_4[] = { }; #endif -#ifndef VERSION_SH +#if !defined(VERSION_SH) && !defined(VERSION_CN) s16 gTatumsPerBeat = TATUMS_PER_BEAT; s8 gUnusedCount80333EE8 = UNUSED_COUNT_80333EE8; s32 gAudioHeapSize = DOUBLE_SIZE_ON_64_BIT(AUDIO_HEAP_SIZE); @@ -901,7 +901,7 @@ s8 sUnused8033EF8 = 24; volatile s32 gAudioFrameCount; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) s32 gCurrAudioFrameDmaCount; #else volatile s32 gCurrAudioFrameDmaCount; @@ -916,7 +916,7 @@ u64 *gAudioCmd; struct SPTask *gAudioTask; struct SPTask gAudioTasks[2]; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) f32 D_EU_802298D0; s32 gRefreshRate; #endif @@ -931,11 +931,11 @@ u16 gUnused80226E98[0x10]; u32 gAudioRandom; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) s32 gAudioErrorFlags; #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) volatile u32 gAudioLoadLockSH; struct EuAudioCmd sAudioCmd[0x100]; u8 D_SH_80350F18; diff --git a/src/audio/data.h b/src/audio/data.h index ee8b30b1..26672d19 100644 --- a/src/audio/data.h +++ b/src/audio/data.h @@ -13,14 +13,14 @@ #define NUMAIBUFFERS 3 // constant .data -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) extern struct AudioSessionSettingsEU gAudioSessionPresets[]; #else extern struct AudioSessionSettings gAudioSessionPresets[18]; #endif extern u16 D_80332388[128]; // unused -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) extern f32 gPitchBendFrequencyScale[256]; #else extern f32 gPitchBendFrequencyScale[255]; @@ -32,14 +32,14 @@ extern u8 gDefaultShortNoteDurationTable[16]; extern s8 gVibratoCurve[16]; extern struct AdsrEnvelope gDefaultEnvelope[3]; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) extern s16 gEuUnknownWave7[256]; extern s16 *gWaveSamples[6]; #else extern s16 *gWaveSamples[4]; #endif -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) extern u8 euUnknownData_8030194c[4]; #ifdef VERSION_EU extern u16 gHeadsetPanQuantization[0x10]; @@ -74,7 +74,7 @@ extern volatile s32 gAudioLoadLock; extern volatile s32 gAudioFrameCount; // number of DMAs performed during this frame -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) extern s32 gCurrAudioFrameDmaCount; #else extern volatile s32 gCurrAudioFrameDmaCount; @@ -89,14 +89,14 @@ extern u64 *gAudioCmd; extern struct SPTask *gAudioTask; extern struct SPTask gAudioTasks[2]; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) extern f32 D_EU_802298D0; extern s32 gRefreshRate; #endif extern s16 *gAiBuffers[NUMAIBUFFERS]; extern s16 gAiBufferLengths[NUMAIBUFFERS]; -#if defined(VERSION_SH) +#if defined(VERSION_SH) || defined(VERSION_CN) #define AIBUFFER_LEN 0xb00 #elif defined(VERSION_EU) #define AIBUFFER_LEN (0xa0 * 17) @@ -109,7 +109,7 @@ extern u16 gUnused80226E98[0x10]; extern u32 gAudioRandom; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) extern f32 unk_sh_data_1[]; extern volatile u32 gAudioLoadLockSH; @@ -134,7 +134,7 @@ extern OSMesgQueue D_SH_80350F90; // address written to D_SH_80350F90 extern OSMesgQueue *D_SH_80350FA8; #endif -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) #define UNUSED_COUNT_80333EE8 24 #define AUDIO_HEAP_SIZE 0x2c500 #define AUDIO_INIT_POOL_SIZE 0x2c00 @@ -144,7 +144,7 @@ extern OSMesgQueue *D_SH_80350FA8; #define AUDIO_INIT_POOL_SIZE 0x2500 #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) extern u32 D_SH_80315EF0; extern u16 D_SH_80315EF4; extern u16 D_SH_80315EF8; diff --git a/src/audio/effects.c b/src/audio/effects.c index 91c2f034..4bd17723 100644 --- a/src/audio/effects.c +++ b/src/audio/effects.c @@ -11,7 +11,7 @@ #define US_FLOAT2(x) x #endif -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) void sequence_channel_process_sound(struct SequenceChannel *seqChannel, s32 recalculateVolume) { f32 channelVolume; s32 i; @@ -21,7 +21,7 @@ void sequence_channel_process_sound(struct SequenceChannel *seqChannel, s32 reca if (seqChannel->seqPlayer->muted && (seqChannel->muteBehavior & MUTE_BEHAVIOR_SOFTEN) != 0) { channelVolume = seqChannel->seqPlayer->muteVolumeScale * channelVolume; } -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) seqChannel->appliedVolume = channelVolume * channelVolume; #else seqChannel->appliedVolume = channelVolume; @@ -32,7 +32,7 @@ void sequence_channel_process_sound(struct SequenceChannel *seqChannel, s32 reca seqChannel->pan = seqChannel->newPan * seqChannel->panChannelWeight; } - for (i = 0; i < 4; ++i) { + for (i = 0; i < 4; i++) { struct SequenceChannelLayer *layer = seqChannel->layers[i]; if (layer != NULL && layer->enabled && layer->note != NULL) { if (layer->notePropertiesNeedInit) { @@ -86,7 +86,7 @@ void sequence_player_process_sound(struct SequencePlayer *seqPlayer) { if (seqPlayer->fadeRemainingFrames != 0) { seqPlayer->fadeVolume += seqPlayer->fadeVelocity; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) seqPlayer->recalculateVolume = TRUE; #endif @@ -98,7 +98,7 @@ void sequence_player_process_sound(struct SequencePlayer *seqPlayer) { } if (--seqPlayer->fadeRemainingFrames == 0) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) if (seqPlayer->state == 2) { sequence_player_disable(seqPlayer); return; @@ -121,7 +121,7 @@ void sequence_player_process_sound(struct SequencePlayer *seqPlayer) { } } -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) if (seqPlayer->recalculateVolume) { seqPlayer->appliedFadeVolume = seqPlayer->fadeVolume * seqPlayer->fadeVolumeScale; } @@ -131,7 +131,7 @@ void sequence_player_process_sound(struct SequencePlayer *seqPlayer) { for (i = 0; i < CHANNELS_MAX; i++) { if (IS_SEQUENCE_CHANNEL_VALID(seqPlayer->channels[i]) == TRUE && seqPlayer->channels[i]->enabled == TRUE) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) sequence_channel_process_sound(seqPlayer->channels[i], seqPlayer->recalculateVolume); #else sequence_channel_process_sound(seqPlayer->channels[i]); @@ -139,7 +139,7 @@ void sequence_player_process_sound(struct SequencePlayer *seqPlayer) { } } -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) seqPlayer->recalculateVolume = FALSE; #endif } @@ -156,7 +156,7 @@ f32 get_portamento_freq_scale(struct Portamento *p) { p->cur += p->speed; v0 = (u32) p->cur; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) if (v0 > 127) #else if (v0 >= 127) @@ -165,7 +165,7 @@ f32 get_portamento_freq_scale(struct Portamento *p) { v0 = 127; } -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) result = US_FLOAT(1.0) + p->extent * (gPitchBendFrequencyScale[v0 + 128] - US_FLOAT(1.0)); #else result = US_FLOAT(1.0) + p->extent * (gPitchBendFrequencyScale[v0 + 127] - US_FLOAT(1.0)); @@ -173,7 +173,7 @@ f32 get_portamento_freq_scale(struct Portamento *p) { return result; } -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) s16 get_vibrato_pitch_change(struct VibratoState *vib) { s32 index; vib->time += (s32) vib->rate; @@ -253,7 +253,7 @@ f32 get_vibrato_freq_scale(struct VibratoState *vib) { pitchChange = get_vibrato_pitch_change(vib); extent = (f32) vib->extent / US_FLOAT(4096.0); -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) result = US_FLOAT(1.0) + extent * (gPitchBendFrequencyScale[pitchChange + 128] - US_FLOAT(1.0)); #else result = US_FLOAT(1.0) + extent * (gPitchBendFrequencyScale[pitchChange + 127] - US_FLOAT(1.0)); @@ -262,7 +262,7 @@ f32 get_vibrato_freq_scale(struct VibratoState *vib) { } void note_vibrato_update(struct Note *note) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) if (note->portamento.mode != 0) { note->portamentoFreqScale = get_portamento_freq_scale(¬e->portamento); } @@ -282,7 +282,7 @@ void note_vibrato_update(struct Note *note) { void note_vibrato_init(struct Note *note) { struct VibratoState *vib; UNUSED struct SequenceChannel *seqChannel; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) struct NotePlaybackState *seqPlayerState = (struct NotePlaybackState *) ¬e->priority; #endif @@ -303,7 +303,7 @@ void note_vibrato_init(struct Note *note) { vib->active = TRUE; vib->time = 0; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) vib->curve = gWaveSamples[2]; vib->seqChannel = note->parentLayer->seqChannel; if ((vib->extentChangeTimer = vib->seqChannel->vibratoExtentChangeDelay) == 0) { @@ -345,10 +345,10 @@ void note_vibrato_init(struct Note *note) { void adsr_init(struct AdsrState *adsr, struct AdsrEnvelope *envelope, UNUSED s16 *volOut) { adsr->action = 0; adsr->state = ADSR_STATE_DISABLED; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) adsr->delay = 0; adsr->envelope = envelope; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) adsr->sustain = 0.0f; #endif adsr->current = 0.0f; @@ -361,13 +361,13 @@ void adsr_init(struct AdsrState *adsr, struct AdsrEnvelope *envelope, UNUSED s16 #endif } -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) f32 adsr_update(struct AdsrState *adsr) { #else s32 adsr_update(struct AdsrState *adsr) { #endif u8 action = adsr->action; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) u8 state = adsr->state; switch (state) { #else @@ -396,7 +396,7 @@ s32 adsr_update(struct AdsrState *adsr) { adsr->state = ADSR_STATE_LOOP; // fallthrough -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) restart: #endif case ADSR_STATE_LOOP: @@ -410,7 +410,7 @@ s32 adsr_update(struct AdsrState *adsr) { break; case ADSR_GOTO: adsr->envIndex = BSWAP16(adsr->envelope[adsr->envIndex].arg); -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) goto restart; #else break; @@ -420,15 +420,15 @@ s32 adsr_update(struct AdsrState *adsr) { break; default: -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) if (adsr->delay >= 4) { adsr->delay = adsr->delay * gAudioBufferParameters.updatesPerFrame -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) / gAudioBufferParameters.presetUnk4 #endif / 4; } -#if defined(VERSION_SH) +#if defined(VERSION_SH) || defined(VERSION_CN) if (adsr->delay == 0) { adsr->delay = 1; } @@ -452,7 +452,7 @@ s32 adsr_update(struct AdsrState *adsr) { // fallthrough case ADSR_STATE_FADE: -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) adsr->current += adsr->velocity; #else adsr->currentHiRes += adsr->velocity; @@ -469,14 +469,14 @@ s32 adsr_update(struct AdsrState *adsr) { case ADSR_STATE_DECAY: case ADSR_STATE_RELEASE: { adsr->current -= adsr->fadeOutVel; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) if (adsr->sustain != 0.0f && state == ADSR_STATE_DECAY) { #else if (adsr->sustain != 0 && adsr->state == ADSR_STATE_DECAY) { #endif if (adsr->current < adsr->sustain) { adsr->current = adsr->sustain; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) adsr->delay = 128; #else adsr->delay = adsr->sustain / 16; @@ -486,7 +486,7 @@ s32 adsr_update(struct AdsrState *adsr) { break; } -#if defined(VERSION_SH) +#if defined(VERSION_SH) || defined(VERSION_CN) if (adsr->current < 0.00001f) { adsr->current = 0.0f; adsr->state = ADSR_STATE_DISABLED; @@ -520,14 +520,14 @@ s32 adsr_update(struct AdsrState *adsr) { if ((action & ADSR_ACTION_RELEASE)) { adsr->state = ADSR_STATE_RELEASE; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) adsr->action = action & ~ADSR_ACTION_RELEASE; #else adsr->action = action & ~(ADSR_ACTION_RELEASE | ADSR_ACTION_DECAY); #endif } -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) if (adsr->current < 0.0f) { return 0.0f; } diff --git a/src/audio/effects.h b/src/audio/effects.h index a6de1ab9..05491e80 100644 --- a/src/audio/effects.h +++ b/src/audio/effects.h @@ -37,7 +37,7 @@ void sequence_player_process_sound(struct SequencePlayer *seqPlayer); void note_vibrato_update(struct Note *note); void note_vibrato_init(struct Note *note); void adsr_init(struct AdsrState *adsr, struct AdsrEnvelope *envelope, s16 *volOut); -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) f32 adsr_update(struct AdsrState *adsr); #else s32 adsr_update(struct AdsrState *adsr); diff --git a/src/audio/external.c b/src/audio/external.c index 0c0283ff..a5140d76 100644 --- a/src/audio/external.c +++ b/src/audio/external.c @@ -13,7 +13,7 @@ #include "seq_ids.h" #include "dialog_ids.h" -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) #define EU_FLOAT(x) x##f #else #define EU_FLOAT(x) x @@ -63,7 +63,7 @@ struct SequenceQueueItem { }; // size = 0x2 // data -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) // moved to bss in data.c s32 gAudioErrorFlags2 = 0; #else @@ -166,18 +166,18 @@ u8 sSoundRequestCount = 0; #define DYN3(cond1, val1, cond2, val2, cond3, val3, res) \ (s16)(1 << (15 - cond1) | 1 << (15 - cond2) | 1 << (15 - cond3) | res), val1, val2, val3 -s16 sDynBbh[] = { +s16 sDynBBH[] = { SEQ_LEVEL_SPOOKY, DYN1(MARIO_IS_IN_ROOM, BBH_OUTSIDE_ROOM, 6), DYN1(MARIO_IS_IN_ROOM, BBH_NEAR_MERRY_GO_ROUND_ROOM, 6), 5, }; -s16 sDynDdd[] = { +s16 sDynDDD[] = { SEQ_LEVEL_WATER, DYN2(MARIO_X_LT, -800, MARIO_IS_IN_AREA, AREA_DDD_WHIRLPOOL & 0xf, 0), DYN3(MARIO_Y_GE, -2000, MARIO_X_LT, 470, MARIO_IS_IN_AREA, AREA_DDD_WHIRLPOOL & 0xf, 0), DYN2(MARIO_Y_GE, 100, MARIO_IS_IN_AREA, AREA_DDD_SUB & 0xf, 2), 1, }; -s16 sDynJrb[] = { +s16 sDynJRB[] = { SEQ_LEVEL_WATER, DYN2(MARIO_Y_GE, 945, MARIO_X_LT, -5260, 0), DYN1(MARIO_IS_IN_AREA, AREA_JRB_SHIP & 0xf, 0), @@ -186,11 +186,11 @@ s16 sDynJrb[] = { 1, 5, // bogus entry, ignored (was JRB originally intended to have spooky music?) }; -s16 sDynWdw[] = { +s16 sDynWDW[] = { SEQ_LEVEL_UNDERGROUND, DYN2(MARIO_Y_LT, -670, MARIO_IS_IN_AREA, AREA_WDW_MAIN & 0xf, 4), DYN1(MARIO_IS_IN_AREA, AREA_WDW_TOWN & 0xf, 4), 3, }; -s16 sDynHmc[] = { +s16 sDynHMC[] = { SEQ_LEVEL_UNDERGROUND, DYN2(MARIO_X_GE, 0, MARIO_Y_LT, -203, 4), DYN2(MARIO_X_LT, 0, MARIO_Y_LT, -2400, 4), 3, }; @@ -353,7 +353,7 @@ u8 sBackgroundMusicMaxTargetVolume = TARGET_VOLUME_UNSET; u8 D_80332120 = 0; u8 D_80332124 = 0; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) u8 D_EU_80300558 = 0; #endif @@ -368,7 +368,7 @@ u8 sUnused8033323C = 0; // never read, set to 0 #if defined(VERSION_JP) || defined(VERSION_US) s16 *gCurrAiBuffer; #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) s8 D_SH_80343CD0_pad[0x20]; s32 D_SH_80343CF0; s8 D_SH_80343CF8_pad[0x8]; @@ -397,7 +397,7 @@ u8 sBackgroundMusicTargetVolume; static u8 sLowerBackgroundMusicVolume; struct SequenceQueueItem sBackgroundMusicQueue[MAX_BACKGROUND_MUSIC_QUEUE_SIZE]; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) s32 unk_sh_8034754C; #endif @@ -509,7 +509,7 @@ void unused_8031E568(void) { } #endif -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) const char unusedErrorStr1[] = "Error : Queue is not empty ( %x ) \n"; const char unusedErrorStr2[] = "specchg error\n"; #endif @@ -518,10 +518,10 @@ const char unusedErrorStr2[] = "specchg error\n"; * Fade out a sequence player * Called from threads: thread5_game_loop */ -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) void audio_reset_session_eu(s32 presetId) { OSMesg mesg; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) osRecvMesg(D_SH_80350FA8, &mesg, OS_MESG_NOBLOCK); osSendMesg(D_SH_80350F88, (OSMesg) presetId, OS_MESG_NOBLOCK); osRecvMesg(D_SH_80350FA8, &mesg, OS_MESG_BLOCK); @@ -583,7 +583,7 @@ static void seq_player_fade_to_percentage_of_volume(s32 player, FadeT fadeDurati struct SequencePlayer *seqPlayer = &gSequencePlayers[player]; f32 targetVolume; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) if (seqPlayer->state == 2) { return; } @@ -602,7 +602,7 @@ static void seq_player_fade_to_percentage_of_volume(s32 player, FadeT fadeDurati return; } seqPlayer->fadeVelocity = (targetVolume - seqPlayer->fadeVolume) / fadeDuration; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) seqPlayer->state = 0; #else seqPlayer->state = SEQUENCE_PLAYER_STATE_4; @@ -617,7 +617,7 @@ static void seq_player_fade_to_percentage_of_volume(s32 player, FadeT fadeDurati static void seq_player_fade_to_normal_volume(s32 player, FadeT fadeDuration) { struct SequencePlayer *seqPlayer = &gSequencePlayers[player]; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) if (seqPlayer->state == 2) { return; } @@ -633,7 +633,7 @@ static void seq_player_fade_to_normal_volume(s32 player, FadeT fadeDuration) { return; } seqPlayer->fadeVelocity = (seqPlayer->volume - seqPlayer->fadeVolume) / fadeDuration; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) seqPlayer->state = 0; #else seqPlayer->state = SEQUENCE_PLAYER_STATE_2; @@ -663,7 +663,7 @@ static void seq_player_fade_to_target_volume(s32 player, FadeT fadeDuration, u8 seqPlayer->fadeVelocity = (((f32)(FLOAT_CAST(targetVolume) / EU_FLOAT(127.0)) - seqPlayer->fadeVolume) / (f32) fadeDuration); -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) seqPlayer->state = 0; #else seqPlayer->state = SEQUENCE_PLAYER_STATE_4; @@ -672,7 +672,7 @@ static void seq_player_fade_to_target_volume(s32 player, FadeT fadeDuration, u8 seqPlayer->fadeRemainingFrames = fadeDuration; } -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) #ifdef VERSION_EU extern void func_802ad7a0(void); #else @@ -1329,7 +1329,7 @@ static void noop_8031EEC8(void) { */ void audio_signal_game_loop_tick(void) { sGameLoopTicked = 1; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) maybe_tick_game_sound(); #endif noop_8031EEC8(); @@ -1387,7 +1387,7 @@ static void update_game_sound(void) { case SOUND_BANK_MOVING: if (!(sSoundBanks[bank][soundIndex].soundBits & SOUND_CONSTANT_FREQUENCY)) { if (sSoundMovingSpeed[bank] > 8) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) func_802ad728( 0x02020000 | ((channelIndex & 0xff) << 8), get_sound_volume(bank, soundIndex, VOLUME_RANGE_UNK1)); @@ -1397,7 +1397,7 @@ static void update_game_sound(void) { value; #endif } else { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) func_802ad728(0x02020000 | ((channelIndex & 0xff) << 8), get_sound_volume(bank, soundIndex, VOLUME_RANGE_UNK1) * ((sSoundMovingSpeed[bank] + 8.0f) / 16)); @@ -1407,7 +1407,7 @@ static void update_game_sound(void) { (sSoundMovingSpeed[bank] + 8.0f) / 16 * value; #endif } -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) func_802ad770(0x03020000 | ((channelIndex & 0xff) << 8), get_sound_pan(*sSoundBanks[bank][soundIndex].x, *sSoundBanks[bank][soundIndex].z)); @@ -1419,7 +1419,7 @@ static void update_game_sound(void) { if ((sSoundBanks[bank][soundIndex].soundBits & SOUNDARGS_MASK_SOUNDID) == (SOUND_MOVING_FLYING & SOUNDARGS_MASK_SOUNDID)) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) func_802ad728( 0x04020000 | ((channelIndex & 0xff) << 8), get_sound_freq_scale(bank, soundIndex) @@ -1430,7 +1430,7 @@ static void update_game_sound(void) { ((f32) sSoundMovingSpeed[bank] / US_FLOAT(80.0)) + value; #endif } else { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) func_802ad728( 0x04020000 | ((channelIndex & 0xff) << 8), get_sound_freq_scale(bank, soundIndex) @@ -1441,7 +1441,7 @@ static void update_game_sound(void) { ((f32) sSoundMovingSpeed[bank] / US_FLOAT(400.0)) + value; #endif } -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) func_802ad770(0x05020000 | ((channelIndex & 0xff) << 8), get_sound_reverb(bank, soundIndex, channelIndex)); #else @@ -1453,7 +1453,7 @@ static void update_game_sound(void) { } // fallthrough case SOUND_BANK_MENU: -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) func_802ad728(0x02020000 | ((channelIndex & 0xff) << 8), 1); func_802ad770(0x03020000 | ((channelIndex & 0xff) << 8), 64); func_802ad728(0x04020000 | ((channelIndex & 0xff) << 8), @@ -1466,7 +1466,7 @@ static void update_game_sound(void) { break; case SOUND_BANK_ACTION: case SOUND_BANK_VOICE: -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) func_802ad770(0x05020000 | ((channelIndex & 0xff) << 8), get_sound_reverb(bank, soundIndex, channelIndex)); func_802ad728(0x02020000 | ((channelIndex & 0xff) << 8), @@ -1496,7 +1496,7 @@ static void update_game_sound(void) { case SOUND_BANK_AIR: case SOUND_BANK_GENERAL2: case SOUND_BANK_OBJ2: -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) func_802ad770(0x05020000 | ((channelIndex & 0xff) << 8), get_sound_reverb(bank, soundIndex, channelIndex)); func_802ad728(0x02020000 | ((channelIndex & 0xff) << 8), @@ -1571,7 +1571,7 @@ static void update_game_sound(void) { case SOUND_BANK_MOVING: if (!(sSoundBanks[bank][soundIndex].soundBits & SOUND_CONSTANT_FREQUENCY)) { if (sSoundMovingSpeed[bank] > 8) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) func_802ad728( 0x02020000 | ((channelIndex & 0xff) << 8), get_sound_volume(bank, soundIndex, VOLUME_RANGE_UNK1)); @@ -1581,7 +1581,7 @@ static void update_game_sound(void) { value; #endif } else { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) func_802ad728(0x02020000 | ((channelIndex & 0xff) << 8), get_sound_volume(bank, soundIndex, VOLUME_RANGE_UNK1) * ((sSoundMovingSpeed[bank] + 8.0f) / 16)); @@ -1591,7 +1591,7 @@ static void update_game_sound(void) { (sSoundMovingSpeed[bank] + 8.0f) / 16 * value; #endif } -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) func_802ad770(0x03020000 | ((channelIndex & 0xff) << 8), get_sound_pan(*sSoundBanks[bank][soundIndex].x, *sSoundBanks[bank][soundIndex].z)); @@ -1603,7 +1603,7 @@ static void update_game_sound(void) { if ((sSoundBanks[bank][soundIndex].soundBits & SOUNDARGS_MASK_SOUNDID) == (SOUND_MOVING_FLYING & SOUNDARGS_MASK_SOUNDID)) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) func_802ad728( 0x04020000 | ((channelIndex & 0xff) << 8), get_sound_freq_scale(bank, soundIndex) @@ -1614,7 +1614,7 @@ static void update_game_sound(void) { ((f32) sSoundMovingSpeed[bank] / US_FLOAT(80.0)) + value; #endif } else { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) func_802ad728( 0x04020000 | ((channelIndex & 0xff) << 8), get_sound_freq_scale(bank, soundIndex) @@ -1625,7 +1625,7 @@ static void update_game_sound(void) { ((f32) sSoundMovingSpeed[bank] / US_FLOAT(400.0)) + value; #endif } -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) func_802ad770(0x05020000 | ((channelIndex & 0xff) << 8), get_sound_reverb(bank, soundIndex, channelIndex)); #else @@ -1637,7 +1637,7 @@ static void update_game_sound(void) { } // fallthrough case SOUND_BANK_MENU: -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) func_802ad728(0x02020000 | ((channelIndex & 0xff) << 8), 1); func_802ad770(0x03020000 | ((channelIndex & 0xff) << 8), 64); func_802ad728(0x04020000 | ((channelIndex & 0xff) << 8), @@ -1650,7 +1650,7 @@ static void update_game_sound(void) { break; case SOUND_BANK_ACTION: case SOUND_BANK_VOICE: -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) func_802ad770(0x05020000 | ((channelIndex & 0xff) << 8), get_sound_reverb(bank, soundIndex, channelIndex)); func_802ad728(0x02020000 | ((channelIndex & 0xff) << 8), @@ -1680,7 +1680,7 @@ static void update_game_sound(void) { case SOUND_BANK_AIR: case SOUND_BANK_GENERAL2: case SOUND_BANK_OBJ2: -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) func_802ad770(0x05020000 | ((channelIndex & 0xff) << 8), get_sound_reverb(bank, soundIndex, channelIndex)); func_802ad728(0x02020000 | ((channelIndex & 0xff) << 8), @@ -1737,7 +1737,7 @@ static void seq_player_play_sequence(u8 player, u8 seqId, u16 arg2) { D_80360928[player][i].remainingFrames = 0; } -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) func_802ad770(0x46000000 | ((u8)(u32) player) << 16, seqId & SEQ_VARIATION); func_802ad74c(0x82000000 | ((u8)(u32) player) << 16 | ((u8)(seqId & SEQ_BASE_ID)) << 8, arg2); @@ -1768,7 +1768,7 @@ static void seq_player_play_sequence(u8 player, u8 seqId, u16 arg2) { * Called from threads: thread5_game_loop */ void seq_player_fade_out(u8 player, u16 fadeDuration) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) #ifdef VERSION_EU u32 fd = fadeDuration; #else @@ -1824,7 +1824,7 @@ static void func_8031F96C(u8 player) { if (gSequencePlayers[player].channels[i] != &gSequenceChannelNone && D_80360928[player][i].remainingFrames != 0) { D_80360928[player][i].current += D_80360928[player][i].velocity; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) func_802ad728(0x01000000 | (player & 0xff) << 16 | (i & 0xff) << 8, D_80360928[player][i].current); #else @@ -1835,7 +1835,7 @@ static void func_8031F96C(u8 player) { #if defined(VERSION_EU) func_802ad728(0x01000000 | (player & 0xff) << 16 | (i & 0xff) << 8, FLOAT_CAST(D_80360928[player][i].target) / 127.0); -#elif defined(VERSION_SH) +#elif defined(VERSION_SH) || defined(VERSION_CN) func_802ad728(0x01000000 | (player & 0xff) << 16 | (i & 0xff) << 8, FLOAT_CAST(D_80360928[player][i].target) / 127.0f); #else @@ -2109,7 +2109,7 @@ void set_audio_muted(u8 muted) { u8 i; for (i = 0; i < SEQUENCE_PLAYERS; i++) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) if (muted) { func_802ad74c(0xf1000000, 0); } else { @@ -2499,7 +2499,7 @@ u16 get_current_background_music(void) { * Called from threads: thread4_sound, thread5_game_loop (EU only) */ void func_80320ED8(void) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) if (D_EU_80300558 != 0) { D_EU_80300558--; } @@ -2577,7 +2577,7 @@ void func_803210D4(u16 fadeDuration) { } if (gSequencePlayers[SEQ_PLAYER_LEVEL].enabled == TRUE) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) func_802ad74c(0x83000000, fadeDuration); #else seq_player_fade_to_zero_volume(SEQ_PLAYER_LEVEL, fadeDuration); @@ -2585,7 +2585,7 @@ void func_803210D4(u16 fadeDuration) { } if (gSequencePlayers[SEQ_PLAYER_ENV].enabled == TRUE) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) func_802ad74c(0x83010000, fadeDuration); #else seq_player_fade_to_zero_volume(SEQ_PLAYER_ENV, fadeDuration); @@ -2607,7 +2607,7 @@ void func_803210D4(u16 fadeDuration) { void play_course_clear(void) { seq_player_play_sequence(SEQ_PLAYER_ENV, SEQ_EVENT_CUTSCENE_COLLECT_STAR, 0); sBackgroundMusicMaxTargetVolume = TARGET_VOLUME_IS_PRESENT_FLAG | 0; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) D_EU_80300558 = 2; #endif begin_background_music_fade(50); @@ -2619,7 +2619,7 @@ void play_course_clear(void) { void play_peachs_jingle(void) { seq_player_play_sequence(SEQ_PLAYER_ENV, SEQ_EVENT_PEACH_MESSAGE, 0); sBackgroundMusicMaxTargetVolume = TARGET_VOLUME_IS_PRESENT_FLAG | 0; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) D_EU_80300558 = 2; #endif begin_background_music_fade(50); @@ -2635,7 +2635,7 @@ void play_peachs_jingle(void) { void play_puzzle_jingle(void) { seq_player_play_sequence(SEQ_PLAYER_ENV, SEQ_EVENT_SOLVE_PUZZLE, 0); sBackgroundMusicMaxTargetVolume = TARGET_VOLUME_IS_PRESENT_FLAG | 20; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) D_EU_80300558 = 2; #endif begin_background_music_fade(50); @@ -2647,7 +2647,7 @@ void play_puzzle_jingle(void) { void play_star_fanfare(void) { seq_player_play_sequence(SEQ_PLAYER_ENV, SEQ_EVENT_HIGH_SCORE, 0); sBackgroundMusicMaxTargetVolume = TARGET_VOLUME_IS_PRESENT_FLAG | 20; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) D_EU_80300558 = 2; #endif begin_background_music_fade(50); @@ -2662,7 +2662,7 @@ void play_power_star_jingle(u8 arg0) { } seq_player_play_sequence(SEQ_PLAYER_ENV, SEQ_EVENT_CUTSCENE_STAR_SPAWN, 0); sBackgroundMusicMaxTargetVolume = TARGET_VOLUME_IS_PRESENT_FLAG | 20; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) D_EU_80300558 = 2; #endif begin_background_music_fade(50); @@ -2674,7 +2674,7 @@ void play_power_star_jingle(u8 arg0) { void play_race_fanfare(void) { seq_player_play_sequence(SEQ_PLAYER_ENV, SEQ_EVENT_RACE, 0); sBackgroundMusicMaxTargetVolume = TARGET_VOLUME_IS_PRESENT_FLAG | 20; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) D_EU_80300558 = 2; #endif begin_background_music_fade(50); @@ -2686,7 +2686,7 @@ void play_race_fanfare(void) { void play_toads_jingle(void) { seq_player_play_sequence(SEQ_PLAYER_ENV, SEQ_EVENT_TOAD_MESSAGE, 0); sBackgroundMusicMaxTargetVolume = TARGET_VOLUME_IS_PRESENT_FLAG | 20; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) D_EU_80300558 = 2; #endif begin_background_music_fade(50); @@ -2705,7 +2705,7 @@ void sound_reset(u8 presetId) { sGameLoopTicked = 0; disable_all_sequence_players(); sound_init(); -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) func_802ad74c(0xF2000000, 0); #endif #if defined(VERSION_JP) || defined(VERSION_US) diff --git a/src/audio/heap.c b/src/audio/heap.c index 4b84c001..5b23438b 100644 --- a/src/audio/heap.c +++ b/src/audio/heap.c @@ -39,7 +39,7 @@ struct SoundMultiPool gSeqLoadedPool; struct SoundMultiPool gBankLoadedPool; struct SoundMultiPool gUnusedLoadedPool; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) struct Unk1Pool gUnkPool1; struct UnkPool gUnkPool2; struct UnkPool gUnkPool3; @@ -50,13 +50,13 @@ struct PoolSplit2 sSeqAndBankPoolSplit; struct PoolSplit sPersistentCommonPoolSplit; struct PoolSplit sTemporaryCommonPoolSplit; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) u8 gUnkLoadStatus[0x40]; #endif u8 gBankLoadStatus[0x40]; u8 gSeqLoadStatus[0x100]; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) volatile u8 gAudioResetStatus; u8 gAudioResetPresetIdToLoad; s32 gAudioResetFadeOutFramesLeft; @@ -66,7 +66,7 @@ u8 gAudioUnusedBuffer[0x1000]; extern s32 gMaxAudioCmds; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) void *get_bank_or_seq_inner(s32 poolIdx, s32 arg1, s32 bankId); struct UnkEntry *func_sh_802f1ec4(u32 size); void func_sh_802f2158(struct UnkEntry *entry); @@ -168,7 +168,7 @@ void build_vol_rampings_table(s32 UNUSED unused, s32 len) { void reset_bank_and_seq_load_status(void) { s32 i; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) for (i = 0; i < 64; i++) { if (gBankLoadStatus[i] != SOUND_LOAD_STATUS_5) { gBankLoadStatus[i] = SOUND_LOAD_STATUS_NOT_LOADED; @@ -204,17 +204,19 @@ void discard_bank(s32 bankId) { struct Note *note = &gNotes[i]; #if defined(VERSION_EU) - if (note->noteSubEu.bankId == bankId) { + if (note->noteSubEu.bankId == bankId) #else - if (note->bankId == bankId) { + if (note->bankId == bankId) #endif + { // (These prints are unclear. Arguments are picked semi-randomly.) eu_stubbed_printf_1("Warning:Kill Note %x \n", i); -#ifdef VERSION_SH - if (note->unkSH34 == NOTE_PRIORITY_DISABLED && note->priority) { +#if defined(VERSION_SH) || defined(VERSION_CN) + if (note->unkSH34 == NOTE_PRIORITY_DISABLED && note->priority) #else - if (note->priority >= NOTE_PRIORITY_MIN) { + if (note->priority >= NOTE_PRIORITY_MIN) #endif + { eu_stubbed_printf_3("Kill Voice %d (ID %d) %d\n", note->waveId, bankId, note->priority); eu_stubbed_printf_0("Warning: Running Sequence's data disappear!\n"); @@ -233,7 +235,7 @@ void discard_sequence(s32 seqId) { for (i = 0; i < SEQUENCE_PLAYERS; i++) { if (gSequencePlayers[i].enabled && gSequencePlayers[i].seqId == seqId) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) sequence_player_disable(&gSequencePlayers[i]); #else sequence_player_disable(gSequencePlayers + i); @@ -243,7 +245,7 @@ void discard_sequence(s32 seqId) { } void *soundAlloc(struct SoundAllocPool *pool, u32 size) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) u8 *start; u8 *pos; u32 alignedSize = ALIGN16(size); @@ -258,7 +260,7 @@ void *soundAlloc(struct SoundAllocPool *pool, u32 size) { eu_stubbed_printf_1("Heap OverFlow : Not Allocate %d!\n", size); return NULL; } -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) pool->numAllocatedEntries++; #endif return start; @@ -281,7 +283,7 @@ void *soundAlloc(struct SoundAllocPool *pool, u32 size) { #endif } -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) void *sound_alloc_uninitialized(struct SoundAllocPool *pool, u32 size) { u8 *start; u32 alignedSize = ALIGN16(size); @@ -300,7 +302,7 @@ void *sound_alloc_uninitialized(struct SoundAllocPool *pool, u32 size) { void sound_alloc_pool_init(struct SoundAllocPool *pool, void *memAddr, u32 size) { pool->cur = pool->start = (u8 *) ALIGN16((uintptr_t) memAddr); -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) pool->size = size - ((uintptr_t) memAddr & 0xf); #else pool->size = size; @@ -319,7 +321,7 @@ void temporary_pool_clear(struct TemporaryPool *temporary) { temporary->pool.cur = temporary->pool.start; temporary->nextSide = 0; temporary->entries[0].ptr = temporary->pool.start; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) temporary->entries[1].ptr = temporary->pool.start + temporary->pool.size; #else temporary->entries[1].ptr = temporary->pool.size + temporary->pool.start; @@ -339,7 +341,7 @@ void sound_init_main_pools(s32 sizeForAudioInitPool) { sound_alloc_pool_init(&gAudioSessionPool, gAudioHeap + sizeForAudioInitPool, gAudioHeapSize - sizeForAudioInitPool); } -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) #define SOUND_ALLOC_FUNC sound_alloc_uninitialized #else #define SOUND_ALLOC_FUNC soundAlloc @@ -385,14 +387,14 @@ UNUSED static void unused_803163D4(void) { } #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) void *alloc_bank_or_seq(s32 poolIdx, s32 size, s32 arg3, s32 id) { #else void *alloc_bank_or_seq(struct SoundMultiPool *arg0, s32 arg1, s32 size, s32 arg3, s32 id) { #endif // arg3 = 0, 1 or 2? -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) struct SoundMultiPool *arg0; #define isSound poolIdx #endif @@ -409,7 +411,7 @@ void *alloc_bank_or_seq(struct SoundMultiPool *arg0, s32 arg1, s32 size, s32 arg u32 nullID = -1; UNUSED s32 i; u8 *table; -#ifndef VERSION_SH +#if !defined(VERSION_SH) && !defined(VERSION_CN) u8 isSound; #endif #if defined(VERSION_JP) || defined(VERSION_US) @@ -421,7 +423,7 @@ void *alloc_bank_or_seq(struct SoundMultiPool *arg0, s32 arg1, s32 size, s32 arg u32 leftAvail, rightAvail; #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) switch (poolIdx) { case 0: arg0 = &gSeqLoadedPool; @@ -442,7 +444,7 @@ void *alloc_bank_or_seq(struct SoundMultiPool *arg0, s32 arg1, s32 size, s32 arg if (arg3 == 0) { tp = &arg0->temporary; -#ifndef VERSION_SH +#if !defined(VERSION_SH) && !defined(VERSION_CN) if (arg0 == &gSeqLoadedPool) { table = gSeqLoadStatus; isSound = FALSE; @@ -452,7 +454,7 @@ void *alloc_bank_or_seq(struct SoundMultiPool *arg0, s32 arg1, s32 size, s32 arg } #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) if (tp->entries[0].id == (s8)nullID) { firstVal = SOUND_LOAD_STATUS_NOT_LOADED; } else { @@ -505,7 +507,7 @@ void *alloc_bank_or_seq(struct SoundMultiPool *arg0, s32 arg1, s32 size, s32 arg } #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) if (poolIdx == 1) { if (firstVal == SOUND_LOAD_STATUS_4) { for (i = 0; i < gMaxSimultaneousNotes; i++) { @@ -651,7 +653,7 @@ void *alloc_bank_or_seq(struct SoundMultiPool *arg0, s32 arg1, s32 size, s32 arg pool->cur = pool->start + size; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) if (tp->entries[1].id != (s32)nullID) #endif if (tp->entries[1].ptr < pool->cur) { @@ -671,7 +673,7 @@ void *alloc_bank_or_seq(struct SoundMultiPool *arg0, s32 arg1, s32 size, s32 arg } tp->entries[1].id = (s32)nullID; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) tp->entries[1].ptr = pool->start + pool->size; #else tp->entries[1].ptr = pool->size + pool->start; @@ -682,7 +684,7 @@ void *alloc_bank_or_seq(struct SoundMultiPool *arg0, s32 arg1, s32 size, s32 arg break; case 1: -#if defined(VERSION_SH) +#if defined(VERSION_SH) || defined(VERSION_CN) tp->entries[1].ptr = (u8 *) ((uintptr_t) (pool->start + pool->size - size) & ~0x0f); #elif defined(VERSION_EU) tp->entries[1].ptr = pool->start + pool->size - size - 0x10; @@ -692,7 +694,7 @@ void *alloc_bank_or_seq(struct SoundMultiPool *arg0, s32 arg1, s32 size, s32 arg tp->entries[1].id = id; tp->entries[1].size = size; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) if (tp->entries[0].id != (s32)nullID) #endif if (tp->entries[1].ptr < pool->cur) { @@ -728,8 +730,8 @@ void *alloc_bank_or_seq(struct SoundMultiPool *arg0, s32 arg1, s32 size, s32 arg return ret; } -#if defined(VERSION_EU) || defined(VERSION_SH) -#ifdef VERSION_SH +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) +#if defined(VERSION_SH) || defined(VERSION_CN) ret = sound_alloc_uninitialized(&arg0->persistent.pool, size); #else ret = soundAlloc(&arg0->persistent.pool, arg1 * size); @@ -748,7 +750,7 @@ void *alloc_bank_or_seq(struct SoundMultiPool *arg0, s32 arg1, s32 size, s32 arg #if defined(VERSION_EU) eu_stubbed_printf_0("MEMORY:StayHeap OVERFLOW."); return alloc_bank_or_seq(arg0, arg1, size, 0, id); -#elif defined(VERSION_SH) +#elif defined(VERSION_SH) || defined(VERSION_CN) return alloc_bank_or_seq(poolIdx, size, 0, id); #else // Prevent tail call optimization. @@ -756,7 +758,7 @@ void *alloc_bank_or_seq(struct SoundMultiPool *arg0, s32 arg1, s32 size, s32 arg return ret; #endif case 1: -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) case 0: #endif eu_stubbed_printf_1("MEMORY:StayHeap OVERFLOW (REQ:%d)", arg1 * size); @@ -768,17 +770,17 @@ 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? arg0->persistent.entries[arg0->persistent.numEntries].id = id; arg0->persistent.entries[arg0->persistent.numEntries].size = size; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) return arg0->persistent.entries[arg0->persistent.numEntries++].ptr; #else arg0->persistent.numEntries++; return arg0->persistent.entries[arg0->persistent.numEntries - 1].ptr; #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) #undef isSound #endif } -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) void *get_bank_or_seq(s32 poolIdx, s32 arg1, s32 id) { void *ret; @@ -835,7 +837,7 @@ void *get_bank_or_seq_inner(s32 poolIdx, s32 arg1, s32 bankId) { return NULL; } #endif -#ifndef VERSION_SH +#if !defined(VERSION_SH) && !defined(VERSION_CN) void *get_bank_or_seq(struct SoundMultiPool *arg0, s32 arg1, s32 id) { u32 i; UNUSED void *ret; @@ -862,7 +864,7 @@ void *get_bank_or_seq(struct SoundMultiPool *arg0, s32 arg1, s32 id) { } if (arg1 == 2) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) return get_bank_or_seq(arg0, 0, id); #else // Prevent tail call optimization by using a temporary. @@ -876,7 +878,7 @@ void *get_bank_or_seq(struct SoundMultiPool *arg0, s32 arg1, s32 id) { } #endif -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) void func_eu_802e27e4_unused(f32 arg0, f32 arg1, u16 *arg2) { s32 i; f32 tmp[16]; @@ -910,7 +912,7 @@ void func_eu_802e27e4_unused(f32 arg0, f32 arg1, u16 *arg2) { } #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) void fill_zero_filter(s16 filter[]) { s32 i; for (i = 0; i < 8; i++) { @@ -972,7 +974,7 @@ void decrease_reverb_gain(void) { #endif } -#if defined(VERSION_SH) +#if defined(VERSION_SH) || defined(VERSION_CN) void clear_curr_ai_buffer(void) { s32 currIndex = gCurrAiBufferIndex; s32 i; @@ -984,11 +986,11 @@ void clear_curr_ai_buffer(void) { #endif -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) s32 audio_shut_down_and_reset_step(void) { s32 i; s32 j; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) s32 num = gAudioBufferParameters.presetUnk4 == 2 ? 2 : 1; #endif @@ -997,7 +999,7 @@ s32 audio_shut_down_and_reset_step(void) { for (i = 0; i < SEQUENCE_PLAYERS; i++) { sequence_player_disable(&gSequencePlayers[i]); } -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) gAudioResetFadeOutFramesLeft = 4 / num; #else gAudioResetFadeOutFramesLeft = 4; @@ -1015,7 +1017,7 @@ s32 audio_shut_down_and_reset_step(void) { gNotes[i].adsr.action |= ADSR_ACTION_RELEASE; } } -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) gAudioResetFadeOutFramesLeft = 16 / num; #else gAudioResetFadeOutFramesLeft = 16; @@ -1026,7 +1028,7 @@ s32 audio_shut_down_and_reset_step(void) { case 3: if (gAudioResetFadeOutFramesLeft != 0) { gAudioResetFadeOutFramesLeft--; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) if (1) { } #endif @@ -1037,7 +1039,7 @@ s32 audio_shut_down_and_reset_step(void) { gAiBuffers[i][j] = 0; } } -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) gAudioResetFadeOutFramesLeft = 4 / num; #else gAudioResetFadeOutFramesLeft = 4; @@ -1046,14 +1048,14 @@ s32 audio_shut_down_and_reset_step(void) { } break; case 2: -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) clear_curr_ai_buffer(); #endif if (gAudioResetFadeOutFramesLeft != 0) { gAudioResetFadeOutFramesLeft--; } else { gAudioResetStatus--; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) func_sh_802f23ec(); #endif } @@ -1061,7 +1063,7 @@ s32 audio_shut_down_and_reset_step(void) { case 1: audio_reset_session(); gAudioResetStatus = 0; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) for (i = 0; i < NUMAIBUFFERS; i++) { gAiBufferLengths[i] = gAudioBufferParameters.maxAiBufferLength; for (j = 0; j < (s32) (AIBUFFER_LEN / sizeof(s16)); j++) { @@ -1070,7 +1072,7 @@ s32 audio_shut_down_and_reset_step(void) { } #endif } -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) if (gAudioResetFadeOutFramesLeft) { } #endif @@ -1140,8 +1142,9 @@ void audio_reset_session(void) { } for (i = 0; i < gMaxSimultaneousNotes; i++) { - if (gNotes[i].enabled) + if (gNotes[i].enabled) { break; + } } if (i == gMaxSimultaneousNotes) { @@ -1178,13 +1181,13 @@ void audio_reset_session(void) { #endif gSampleDmaNumListItems = 0; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) gAudioBufferParameters.frequency = preset->frequency; gAudioBufferParameters.aiFrequency = osAiSetFrequency(gAudioBufferParameters.frequency); gAudioBufferParameters.samplesPerFrameTarget = ALIGN16(gAudioBufferParameters.frequency / gRefreshRate); gAudioBufferParameters.minAiBufferLength = gAudioBufferParameters.samplesPerFrameTarget - 0x10; gAudioBufferParameters.maxAiBufferLength = gAudioBufferParameters.samplesPerFrameTarget + 0x10; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) gAudioBufferParameters.updatesPerFrame = (gAudioBufferParameters.samplesPerFrameTarget + 0x10) / 192 + 1; gAudioBufferParameters.samplesPerUpdate = (gAudioBufferParameters.samplesPerFrameTarget / gAudioBufferParameters.updatesPerFrame) & -8; #else @@ -1194,7 +1197,7 @@ void audio_reset_session(void) { gAudioBufferParameters.samplesPerUpdateMax = gAudioBufferParameters.samplesPerUpdate + 8; gAudioBufferParameters.samplesPerUpdateMin = gAudioBufferParameters.samplesPerUpdate - 8; gAudioBufferParameters.resampleRate = 32000.0f / FLOAT_CAST(gAudioBufferParameters.frequency); -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) gAudioBufferParameters.unkUpdatesPerFrameScaled = (1.0f / 256.0f) / gAudioBufferParameters.updatesPerFrame; #else gAudioBufferParameters.unkUpdatesPerFrameScaled = (3.0f / 1280.0f) / gAudioBufferParameters.updatesPerFrame; @@ -1211,7 +1214,7 @@ void audio_reset_session(void) { gAudioBufferParameters.minAiBufferLength *= gAudioBufferParameters.presetUnk4; gAudioBufferParameters.updatesPerFrame *= gAudioBufferParameters.presetUnk4; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) if (gAudioBufferParameters.presetUnk4 >= 2) { gAudioBufferParameters.maxAiBufferLength -= 0x10; } @@ -1263,7 +1266,7 @@ void audio_reset_session(void) { gMaxAudioCmds = gMaxSimultaneousNotes * 20 * updatesPerFrame + 320; #endif -#if defined(VERSION_SH) +#if defined(VERSION_SH) || defined(VERSION_CN) persistentMem = DOUBLE_SIZE_ON_64_BIT(preset->persistentSeqMem + preset->persistentBankMem + preset->unk18 + preset->unkMem28 + 0x10); temporaryMem = DOUBLE_SIZE_ON_64_BIT(preset->temporarySeqMem + preset->temporaryBankMem + preset->unk24 + preset->unkMem2C + 0x10); #elif defined(VERSION_EU) @@ -1283,7 +1286,7 @@ void audio_reset_session(void) { seq_and_bank_pool_init(&sSeqAndBankPoolSplit); sPersistentCommonPoolSplit.wantSeq = DOUBLE_SIZE_ON_64_BIT(preset->persistentSeqMem); sPersistentCommonPoolSplit.wantBank = DOUBLE_SIZE_ON_64_BIT(preset->persistentBankMem); -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) sPersistentCommonPoolSplit.wantUnused = preset->unk18; #else sPersistentCommonPoolSplit.wantUnused = 0; @@ -1291,13 +1294,13 @@ void audio_reset_session(void) { persistent_pools_init(&sPersistentCommonPoolSplit); sTemporaryCommonPoolSplit.wantSeq = DOUBLE_SIZE_ON_64_BIT(preset->temporarySeqMem); sTemporaryCommonPoolSplit.wantBank = DOUBLE_SIZE_ON_64_BIT(preset->temporaryBankMem); -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) sTemporaryCommonPoolSplit.wantUnused = preset->unk24; #else sTemporaryCommonPoolSplit.wantUnused = 0; #endif temporary_pools_init(&sTemporaryCommonPoolSplit); -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) unk_pools_init(preset->unkMem28, preset->unkMem2C); #endif reset_bank_and_seq_load_status(); @@ -1312,7 +1315,7 @@ void audio_reset_session(void) { note_init_all(); init_note_free_list(); -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) gNoteSubsEu = soundAlloc(&gNotesAndBuffersPool, (gAudioBufferParameters.updatesPerFrame * gMaxSimultaneousNotes) * sizeof(struct NoteSubEu)); for (j = 0; j != 2; j++) { @@ -1326,7 +1329,7 @@ void audio_reset_session(void) { for (j = 0; j < gNumSynthesisReverbs; j++) { reverb = &gSynthesisReverbs[j]; reverbSettings = &preset->reverbSettings[j]; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) reverb->downsampleRate = reverbSettings->downsampleRate; reverb->windowSize = reverbSettings->windowSize * 64; reverb->windowSize /= reverb->downsampleRate; @@ -1335,7 +1338,7 @@ void audio_reset_session(void) { reverb->downsampleRate = reverbSettings->downsampleRate; #endif reverb->reverbGain = reverbSettings->gain; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) reverb->panRight = reverbSettings->unk4; reverb->panLeft = reverbSettings->unk6; reverb->unk5 = reverbSettings->unk8; @@ -1349,11 +1352,11 @@ void audio_reset_session(void) { reverb->curFrame = 0; reverb->bufSizePerChannel = reverb->windowSize; reverb->framesLeftToIgnore = 2; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) reverb->resampleFlags = A_INIT; #endif if (reverb->downsampleRate != 1) { -#ifndef VERSION_SH +#if !defined(VERSION_SH) && !defined(VERSION_CN) reverb->resampleFlags = A_INIT; #endif reverb->resampleRate = 0x8000 / reverb->downsampleRate; @@ -1370,7 +1373,7 @@ void audio_reset_session(void) { reverb->items[1][i].toDownsampleRight = mem + DEFAULT_LEN_1CH / sizeof(s16); } } -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) if (reverbSettings->unkC != 0) { reverb->unk108 = sound_alloc_uninitialized(&gNotesAndBuffersPool, 16 * sizeof(s16)); reverb->unk100 = sound_alloc_uninitialized(&gNotesAndBuffersPool, 8 * sizeof(s16)); @@ -1426,7 +1429,7 @@ void audio_reset_session(void) { build_vol_rampings_table(0, gAudioBufferParameters.samplesPerUpdate); #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) D_SH_8034F68C = 0; D_SH_803479B4 = 4096; #endif @@ -1440,7 +1443,7 @@ void audio_reset_session(void) { #endif } -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) void *unk_pool1_lookup(s32 poolIdx, s32 id) { s32 i; diff --git a/src/audio/heap.h b/src/audio/heap.h index 7f9632b5..c3c36e67 100644 --- a/src/audio/heap.h +++ b/src/audio/heap.h @@ -25,7 +25,7 @@ struct SoundAllocPool { struct SeqOrBankEntry { u8 *ptr; u32 size; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) s16 poolIndex; s16 id; #else @@ -93,7 +93,7 @@ extern struct SoundAllocPool gPersistentCommonPool; extern struct SoundAllocPool gTemporaryCommonPool; extern struct SoundMultiPool gSeqLoadedPool; extern struct SoundMultiPool gBankLoadedPool; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) extern struct Unk1Pool gUnkPool1; extern struct UnkPool gUnkPool2; extern struct UnkPool gUnkPool3; @@ -103,7 +103,7 @@ extern u8 gSeqLoadStatus[256]; extern volatile u8 gAudioResetStatus; extern u8 gAudioResetPresetIdToLoad; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) extern volatile u8 gAudioResetStatus; #endif @@ -111,14 +111,14 @@ void *soundAlloc(struct SoundAllocPool *pool, u32 size); void *sound_alloc_uninitialized(struct SoundAllocPool *pool, u32 size); void sound_init_main_pools(s32 sizeForAudioInitPool); void sound_alloc_pool_init(struct SoundAllocPool *pool, void *memAddr, u32 size); -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) void *alloc_bank_or_seq(s32 poolIdx, s32 size, s32 arg3, s32 id); void *get_bank_or_seq(s32 poolIdx, s32 arg1, s32 id); #else 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 id); #endif -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) s32 audio_shut_down_and_reset_step(void); void audio_reset_session(void); #else @@ -126,7 +126,7 @@ void audio_reset_session(struct AudioSessionSettings *preset); #endif void discard_bank(s32 bankId); -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) void fill_filter(s16 filter[8], s32 arg1, s32 arg2); u8 *func_sh_802f1d40(u32 size, s32 bank, u8 *arg2, s8 medium); u8 *func_sh_802f1d90(u32 size, s32 bank, u8 *arg2, s8 medium); diff --git a/src/audio/internal.h b/src/audio/internal.h index f91c3a2e..1ca40b06 100644 --- a/src/audio/internal.h +++ b/src/audio/internal.h @@ -5,7 +5,7 @@ #include "types.h" -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) #define SEQUENCE_PLAYERS 4 #define SEQUENCE_CHANNELS 48 #define SEQUENCE_LAYERS 64 @@ -120,7 +120,7 @@ struct NotePool { struct VibratoState { /*0x00, 0x00*/ struct SequenceChannel *seqChannel; /*0x04, 0x04*/ u32 time; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) /* , 0x08*/ s16 *curve; /* , 0x0C*/ f32 extent; /* , 0x10*/ f32 rate; @@ -167,7 +167,7 @@ struct AdpcmBook { }; struct AudioBankSample { -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) /* 0x00 */ u32 codec : 4; /* 0x00 */ u32 medium : 2; /* 0x00 */ u32 bit1 : 1; @@ -180,7 +180,7 @@ struct AudioBankSample { u8 *sampleAddr; struct AdpcmLoop *loop; struct AdpcmBook *book; -#ifndef VERSION_SH +#if !defined(VERSION_SH) && !defined(VERSION_CN) u32 sampleSize; // never read. either 0 or 1 mod 9, depending on padding #endif }; @@ -215,12 +215,12 @@ struct AudioBank { }; // dynamic size struct CtlEntry { -#ifndef VERSION_SH +#if !defined(VERSION_SH) && !defined(VERSION_CN) u8 unused; #endif u8 numInstruments; u8 numDrums; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) u8 bankId1; u8 bankId2; #endif @@ -238,7 +238,7 @@ struct M64ScriptState { // Also known as a Group, according to debug strings. struct SequencePlayer { /*US/JP, EU, SH */ -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) /*0x000, 0x000, 0x000*/ u8 enabled : 1; #else /*0x000, 0x000*/ volatile u8 enabled : 1; @@ -247,10 +247,10 @@ struct SequencePlayer { /*0x000, 0x000*/ u8 muted : 1; /*0x000, 0x000*/ u8 seqDmaInProgress : 1; /*0x000, 0x000*/ u8 bankDmaInProgress : 1; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) /* 0x000*/ u8 recalculateVolume : 1; #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) /* 0x000*/ u8 unkSh: 1; #endif #if defined(VERSION_JP) || defined(VERSION_US) @@ -267,7 +267,7 @@ struct SequencePlayer { /*0x008, ?????*/ u8 loadingBankNumInstruments; /*0x009, ?????*/ u8 loadingBankNumDrums; #endif -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) /* , 0x007, 0x007*/ s8 seqVariationEu[1]; #endif /*0x00A, 0x008*/ u16 tempo; // beats per minute in JP, tatums per minute in US/EU @@ -275,12 +275,12 @@ struct SequencePlayer { #if defined(VERSION_JP) || defined(VERSION_US) /*0x00E, 0x010*/ u16 fadeRemainingFrames; #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) /* 0x00C*/ s16 tempoAdd; #endif /*0x010, 0x00C, 0x00E*/ s16 transposition; /*0x012, 0x00E, 0x010*/ u16 delay; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) /*0x00E, 0x010, 0x012*/ u16 fadeRemainingFrames; /* , 0x012, 0x014*/ u16 fadeTimerUnkEu; #endif @@ -289,7 +289,7 @@ struct SequencePlayer { /*0x01C, 0x01C*/ f32 fadeVelocity; // set to 0.0f /*0x020, 0x020, 0x024*/ f32 volume; // set to 0.0f /*0x024, 0x024*/ f32 muteVolumeScale; // set to 0.5f -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) /* , 0x028, 0x02C*/ f32 fadeVolumeScale; /* , 0x02C*/ f32 appliedFadeVolume; #else @@ -316,7 +316,7 @@ struct SequencePlayer { struct AdsrSettings { u8 releaseRate; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) u8 sustain; #else u16 sustain; // sustain level, 2^16 = max @@ -334,7 +334,7 @@ struct AdsrState { #endif /*0x08, 0x02*/ s16 envIndex; /*0x0A, 0x04*/ s16 delay; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) /* , 0x08*/ f32 sustain; /* , 0x0C*/ f32 velocity; /* , 0x10*/ f32 fadeOutVel; @@ -378,13 +378,13 @@ struct ReverbInfo { struct NoteAttributes { u8 reverbVol; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) u8 synthesisVolume; // UQ4.4, although 0 <= x < 1 is rounded up to 1 #endif -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) u8 pan; #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) union ReverbBits reverbBits; #endif f32 freqScale; @@ -392,7 +392,7 @@ struct NoteAttributes { #if defined(VERSION_JP) || defined(VERSION_US) f32 pan; #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) s16 *filter; #endif }; // size = 0x10 @@ -409,7 +409,7 @@ struct SequenceChannel { /*0x00, 0x00*/ u8 stereoHeadsetEffects : 1; /*0x00, ????*/ u8 largeNotes : 1; // notes specify duration and velocity /*0x00, ????*/ u8 unused : 1; // never read, set to 0 -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) /* , 0x01*/ union { struct { u8 freqScale : 1; @@ -423,11 +423,11 @@ struct SequenceChannel { /*0x02, 0x03, 0x03*/ u8 muteBehavior; /*0x03, 0x04, 0x04*/ u8 reverbVol; // until EU: Q1.7, after EU: UQ0.8 /*0x04, ????*/ u8 notePriority; // 0-3 -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) u8 unkSH06; // some priority #endif /*0x05, 0x06*/ u8 bankId; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) /* , 0x07*/ u8 reverbIndex; /* , 0x08, 0x09*/ u8 bookOffset; /* , 0x09*/ u8 newPan; @@ -435,7 +435,7 @@ struct SequenceChannel { #else /*0x06, */ u8 updatesPerFrameUnused; #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) /* 0x0C*/ u8 synthesisVolume; // UQ4.4, although 0 <= x < 1 is rounded up to 1 #endif /*0x08, 0x0C, 0x0E*/ u16 vibratoRateStart; // initially 0x800 @@ -465,14 +465,14 @@ struct SequenceChannel { /*0x3C, 0x40*/ struct Instrument *instrument; /*0x40, 0x44*/ struct SequencePlayer *seqPlayer; /*0x44, 0x48*/ struct SequenceChannelLayer *layers[LAYERS_MAX]; -#ifndef VERSION_SH +#if !defined(VERSION_SH) && !defined(VERSION_CN) /*0x54, 0x58 */ s8 soundScriptIO[8]; // bridge between sound script and audio lib. For player 2, // [0] contains enabled, [4] contains sound ID, [5] contains reverb adjustment #endif /*0x5C, 0x60*/ struct M64ScriptState scriptState; /*0x78, 0x7C*/ struct AdsrSettings adsr; /*0x80, 0x84*/ struct NotePool notePool; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) /* 0xC0*/ s8 soundScriptIO[8]; // bridge between sound script and audio lib. For player 2, // [0] contains enabled, [4] contains sound ID, [5] contains reverb adjustment /* 0xC8*/ u16 unkC8; @@ -487,11 +487,11 @@ struct SequenceChannelLayer { /*0x00, 0x00*/ u8 finished : 1; /*0x00, 0x00*/ u8 stopSomething : 1; // ? /*0x00, 0x00*/ u8 continuousNotes : 1; // keep the same note for consecutive notes with the same sound -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) /* , 0x00*/ u8 unusedEu0b8 : 1; /* , 0x00*/ u8 notePropertiesNeedInit : 1; /* , 0x00*/ u8 ignoreDrumPan : 1; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) /* , , 0x01 */ union ReverbBits reverbBits; #endif /* , 0x01, 0x02*/ u8 instOrWave; @@ -499,7 +499,7 @@ struct SequenceChannelLayer { /*0x01, 0x02, 0x03*/ u8 status; // 0x03 in SH /*0x02, 0x03*/ u8 noteDuration; // set to 0x80 /*0x03, 0x04*/ u8 portamentoTargetNote; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) /* , 0x05*/ u8 pan; // 0..128 /* , 0x06, 0x07*/ u8 notePan; #endif @@ -510,7 +510,7 @@ struct SequenceChannelLayer { // (m64 instruction encoding only allows referring to the limited range // 0..0x3f; this makes 0x40..0x7f accessible as well) /*0x20, 0x24, 0x24*/ f32 freqScale; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) /* 0x28*/ f32 freqScaleMultiplier; #endif /*0x24, 0x28, 0x2C*/ f32 velocitySquare; @@ -538,13 +538,13 @@ struct SequenceChannelLayer { #endif }; // size = 0x80 -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) struct NoteSynthesisState { /*0x00*/ u8 restart; /*0x01*/ u8 sampleDmaIndex; /*0x02*/ u8 prevHeadsetPanRight; /*0x03*/ u8 prevHeadsetPanLeft; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) /* 0x04*/ u8 reverbVol; /* 0x05*/ u8 unk5; #endif @@ -559,7 +559,7 @@ struct NotePlaybackState { /*0x04, 0x00, 0x00*/ u8 priority; /* 0x01, 0x01*/ u8 waveId; /* 0x02, 0x02*/ u8 sampleCountIndex; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) /* 0x03*/ u8 bankId; /* 0x04*/ u8 unkSH34; #endif @@ -602,7 +602,7 @@ struct NoteSubEu { s16 *samples; struct AudioBankSound *audioBankSound; } sound; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) /*0x10*/ s16 *filter; #endif }; @@ -622,7 +622,7 @@ struct Note { /*0x04, 0x30, 0x30*/ u8 priority; /* 0x31, 0x31*/ u8 waveId; /* 0x32, 0x32*/ u8 sampleCountIndex; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) /* 0x33*/ u8 bankId; /* 0x34*/ u8 unkSH34; #endif @@ -699,7 +699,7 @@ struct Note { struct NoteSynthesisBuffers { s16 adpcmdecState[0x10]; s16 finalResampleState[0x10]; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) s16 unk[0x10]; s16 filterBuffer[0x20]; s16 panSamplesBuffer[0x20]; @@ -745,12 +745,12 @@ struct AudioSessionSettingsEU { /* 0x0E */ u16 unk3; // always 0 /* 0x10 */ u32 persistentSeqMem; /* 0x14 */ u32 persistentBankMem; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) /* 0x18 */ u32 unk18; // always 0 #endif /* 0x18, 0x1C */ u32 temporarySeqMem; /* 0x1C, 0x20 */ u32 temporaryBankMem; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) /* 0x24 */ u32 unk24; // always 0 /* 0x28 */ u32 unkMem28; // always 0 /* 0x2C */ u32 unkMem2C; // always 0 @@ -825,7 +825,7 @@ struct EuAudioCmd { } u2; }; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) struct PendingDmaSample { u8 medium; u8 bankId; diff --git a/src/audio/load.c b/src/audio/load.c index 896032dd..aa0c71d9 100644 --- a/src/audio/load.c +++ b/src/audio/load.c @@ -1,4 +1,4 @@ -#ifndef VERSION_SH +#if !defined(VERSION_SH) && !defined(VERSION_CN) #include #include @@ -71,7 +71,7 @@ struct CtlEntry *gCtlEntries; // sh: 0x803505F8 #if defined(VERSION_EU) u32 padEuBss1; struct AudioBufferParametersEU gAudioBufferParameters; -#elif defined(VERSION_US) || defined(VERSION_JP) +#else s32 gAiFrequency; #endif diff --git a/src/audio/load.h b/src/audio/load.h index 63379d21..11e05546 100644 --- a/src/audio/load.h +++ b/src/audio/load.h @@ -36,11 +36,11 @@ extern ALSeqFile *gSeqFileHeader; extern u8 *gAlBankSets; extern struct CtlEntry *gCtlEntries; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) extern struct AudioBufferParametersEU gAudioBufferParameters; #endif extern s32 gAiFrequency; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) extern s16 gCurrAiBufferLength; extern s32 D_SH_8034F68C; #endif @@ -53,7 +53,7 @@ extern s16 gTempoInternalToExternal; extern s8 gAudioUpdatesPerFrame; // = 4 extern s8 gSoundMode; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) extern OSMesgQueue gUnkQueue1; struct UnkStructSH8034EC88 { @@ -78,25 +78,25 @@ extern struct UnkStructSH8034EC88 D_SH_8034EC88[0x80]; void audio_dma_partial_copy_async(uintptr_t *devAddr, u8 **vAddr, ssize_t *remaining, OSMesgQueue *queue, OSIoMesg *mesg); void decrease_sample_dma_ttls(void); -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) void *dma_sample_data(uintptr_t devAddr, u32 size, s32 arg2, u8 *dmaIndexRef, s32 medium); #else void *dma_sample_data(uintptr_t devAddr, u32 size, s32 arg2, u8 *dmaIndexRef); #endif void init_sample_dma_buffers(s32 arg0); -#if defined(VERSION_SH) +#if defined(VERSION_SH) || defined(VERSION_CN) void patch_audio_bank(s32 bankId, struct AudioBank *mem, struct PatchStruct *patchInfo); #else void patch_audio_bank(struct AudioBank *mem, u8 *offset, u32 numInstruments, u32 numDrums); #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) void preload_sequence(u32 seqId, s32 preloadMask); #else void preload_sequence(u32 seqId, u8 preloadMask); #endif void load_sequence(u32 player, u32 seqId, s32 loadAsync); -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) void func_sh_802f3158(s32 seqId, s32 arg1, s32 arg2, OSMesgQueue *retQueue); u8 *func_sh_802f3220(u32 seqId, u32 *a1); struct AudioBankSample *func_sh_802f4978(s32 bankId, s32 idx); diff --git a/src/audio/load_sh.c b/src/audio/load_sh.c index 99593a28..ac57be1f 100644 --- a/src/audio/load_sh.c +++ b/src/audio/load_sh.c @@ -1,4 +1,4 @@ -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) #include #include @@ -983,7 +983,6 @@ void func_sh_802f41e4(s32 audioResetStatus) { func_sh_802f4dcc(audioResetStatus); } -#if defined(VERSION_SH) u8 gShindouSoundBanksHeader[] = { #include "sound/ctl_header.inc.c" }; @@ -999,7 +998,6 @@ u8 gShindouSampleBanksHeader[] = { u8 gShindouSequencesHeader[] = { #include "sound/sequences_header.inc.c" }; -#endif // (void) must be omitted from parameters void audio_init() { diff --git a/src/audio/playback.c b/src/audio/playback.c index ff42e765..333d0840 100644 --- a/src/audio/playback.c +++ b/src/audio/playback.c @@ -11,8 +11,8 @@ void note_set_resampling_rate(struct Note *note, f32 resamplingRateInput); -#if defined(VERSION_EU) || defined(VERSION_SH) -#ifdef VERSION_SH +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) +#if defined(VERSION_SH) || defined(VERSION_CN) void note_set_vel_pan_reverb(struct Note *note, struct ReverbInfo *reverbInfo) #else void note_set_vel_pan_reverb(struct Note *note, f32 velocity, u8 pan, u8 reverbVol) @@ -34,7 +34,7 @@ void note_set_vel_pan_reverb(struct Note *note, f32 velocity, u8 pan, u8 reverbV struct ReverbBitsData reverbBits; #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) note_set_resampling_rate(note, reverbInfo->freqScale); velocity = reverbInfo->velocity; pan = reverbInfo->pan; @@ -46,7 +46,7 @@ void note_set_vel_pan_reverb(struct Note *note, f32 velocity, u8 pan, u8 reverbV #endif if (note->noteSubEu.stereoHeadsetEffects && gSoundMode == SOUND_MODE_HEADSET) { -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) smallPanIndex = pan >> 1; #else smallPanIndex = pan >> 3; @@ -64,7 +64,7 @@ void note_set_vel_pan_reverb(struct Note *note, f32 velocity, u8 pan, u8 reverbV volLeft = gHeadsetPanVolume[pan]; volRight = gHeadsetPanVolume[127 - pan]; } else if (sub->stereoHeadsetEffects && gSoundMode == SOUND_MODE_STEREO) { -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) strongRight = FALSE; strongLeft = FALSE; sub->headsetPanRight = 0; @@ -89,7 +89,7 @@ void note_set_vel_pan_reverb(struct Note *note, f32 velocity, u8 pan, u8 reverbV sub->stereoStrongRight = strongRight; sub->stereoStrongLeft = strongLeft; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) switch (reverbBits.stereoHeadsetEffects) { case 0: sub->stereoStrongRight = reverbBits.strongRight; @@ -118,7 +118,7 @@ void note_set_vel_pan_reverb(struct Note *note, f32 velocity, u8 pan, u8 reverbV volRight = gDefaultPanVolume[127 - pan]; } -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) if (velocity < 0.0f) { velocity = 0.0f; } @@ -146,7 +146,7 @@ void note_set_vel_pan_reverb(struct Note *note, f32 velocity, u8 pan, u8 reverbV //! @bug for the change to UQ0.7, the if statement should also have been changed accordingly if (sub->reverbVol != reverbVol) { -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) sub->reverbVol = reverbVol >> 1; #else sub->reverbVol = reverbVol; @@ -162,7 +162,7 @@ void note_set_vel_pan_reverb(struct Note *note, f32 velocity, u8 pan, u8 reverbV } } -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) #define MIN_RESAMPLING_RATE 1.99998f #else #define MIN_RESAMPLING_RATE 1.99996f @@ -255,7 +255,7 @@ struct Instrument *get_instrument_inner(s32 bankId, s32 instId) { struct Drum *get_drum(s32 bankId, s32 drumId) { struct Drum *drum; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) if (IS_BANK_LOAD_COMPLETE(bankId) == FALSE) { stubbed_printf("Audio: voiceman: No bank error %d\n", bankId); gAudioErrorFlags = bankId + 0x10000000; @@ -287,7 +287,7 @@ struct Drum *get_drum(s32 bankId, s32 drumId) { #endif #endif // VERSION_EU -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) void note_init_for_layer(struct Note *note, struct SequenceChannelLayer *seqLayer); #else s32 note_init_for_layer(struct Note *note, struct SequenceChannelLayer *seqLayer); @@ -299,11 +299,11 @@ void note_init(struct Note *note) { } else { adsr_init(¬e->adsr, note->parentLayer->adsr.envelope, ¬e->adsrVolScale); } -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) note->unkSH34 = 0; #endif note->adsr.state = ADSR_STATE_INITIAL; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) note->noteSubEu = gDefaultNoteSub; #else note_init_volume(note); @@ -311,7 +311,7 @@ void note_init(struct Note *note) { #endif } -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) #define note_disable2 note_disable void note_disable(struct Note *note) { if (note->noteSubEu.needsInit == TRUE) { @@ -323,14 +323,14 @@ void note_disable(struct Note *note) { } #endif note->priority = NOTE_PRIORITY_DISABLED; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) note->unkSH34 = 0; #endif note->parentLayer = NO_LAYER; note->prevParentLayer = NO_LAYER; note->noteSubEu.enabled = FALSE; note->noteSubEu.finished = FALSE; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) note->adsr.state = ADSR_STATE_DISABLED; note->adsr.current = 0; #endif @@ -343,7 +343,7 @@ void note_disable2(struct Note *note) { void process_notes(void) { f32 scale; -#ifndef VERSION_SH +#if !defined(VERSION_SH) && !defined(VERSION_CN) f32 frequency; #if defined(VERSION_JP) || defined(VERSION_US) u8 reverbVol; @@ -355,10 +355,10 @@ void process_notes(void) { #endif #endif struct Note *note; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) struct NotePlaybackState *playbackState; struct NoteSubEu *noteSubEu; -#ifndef VERSION_SH +#ifdef VERSION_EU UNUSED u8 pad[12]; u8 reverbVol; UNUSED u8 pad3; @@ -389,7 +389,7 @@ void process_notes(void) { for (i = 0; i < gMaxSimultaneousNotes; i++) { note = &gNotes[i]; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) playbackState = (struct NotePlaybackState *) ¬e->priority; if (note->parentLayer != NO_LAYER) { #ifndef NO_SEGMENTED_MEMORY @@ -397,7 +397,7 @@ void process_notes(void) { continue; } #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) if (note != playbackState->parentLayer->note && playbackState->unkSH34 == 0) { playbackState->adsr.action |= ADSR_ACTION_RELEASE; playbackState->adsr.fadeOutVel = gAudioBufferParameters.updatesPerFrameInv; @@ -456,11 +456,11 @@ void process_notes(void) { #endif d: if (playbackState->priority != NOTE_PRIORITY_DISABLED) { -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) if (1) {} #endif noteSubEu = ¬e->noteSubEu; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) if (playbackState->unkSH34 >= 1 || noteSubEu->finished) { #else if (playbackState->priority == NOTE_PRIORITY_STOPPING || noteSubEu->finished) { @@ -490,7 +490,7 @@ void process_notes(void) { goto skip; } } -#ifndef VERSION_SH +#if !defined(VERSION_SH) && !defined(VERSION_CN) if (1) { } #endif @@ -504,7 +504,7 @@ void process_notes(void) { scale = adsr_update(&playbackState->adsr); note_vibrato_update(note); attributes = &playbackState->attributes; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) if (playbackState->unkSH34 == 1 || playbackState->unkSH34 == 2) { reverbInfo.freqScale = attributes->freqScale; reverbInfo.velocity = attributes->velocity; @@ -631,7 +631,7 @@ void process_notes(void) { #undef POP } -#if defined(VERSION_SH) +#if defined(VERSION_SH) || defined(VERSION_CN) // These three are matching but have been moved from above in shindou: struct AudioBankSound *instrument_get_audio_bank_sound(struct Instrument *instrument, s32 semitone) { struct AudioBankSound *sound; @@ -701,7 +701,7 @@ void seq_channel_layer_decay_release_internal(struct SequenceChannelLayer *seqLa return; } -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) seqLayer->status = SOUND_LOAD_STATUS_NOT_LOADED; #endif @@ -724,7 +724,7 @@ void seq_channel_layer_decay_release_internal(struct SequenceChannelLayer *seqLa if (note->parentLayer != seqLayer) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) if (note->parentLayer == NO_LAYER && note->wantedParentLayer == NO_LAYER && note->prevParentLayer == seqLayer && target != ADSR_STATE_DECAY) { // Just guessing that this printf goes here... it's hard to parse. @@ -736,19 +736,19 @@ void seq_channel_layer_decay_release_internal(struct SequenceChannelLayer *seqLa return; } -#ifndef VERSION_SH +#if !defined(VERSION_SH) && !defined(VERSION_CN) seqLayer->status = SOUND_LOAD_STATUS_NOT_LOADED; #endif if (note->adsr.state != ADSR_STATE_DECAY) { attributes->freqScale = seqLayer->noteFreqScale; attributes->velocity = seqLayer->noteVelocity; attributes->pan = seqLayer->notePan; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) attributes->reverbBits = seqLayer->reverbBits; #endif if (seqLayer->seqChannel != NULL) { attributes->reverbVol = seqLayer->seqChannel->reverbVol; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) attributes->synthesisVolume = seqLayer->seqChannel->synthesisVolume; attributes->filter = seqLayer->seqChannel->filter; if (seqLayer->seqChannel->seqPlayer->muted && (seqLayer->seqChannel->muteBehavior & 8) != 0) { @@ -757,31 +757,31 @@ void seq_channel_layer_decay_release_internal(struct SequenceChannelLayer *seqLa note->priority = seqLayer->seqChannel->unkSH06; #endif } -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) else { #endif note->priority = NOTE_PRIORITY_STOPPING; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) } #endif note->prevParentLayer = note->parentLayer; note->parentLayer = NO_LAYER; if (target == ADSR_STATE_RELEASE) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) note->adsr.fadeOutVel = gAudioBufferParameters.updatesPerFrameInv; #else note->adsr.fadeOutVel = 0x8000 / gAudioUpdatesPerFrame; #endif note->adsr.action |= ADSR_ACTION_RELEASE; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) note->unkSH34 = 2; #endif } else { -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) note->unkSH34 = 1; #endif note->adsr.action |= ADSR_ACTION_DECAY; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) if (seqLayer->adsr.releaseRate == 0) { note->adsr.fadeOutVel = seqLayer->seqChannel->adsr.releaseRate * gAudioBufferParameters.unkUpdatesPerFrameScaled; } else { @@ -813,7 +813,7 @@ void seq_channel_layer_note_release(struct SequenceChannelLayer *seqLayer) { seq_channel_layer_decay_release_internal(seqLayer, ADSR_STATE_RELEASE); } -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) s32 build_synthetic_wave(struct Note *note, struct SequenceChannelLayer *seqLayer, s32 waveId) { f32 freqScale; f32 ratio; @@ -910,7 +910,7 @@ void build_synthetic_wave(struct Note *note, struct SequenceChannelLayer *seqLay #endif void init_synthetic_wave(struct Note *note, struct SequenceChannelLayer *seqLayer) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) s32 sampleCountIndex; s32 waveSampleCountIndex; s32 waveId = seqLayer->instOrWave; @@ -919,7 +919,7 @@ void init_synthetic_wave(struct Note *note, struct SequenceChannelLayer *seqLaye } sampleCountIndex = note->sampleCountIndex; waveSampleCountIndex = build_synthetic_wave(note, seqLayer, waveId); -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) note->synthesisState.samplePosInt = note->synthesisState.samplePosInt * euUnknownData_8030194c[waveSampleCountIndex] / euUnknownData_8030194c[sampleCountIndex]; #else // Not a real change. Just temporary so I can remove this variable. note->synthesisState.samplePosInt = note->synthesisState.samplePosInt * gDefaultShortNoteVelocityTable[waveSampleCountIndex] / gDefaultShortNoteVelocityTable[sampleCountIndex]; @@ -993,7 +993,7 @@ void note_pool_clear(struct NotePool *pool) { break; } -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) for (;;) { cur = source->next; if (cur == source) { @@ -1108,7 +1108,7 @@ struct Note *pop_node_with_lower_prio(struct AudioListItem *list, s32 limit) { } } -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) if (best == NULL) { return NULL; } @@ -1122,13 +1122,13 @@ struct Note *pop_node_with_lower_prio(struct AudioListItem *list, s32 limit) { } #endif -#ifndef VERSION_SH +#if !defined(VERSION_SH) && !defined(VERSION_CN) audio_list_remove(best); #endif return best->u.value; } -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) void note_init_for_layer(struct Note *note, struct SequenceChannelLayer *seqLayer) { UNUSED s32 pad[4]; s16 instId; @@ -1159,7 +1159,7 @@ void note_init_for_layer(struct Note *note, struct SequenceChannelLayer *seqLaye if (sub->isSyntheticWave) { build_synthetic_wave(note, seqLayer, instId); } -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) note->bankId = seqLayer->seqChannel->bankId; #else sub->bankId = seqLayer->seqChannel->bankId; @@ -1198,13 +1198,13 @@ void func_80319728(struct Note *note, struct SequenceChannelLayer *seqLayer) { void note_release_and_take_ownership(struct Note *note, struct SequenceChannelLayer *seqLayer) { note->wantedParentLayer = seqLayer; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) note->priority = seqLayer->seqChannel->notePriority; #else note->priority = NOTE_PRIORITY_STOPPING; #endif -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) note->adsr.fadeOutVel = gAudioBufferParameters.updatesPerFrameInv; #else note->adsr.fadeOutVel = 0x8000 / gAudioUpdatesPerFrame; @@ -1215,7 +1215,7 @@ void note_release_and_take_ownership(struct Note *note, struct SequenceChannelLa struct Note *alloc_note_from_disabled(struct NotePool *pool, struct SequenceChannelLayer *seqLayer) { struct Note *note = audio_list_pop_back(&pool->disabled); if (note != NULL) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) note_init_for_layer(note, seqLayer); #else if (note_init_for_layer(note, seqLayer) == TRUE) { @@ -1238,11 +1238,11 @@ struct Note *alloc_note_from_decaying(struct NotePool *pool, struct SequenceChan } struct Note *alloc_note_from_active(struct NotePool *pool, struct SequenceChannelLayer *seqLayer) { -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) struct Note *rNote; #endif struct Note *aNote; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) s32 rPriority, aPriority; rPriority = aPriority = 0x10; @@ -1258,7 +1258,7 @@ struct Note *alloc_note_from_active(struct NotePool *pool, struct SequenceChanne if (aNote == NULL) { eu_stubbed_printf_0("Audio: C-Alloc : lowerPrio is NULL\n"); } else { -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) aPriority = aNote->priority; #else func_80319728(aNote, seqLayer); @@ -1266,7 +1266,7 @@ struct Note *alloc_note_from_active(struct NotePool *pool, struct SequenceChanne #endif } -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) if (rNote == NULL && aNote == NULL) { return NULL; } @@ -1293,13 +1293,13 @@ struct Note *alloc_note(struct SequenceChannelLayer *seqLayer) { if (policy & NOTE_ALLOC_LAYER) { ret = seqLayer->note; if (ret != NULL && ret->prevParentLayer == seqLayer -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) && ret->wantedParentLayer == NO_LAYER #endif ) { note_release_and_take_ownership(ret, seqLayer); audio_list_remove(&ret->listItem); -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) audio_list_push_back(&ret->listItem.pool->releasing, &ret->listItem); #else audio_list_push_back(&gNoteFreeLists.releasing, &ret->listItem); @@ -1312,7 +1312,7 @@ struct Note *alloc_note(struct SequenceChannelLayer *seqLayer) { if (!(ret = alloc_note_from_disabled(&seqLayer->seqChannel->notePool, seqLayer)) && !(ret = alloc_note_from_decaying(&seqLayer->seqChannel->notePool, seqLayer)) && !(ret = alloc_note_from_active(&seqLayer->seqChannel->notePool, seqLayer))) { -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) goto null_return; #else eu_stubbed_printf_0("Sub Limited Warning: Drop Voice"); @@ -1330,7 +1330,7 @@ struct Note *alloc_note(struct SequenceChannelLayer *seqLayer) { && !(ret = alloc_note_from_decaying(&seqLayer->seqChannel->seqPlayer->notePool, seqLayer)) && !(ret = alloc_note_from_active(&seqLayer->seqChannel->notePool, seqLayer)) && !(ret = alloc_note_from_active(&seqLayer->seqChannel->seqPlayer->notePool, seqLayer))) { -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) goto null_return; #else eu_stubbed_printf_0("Warning: Drop Voice"); @@ -1345,7 +1345,7 @@ struct Note *alloc_note(struct SequenceChannelLayer *seqLayer) { if (!(ret = alloc_note_from_disabled(&gNoteFreeLists, seqLayer)) && !(ret = alloc_note_from_decaying(&gNoteFreeLists, seqLayer)) && !(ret = alloc_note_from_active(&gNoteFreeLists, seqLayer))) { -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) goto null_return; #else eu_stubbed_printf_0("Warning: Drop Voice"); @@ -1365,7 +1365,7 @@ struct Note *alloc_note(struct SequenceChannelLayer *seqLayer) { && !(ret = alloc_note_from_active(&seqLayer->seqChannel->notePool, seqLayer)) && !(ret = alloc_note_from_active(&seqLayer->seqChannel->seqPlayer->notePool, seqLayer)) && !(ret = alloc_note_from_active(&gNoteFreeLists, seqLayer))) { -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) goto null_return; #else eu_stubbed_printf_0("Warning: Drop Voice"); @@ -1375,7 +1375,7 @@ struct Note *alloc_note(struct SequenceChannelLayer *seqLayer) { } return ret; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) null_return: seqLayer->status = SOUND_LOAD_STATUS_NOT_LOADED; return NULL; @@ -1427,7 +1427,7 @@ void note_init_all(void) { for (i = 0; i < gMaxSimultaneousNotes; i++) { note = &gNotes[i]; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) note->noteSubEu = gZeroNoteSub; #else note->enabled = FALSE; @@ -1436,13 +1436,13 @@ void note_init_all(void) { note->stereoHeadsetEffects = FALSE; #endif note->priority = NOTE_PRIORITY_DISABLED; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) note->unkSH34 = 0; #endif note->parentLayer = NO_LAYER; note->wantedParentLayer = NO_LAYER; note->prevParentLayer = NO_LAYER; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) note->waveId = 0; #else note->reverbVol = 0; @@ -1461,7 +1461,7 @@ void note_init_all(void) { note->vibratoState.active = FALSE; note->portamento.cur = 0.0f; note->portamento.speed = 0.0f; -#if defined(VERSION_SH) +#if defined(VERSION_SH) || defined(VERSION_CN) note->synthesisState.synthesisBuffers = sound_alloc_uninitialized(&gNotesAndBuffersPool, sizeof(struct NoteSynthesisBuffers)); #elif defined(VERSION_EU) note->synthesisState.synthesisBuffers = soundAlloc(&gNotesAndBuffersPool, sizeof(struct NoteSynthesisBuffers)); diff --git a/src/audio/port_sh.c b/src/audio/port_sh.c index e7fae5b0..e96f7c32 100644 --- a/src/audio/port_sh.c +++ b/src/audio/port_sh.c @@ -1,5 +1,5 @@ -#ifdef VERSION_SH -// TODO: merge this with port_eu.c? +#if defined(VERSION_SH) || defined(VERSION_CN) +// TODO: merge this with port_eu.c #include diff --git a/src/audio/seqplayer.c b/src/audio/seqplayer.c index 13ee393b..b65fa609 100644 --- a/src/audio/seqplayer.c +++ b/src/audio/seqplayer.c @@ -15,7 +15,7 @@ #define PORTAMENTO_MODE_4 4 #define PORTAMENTO_MODE_5 5 -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) void seq_channel_layer_process_script_part1(struct SequenceChannelLayer *layer); s32 seq_channel_layer_process_script_part2(struct SequenceChannelLayer *layer); s32 seq_channel_layer_process_script_part3(struct SequenceChannelLayer *layer, s32 cmd); @@ -38,7 +38,7 @@ void sequence_channel_init(struct SequenceChannel *seqChannel) { seqChannel->stereoHeadsetEffects = FALSE; seqChannel->transposition = 0; seqChannel->largeNotes = FALSE; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) seqChannel->bookOffset = 0; seqChannel->changes.as_u8 = 0xff; seqChannel->scriptState.depth = 0; @@ -56,11 +56,11 @@ void sequence_channel_init(struct SequenceChannel *seqChannel) { seqChannel->noteUnused = NULL; #endif seqChannel->reverbVol = 0; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) seqChannel->synthesisVolume = 0; #endif seqChannel->notePriority = NOTE_PRIORITY_DEFAULT; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) seqChannel->unkSH06 = 1; #endif seqChannel->delay = 0; @@ -77,10 +77,10 @@ void sequence_channel_init(struct SequenceChannel *seqChannel) { seqChannel->vibratoRateChangeDelay = 0; seqChannel->vibratoExtentChangeDelay = 0; seqChannel->vibratoDelay = 0; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) seqChannel->filter = NULL; #endif -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) seqChannel->volume = 1.0f; seqChannel->volumeScale = 1.0f; seqChannel->freqScale = 1.0f; @@ -98,7 +98,7 @@ s32 seq_channel_set_layer(struct SequenceChannel *seqChannel, s32 layerIndex) { struct SequenceChannelLayer *layer; if (seqChannel->layers[layerIndex] == NULL) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) struct SequenceChannelLayer *layer; #endif layer = audio_list_pop_back(&gLayerFreeList); @@ -119,17 +119,17 @@ s32 seq_channel_set_layer(struct SequenceChannel *seqChannel, s32 layerIndex) { layer->stopSomething = FALSE; layer->continuousNotes = FALSE; layer->finished = FALSE; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) layer->ignoreDrumPan = FALSE; #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) layer->reverbBits.asByte = 0x40; #endif layer->portamento.mode = 0; layer->scriptState.depth = 0; layer->status = SOUND_LOAD_STATUS_NOT_LOADED; layer->noteDuration = 0x80; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) layer->pan = 0x40; #endif layer->transposition = 0; @@ -138,10 +138,10 @@ s32 seq_channel_set_layer(struct SequenceChannel *seqChannel, s32 layerIndex) { layer->delayUnused = 0; layer->note = NULL; layer->instrument = NULL; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) layer->freqScale = 1.0f; layer->velocitySquare = 0.0f; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) layer->freqScaleMultiplier = 1.0f; #endif layer->instOrWave = 0xff; @@ -164,7 +164,7 @@ void seq_channel_layer_free(struct SequenceChannel *seqChannel, s32 layerIndex) struct SequenceChannelLayer *layer = seqChannel->layers[layerIndex]; if (layer != NULL) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) audio_list_push_back(&gLayerFreeList, &layer->listItem); #else struct AudioListItem *item = &layer->listItem; @@ -197,7 +197,7 @@ struct SequenceChannel *allocate_sequence_channel(void) { s32 i; for (i = 0; i < ARRAY_COUNT(gSequenceChannels); i++) { if (gSequenceChannels[i].seqPlayer == NULL) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) return &gSequenceChannels[i]; #else return gSequenceChannels + i; @@ -232,7 +232,7 @@ void sequence_player_init_channels(struct SequencePlayer *seqPlayer, u16 channel seqChannel->noteAllocPolicy = seqPlayer->noteAllocPolicy; } } -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) channelBits = channelBits >> 1; #else channelBits >>= 1; @@ -253,7 +253,7 @@ void sequence_player_disable_channels(struct SequencePlayer *seqPlayer, u16 chan sequence_channel_disable(seqChannel); seqChannel->seqPlayer = NULL; } -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) else { #ifdef VERSION_EU stubbed_printf("Audio:Track: Warning SUBTRACK PARENT CHANGED\n"); @@ -263,7 +263,7 @@ void sequence_player_disable_channels(struct SequencePlayer *seqPlayer, u16 chan seqPlayer->channels[i] = &gSequenceChannelNone; } } -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) channelBits = channelBits >> 1; #else channelBits >>= 1; @@ -310,7 +310,7 @@ void sequence_player_disable(struct SequencePlayer *seqPlayer) { seqPlayer->enabled = FALSE; if (IS_SEQ_LOAD_COMPLETE(seqPlayer->seqId) -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) && gSeqLoadStatus[seqPlayer->seqId] != 5 #endif ) { @@ -318,11 +318,11 @@ void sequence_player_disable(struct SequencePlayer *seqPlayer) { } if (IS_BANK_LOAD_COMPLETE(seqPlayer->defaultBank[0]) -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) && gBankLoadStatus[seqPlayer->defaultBank[0]] != 5 #endif ) { -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) gBankLoadStatus[seqPlayer->defaultBank[0]] = 4; #else gBankLoadStatus[seqPlayer->defaultBank[0]] = SOUND_LOAD_STATUS_DISCARDABLE; @@ -332,7 +332,7 @@ void sequence_player_disable(struct SequencePlayer *seqPlayer) { // (Note that if this is called from alloc_bank_or_seq, the side will get swapped // later in that function. Thus, we signal that we want to load into the slot // of the bank that we no longer need.) -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) if (seqPlayer->defaultBank[0] == gBankLoadedPool.temporary.entries[0].id) { gBankLoadedPool.temporary.nextSide = 1; } else if (seqPlayer->defaultBank[0] == gBankLoadedPool.temporary.entries[1].id) { @@ -387,7 +387,7 @@ void init_layer_freelist(void) { gLayerFreeList.pool = NULL; for (i = 0; i < ARRAY_COUNT(gSequenceLayers); i++) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) gSequenceLayers[i].listItem.u.value = &gSequenceLayers[i]; #else gSequenceLayers[i].listItem.u.value = gSequenceLayers + i; @@ -398,7 +398,7 @@ void init_layer_freelist(void) { } u8 m64_read_u8(struct M64ScriptState *state) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) return *(state->pc++); #else u8 *midiArg = state->pc++; @@ -421,7 +421,7 @@ u16 m64_read_compressed_u16(struct M64ScriptState *state) { return ret; } -#if defined(VERSION_SH) +#if defined(VERSION_SH) || defined(VERSION_CN) void seq_channel_layer_process_script(struct SequenceChannelLayer *layer) { s32 cmd; @@ -517,7 +517,7 @@ void seq_channel_layer_process_script(struct SequenceChannelLayer *layer) { seqChannel = layer->seqChannel; seqPlayer = seqChannel->seqPlayer; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) layer->notePropertiesNeedInit = TRUE; #endif @@ -570,7 +570,7 @@ void seq_channel_layer_process_script(struct SequenceChannelLayer *layer) { state->pc = seqPlayer->seqData + sp3A; break; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) case 0xf4: state->pc += (s8)m64_read_u8(state); break; @@ -582,7 +582,7 @@ void seq_channel_layer_process_script(struct SequenceChannelLayer *layer) { if (cmd == 0xc1) { layer->velocitySquare = (f32)(temp_a0_5 * temp_a0_5); } else { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) layer->pan = temp_a0_5; #else layer->pan = (f32) temp_a0_5 / US_FLOAT(128.0); @@ -673,7 +673,7 @@ void seq_channel_layer_process_script(struct SequenceChannelLayer *layer) { layer->portamento.mode = 0; break; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) case 0xcb: sp3A = m64_read_s16(state); layer->adsr.envelope = (struct AdsrEnvelope *) (seqPlayer->seqData + sp3A); @@ -732,7 +732,7 @@ void seq_channel_layer_process_script(struct SequenceChannelLayer *layer) { // the remaining bits are used for the semitone cmd -= (cmd & 0xc0); -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) layer->velocitySquare = (f32)(vel) * (f32)vel; #else layer->velocitySquare = vel * vel; @@ -758,7 +758,7 @@ void seq_channel_layer_process_script(struct SequenceChannelLayer *layer) { } layer->delay = sp3A; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) layer->duration = layer->noteDuration * sp3A >> 8; #else layer->duration = layer->noteDuration * sp3A / 256; @@ -771,9 +771,11 @@ void seq_channel_layer_process_script(struct SequenceChannelLayer *layer) { ) { layer->stopSomething = TRUE; } else { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) s32 temp = layer->instOrWave; - if (temp == 0xff) temp = seqChannel->instOrWave; + if (temp == 0xff) { + temp = seqChannel->instOrWave; + } if (temp == 0) #else if (seqChannel->instOrWave == 0) @@ -803,7 +805,7 @@ void seq_channel_layer_process_script(struct SequenceChannelLayer *layer) { } else { layer->adsr.envelope = drum->envelope; layer->adsr.releaseRate = drum->releaseRate; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) if (!layer->ignoreDrumPan) { layer->pan = drum->pan; } @@ -823,7 +825,7 @@ void seq_channel_layer_process_script(struct SequenceChannelLayer *layer) { if (cmd >= 0x80) { layer->stopSomething = TRUE; } else { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) if (layer->instOrWave == 0xffu) { instrument = seqChannel->instrument; } else { @@ -875,7 +877,7 @@ void seq_channel_layer_process_script(struct SequenceChannelLayer *layer) { case PORTAMENTO_MODE_2: case PORTAMENTO_MODE_4: -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) default: #endif freqScale = temp_f2; @@ -885,7 +887,7 @@ void seq_channel_layer_process_script(struct SequenceChannelLayer *layer) { break; } -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) portamento->extent = temp_f2 / freqScale - 1.0f; #else portamento->extent = sp24 / freqScale - US_FLOAT(1.0); @@ -940,7 +942,7 @@ void seq_channel_layer_process_script(struct SequenceChannelLayer *layer) { seq_channel_layer_note_decay(layer); cmd = TRUE; } -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) else if (layer != layer->note->parentLayer) { cmd = TRUE; } @@ -956,7 +958,7 @@ void seq_channel_layer_process_script(struct SequenceChannelLayer *layer) { if (layer->note != NULL && layer->note->parentLayer == layer) { note_vibrato_init(layer->note); } -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) if (seqChannel) { } #endif @@ -972,7 +974,7 @@ u8 audioString107[] = "Error: Your assignchannel is stolen.\n"; #include "copt/seq_channel_layer_process_script_copt.inc.c" #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) void seq_channel_layer_process_script_part1(struct SequenceChannelLayer *layer) { if (!layer->continuousNotes) { seq_channel_layer_note_decay(layer); @@ -1401,7 +1403,7 @@ s32 seq_channel_layer_process_script_part3(struct SequenceChannelLayer *layer, s u8 get_instrument(struct SequenceChannel *seqChannel, u8 instId, struct Instrument **instOut, struct AdsrSettings *adsr) { struct Instrument *inst; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) inst = get_instrument_inner(seqChannel->bankId, instId); if (inst == NULL) { *instOut = NULL; @@ -1463,7 +1465,7 @@ void set_instrument(struct SequenceChannel *seqChannel, u8 instId) { seqChannel->instOrWave = 0; seqChannel->instrument = (struct Instrument *) 1; } else { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) if ((seqChannel->instOrWave = get_instrument(seqChannel, instId, &seqChannel->instrument, &seqChannel->adsr)) == 0) #else @@ -1521,7 +1523,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { if (seqChannel->delay == 0) { for (;;) { cmd = m64_read_u8(state); -#if !defined(VERSION_EU) && !defined(VERSION_SH) +#if defined(VERSION_JP) || defined(VERSION_US) if (cmd == 0xff) { // chan_end if (state->depth == 0) { sequence_channel_disable(seqChannel); @@ -1542,7 +1544,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { } #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) if (cmd >= 0xb0) #else if (cmd > 0xc0) @@ -1550,7 +1552,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { { switch (cmd) { case 0xff: // chan_end -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) if (state->depth == 0) { sequence_channel_disable(seqChannel); goto out; @@ -1560,7 +1562,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { #endif break; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) case 0xfe: // chan_delay1 goto out; @@ -1577,7 +1579,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { eu_stubbed_printf_0("Audio:Track :Call Macro Level Over Error!\n"); } sp5A = m64_read_s16(state); -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) state->stack[state->depth++] = state->pc; #else state->depth++, state->stack[state->depth - 1] = state->pc; @@ -1590,7 +1592,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { eu_stubbed_printf_0("Audio:Track :Loops Macro Level Over Error!\n"); } state->remLoopIters[state->depth] = m64_read_u8(state); -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) state->stack[state->depth++] = state->pc; #else state->depth++, state->stack[state->depth - 1] = state->pc; @@ -1615,29 +1617,34 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { case 0xf9: // chan_bltz case 0xf5: // chan_bgez sp5A = m64_read_s16(state); - if (cmd == 0xfa && value != 0) + if (cmd == 0xfa && value != 0) { break; - if (cmd == 0xf9 && value >= 0) + } + if (cmd == 0xf9 && value >= 0) { break; - if (cmd == 0xf5 && value < 0) + } + if (cmd == 0xf5 && value < 0) { break; + } state->pc = seqPlayer->seqData + sp5A; break; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) case 0xf4: // chan_jump_rel case 0xf3: // chan_beqz_rel case 0xf2: // chan_bltz_rel temp = m64_read_u8(state); - if (cmd == 0xf3 && value != 0) + if (cmd == 0xf3 && value != 0) { break; - if (cmd == 0xf2 && value >= 0) + } + if (cmd == 0xf2 && value >= 0) { break; + } state->pc += temp; break; #endif -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) case 0xf1: // chan_reservenotes #else case 0xf2: // chan_reservenotes @@ -1646,7 +1653,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { note_pool_fill(&seqChannel->notePool, m64_read_u8(state)); break; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) case 0xf0: // chan_unreservenotes #else case 0xf1: // chan_unreservenotes @@ -1661,7 +1668,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { case 0xc5: // chan_dynsetdyntable if (value != -1) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) seqData = (*seqChannel->dynTable)[value]; sp38 = (u16)((seqData[0] << 8) + seqData[1]); seqChannel->dynTable = (void *) (seqPlayer->seqData + sp38); @@ -1672,7 +1679,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { } break; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) case 0xeb: // chan_setbankandinstr cmd = m64_read_u8(state); // Switch to the cmd's (0-indexed) bank in this sequence's @@ -1683,7 +1690,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { loBits = *(sp38 + gAlBankSets); cmd = gAlBankSets[(s32)sp38 + loBits - cmd]; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) if (get_bank_or_seq(1, 2, cmd) != NULL) #else if (get_bank_or_seq(&gBankLoadedPool, 2, cmd) != NULL) @@ -1710,14 +1717,14 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { case 0xdf: // chan_setvol sequence_channel_set_volume(seqChannel, m64_read_u8(state)); -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) seqChannel->changes.as_bitfields.volume = TRUE; #endif break; case 0xe0: // chan_setvolscale seqChannel->volumeScale = FLOAT_CAST(m64_read_u8(state)) / US_FLOAT(128.0); -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) seqChannel->changes.as_bitfields.volume = TRUE; #endif break; @@ -1725,25 +1732,25 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { case 0xde: // chan_freqscale; pitch bend using raw frequency multiplier N/2^15 (N is u16) sp5A = m64_read_s16(state); seqChannel->freqScale = FLOAT_CAST(sp5A) / US_FLOAT(32768.0); -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) seqChannel->changes.as_bitfields.freqScale = TRUE; #endif break; case 0xd3: // chan_pitchbend; pitch bend by <= 1 octave in either direction (-127..127) // (m64_read_u8(state) is really s8 here) -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) cmd = m64_read_u8(state) + 128; #else cmd = m64_read_u8(state) + 127; #endif seqChannel->freqScale = gPitchBendFrequencyScale[cmd]; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) seqChannel->changes.as_bitfields.freqScale = TRUE; #endif break; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) case 0xee: cmd = m64_read_u8(state) + 0x80; seqChannel->freqScale = unk_sh_data_1[cmd]; @@ -1752,7 +1759,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { #endif case 0xdd: // chan_setpan -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) seqChannel->newPan = m64_read_u8(state); seqChannel->changes.as_bitfields.pan = TRUE; #else @@ -1761,7 +1768,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { break; case 0xdc: // chan_setpanmix; set proportion of pan to come from channel (0..128) -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) seqChannel->panChannelWeight = m64_read_u8(state); seqChannel->changes.as_bitfields.pan = TRUE; #else @@ -1831,7 +1838,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { // bank set. Note that in the binary format (not in the JSON!) // the banks are listed backwards, so we counts from the back. // (gAlBankSets[offset] is number of banks) -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) sp38 = ((u16 *) gAlBankSets)[seqPlayer->seqId]; loBits = *(sp38 + gAlBankSets); cmd = gAlBankSets[(s32)sp38 + loBits - cmd]; @@ -1840,7 +1847,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { loBits = *(sp5A + gAlBankSets); cmd = gAlBankSets[sp5A + loBits - cmd]; #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) if (get_bank_or_seq(1, 2, cmd) != NULL) #else if (get_bank_or_seq(&gBankLoadedPool, 2, cmd) != NULL) @@ -1854,7 +1861,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { case 0xc7: // chan_writeseq; write to sequence data (!) { -#if !defined(VERSION_EU) && !defined(VERSION_SH) +#if defined(VERSION_JP) || defined(VERSION_US) u8 *seqData; #endif cmd = m64_read_u8(state); @@ -1877,7 +1884,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { } break; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) case 0xcd: sequence_channel_disable(seqPlayer->channels[m64_read_u8(state)]); break; @@ -1885,7 +1892,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { case 0xca: // chan_setmutebhv seqChannel->muteBehavior = m64_read_u8(state); -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) seqChannel->changes.as_bitfields.volume = TRUE; #endif break; @@ -1895,7 +1902,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { value = seqPlayer->seqData[sp38]; break; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) case 0xce: seqChannel->unkC8 = m64_read_s16(state); break; @@ -1917,26 +1924,26 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { break; case 0xd2: // chan_setsustain -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) seqChannel->adsr.sustain = m64_read_u8(state); #else seqChannel->adsr.sustain = m64_read_u8(state) << 8; #endif break; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) case 0xe5: seqChannel->reverbIndex = m64_read_u8(state); break; #endif case 0xe4: // chan_dyncall if (value != -1) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) if (state->depth >= 4) { eu_stubbed_printf_0("Audio:Track: CTBLCALL Macro Level Over Error!\n"); } #endif seqData = (*seqChannel->dynTable)[value]; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) state->stack[state->depth++] = state->pc; sp38 = (u16)((seqData[0] << 8) + seqData[1]); state->pc = seqPlayer->seqData + sp38; @@ -1952,7 +1959,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { } break; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) case 0xe6: seqChannel->bookOffset = m64_read_u8(state); break; @@ -1994,7 +2001,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { break; case 0xe9: // chan_setnotepriority -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) cmd = m64_read_u8(state); if ((cmd & 0xf) != 0) { seqChannel->notePriority = cmd & 0xf; @@ -2008,7 +2015,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { #endif break; #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) case 0xed: seqChannel->synthesisVolume = m64_read_u8(state); break; @@ -2062,7 +2069,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { #endif } } else { -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) if (cmd >= 0x80) { loBits = cmd & 7; switch (cmd & 0xf8) { @@ -2099,7 +2106,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { loBits = cmd & 0xf; switch (cmd & 0xf0) { -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) case 0x00: seqChannel->delay = loBits; goto out; @@ -2127,7 +2134,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { seqChannel->soundScriptIO[loBits] = value; break; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) case 0x60: #else case 0x80: // chan_ioreadval; read data from audio lib @@ -2143,7 +2150,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { value -= seqChannel->soundScriptIO[loBits]; break; -#ifndef VERSION_SH +#if !defined(VERSION_SH) && !defined(VERSION_CN) #ifdef VERSION_EU // sh: 0x00 case 0x60: // chan_delayshort @@ -2180,7 +2187,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { #endif #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) case 0x20: #else case 0x10: // chan_startchannel @@ -2189,7 +2196,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { sequence_channel_enable(seqPlayer, loBits, seqPlayer->seqData + sp5A); break; -#ifndef VERSION_SH +#if !defined(VERSION_SH) && !defined(VERSION_CN) case 0x20: // chan_disablechannel sequence_channel_disable(seqPlayer->channels[loBits]); break; @@ -2205,13 +2212,13 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { value = seqPlayer->channels[loBits]->soundScriptIO[cmd]; break; } -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) } #endif } } } -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) out: #endif @@ -2224,7 +2231,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) { void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { u8 cmd; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) UNUSED u32 pad; #endif u8 loBits; @@ -2234,7 +2241,7 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { u16 u16v; u8 *seqData; struct M64ScriptState *state; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) s32 temp32; #endif @@ -2242,7 +2249,7 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { return; } -#ifndef VERSION_SH +#if !defined(VERSION_SH) && !defined(VERSION_CN) if (seqPlayer->bankDmaInProgress == TRUE) { #ifdef VERSION_EU if (osRecvMesg(&seqPlayer->bankDmaMesgQueue, NULL, 0) == -1) { @@ -2309,7 +2316,7 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { // If discarded, bail out. if (IS_SEQ_LOAD_COMPLETE(seqPlayer->seqId) == FALSE || ( -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) seqPlayer->defaultBank[0] != 0xff && #endif IS_BANK_LOAD_COMPLETE(seqPlayer->defaultBank[0]) == FALSE)) { @@ -2319,12 +2326,12 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { } // Remove possible SOUND_LOAD_STATUS_DISCARDABLE marks. -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) if (gSeqLoadStatus[seqPlayer->seqId] != 5) #endif gSeqLoadStatus[seqPlayer->seqId] = SOUND_LOAD_STATUS_COMPLETE; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) if (gBankLoadStatus[seqPlayer->defaultBank[0]] != 5) #endif gBankLoadStatus[seqPlayer->defaultBank[0]] = SOUND_LOAD_STATUS_COMPLETE; @@ -2335,7 +2342,7 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { // Check if we surpass the number of ticks needed for a tatum, else stop. seqPlayer->tempoAcc += seqPlayer->tempo; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) seqPlayer->tempoAcc += seqPlayer->tempoAdd; #endif if (seqPlayer->tempoAcc < gTempoInternalToExternal) { @@ -2351,7 +2358,7 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { #endif seqPlayer->delay--; } else { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) seqPlayer->recalculateVolume = 1; #endif for (;;) { @@ -2361,7 +2368,7 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { sequence_player_disable(seqPlayer); break; } -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) state->pc = state->stack[--state->depth]; #else state->depth--, state->pc = state->stack[state->depth]; @@ -2388,7 +2395,7 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { if (0 && state->depth >= 4) { eu_stubbed_printf_0("Macro Level Over Error!\n"); } -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) state->stack[state->depth++] = state->pc; #else state->depth++, state->stack[state->depth - 1] = state->pc; @@ -2401,7 +2408,7 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { eu_stubbed_printf_0("Macro Level Over Error!\n"); } state->remLoopIters[state->depth] = m64_read_u8(state); -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) state->stack[state->depth++] = state->pc; #else state->depth++, state->stack[state->depth - 1] = state->pc; @@ -2434,7 +2441,7 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { state->pc = seqPlayer->seqData + u16v; break; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) case 0xf4: case 0xf3: case 0xf2: @@ -2449,7 +2456,7 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { break; #endif -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) case 0xf1: // seq_reservenotes #else case 0xf2: // seq_reservenotes @@ -2458,7 +2465,7 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { note_pool_fill(&seqPlayer->notePool, m64_read_u8(state)); break; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) case 0xf0: // seq_unreservenotes #else case 0xf1: // seq_unreservenotes @@ -2475,10 +2482,10 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { break; case 0xdd: // seq_settempo (bpm) -#ifndef VERSION_SH +#if !defined(VERSION_SH) && !defined(VERSION_CN) case 0xdc: // seq_addtempo (bpm) #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) seqPlayer->tempo = m64_read_u8(state) * TEMPO_SCALE; #else temp = m64_read_u8(state); @@ -2500,13 +2507,13 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { } break; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) case 0xdc: // seq_addtempo (bpm) seqPlayer->tempoAdd = (s8) m64_read_u8(state) * TEMPO_SCALE; break; #endif -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) case 0xda: cmd = m64_read_u8(state); u16v = m64_read_s16(state); @@ -2574,7 +2581,7 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { break; #endif -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) case 0xd9: temp = m64_read_u8(state); seqPlayer->fadeVolumeScale = (s8) temp / 127.0f; @@ -2624,7 +2631,7 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { break; case 0xc9: // seq_bitand -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) value &= m64_read_u8(state); #else value = m64_read_u8(state) & value; @@ -2635,7 +2642,7 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { value = value - m64_read_u8(state); break; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) case 0xc7: cmd = m64_read_u8(state); u16v = m64_read_s16(state); @@ -2656,7 +2663,7 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { loBits = cmd & 0xf; switch (cmd & 0xf0) { case 0x00: // seq_testchdisabled -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) value = seqPlayer->channels[loBits]->finished; #else if (IS_SEQUENCE_CHANNEL_VALID(seqPlayer->channels[loBits]) == TRUE) { @@ -2671,7 +2678,7 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { case 0x40: break; case 0x50: // seq_subvariation -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) value -= seqPlayer->seqVariationEu[0]; #else value -= seqPlayer->seqVariation; @@ -2680,14 +2687,14 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { case 0x60: break; case 0x70: // seq_setvariation -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) seqPlayer->seqVariationEu[0] = value; #else seqPlayer->seqVariation = value; #endif break; case 0x80: // seq_getvariation -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) value = seqPlayer->seqVariationEu[0]; #else value = seqPlayer->seqVariation; @@ -2699,7 +2706,7 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { break; case 0xa0: break; -#if !defined(VERSION_EU) && !defined(VERSION_SH) +#if defined(VERSION_JP) || defined(VERSION_US) case 0xd8: // (this makes no sense) break; case 0xd9: @@ -2715,7 +2722,7 @@ void sequence_player_process_sequence(struct SequencePlayer *seqPlayer) { } for (i = 0; i < CHANNELS_MAX; i++) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) if (IS_SEQUENCE_CHANNEL_VALID(seqPlayer->channels[i]) == TRUE) { sequence_channel_process_script(seqPlayer->channels[i]); } @@ -2732,7 +2739,7 @@ void process_sequences(UNUSED s32 iterationsRemaining) { s32 i; for (i = 0; i < SEQUENCE_PLAYERS; i++) { if (gSequencePlayers[i].enabled == TRUE) { -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) sequence_player_process_sequence(&gSequencePlayers[i]); sequence_player_process_sound(&gSequencePlayers[i]); #else @@ -2749,38 +2756,38 @@ void process_sequences(UNUSED s32 iterationsRemaining) { void init_sequence_player(u32 player) { struct SequencePlayer *seqPlayer = &gSequencePlayers[player]; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) sequence_player_disable(seqPlayer); #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) seqPlayer->unkSh = FALSE; #else seqPlayer->muted = FALSE; #endif seqPlayer->delay = 0; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) seqPlayer->state = 1; #else seqPlayer->state = SEQUENCE_PLAYER_STATE_0; #endif seqPlayer->fadeRemainingFrames = 0; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) seqPlayer->fadeTimerUnkEu = 0; #endif seqPlayer->tempoAcc = 0; seqPlayer->tempo = 120 * TEMPO_SCALE; // 120 BPM -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) seqPlayer->tempoAdd = 0; #endif seqPlayer->transposition = 0; -#ifndef VERSION_SH +#if !defined(VERSION_SH) && !defined(VERSION_CN) seqPlayer->muteBehavior = MUTE_BEHAVIOR_STOP_SCRIPT | MUTE_BEHAVIOR_STOP_NOTES | MUTE_BEHAVIOR_SOFTEN; #endif seqPlayer->noteAllocPolicy = 0; seqPlayer->shortNoteVelocityTable = gDefaultShortNoteVelocityTable; seqPlayer->shortNoteDurationTable = gDefaultShortNoteDurationTable; seqPlayer->fadeVolume = 1.0f; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) seqPlayer->fadeVolumeScale = 1.0f; #endif seqPlayer->fadeVelocity = 0.0f; @@ -2825,12 +2832,12 @@ void init_sequence_players(void) { gSequencePlayers[i].channels[j] = &gSequenceChannelNone; } -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) gSequencePlayers[i].seqVariationEu[0] = -1; #else gSequencePlayers[i].seqVariation = -1; #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) gSequencePlayers[i].muteBehavior = MUTE_BEHAVIOR_STOP_SCRIPT | MUTE_BEHAVIOR_STOP_NOTES | MUTE_BEHAVIOR_SOFTEN; gSequencePlayers[i].enabled = FALSE; gSequencePlayers[i].muted = FALSE; diff --git a/src/audio/shindou_debug_prints.c b/src/audio/shindou_debug_prints.c index 261d4521..3088d429 100644 --- a/src/audio/shindou_debug_prints.c +++ b/src/audio/shindou_debug_prints.c @@ -1,6 +1,6 @@ #include -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) // synthesis.c char shindouDebugPrint1[] = "Terminate-Canceled Channel %d,Phase %d\n"; char shindouDebugPrint2[] = "S->W\n"; diff --git a/src/audio/synthesis.c b/src/audio/synthesis.c index 224a0007..5bc8c784 100644 --- a/src/audio/synthesis.c +++ b/src/audio/synthesis.c @@ -1,4 +1,4 @@ -#ifndef VERSION_SH +#if !defined(VERSION_SH) && !defined(VERSION_CN) #include #include "synthesis.h" diff --git a/src/audio/synthesis.h b/src/audio/synthesis.h index b6465ac2..1f1fb9b0 100644 --- a/src/audio/synthesis.h +++ b/src/audio/synthesis.h @@ -3,7 +3,7 @@ #include "internal.h" -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) #define DEFAULT_LEN_1CH 0x180 #define DEFAULT_LEN_2CH 0x300 #else @@ -11,7 +11,7 @@ #define DEFAULT_LEN_2CH 0x280 #endif -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) #define MAX_UPDATES_PER_FRAME 5 #else #define MAX_UPDATES_PER_FRAME 4 @@ -32,19 +32,19 @@ struct SynthesisReverb { /*0x01, 0x01, 0x01*/ u8 useReverb; /*0x02, 0x02, 0x02*/ u8 framesLeftToIgnore; /*0x03, 0x03, 0x03*/ u8 curFrame; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) /* 0x04, 0x04*/ u8 downsampleRate; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) /* 0x05*/ s8 unk5; #endif /* 0x06, 0x06*/ u16 windowSize; // same as bufSizePerChannel #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) /* 0x08*/ u16 unk08; #endif /*0x04, 0x08, 0x0A*/ u16 reverbGain; /*0x06, 0x0A, 0x0C*/ u16 resampleRate; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) /* 0x0E*/ u16 panRight; /* 0x10*/ u16 panLeft; #endif @@ -60,7 +60,7 @@ struct SynthesisReverb { /*0x24, 0x28, 0x30*/ s16 *unk24; // never read /*0x28, 0x2C, 0x34*/ s16 *unk28; // never read /*0x2C, 0x30, 0x38*/ struct ReverbRingBufferItem items[2][MAX_UPDATES_PER_FRAME]; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) // Only used in sh: /* 0x100*/ s16 *unk100; /* 0x104*/ s16 *unk104; @@ -68,7 +68,7 @@ struct SynthesisReverb { /* 0x10C*/ s16 *unk10C; #endif }; // 0xCC <= size <= 0x100 -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) extern struct SynthesisReverb gSynthesisReverbs[4]; extern s8 gNumSynthesisReverbs; extern struct NoteSubEu *gNoteSubsEu; @@ -80,7 +80,7 @@ extern f32 *gCurrentRightVolRamping; // Points to any of the three right buffers extern struct SynthesisReverb gSynthesisReverb; #endif -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) extern s16 D_SH_803479B4; #endif diff --git a/src/audio/synthesis_sh.c b/src/audio/synthesis_sh.c index d27df362..66759cbf 100644 --- a/src/audio/synthesis_sh.c +++ b/src/audio/synthesis_sh.c @@ -1,4 +1,4 @@ -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) #include #include "synthesis.h" diff --git a/src/buffers/buffers.c b/src/buffers/buffers.c index 0a7b6f7f..908e9a3d 100644 --- a/src/buffers/buffers.c +++ b/src/buffers/buffers.c @@ -1,23 +1,47 @@ #include #include "buffers.h" -#include "config.h" ALIGNED8 u8 gDecompressionHeap[0xD000]; + #if defined(VERSION_EU) ALIGNED16 u8 gAudioHeap[DOUBLE_SIZE_ON_64_BIT(0x31200) - 0x3800]; #elif defined(VERSION_SH) ALIGNED16 u8 gAudioHeap[DOUBLE_SIZE_ON_64_BIT(0x31200) - 0x4800]; +#elif defined(VERSION_CN) +ALIGNED16 u8 gAudioHeap[DOUBLE_SIZE_ON_64_BIT(0x31200) - 0x4C00]; #else ALIGNED16 u8 gAudioHeap[DOUBLE_SIZE_ON_64_BIT(0x31200)]; #endif -ALIGNED8 u8 gIdleThreadStack[0x800]; -ALIGNED8 u8 gThread3Stack[0x2000]; -ALIGNED8 u8 gThread4Stack[0x2000]; -ALIGNED8 u8 gThread5Stack[0x2000]; +#ifdef VERSION_CN + +// iQue BSS reordering + +// 0x200 bytes +ALIGNED8 struct SaveBuffer gSaveBuffer; +// 0x190a0 bytes +struct GfxPool gGfxPools[2]; +ALIGNED8 u8 gThread4Stack[STACKSIZE]; #if ENABLE_RUMBLE -ALIGNED8 u8 gThread6Stack[0x2000]; +ALIGNED8 u8 gThread6Stack[STACKSIZE]; +#endif +ALIGNED8 u8 gThread5Stack[STACKSIZE]; +// 0x400 bytes +ALIGNED8 u8 gGfxSPTaskStack[SP_DRAM_STACK_SIZE8]; +// 0xc00 bytes for f3dex, 0x900 otherwise +ALIGNED8 u8 gGfxSPTaskYieldBuffer[OS_YIELD_DATA_SIZE]; +ALIGNED8 u8 gThread3Stack[STACKSIZE + 0x400]; +ALIGNED8 u8 gIdleThreadStack[IDLE_STACKSIZE]; + +#else + +ALIGNED8 u8 gIdleThreadStack[IDLE_STACKSIZE]; +ALIGNED8 u8 gThread3Stack[STACKSIZE]; +ALIGNED8 u8 gThread4Stack[STACKSIZE]; +ALIGNED8 u8 gThread5Stack[STACKSIZE]; +#if ENABLE_RUMBLE +ALIGNED8 u8 gThread6Stack[STACKSIZE]; #endif // 0x400 bytes ALIGNED8 u8 gGfxSPTaskStack[SP_DRAM_STACK_SIZE8]; @@ -28,6 +52,7 @@ ALIGNED8 struct SaveBuffer gSaveBuffer; // 0x190a0 bytes struct GfxPool gGfxPools[2]; +#endif // Yield buffer for audio, 0x400 bytes. Stubbed out post-JP since the audio // task never yields. @@ -38,5 +63,5 @@ ALIGNED8 u8 gAudioSPTaskYieldBuffer[OS_YIELD_AUDIO_SIZE]; // Probably Thread 2 stack space. Unreferenced, and stubbed out with f3dex to // avoid an overflowing .buffers segment. #if !defined(F3DEX_GBI_SHARED) && !defined(VERSION_EU) -ALIGNED8 u8 gUnusedThread2Stack[0x1400]; +ALIGNED8 u8 gUnusedThread2Stack[UNUSED_STACKSIZE]; #endif diff --git a/src/buffers/gfx_output_buffer.c b/src/buffers/gfx_output_buffer.c index d948d420..bfc33c03 100644 --- a/src/buffers/gfx_output_buffer.c +++ b/src/buffers/gfx_output_buffer.c @@ -1,12 +1,4 @@ #include #include "gfx_output_buffer.h" -#ifdef VERSION_EU -// 0x17e00 bytes, aligned to a 0x200-byte boundary through sm64.ld. The alignment -// wastes 0x100 bytes of space. -u64 gGfxSPTaskOutputBuffer[0x2fc0]; -#else -// 0x1f000 bytes, aligned to a 0x1000-byte boundary through sm64.ld. (This results -// in a bunch of unused space: ~0x100 in JP, ~0x300 in US.) -u64 gGfxSPTaskOutputBuffer[0x3e00]; -#endif +u64 gGfxSPTaskOutputBuffer[GFX_OUTPUT_BUFFER_SIZE]; diff --git a/src/buffers/gfx_output_buffer.h b/src/buffers/gfx_output_buffer.h index db693b23..dc16635f 100644 --- a/src/buffers/gfx_output_buffer.h +++ b/src/buffers/gfx_output_buffer.h @@ -4,9 +4,15 @@ #include #ifdef VERSION_EU -extern u64 gGfxSPTaskOutputBuffer[0x2fc0]; +// 0x17e00 bytes, aligned to a 0x200-byte boundary through sm64.ld. The alignment +// wastes 0x100 bytes of space. +#define GFX_OUTPUT_BUFFER_SIZE 0x2fc0 #else -extern u64 gGfxSPTaskOutputBuffer[0x3e00]; +// 0x1f000 bytes, aligned to a 0x1000-byte boundary through sm64.ld. (This results +// in a bunch of unused space: ~0x100 in JP, ~0x300 in US.) +#define GFX_OUTPUT_BUFFER_SIZE 0x3e00 #endif +extern u64 gGfxSPTaskOutputBuffer[GFX_OUTPUT_BUFFER_SIZE]; + #endif // GFX_OUTPUT_BUFFER_H diff --git a/src/buffers/zbuffer.h b/src/buffers/zbuffer.h index bb02f597..079e44e0 100644 --- a/src/buffers/zbuffer.h +++ b/src/buffers/zbuffer.h @@ -7,5 +7,6 @@ #include "macros.h" extern u16 gZBuffer[SCREEN_WIDTH * SCREEN_HEIGHT]; +extern s32 gZBufferEnd; #endif // ZBUFFER_H diff --git a/src/engine/behavior_script.c b/src/engine/behavior_script.c index 64039c94..264ffc26 100644 --- a/src/engine/behavior_script.c +++ b/src/engine/behavior_script.c @@ -188,7 +188,7 @@ static s32 bhv_cmd_spawn_child_with_param(void) { struct Object *child = spawn_object_at_origin(gCurrentObject, 0, modelID, behavior); obj_copy_pos_and_angle(child, gCurrentObject); - child->oBehParams2ndByte = bhvParam; + child->oBhvParams2ndByte = bhvParam; gCurBhvCommand += 3; return BHV_PROC_CONTINUE; diff --git a/src/engine/graph_node.c b/src/engine/graph_node.c index 4b2447e7..66b49b22 100644 --- a/src/engine/graph_node.c +++ b/src/engine/graph_node.c @@ -739,7 +739,7 @@ void geo_obj_init_animation(struct GraphNodeObject *graphNode, struct Animation if (graphNode->animInfo.curAnim != anim) { graphNode->animInfo.curAnim = anim; - graphNode->animInfo.animFrame = anim->startFrame + ((anim->flags & ANIM_FLAG_FORWARD) ? 1 : -1); + graphNode->animInfo.animFrame = anim->startFrame + ((anim->flags & ANIM_FLAG_BACKWARD) ? 1 : -1); graphNode->animInfo.animAccel = 0; graphNode->animInfo.animYTrans = 0; } @@ -756,7 +756,7 @@ void geo_obj_init_animation_accel(struct GraphNodeObject *graphNode, struct Anim graphNode->animInfo.curAnim = anim; graphNode->animInfo.animYTrans = 0; graphNode->animInfo.animFrameAccelAssist = - (anim->startFrame << 16) + ((anim->flags & ANIM_FLAG_FORWARD) ? animAccel : -animAccel); + (anim->startFrame << 16) + ((anim->flags & ANIM_FLAG_BACKWARD) ? animAccel : -animAccel); graphNode->animInfo.animFrame = graphNode->animInfo.animFrameAccelAssist >> 16; } @@ -801,7 +801,7 @@ s16 geo_update_animation_frame(struct AnimInfo *obj, s32 *accelAssist) { return obj->animFrame; } - if (anim->flags & ANIM_FLAG_FORWARD) { + if (anim->flags & ANIM_FLAG_BACKWARD) { if (obj->animAccel != 0) { result = obj->animFrameAccelAssist - obj->animAccel; } else { diff --git a/src/engine/level_script.c b/src/engine/level_script.c index b0463393..0ec43411 100644 --- a/src/engine/level_script.c +++ b/src/engine/level_script.c @@ -290,6 +290,7 @@ static void level_cmd_load_mario_head(void) { gdm_setup(); gdm_maketestdl(CMD_GET(s16, 2)); } else { + CN_DEBUG_PRINTF(("face anime memory overflow\n")); } sCurrentCmd = CMD_NEXT; @@ -682,6 +683,7 @@ static void level_cmd_set_transition(void) { } static void level_cmd_nop(void) { + CN_DEBUG_PRINTF(("BAD: seqBlankColor\n")); sCurrentCmd = CMD_NEXT; } @@ -823,6 +825,9 @@ struct LevelCommand *level_script_execute(struct LevelCommand *cmd) { sCurrentCmd = cmd; while (sScriptStatus == SCRIPT_RUNNING) { + CN_DEBUG_PRINTF(("%08X: ", sCurrentCmd)); + CN_DEBUG_PRINTF(("%02d\n", sCurrentCmd->type)); + LevelScriptJumpTable[sCurrentCmd->type](); } diff --git a/src/engine/stub.c b/src/engine/stub.c new file mode 100644 index 00000000..64350f7a --- /dev/null +++ b/src/engine/stub.c @@ -0,0 +1,4 @@ +#ifdef VERSION_CN +const char D_CN_80388B10[] = "error\n"; +#endif + diff --git a/src/engine/surface_collision.c b/src/engine/surface_collision.c index c59a1436..741307be 100644 --- a/src/engine/surface_collision.c +++ b/src/engine/surface_collision.c @@ -185,8 +185,8 @@ s32 find_wall_collisions(struct WallCollisionData *colData) { struct SurfaceNode *node; s16 cellX, cellZ; s32 numCollisions = 0; - s16 x = colData->x; - s16 z = colData->z; + TerrainData x = colData->x; + TerrainData z = colData->z; colData->numWalls = 0; @@ -315,9 +315,9 @@ f32 find_ceil(f32 posX, f32 posY, f32 posZ, struct Surface **pceil) { //! (Parallel Universes) Because position is casted to an s16, reaching higher // float locations can return ceilings despite them not existing there. // (Dynamic ceilings will unload due to the range.) - s16 x = (s16) posX; - s16 y = (s16) posY; - s16 z = (s16) posZ; + TerrainData x = (TerrainData) posX; + TerrainData y = (TerrainData) posY; + TerrainData z = (TerrainData) posZ; *pceil = NULL; @@ -491,9 +491,9 @@ f32 unused_find_dynamic_floor(f32 xPos, f32 yPos, f32 zPos, struct Surface **pfl f32 floorHeight = FLOOR_LOWER_LIMIT; // Would normally cause PUs, but dynamic floors unload at that range. - s16 x = (s16) xPos; - s16 y = (s16) yPos; - s16 z = (s16) zPos; + TerrainData x = (TerrainData) xPos; + TerrainData y = (TerrainData) yPos; + TerrainData z = (TerrainData) zPos; // Each level is split into cells to limit load, find the appropriate cell. s16 cellX = ((x + LEVEL_BOUNDARY_MAX) / CELL_SIZE) & NUM_CELLS_INDEX; @@ -522,9 +522,9 @@ f32 find_floor(f32 xPos, f32 yPos, f32 zPos, struct Surface **pfloor) { //! (Parallel Universes) Because position is casted to an s16, reaching higher // float locations can return floors despite them not existing there. // (Dynamic floors will unload due to the range.) - s16 x = (s16) xPos; - s16 y = (s16) yPos; - s16 z = (s16) zPos; + TerrainData x = (TerrainData) xPos; + TerrainData y = (TerrainData) yPos; + TerrainData z = (TerrainData) zPos; *pfloor = NULL; @@ -591,10 +591,10 @@ f32 find_floor(f32 xPos, f32 yPos, f32 zPos, struct Surface **pfloor) { f32 find_water_level(f32 x, f32 z) { s32 i; s32 numRegions; - s16 val; + TerrainData val; f32 loX, hiX, loZ, hiZ; f32 waterLevel = FLOOR_LOWER_LIMIT; - s16 *p = gEnvironmentRegions; + TerrainData *p = gEnvironmentRegions; if (p != NULL) { numRegions = *p++; @@ -627,10 +627,10 @@ f32 find_poison_gas_level(f32 x, f32 z) { s32 i; s32 numRegions; UNUSED u8 filler[4]; - s16 val; + TerrainData val; f32 loX, hiX, loZ, hiZ; f32 gasLevel = FLOOR_LOWER_LIMIT; - s16 *p = gEnvironmentRegions; + TerrainData *p = gEnvironmentRegions; if (p != NULL) { numRegions = *p++; diff --git a/src/engine/surface_collision.h b/src/engine/surface_collision.h index f4695081..3f932d67 100644 --- a/src/engine/surface_collision.h +++ b/src/engine/surface_collision.h @@ -13,7 +13,7 @@ #define CELL_HEIGHT_LIMIT 20000 #define FLOOR_LOWER_LIMIT -11000 #define FLOOR_LOWER_LIMIT_MISC (FLOOR_LOWER_LIMIT + 1000) -// same as FLOOR_LOWER_LIMIT_MISC, explicitly for shadow.c +// same as FLOOR_LOWER_LIMIT_MISC, explicitly for shadow.c // It doesn't match if ".0" is removed or ".f" is added #define FLOOR_LOWER_LIMIT_SHADOW (FLOOR_LOWER_LIMIT + 1000.0) diff --git a/src/engine/surface_load.c b/src/engine/surface_load.c index 399423f0..8437bf00 100644 --- a/src/engine/surface_load.c +++ b/src/engine/surface_load.c @@ -44,10 +44,8 @@ static struct SurfaceNode *alloc_surface_node(void) { node->next = NULL; - //! A bounds check! If there's more surface nodes than 7000 allowed, - // we, um... - // Perhaps originally just debug feedback? if (gSurfaceNodesAllocated >= 7000) { + CN_DEBUG_PRINTF((" mcMakeBGCheckList OVERFLOW\n")); } return node; @@ -62,10 +60,8 @@ static struct Surface *alloc_surface(void) { struct Surface *surface = &sSurfacePool[gSurfacesAllocated]; gSurfacesAllocated++; - //! A bounds check! If there's more surfaces than the 2300 allowed, - // we, um... - // Perhaps originally just debug feedback? if (gSurfacesAllocated >= sSurfacePoolSize) { + CN_DEBUG_PRINTF((" mcMakeBGCheckData OVERFLOW\n")); } surface->type = 0; @@ -163,7 +159,7 @@ static void add_surface_to_cell(s16 dynamic, s16 cellX, s16 cellZ, struct Surfac /** * Returns the lowest of three values. */ -static s16 min_3(s16 a0, s16 a1, s16 a2) { +static s16 min_3(TerrainData a0, TerrainData a1, TerrainData a2) { if (a1 < a0) { a0 = a1; } @@ -178,7 +174,7 @@ static s16 min_3(s16 a0, s16 a1, s16 a2) { /** * Returns the highest of three values. */ -static s16 max_3(s16 a0, s16 a1, s16 a2) { +static s16 max_3(TerrainData a0, TerrainData a1, TerrainData a2) { if (a1 > a0) { a0 = a1; } @@ -195,7 +191,7 @@ static s16 max_3(s16 a0, s16 a1, s16 a2) { * time). This function determines the lower cell for a given x/z position. * @param coord The coordinate to test */ -static s16 lower_cell_index(s16 coord) { +static s16 lower_cell_index(TerrainData coord) { s16 index; // Move from range [-0x2000, 0x2000) to [0, 0x4000) @@ -227,7 +223,7 @@ static s16 lower_cell_index(s16 coord) { * time). This function determines the upper cell for a given x/z position. * @param coord The coordinate to test */ -static s16 upper_cell_index(s16 coord) { +static s16 upper_cell_index(TerrainData coord) { s16 index; // Move from range [-0x2000, 0x2000) to [0, 0x4000) @@ -297,7 +293,7 @@ UNUSED static void stub_surface_load_1(void) { * @param vertexData The raw data containing vertex positions * @param vertexIndices Helper which tells positions in vertexData to start reading vertices */ -static struct Surface *read_surface_data(s16 *vertexData, s16 **vertexIndices) { +static struct Surface *read_surface_data(TerrainData *vertexData, TerrainData **vertexIndices) { struct Surface *surface; register s32 x1, y1, z1; register s32 x2, y2, z2; @@ -305,7 +301,7 @@ static struct Surface *read_surface_data(s16 *vertexData, s16 **vertexIndices) { s32 maxY, minY; f32 nx, ny, nz; f32 mag; - s16 offset1, offset2, offset3; + TerrainData offset1, offset2, offset3; offset1 = 3 * (*vertexIndices)[0]; offset2 = 3 * (*vertexIndices)[1]; @@ -385,7 +381,7 @@ static struct Surface *read_surface_data(s16 *vertexData, s16 **vertexIndices) { * Returns whether a surface has exertion/moves Mario * based on the surface type. */ -static s32 surface_has_force(s16 surfaceType) { +static s32 surface_has_force(TerrainData surfaceType) { s32 hasForce = FALSE; switch (surfaceType) { @@ -402,6 +398,7 @@ static s32 surface_has_force(s16 surfaceType) { default: break; } + return hasForce; } @@ -409,7 +406,7 @@ static s32 surface_has_force(s16 surfaceType) { * Returns whether a surface should have the * SURFACE_FLAG_NO_CAM_COLLISION flag. */ -static s32 surf_has_no_cam_collision(s16 surfaceType) { +static s32 surf_has_no_cam_collision(TerrainData surfaceType) { s32 flags = 0; switch (surfaceType) { @@ -431,11 +428,11 @@ static s32 surf_has_no_cam_collision(s16 surfaceType) { * Load in the surfaces for a given surface type. This includes setting the flags, * exertion, and room. */ -static void load_static_surfaces(s16 **data, s16 *vertexData, s16 surfaceType, s8 **surfaceRooms) { +static void load_static_surfaces(TerrainData **data, TerrainData *vertexData, TerrainData surfaceType, RoomData **surfaceRooms) { s32 i; s32 numSurfaces; struct Surface *surface; - s8 room = 0; + RoomData room = 0; s16 hasForce = surface_has_force(surfaceType); s16 flags = surf_has_no_cam_collision(surfaceType); @@ -473,10 +470,10 @@ static void load_static_surfaces(s16 **data, s16 *vertexData, s16 surfaceType, s /** * Read the data for vertices for reference by triangles. */ -static s16 *read_vertex_data(s16 **data) { +static TerrainData *read_vertex_data(TerrainData **data) { s32 numVertices; UNUSED u8 filler[16]; - s16 *vertexData; + TerrainData *vertexData; numVertices = *(*data); (*data)++; @@ -490,7 +487,7 @@ static s16 *read_vertex_data(s16 **data) { /** * Loads in special environmental regions, such as water, poison gas, and JRB fog. */ -static void load_environmental_regions(s16 **data) { +static void load_environmental_regions(TerrainData **data) { s32 numRegions; s32 i; @@ -498,11 +495,12 @@ static void load_environmental_regions(s16 **data) { numRegions = *(*data)++; if (numRegions > 20) { + CN_DEBUG_PRINTF(("Error Water Over\n")); } for (i = 0; i < numRegions; i++) { - UNUSED s16 val, loX, loZ, hiX, hiZ; - s16 height; + UNUSED TerrainData val, loX, loZ, hiX, hiZ; + TerrainData height; val = *(*data)++; @@ -533,14 +531,14 @@ void alloc_surface_pools(void) { /** * Get the size of the terrain data, to get the correct size when copying later. */ -u32 get_area_terrain_size(s16 *data) { - s16 *startPos = data; +u32 get_area_terrain_size(TerrainData *data) { + TerrainData *startPos = data; s32 end = FALSE; - s16 terrainLoadType; + TerrainData terrainLoadType; s32 numVertices; s32 numRegions; s32 numSurfaces; - s16 hasForce; + TerrainData hasForce; while (!end) { terrainLoadType = *data++; @@ -584,9 +582,9 @@ u32 get_area_terrain_size(s16 *data) { * Process the level file, loading in vertices, surfaces, some objects, and environmental * boxes (water, gas, JRB fog). */ -void load_area_terrain(s16 index, s16 *data, s8 *surfaceRooms, s16 *macroObjects) { - s16 terrainLoadType; - s16 *vertexData; +void load_area_terrain(s16 index, TerrainData *data, RoomData *surfaceRooms, s16 *macroObjects) { + TerrainData terrainLoadType; + TerrainData *vertexData; UNUSED u8 filler[4]; // Initialize the data for this. @@ -618,7 +616,8 @@ void load_area_terrain(s16 index, s16 *data, s8 *surfaceRooms, s16 *macroObjects break; } else if (TERRAIN_LOAD_IS_SURFACE_TYPE_HIGH(terrainLoadType)) { load_static_surfaces(&data, vertexData, terrainLoadType, &surfaceRooms); - continue; + } else { + CN_DEBUG_PRINTF((" BGCode Error \n")); } } @@ -656,8 +655,8 @@ UNUSED static void unused_80383604(void) { /** * Applies an object's transformation to the object's vertices. */ -void transform_object_vertices(s16 **data, s16 *vertexData) { - register s16 *vertices; +void transform_object_vertices(TerrainData **data, TerrainData *vertexData) { + register TerrainData *vertices; register f32 vx, vy, vz; register s32 numVertices; @@ -685,9 +684,9 @@ void transform_object_vertices(s16 **data, s16 *vertexData) { vz = *(vertices++); //! No bounds check on vertex data - *vertexData++ = (s16)(vx * m[0][0] + vy * m[1][0] + vz * m[2][0] + m[3][0]); - *vertexData++ = (s16)(vx * m[0][1] + vy * m[1][1] + vz * m[2][1] + m[3][1]); - *vertexData++ = (s16)(vx * m[0][2] + vy * m[1][2] + vz * m[2][2] + m[3][2]); + *vertexData++ = (TerrainData)(vx * m[0][0] + vy * m[1][0] + vz * m[2][0] + m[3][0]); + *vertexData++ = (TerrainData)(vx * m[0][1] + vy * m[1][1] + vz * m[2][1] + m[3][1]); + *vertexData++ = (TerrainData)(vx * m[0][2] + vy * m[1][2] + vz * m[2][2] + m[3][2]); } *data = vertices; @@ -696,12 +695,12 @@ void transform_object_vertices(s16 **data, s16 *vertexData) { /** * Load in the surfaces for the gCurrentObject. This includes setting the flags, exertion, and room. */ -void load_object_surfaces(s16 **data, s16 *vertexData) { +void load_object_surfaces(TerrainData **data, TerrainData *vertexData) { s32 surfaceType; s32 i; s32 numSurfaces; - s16 hasForce; - s16 flags; + TerrainData hasForce; + TerrainData flags; s16 room; surfaceType = *(*data); @@ -717,7 +716,7 @@ void load_object_surfaces(s16 **data, s16 *vertexData) { // The DDD warp is initially loaded at the origin and moved to the proper // position in paintings.c and doesn't update its room, so set it here. - if (gCurrentObject->behavior == segmented_to_virtual(bhvDddWarp)) { + if (gCurrentObject->behavior == segmented_to_virtual(bhvDDDWarp)) { room = 5; } else { room = 0; @@ -754,9 +753,9 @@ void load_object_surfaces(s16 **data, s16 *vertexData) { */ void load_object_collision_model(void) { UNUSED u8 filler[4]; - s16 vertexData[600]; + TerrainData vertexData[600]; - s16 *collisionData = gCurrentObject->collisionData; + TerrainData *collisionData = gCurrentObject->collisionData; f32 marioDist = gCurrentObject->oDistanceToMario; f32 tangibleDist = gCurrentObject->oCollisionDistance; diff --git a/src/engine/surface_load.h b/src/engine/surface_load.h index e00e2bc0..4e04699a 100644 --- a/src/engine/surface_load.h +++ b/src/engine/surface_load.h @@ -33,9 +33,9 @@ extern s16 sSurfacePoolSize; void alloc_surface_pools(void); #ifdef NO_SEGMENTED_MEMORY -u32 get_area_terrain_size(s16 *data); +u32 get_area_terrain_size(TerrainData *data); #endif -void load_area_terrain(s16 index, s16 *data, s8 *surfaceRooms, s16 *macroObjects); +void load_area_terrain(s16 index, TerrainData *data, RoomData *surfaceRooms, s16 *macroObjects); void clear_dynamic_surfaces(void); void load_object_collision_model(void); diff --git a/src/game/area.c b/src/game/area.c index bca1ceaa..0c56be39 100644 --- a/src/game/area.c +++ b/src/game/area.c @@ -106,6 +106,9 @@ void set_warp_transition_rgb(u8 red, u8 green, u8 blue) { } void print_intro_text(void) { +#ifdef VERSION_CN + u8 sp18[] = { 0xB0, 0x00 }; // TODO: iQue colorful text +#endif #ifdef VERSION_EU s32 language = eu_get_language(); #endif @@ -119,8 +122,12 @@ void print_intro_text(void) { } else { #ifdef VERSION_EU print_text(20, 20, "START"); +#else +#ifdef VERSION_CN + print_text_centered(60, 38, (char *) sp18); #else print_text_centered(60, 38, "PRESS"); +#endif print_text_centered(60, 20, "START"); #endif } @@ -132,7 +139,7 @@ u32 get_mario_spawn_type(struct Object *o) { const BehaviorScript *behavior = virtual_to_segmented(0x13, o->behavior); for (i = 0; i < 20; i++) { - if (sWarpBhvSpawnTable[i] == behavior) { + if (behavior == sWarpBhvSpawnTable[i]) { return sSpawnTypeFromWarpBhv[i]; } } @@ -151,9 +158,9 @@ struct ObjectWarpNode *area_get_warp_node(u8 id) { } struct ObjectWarpNode *area_get_warp_node_from_params(struct Object *o) { - u8 sp1F = (o->oBehParams & 0x00FF0000) >> 16; + u8 id = (o->oBhvParams & 0x00FF0000) >> 16; - return area_get_warp_node(sp1F); + return area_get_warp_node(id); } void load_obj_warp_nodes(void) { diff --git a/src/game/area.h b/src/game/area.h index 9141005b..55179662 100644 --- a/src/game/area.h +++ b/src/game/area.h @@ -59,8 +59,8 @@ struct Area { /*0x01*/ s8 flags; // Only has 1 flag: 0x01 = Is this the active area? /*0x02*/ u16 terrainType; // default terrain of the level (set from level script cmd 0x31) /*0x04*/ struct GraphNodeRoot *unk04; // geometry layout data - /*0x08*/ s16 *terrainData; // collision data (set from level script cmd 0x2E) - /*0x0C*/ s8 *surfaceRooms; // (set from level script cmd 0x2F) + /*0x08*/ TerrainData *terrainData; // collision data (set from level script cmd 0x2E) + /*0x0C*/ RoomData *surfaceRooms; // (set from level script cmd 0x2F) /*0x10*/ s16 *macroObjects; // Macro Objects Ptr (set from level script cmd 0x39) /*0x14*/ struct ObjectWarpNode *warpNodes; /*0x18*/ struct WarpNode *paintingWarpNodes; diff --git a/src/game/behavior_actions.c b/src/game/behavior_actions.c index 9800146f..4a29e15e 100644 --- a/src/game/behavior_actions.c +++ b/src/game/behavior_actions.c @@ -80,7 +80,7 @@ static s16 sBooHitRotations[] = { // not in behavior file static struct SpawnParticlesInfo sMistParticles = { - /* behParam: */ 2, + /* bhvParam: */ 2, /* count: */ 20, /* model: */ MODEL_MIST, /* offsetY: */ 0, @@ -144,14 +144,13 @@ void spawn_mist_particles_variable(s32 count, s32 offsetY, f32 size) { // not sure what this is doing here. not in a behavior file. Gfx *geo_move_mario_part_from_parent(s32 run, UNUSED struct GraphNode *node, Mat4 mtx) { - Mat4 sp20; - if (run == TRUE) { - struct Object *sp1C = (struct Object *) gCurGraphNodeObject; - if (sp1C == gMarioObject && sp1C->prevObj != NULL) { + Mat4 sp20; + struct Object *obj = (struct Object *) gCurGraphNodeObject; + if (obj == gMarioObject && obj->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); + obj_update_pos_from_parent_transformation(sp20, obj->prevObj); + obj_set_gfx_pos_from_pos(obj->prevObj); } } diff --git a/src/game/behavior_actions.h b/src/game/behavior_actions.h index 97939170..eba084e9 100644 --- a/src/game/behavior_actions.h +++ b/src/game/behavior_actions.h @@ -65,8 +65,8 @@ void bhv_warp_loop(void); void bhv_white_puff_exploding_loop(void); void bhv_spawned_star_init(void); void bhv_spawned_star_loop(void); -void bhv_coin_init(void); -void bhv_coin_loop(void); +void bhv_spawned_coin_init(void); +void bhv_spawned_coin_loop(void); void bhv_coin_inside_boo_loop(void); void bhv_coin_formation_init(void); void bhv_coin_formation_spawn_loop(void); @@ -424,8 +424,8 @@ void bhv_treasure_chest_ship_init(void); void bhv_treasure_chest_ship_loop(void); void bhv_treasure_chest_jrb_init(void); void bhv_treasure_chest_jrb_loop(void); -void bhv_treasure_chest_init(void); -void bhv_treasure_chest_loop(void); +void bhv_treasure_chest_ddd_init(void); +void bhv_treasure_chest_ddd_loop(void); void bhv_treasure_chest_bottom_init(void); void bhv_treasure_chest_bottom_loop(void); void bhv_treasure_chest_top_loop(void); diff --git a/src/game/behaviors/activated_bf_plat.inc.c b/src/game/behaviors/activated_bf_plat.inc.c index 8b6399b7..b18f1c46 100644 --- a/src/game/behaviors/activated_bf_plat.inc.c +++ b/src/game/behaviors/activated_bf_plat.inc.c @@ -28,7 +28,7 @@ static Collision const *sActivatedBackAndForthPlatformCollisionModels[] = { */ void bhv_activated_back_and_forth_platform_init(void) { // Equivalent to the first behavior param byte & 3 (last 2 bits of the byte). - s32 platformType = ((u16)(o->oBehParams >> 16) & 0x0300) >> 8; + s32 platformType = ((u16)(o->oBhvParams >> 16) & ACTIVATED_BF_PLAT_BP_MASK_TYPE) >> 8; // The BitS arrow platform should flip 180º (0x8000 angle units), but // there is no reason for the other platforms to flip. @@ -42,18 +42,18 @@ void bhv_activated_back_and_forth_platform_init(void) { segmented_to_virtual(sActivatedBackAndForthPlatformCollisionModels[platformType]); // Max distance the platform should move. - // Equivalent to 50 * (oBehParams2ndByte & 0x7F), i.e. 50 * (oBehParams2ndByte % 128). + // Equivalent to 50 * (oBhvParams2ndByte & 0x7F), i.e. 50 * (oBhvParams2ndByte % 128). // The maximum possible value of this is 50 * 127 = 6350. // It's 50 * 97 = 4850 in BitS and 50 * 31 = 1550 in BitFS. - o->oActivatedBackAndForthPlatformMaxOffset = 50.0f * ((u16)(o->oBehParams >> 16) & 0x007F); + o->oActivatedBackAndForthPlatformMaxOffset = 50.0f * ((u16)(o->oBhvParams >> 16) & 0x007F); if (platformType == ACTIVATED_BF_PLAT_TYPE_BITFS_ELEVATOR) { o->oActivatedBackAndForthPlatformMaxOffset -= 12.0f; } // Truthy/falsy value that determines the direction of movement. - // Equivalent to oBehParams2ndByte & 0x80, i.e. the most significant bit of oBehParams2ndByte. - o->oActivatedBackAndForthPlatformVertical = (u16)(o->oBehParams >> 16) & 0x0080; + // Equivalent to oBhvParams2ndByte & 0x80, i.e. the most significant bit of oBhvParams2ndByte. + o->oActivatedBackAndForthPlatformVertical = (u16)(o->oBhvParams >> 16) & 0x0080; o->oActivatedBackAndForthPlatformStartYaw = o->oFaceAngleYaw; } diff --git a/src/game/behaviors/amp.inc.c b/src/game/behaviors/amp.inc.c index 4fbdadb7..7b5f2f74 100644 --- a/src/game/behaviors/amp.inc.c +++ b/src/game/behaviors/amp.inc.c @@ -243,7 +243,7 @@ void bhv_circling_amp_init(void) { o->oAnimState = 1; // Determine the radius of the circling amp's circle - switch (o->oBehParams2ndByte) { + switch (o->oBhvParams2ndByte) { case AMP_BP_ROT_RADIUS_200: o->oAmpRadiusOfRotation = 200.0f; break; @@ -331,7 +331,7 @@ static void circling_amp_idle_loop(void) { void bhv_circling_amp_loop(void) { switch (o->oAction) { case AMP_ACT_IDLE: - if (o->oBehParams2ndByte == AMP_BP_ROT_RADIUS_0) { + if (o->oBhvParams2ndByte == AMP_BP_ROT_RADIUS_0) { fixed_circling_amp_idle_loop(); } else { circling_amp_idle_loop(); diff --git a/src/game/behaviors/animated_floor_switch.inc.c b/src/game/behaviors/animated_floor_switch.inc.c index e0e8471f..826fe5d5 100644 --- a/src/game/behaviors/animated_floor_switch.inc.c +++ b/src/game/behaviors/animated_floor_switch.inc.c @@ -37,16 +37,16 @@ void bhv_animates_on_floor_switch_press_init(void) { void bhv_animates_on_floor_switch_press_loop(void) { if (o->oFloorSwitchPressAnimationUnk100 != 0) { - if (o->parentObj->oAction != 2) { + if (o->parentObj->oAction != PURPLE_SWITCH_ACT_TICKING) { o->oFloorSwitchPressAnimationUnk100 = 0; } if (o->oFloorSwitchPressAnimationUnkFC != 0) { - o->oFloorSwitchPressAnimationUnkF4 = D_80331ACC[o->oBehParams2ndByte]; + o->oFloorSwitchPressAnimationUnkF4 = D_80331ACC[o->oBhvParams2ndByte]; } else { o->oFloorSwitchPressAnimationUnkF4 = 0; } - } else if (o->parentObj->oAction == 2) { + } else if (o->parentObj->oAction == PURPLE_SWITCH_ACT_TICKING) { o->oFloorSwitchPressAnimationUnkFC ^= 1; o->oFloorSwitchPressAnimationUnk100 = 1; } @@ -71,7 +71,7 @@ void bhv_animates_on_floor_switch_press_loop(void) { } o->collisionData = segmented_to_virtual( - D_80331A54[o->oBehParams2ndByte][o->oFloorSwitchPressAnimationUnkF8 / 2].collision); + D_80331A54[o->oBhvParams2ndByte][o->oFloorSwitchPressAnimationUnkF8 / 2].collision); - cur_obj_set_model(D_80331A54[o->oBehParams2ndByte][o->oFloorSwitchPressAnimationUnkF8 / 2].model); + cur_obj_set_model(D_80331A54[o->oBhvParams2ndByte][o->oFloorSwitchPressAnimationUnkF8 / 2].model); } diff --git a/src/game/behaviors/bbh_tilting_trap.inc.c b/src/game/behaviors/bbh_tilting_trap.inc.c index 6f35cf06..40010a09 100644 --- a/src/game/behaviors/bbh_tilting_trap.inc.c +++ b/src/game/behaviors/bbh_tilting_trap.inc.c @@ -1,12 +1,12 @@ /** - * Behavior for bhvBbhTiltingTrapPlatform. + * Behavior for bhvBBHTiltingTrapPlatform. * This is the tilting platform trap in the upper floor of BBH * that drops the player into the merry-go-round area. */ /** - * Update function for bhvBbhTiltingTrapPlatform. + * Update function for bhvBBHTiltingTrapPlatform. */ void bhv_bbh_tilting_trap_platform_loop(void) { UNUSED u8 filler[4]; diff --git a/src/game/behaviors/bird.inc.c b/src/game/behaviors/bird.inc.c index 11d51058..e11d026f 100644 --- a/src/game/behaviors/bird.inc.c +++ b/src/game/behaviors/bird.inc.c @@ -16,10 +16,10 @@ static void bird_act_inactive(void) { // Start flying if the object is a spawned bird or if it's a spawner bird // and Mario is within 2000 units. - if (o->oBehParams2ndByte == BIRD_BP_SPAWNED || o->oDistanceToMario < 2000.0f) { + if (o->oBhvParams2ndByte == BIRD_BP_SPAWNED || o->oDistanceToMario < 2000.0f) { // If the object is a spawner bird, play the sound of birds flying away, // and spawn 6 spawned birds (which will start flying on the next frame). - if (o->oBehParams2ndByte != BIRD_BP_SPAWNED) { + if (o->oBhvParams2ndByte != BIRD_BP_SPAWNED) { s32 i; cur_obj_play_sound_2(SOUND_GENERAL_BIRDS_FLY_AWAY); @@ -68,7 +68,7 @@ static void bird_act_fly(void) { } 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) { + if (o->oBhvParams2ndByte != BIRD_BP_SPAWNED) { distance = cur_obj_lateral_dist_to_home(); // The spawner bird will start with its downwards (positive) pitch diff --git a/src/game/behaviors/bobomb.inc.c b/src/game/behaviors/bobomb.inc.c index 4db4137b..2d4b1c24 100644 --- a/src/game/behaviors/bobomb.inc.c +++ b/src/game/behaviors/bobomb.inc.c @@ -20,9 +20,9 @@ void bhv_bobomb_init(void) { } void bobomb_spawn_coin(void) { - if (!((o->oBehParams >> 8) & 0x01)) { + if (!((o->oBhvParams >> 8) & 0x01)) { obj_spawn_yellow_coins(o, 1); - o->oBehParams = 0x100; + o->oBhvParams = 0x100; set_object_respawn_info_bits(o, 1); } } @@ -83,7 +83,7 @@ void bobomb_act_patrol(void) { void bobomb_act_chase_mario(void) { UNUSED u8 filler[4]; - s16 animFrame = ++o->header.gfx.animInfo.animFrame; + s16 animFrame = ++o->header.gfx.animInfo.animFrame; s16 collisionFlags; o->oForwardVel = 20.0f; @@ -172,7 +172,7 @@ void stationary_bobomb_free_loop(void) { } void bobomb_free_loop(void) { - if (o->oBehParams2ndByte == BOBOMB_BP_STYPE_GENERIC) { + if (o->oBhvParams2ndByte == BOBOMB_BP_STYPE_GENERIC) { generic_bobomb_free_loop(); } else { stationary_bobomb_free_loop(); @@ -379,7 +379,7 @@ void bobomb_buddy_act_talk(void) { switch (o->oBobombBuddyRole) { case BOBOMB_BUDDY_ROLE_ADVICE: - if (cutscene_object_with_dialog(CUTSCENE_DIALOG, o, o->oBehParams2ndByte) + if (cutscene_object_with_dialog(CUTSCENE_DIALOG, o, o->oBhvParams2ndByte) != BOBOMB_BUDDY_BP_STYPE_GENERIC) { set_mario_npc_dialog(MARIO_DIALOG_STOP); diff --git a/src/game/behaviors/boo.inc.c b/src/game/behaviors/boo.inc.c index 1f935acd..f053ef00 100644 --- a/src/game/behaviors/boo.inc.c +++ b/src/game/behaviors/boo.inc.c @@ -88,7 +88,7 @@ void bhv_courtyard_boo_triplet_init(void) { } else { for (i = 0; i < 3; i++) { struct Object *boo = spawn_object_relative( - 1, sCourtyardBooTripletPositions[i][0], sCourtyardBooTripletPositions[i][1], + BOO_BP_GENERIC, sCourtyardBooTripletPositions[i][0], sCourtyardBooTripletPositions[i][1], sCourtyardBooTripletPositions[i][2], o, MODEL_BOO, bhvGhostHuntBoo); boo->oMoveAngleYaw = random_u16(); @@ -321,31 +321,31 @@ static s32 boo_get_attack_status(void) { } // boo idle/chasing movement? -static void boo_chase_mario(f32 a0, s16 a1, f32 a2) { - f32 sp1C; - s16 sp1A; +static void boo_chase_mario(f32 a0, s16 turnSpeed, f32 velMultiplier) { + f32 dy; + s16 targetYaw; if (boo_vanish_or_appear()) { o->oInteractType = INTERACT_BOUNCE_TOP; if (cur_obj_lateral_dist_from_mario_to_home() > 1500.0f) { - sp1A = cur_obj_angle_to_home(); + targetYaw = cur_obj_angle_to_home(); } else { - sp1A = o->oAngleToMario; + targetYaw = o->oAngleToMario; } - cur_obj_rotate_yaw_toward(sp1A, a1); + cur_obj_rotate_yaw_toward(targetYaw, turnSpeed); o->oVelY = 0.0f; if (!mario_is_in_air_action()) { - sp1C = o->oPosY - gMarioObject->oPosY; - if (a0 < sp1C && sp1C < 500.0f) { - o->oVelY = increment_velocity_toward_range - (o->oPosY, gMarioObject->oPosY + 50.0f, 10.0f, 2.0f); + dy = o->oPosY - gMarioObject->oPosY; + if (a0 < dy && dy < 500.0f) { + o->oVelY = increment_velocity_toward_range( + o->oPosY, gMarioObject->oPosY + 50.0f, 10.0f, 2.0f); } } - cur_obj_set_vel_from_mario_vel(10.0f - o->oBooNegatedAggressiveness, a2); + cur_obj_set_vel_from_mario_vel(10.0f - o->oBooNegatedAggressiveness, velMultiplier); if (o->oForwardVel != 0.0f) { boo_oscillate(FALSE); @@ -362,7 +362,7 @@ static void boo_chase_mario(f32 a0, s16 a1, f32 a2) { static void boo_act_0(void) { o->activeFlags |= ACTIVE_FLAG_MOVE_THROUGH_GRATE; - if (o->oBehParams2ndByte == 2) { + if (o->oBhvParams2ndByte == BOO_BP_MERRY_GO_ROUND) { o->oRoom = 10; } @@ -376,7 +376,7 @@ static void boo_act_0(void) { if (boo_should_be_active()) { // Condition is met if the object is bhvBalconyBigBoo or bhvMerryGoRoundBoo - if (o->oBehParams2ndByte == 2) { + if (o->oBhvParams2ndByte == BOO_BP_MERRY_GO_ROUND) { o->oBooParentBigBoo = NULL; o->oAction = 5; } else { @@ -434,7 +434,7 @@ static void boo_act_2(void) { static void boo_act_3(void) { if (boo_update_during_death()) { - if (o->oBehParams2ndByte != 0) { + if (o->oBhvParams2ndByte != BOO_BP_GHOST_HUNT) { obj_mark_for_deletion(o); } else { o->oAction = 4; @@ -528,18 +528,18 @@ static void big_boo_act_0(void) { static void big_boo_act_1(void) { s32 attackStatus; - s16 sp22; - f32 sp1C; + s16 turnSpeed; + f32 velMultiplier; if (o->oHealth == 3) { - sp22 = 0x180; sp1C = 0.5f; + turnSpeed = 0x180; velMultiplier = 0.5f; } else if (o->oHealth == 2) { - sp22 = 0x240; sp1C = 0.6f; + turnSpeed = 0x240; velMultiplier = 0.6f; } else { - sp22 = 0x300; sp1C = 0.8f; + turnSpeed = 0x300; velMultiplier = 0.8f; } - boo_chase_mario(-100.0f, sp22, sp1C); + boo_chase_mario(-100.0f, turnSpeed, velMultiplier); attackStatus = boo_get_attack_status(); @@ -604,11 +604,11 @@ static void big_boo_act_3(void) { obj_set_angle(o, 0, 0, 0); - if (o->oBehParams2ndByte == 0) { + if (o->oBhvParams2ndByte == BIG_BOO_BP_GHOST_HUNT) { big_boo_spawn_ghost_hunt_star(); - } else if (o->oBehParams2ndByte == 1) { + } else if (o->oBhvParams2ndByte == BIG_BOO_BP_MERRY_GO_ROUND) { big_boo_spawn_merry_go_round_star(); - } else { + } else { // BIG_BOO_BP_BALCONY big_boo_spawn_balcony_star(); } } @@ -629,11 +629,11 @@ static void big_boo_act_4(void) { boo_stop(); #endif - if (o->oBehParams2ndByte == 0) { + if (o->oBhvParams2ndByte == BIG_BOO_BP_GHOST_HUNT) { obj_set_pos(o, 973, 0, 626); if (o->oTimer > 60 && o->oDistanceToMario < 600.0f) { - obj_set_pos(o, 973, 0, 717); + obj_set_pos(o, 973, 0, 717); spawn_object_relative(0, 0, 0, 0, o, MODEL_BBH_STAIRCASE_STEP, bhvBooStaircase); spawn_object_relative(1, 0, 0, -200, o, MODEL_BBH_STAIRCASE_STEP, bhvBooStaircase); @@ -686,7 +686,7 @@ static void boo_with_cage_act_0(void) { static void boo_with_cage_act_1(void) { s32 attackStatus; - boo_chase_mario(100.0f, 512, 0.5f); + boo_chase_mario(100.0f, 0x200, 0.5f); attackStatus = boo_get_attack_status(); @@ -720,7 +720,7 @@ void bhv_boo_with_cage_init(void) { obj_mark_for_deletion(o); } else { struct Object *cage = spawn_object(o, MODEL_HAUNTED_CAGE, bhvBooCage); - cage->oBehParams = o->oBehParams; + cage->oBhvParams = o->oBhvParams; } } @@ -760,8 +760,8 @@ void bhv_merry_go_round_boo_manager_loop(void) { } if (o->oMerryGoRoundBooManagerNumBoosKilled >= 5) { - struct Object *boo = spawn_object(o, MODEL_BOO, bhvMerryGoRoundBigBoo); - obj_copy_behavior_params(boo, o); + struct Object *bigBoo = spawn_object(o, MODEL_BOO, bhvMerryGoRoundBigBoo); + obj_copy_behavior_params(bigBoo, o); o->oAction = 2; @@ -859,7 +859,7 @@ void bhv_boo_in_castle_loop(void) { void bhv_boo_staircase(void) { f32 targetY; - switch (o->oBehParams2ndByte) { + switch (o->oBhvParams2ndByte) { case 1: targetY = 0.0f; break; @@ -899,7 +899,7 @@ void bhv_boo_staircase(void) { break; case 3: - if (o->oTimer == 0 && o->oBehParams2ndByte == 1) { + if (o->oTimer == 0 && o->oBhvParams2ndByte == 1) { play_puzzle_jingle(); } diff --git a/src/game/behaviors/bowling_ball.inc.c b/src/game/behaviors/bowling_ball.inc.c index 34fefb36..42bc0c09 100644 --- a/src/game/behaviors/bowling_ball.inc.c +++ b/src/game/behaviors/bowling_ball.inc.c @@ -12,7 +12,7 @@ static struct ObjectHitbox sBowlingBallHitbox = { /* hurtboxHeight: */ 0, }; -static Trajectory sThiHugeMetalBallTraj[] = { +static Trajectory sTHIHugeMetalBallTraj[] = { TRAJECTORY_POS(0, /*pos*/ -4786, 101, -2166), TRAJECTORY_POS(1, /*pos*/ -5000, 81, -2753), TRAJECTORY_POS(2, /*pos*/ -5040, 33, -3846), @@ -26,7 +26,7 @@ static Trajectory sThiHugeMetalBallTraj[] = { TRAJECTORY_END(), }; -static Trajectory sThiTinyMetalBallTraj[] = { +static Trajectory sTHITinyMetalBallTraj[] = { TRAJECTORY_POS(0, /*pos*/ -1476, 29, -680), TRAJECTORY_POS(1, /*pos*/ -1492, 14, -1072), TRAJECTORY_POS(2, /*pos*/ -1500, 3, -1331), @@ -54,7 +54,7 @@ void bowling_ball_set_hitbox(void) { } void bowling_ball_set_waypoints(void) { - switch (o->oBehParams2ndByte) { + switch (o->oBhvParams2ndByte) { case BBALL_BP_STYPE_BOB_UPPER: o->oPathedStartWaypoint = segmented_to_virtual(bob_seg7_metal_ball_path0); break; @@ -68,11 +68,11 @@ void bowling_ball_set_waypoints(void) { break; case BBALL_BP_STYPE_THI_LARGE: - o->oPathedStartWaypoint = (struct Waypoint *) sThiHugeMetalBallTraj; + o->oPathedStartWaypoint = (struct Waypoint *) sTHIHugeMetalBallTraj; break; case BBALL_BP_STYPE_THI_SMALL: - o->oPathedStartWaypoint = (struct Waypoint *) sThiTinyMetalBallTraj; + o->oPathedStartWaypoint = (struct Waypoint *) sTHITinyMetalBallTraj; break; } } @@ -87,7 +87,7 @@ void bhv_bowling_ball_roll_loop(void) { bowling_ball_set_waypoints(); collisionFlags = object_step(); - //! Uninitialzed parameter, but the parameter is unused in the called function + //! Uninitialized parameter, but the parameter is unused in the called function followStatus = cur_obj_follow_path(followStatus); o->oBowlingBallTargetYaw = o->oPathedTargetYaw; @@ -120,12 +120,12 @@ void bhv_bowling_ball_initialize_loop(void) { bowling_ball_set_waypoints(); - //! Uninitialzed parameter, but the parameter is unused in the called function + //! Uninitialized parameter, but the parameter is unused in the called function followStatus = cur_obj_follow_path(followStatus); o->oMoveAngleYaw = o->oPathedTargetYaw; - switch (o->oBehParams2ndByte) { + switch (o->oBhvParams2ndByte) { case BBALL_BP_STYPE_BOB_UPPER: o->oForwardVel = 20.0f; break; @@ -162,7 +162,7 @@ void bhv_bowling_ball_loop(void) { break; } - if (o->oBehParams2ndByte != BBALL_BP_STYPE_THI_SMALL) { + if (o->oBhvParams2ndByte != BBALL_BP_STYPE_THI_SMALL) { set_camera_shake_from_point(SHAKE_POS_BOWLING_BALL, o->oPosX, o->oPosY, o->oPosZ); } @@ -170,7 +170,7 @@ void bhv_bowling_ball_loop(void) { } void bhv_generic_bowling_ball_spawner_init(void) { - switch (o->oBehParams2ndByte) { + switch (o->oBhvParams2ndByte) { case BBALL_BP_STYPE_BOB_UPPER: o->oBBallSpawnerMaxSpawnDist = 7000.0f; o->oBBallSpawnerSpawnOdds = 2.0f; @@ -202,7 +202,7 @@ void bhv_generic_bowling_ball_spawner_loop(void) { if (is_point_within_radius_of_mario(o->oPosX, o->oPosY, o->oPosZ, o->oBBallSpawnerMaxSpawnDist) && (s32)(random_float() * o->oBBallSpawnerSpawnOdds) == 0) { struct Object *bowlingBall = spawn_object(o, MODEL_BOWLING_BALL, bhvBowlingBall); - bowlingBall->oBehParams2ndByte = o->oBehParams2ndByte; + bowlingBall->oBhvParams2ndByte = o->oBhvParams2ndByte; } } } @@ -221,7 +221,7 @@ void bhv_thi_bowling_ball_spawner_loop(void) { if (is_point_within_radius_of_mario(o->oPosX, o->oPosY, o->oPosZ, 12000) && (s32)(random_float() * 1.5) == 0) { struct Object *bowlingBall = spawn_object(o, MODEL_BOWLING_BALL, bhvBowlingBall); - bowlingBall->oBehParams2ndByte = o->oBehParams2ndByte; + bowlingBall->oBhvParams2ndByte = o->oBhvParams2ndByte; } } } diff --git a/src/game/behaviors/bowser.inc.c b/src/game/behaviors/bowser.inc.c index 2cd9a96c..c4e3e410 100644 --- a/src/game/behaviors/bowser.inc.c +++ b/src/game/behaviors/bowser.inc.c @@ -156,7 +156,7 @@ void bhv_bowser_body_anchor_loop(void) { * Bowser's shockwave attack, spawns only in BitS */ s32 bowser_spawn_shockwave(void) { - if (o->oBehParams2ndByte == BOWSER_BP_BITS) { + if (o->oBhvParams2ndByte == BOWSER_BP_BITS) { struct Object *wave = spawn_object(o, MODEL_BOWSER_WAVE, bhvBowserShockWave); wave->oPosY = o->oFloorHeight; return TRUE; @@ -235,7 +235,7 @@ void bowser_init_camera_actions(void) { } else if (o->oBowserCamAct == BOWSER_CAM_ACT_WALK) { o->oAction = BOWSER_ACT_INTRO_WALK; // Start with a big jump in BitFS to do a platform tilt - } else if (o->oBehParams2ndByte == BOWSER_BP_BITFS) { + } else if (o->oBhvParams2ndByte == BOWSER_BP_BITFS) { o->oAction = BOWSER_ACT_BIG_JUMP; } else { o->oAction = BOWSER_ACT_DEFAULT; @@ -410,7 +410,7 @@ void bowser_bits_action_list(void) { /** * Sets big jump action, not much to say - * Never gets called since oBowserBitsJustJump is always FALSE + * Never gets called since oBowserBitSJustJump is always FALSE */ void bowser_set_act_big_jump(void) { o->oAction = BOWSER_ACT_BIG_JUMP; @@ -422,9 +422,9 @@ void bowser_set_act_big_jump(void) { void bowser_bits_actions(void) { switch (o->oBowserIsReacting) { case FALSE: - // oBowserBitsJustJump never changes value, + // oBowserBitSJustJump never changes value, // so its always FALSE, maybe a debug define - if (o->oBowserBitsJustJump == FALSE) { + if (o->oBowserBitSJustJump == FALSE) { bowser_bits_action_list(); } else { bowser_set_act_big_jump(); @@ -475,9 +475,9 @@ void bowser_act_default(void) { o->oForwardVel = 0.0f; o->oVelY = 0.0f; // Set level specific actions - if (o->oBehParams2ndByte == BOWSER_BP_BITDW) { + if (o->oBhvParams2ndByte == BOWSER_BP_BITDW) { bowser_bitdw_actions(); - } else if (o->oBehParams2ndByte == BOWSER_BP_BITFS) { + } else if (o->oBhvParams2ndByte == BOWSER_BP_BITFS) { bowser_bitfs_actions(); } else { // BOWSER_BP_BITS bowser_bits_actions(); @@ -510,7 +510,7 @@ void bowser_act_walk_to_mario(void) { // Set turning speed depending of the health // Also special case for BitFS - if (o->oBehParams2ndByte == BOWSER_BP_BITFS) { + if (o->oBhvParams2ndByte == BOWSER_BP_BITFS) { turnSpeed = 0x400; } else { // BOWSER_BP_BITDW or BOWSER_BP_BITS if (o->oHealth >= 3) { @@ -698,7 +698,7 @@ s32 bowser_land(void) { cur_obj_start_cam_event(o, CAM_EVENT_BOWSER_JUMP); // Set status attacks in BitDW since the other levels // have different attacks defined - if (o->oBehParams2ndByte == BOWSER_BP_BITDW) { + if (o->oBhvParams2ndByte == BOWSER_BP_BITDW) { if (o->oDistanceToMario < 850.0f) { gMarioObject->oInteractStatus |= INT_STATUS_MARIO_KNOCKBACK_DMG; } else { @@ -715,7 +715,7 @@ s32 bowser_land(void) { * Makes Bowser do a second hop speed only in BitS */ void bowser_short_second_hop(void) { - if (o->oBehParams2ndByte == BOWSER_BP_BITS && o->oBowserStatus & BOWSER_STATUS_BIG_JUMP) { + if (o->oBhvParams2ndByte == BOWSER_BP_BITS && o->oBowserStatus & BOWSER_STATUS_BIG_JUMP) { if (o->oBowserDistToCenter > 1000.0f) { o->oForwardVel = 60.0f; } @@ -732,7 +732,7 @@ void bowser_act_big_jump(void) { // Set jump animation if (bowser_set_anim_jump()) { // Set vel depending of the stage and status - if (o->oBehParams2ndByte == BOWSER_BP_BITS && o->oBowserStatus & BOWSER_STATUS_BIG_JUMP) { + if (o->oBhvParams2ndByte == BOWSER_BP_BITS && o->oBowserStatus & BOWSER_STATUS_BIG_JUMP) { o->oVelY = 70.0f; } else { o->oVelY = 80.0f; @@ -744,7 +744,7 @@ void bowser_act_big_jump(void) { } else if (o->oSubAction == 1) { #if BUGFIX_BOWSER_FALLEN_OFF_STAGE // Reset Bowser back on stage in BitS if he doesn't land properly - if (o->oBehParams2ndByte == BOWSER_BP_BITS && o->oBowserStatus & BOWSER_STATUS_BIG_JUMP) { + if (o->oBhvParams2ndByte == BOWSER_BP_BITS && o->oBowserStatus & BOWSER_STATUS_BIG_JUMP) { bowser_reset_fallen_off_stage(); } #endif @@ -756,7 +756,7 @@ void bowser_act_big_jump(void) { // Spawn shockwave (BitS only) if is not on a platform bowser_spawn_shockwave(); // Tilt platform in BitFS - if (o->oBehParams2ndByte == BOWSER_BP_BITFS) { + if (o->oBhvParams2ndByte == BOWSER_BP_BITFS) { o->oAction = BOWSER_ACT_TILT_LAVA_PLATFORM; } } else { @@ -952,7 +952,7 @@ void bowser_act_charge_mario(void) { cur_obj_init_animation_with_sound(BOWSER_ANIM_RUN_STOP); if (cur_obj_check_if_near_animation_end()) { // Set time delay to go to default action - if (o->oBehParams2ndByte == BOWSER_BP_BITS) { + if (o->oBhvParams2ndByte == BOWSER_BP_BITS) { time = 10; } else { time = 30; @@ -1103,11 +1103,11 @@ void bowser_act_jump_onto_stage(void) { bowser_spawn_shockwave(); // If is on a dynamic floor in BitS, then jump // because of the falling platform - } else if (o->oBehParams2ndByte == BOWSER_BP_BITS) { + } else if (o->oBhvParams2ndByte == BOWSER_BP_BITS) { o->oAction = BOWSER_ACT_BIG_JUMP; } // If is on a dynamic floor in BitFS, then tilt platform - if (o->oBehParams2ndByte == BOWSER_BP_BITFS) { + if (o->oBhvParams2ndByte == BOWSER_BP_BITFS) { o->oAction = BOWSER_ACT_TILT_LAVA_PLATFORM; } } @@ -1161,7 +1161,7 @@ void bowser_act_dance(void) { * Spawns a Key in BitDW/BitFS or Grand Star in BitS */ void bowser_spawn_collectable(void) { - if (o->oBehParams2ndByte == BOWSER_BP_BITS) { + if (o->oBhvParams2ndByte == BOWSER_BP_BITS) { gSecondCameraFocus = spawn_object(o, MODEL_STAR, bhvGrandStar); } else { gSecondCameraFocus = spawn_object(o, MODEL_BOWSER_KEY, bhvBowserKey); @@ -1176,7 +1176,7 @@ void bowser_spawn_collectable(void) { void bowser_fly_back_dead(void) { cur_obj_init_animation_with_sound(BOWSER_ANIM_FLIP_DOWN); // More knockback in BitS - if (o->oBehParams2ndByte == BOWSER_BP_BITS) { + if (o->oBhvParams2ndByte == BOWSER_BP_BITS) { o->oForwardVel = -400.0f; } else { o->oForwardVel = -200.0f; @@ -1284,7 +1284,7 @@ s32 bowser_dead_default_stage_ending(void) { // Play Bowser defeated dialog if (cur_obj_update_dialog(MARIO_DIALOG_LOOK_UP, (DIALOG_FLAG_TEXT_DEFAULT | DIALOG_FLAG_TIME_STOP_ENABLED), - sBowserDefeatedDialogText[o->oBehParams2ndByte], 0)) { + sBowserDefeatedDialogText[o->oBhvParams2ndByte], 0)) { // Dialog is done, fade out music and play explode sound effect o->oBowserTimer++; cur_obj_play_sound_2(SOUND_GENERAL2_BOWSER_EXPLODE); @@ -1366,7 +1366,7 @@ void bowser_act_dead(void) { o->oBowserTimer = 0; // Set different (final) subaction in BitS // Non-BitS Bowser uses default subaction and sets dithering - if (o->oBehParams2ndByte == BOWSER_BP_BITS) { + if (o->oBhvParams2ndByte == BOWSER_BP_BITS) { o->oSubAction = BOWSER_SUB_ACT_DEAD_FINAL_END; } else { o->activeFlags |= ACTIVE_FLAG_DITHERED_ALPHA; @@ -1772,7 +1772,7 @@ void bhv_bowser_init(void) { } else { // LEVEL_BOWSER_1 level = BOWSER_BP_BITDW; } - o->oBehParams2ndByte = level; + o->oBhvParams2ndByte = level; // Set health and rainbow light depending of the level o->oBowserRainbowLight = sBowserRainbowLight[level]; o->oHealth = sBowserHealth[level]; diff --git a/src/game/behaviors/bowser_falling_platform.inc.c b/src/game/behaviors/bowser_falling_platform.inc.c index 85da27a7..2c9785d8 100644 --- a/src/game/behaviors/bowser_falling_platform.inc.c +++ b/src/game/behaviors/bowser_falling_platform.inc.c @@ -22,16 +22,16 @@ struct BowserFallingPlatformData sBowserFallingPlatform[] = { }; void falling_bowser_plat_act_start(void) { - o->oBitsPlatformBowser = cur_obj_nearest_object_with_behavior(bhvBowser); - obj_set_collision_data(o, sBowserFallingPlatform[o->oBehParams2ndByte].collision); - if (o->oBitsPlatformBowser != NULL) { + o->oBitSPlatformBowser = cur_obj_nearest_object_with_behavior(bhvBowser); + obj_set_collision_data(o, sBowserFallingPlatform[o->oBhvParams2ndByte].collision); + if (o->oBitSPlatformBowser != NULL) { o->oAction = BOWSER_BITS_PLAT_ACT_CHECK; } } void falling_bowser_plat_act_check(void) { UNUSED u8 filler[4]; - struct Object *bowser = o->oBitsPlatformBowser; + struct Object *bowser = o->oBitSPlatformBowser; if (bowser->platform == o) { if (bowser->oAction == BOWSER_ACT_BIG_JUMP @@ -46,13 +46,13 @@ void falling_bowser_plat_act_check(void) { } if (o->oSubAction == 0) { - o->oBitsPlatformTimer = 0; + o->oBitSPlatformTimer = 0; } else { if ((gDebugInfo[DEBUG_PAGE_EFFECTINFO][6] + 20) - * (o->oBehParams2ndByte - 1) < o->oBitsPlatformTimer) { + * (o->oBhvParams2ndByte - 1) < o->oBitSPlatformTimer) { o->oAction = BOWSER_BITS_PLAT_ACT_FALL; } - o->oBitsPlatformTimer++; + o->oBitSPlatformTimer++; } } @@ -60,7 +60,7 @@ void falling_bowser_plat_act_fall(void) { Vec3f pos; s16 angle; f32 val; - UNUSED struct Object *bowser = o->oBitsPlatformBowser; + UNUSED struct Object *bowser = o->oBitSPlatformBowser; if (o->oTimer == 0 || o->oTimer == 22) { cur_obj_play_sound_2(SOUND_GENERAL_BOWSER_PLATFORM_2); @@ -75,17 +75,17 @@ void falling_bowser_plat_act_fall(void) { } if (!(o->oTimer & 1) && o->oTimer < 14) { - angle = sBowserFallingPlatform[o->oBehParams2ndByte].angle + angle = sBowserFallingPlatform[o->oBhvParams2ndByte].angle + (gDebugInfo[DEBUG_PAGE_EFFECTINFO][1] << 8); val = -(o->oTimer / 2) * 290 + 1740; vec3f_copy_2(pos, &o->oPosX); - o->oPosX = sBowserFallingPlatform[o->oBehParams2ndByte].posX + sins(angle + 0x14B0) * val; - o->oPosZ = sBowserFallingPlatform[o->oBehParams2ndByte].posZ + coss(angle + 0x14B0) * val; + o->oPosX = sBowserFallingPlatform[o->oBhvParams2ndByte].posX + sins(angle + 0x14B0) * val; + o->oPosZ = sBowserFallingPlatform[o->oBhvParams2ndByte].posZ + coss(angle + 0x14B0) * val; o->oPosY = 307.0f; spawn_mist_particles_variable(4, 0, 100.0f); - o->oPosX = sBowserFallingPlatform[o->oBehParams2ndByte].posX + sins(angle - 0x14B0) * val; - o->oPosZ = sBowserFallingPlatform[o->oBehParams2ndByte].posZ + coss(angle - 0x14B0) * val; - spawn_mist_particles_variable(4, 0, 100); + o->oPosX = sBowserFallingPlatform[o->oBhvParams2ndByte].posX + sins(angle - 0x14B0) * val; + o->oPosZ = sBowserFallingPlatform[o->oBhvParams2ndByte].posZ + coss(angle - 0x14B0) * val; + spawn_mist_particles_variable(4, 0, 100.0f); vec3f_copy_2(&o->oPosX, pos); } diff --git a/src/game/behaviors/bowser_flame.inc.c b/src/game/behaviors/bowser_flame.inc.c index 08a6d670..2e6838fd 100644 --- a/src/game/behaviors/bowser_flame.inc.c +++ b/src/game/behaviors/bowser_flame.inc.c @@ -146,7 +146,7 @@ void bhv_flame_moving_forward_growing_loop(void) { void bhv_flame_floating_landing_init(void) { o->oAnimState = (s32)(random_float() * 10.0f); o->oMoveAngleYaw = random_u16(); - if (o->oBehParams2ndByte != 0) { + if (o->oBhvParams2ndByte != 0) { o->oForwardVel = random_float() * 5.0f; } else { o->oForwardVel = random_float() * 70.0f; @@ -169,12 +169,12 @@ void bhv_flame_floating_landing_loop(void) { obj_mark_for_deletion(o); } - if (o->oVelY < sFlameFloatingYLimit[o->oBehParams2ndByte]) { - o->oVelY = sFlameFloatingYLimit[o->oBehParams2ndByte]; + if (o->oVelY < sFlameFloatingYLimit[o->oBhvParams2ndByte]) { + o->oVelY = sFlameFloatingYLimit[o->oBhvParams2ndByte]; } if (o->oMoveFlags & OBJ_MOVE_LANDED) { - if (o->oBehParams2ndByte == 0) { + if (o->oBhvParams2ndByte == 0) { spawn_object(o, MODEL_RED_FLAME, bhvFlameLargeBurningOut); } else { spawn_object(o, MODEL_NONE, bhvBlueFlamesGroup); //? wonder if they meant MODEL_BLUE_FLAME? @@ -210,7 +210,7 @@ void bhv_blue_bowser_flame_loop(void) { cur_obj_move_standard(78); if (o->oTimer > 20) { - if (o->oBehParams2ndByte == 0) { + if (o->oBhvParams2ndByte == 0) { for (i = 0; i < 3; i++) { spawn_object_relative_with_scale(0, 0, 0, 0, 5.0f, o, MODEL_RED_FLAME, bhvFlameFloatingLanding); diff --git a/src/game/behaviors/bowser_key_cutscene.inc.c b/src/game/behaviors/bowser_key_cutscene.inc.c index 6f3ac484..01bec52e 100644 --- a/src/game/behaviors/bowser_key_cutscene.inc.c +++ b/src/game/behaviors/bowser_key_cutscene.inc.c @@ -2,8 +2,8 @@ Gfx *geo_scale_bowser_key(s32 run, struct GraphNode *node, UNUSED f32 mtx[4][4]) { if (run == TRUE) { - struct Object *sp4 = (struct Object *) gCurGraphNodeObject; - ((struct GraphNodeScale *) node->next)->scale = sp4->oBowserKeyScale; + struct Object *obj = (struct Object *) gCurGraphNodeObject; + ((struct GraphNodeScale *) node->next)->scale = obj->oBowserKeyScale; } return NULL; } diff --git a/src/game/behaviors/bowser_puzzle_piece.inc.c b/src/game/behaviors/bowser_puzzle_piece.inc.c index aaed6022..88c8a694 100644 --- a/src/game/behaviors/bowser_puzzle_piece.inc.c +++ b/src/game/behaviors/bowser_puzzle_piece.inc.c @@ -105,7 +105,7 @@ void bhv_lll_bowser_puzzle_spawn_pieces(f32 pieceWidth) { // Spawn all 14 puzzle pieces. for (i = 0; i < 14; i++) { - bhv_lll_bowser_puzzle_spawn_piece(sBowserPuzzlePieces[i].model, bhvLllBowserPuzzlePiece, + bhv_lll_bowser_puzzle_spawn_piece(sBowserPuzzlePieces[i].model, bhvLLLBowserPuzzlePiece, sBowserPuzzlePieces[i].xOffset * pieceWidth / 10.0f, sBowserPuzzlePieces[i].zOffset * pieceWidth / 10.0f, sBowserPuzzlePieces[i].initialAction, @@ -197,7 +197,7 @@ void bhv_lll_bowser_puzzle_piece_update(void) { } } -void bhv_lll_bowser_puzzle_piece_move(f32 xOffset, f32 zOffset, s32 duration, UNUSED s32 a3) { +void bhv_lll_bowser_puzzle_piece_move(f32 xOffset, f32 zOffset, s32 duration, UNUSED s32 unused) { // For the first 20 frames, shake the puzzle piece up and down. if (o->oTimer < 20) { if (o->oTimer % 2) { diff --git a/src/game/behaviors/breakable_wall.inc.c b/src/game/behaviors/breakable_wall.inc.c index 53e21de0..b0c7d8aa 100644 --- a/src/game/behaviors/breakable_wall.inc.c +++ b/src/game/behaviors/breakable_wall.inc.c @@ -5,7 +5,7 @@ void bhv_wf_breakable_wall_loop(void) { cur_obj_become_tangible(); if (obj_check_if_collided_with_object(o, gMarioObject)) { - if (cur_obj_has_behavior(bhvWfBreakableWallRight)) { + if (cur_obj_has_behavior(bhvWFBreakableWallRight)) { play_puzzle_jingle(); } diff --git a/src/game/behaviors/bully.inc.c b/src/game/behaviors/bully.inc.c index 85340bc1..4b252ab8 100644 --- a/src/game/behaviors/bully.inc.c +++ b/src/game/behaviors/bully.inc.c @@ -29,7 +29,7 @@ void bhv_small_bully_init(void) { o->oHomeX = o->oPosX; o->oHomeZ = o->oPosZ; - o->oBehParams2ndByte = BULLY_BP_SIZE_SMALL; + o->oBhvParams2ndByte = BULLY_BP_SIZE_SMALL; o->oGravity = 4.0; o->oFriction = 0.91; o->oBuoyancy = 1.3; @@ -43,7 +43,7 @@ void bhv_big_bully_init(void) { o->oHomeX = o->oPosX; o->oHomeY = o->oPosY; o->oHomeZ = o->oPosZ; - o->oBehParams2ndByte = BULLY_BP_SIZE_BIG; + o->oBhvParams2ndByte = BULLY_BP_SIZE_BIG; o->oGravity = 5.0; o->oFriction = 0.93; o->oBuoyancy = 1.3; @@ -53,11 +53,11 @@ void bhv_big_bully_init(void) { void bully_check_mario_collision(void) { if ( -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) o->oAction != BULLY_ACT_LAVA_DEATH && o->oAction != BULLY_ACT_DEATH_PLANE_DEATH && #endif o->oInteractStatus & INT_STATUS_INTERACTED) { - if (o->oBehParams2ndByte == BULLY_BP_SIZE_SMALL) { + if (o->oBhvParams2ndByte == BULLY_BP_SIZE_SMALL) { cur_obj_play_sound_2(SOUND_OBJ2_BULLY_ATTACKED); } else { cur_obj_play_sound_2(SOUND_OBJ2_LARGE_BULLY_ATTACKED); @@ -79,7 +79,7 @@ void bully_act_chase_mario(void) { if (o->oTimer < 10) { o->oForwardVel = 3.0; obj_turn_toward_object(o, gMarioObject, 16, 0x1000); - } else if (o->oBehParams2ndByte == BULLY_BP_SIZE_SMALL) { + } else if (o->oBhvParams2ndByte == BULLY_BP_SIZE_SMALL) { o->oForwardVel = 20.0; if (o->oTimer > 30) { o->oTimer = 0; @@ -151,7 +151,7 @@ void bully_play_stomping_sound(void) { switch (o->oAction) { case BULLY_ACT_PATROL: if (animFrame == 0 || animFrame == 12) { - if (o->oBehParams2ndByte == BULLY_BP_SIZE_SMALL) { + if (o->oBhvParams2ndByte == BULLY_BP_SIZE_SMALL) { cur_obj_play_sound_2(SOUND_OBJ_BULLY_WALK); } else { cur_obj_play_sound_2(SOUND_OBJ_BULLY_WALKING); @@ -162,7 +162,7 @@ void bully_play_stomping_sound(void) { case BULLY_ACT_CHASE_MARIO: case BULLY_ACT_BACK_UP: if (animFrame == 0 || animFrame == 5) { - if (o->oBehParams2ndByte == BULLY_BP_SIZE_SMALL) { + if (o->oBhvParams2ndByte == BULLY_BP_SIZE_SMALL) { cur_obj_play_sound_2(SOUND_OBJ_BULLY_WALK); } else { cur_obj_play_sound_2(SOUND_OBJ_BULLY_WALKING); @@ -200,7 +200,7 @@ void bully_spawn_coin(void) { void bully_act_level_death(void) { if (obj_lava_death() == TRUE) { - if (o->oBehParams2ndByte == BULLY_BP_SIZE_SMALL) { + if (o->oBhvParams2ndByte == BULLY_BP_SIZE_SMALL) { if (o->oBullySubtype == BULLY_STYPE_MINION) { o->parentObj->oBullyKBTimerAndMinionKOCounter++; } @@ -212,7 +212,7 @@ void bully_act_level_death(void) { spawn_default_star(130.0f, 1600.0f, -4335.0f); } else { spawn_default_star(0, 950.0f, -6800.0f); - spawn_object_abs_with_rot(o, 0, MODEL_NONE, bhvLllTumblingBridge, + spawn_object_abs_with_rot(o, 0, MODEL_NONE, bhvLLLTumblingBridge, 0, 154, -5631, 0, 0, 0); } } @@ -273,7 +273,7 @@ void big_bully_spawn_minion(s32 x, s32 y, s32 z, s16 yaw) { struct Object *bully = spawn_object_abs_with_rot(o, 0, MODEL_BULLY, bhvSmallBully, x, y, z, 0, yaw, 0); bully->oBullySubtype = BULLY_STYPE_MINION; - bully->oBehParams2ndByte = BULLY_BP_SIZE_SMALL; + bully->oBhvParams2ndByte = BULLY_BP_SIZE_SMALL; } void bhv_big_bully_with_minions_init(void) { diff --git a/src/game/behaviors/camera_lakitu.inc.c b/src/game/behaviors/camera_lakitu.inc.c index b3371198..2292e140 100644 --- a/src/game/behaviors/camera_lakitu.inc.c +++ b/src/game/behaviors/camera_lakitu.inc.c @@ -11,7 +11,7 @@ * Spawn cloud if not the intro lakitu. */ void bhv_camera_lakitu_init(void) { - if (o->oBehParams2ndByte != CAMERA_LAKITU_BP_FOLLOW_CAMERA) { + if (o->oBhvParams2ndByte != CAMERA_LAKITU_BP_FOLLOW_CAMERA) { // Despawn unless this is the very beginning of the game if (gNeverEnteredCastle != TRUE) { obj_mark_for_deletion(o); @@ -116,7 +116,7 @@ static void camera_lakitu_intro_act_show_dialog(void) { } } } - } else if (cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_UP, + } else if (cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_UP, DIALOG_FLAG_TURN_TO_MARIO, CUTSCENE_DIALOG, DIALOG_034)) { o->oCameraLakituFinishedDialog = TRUE; } @@ -140,7 +140,7 @@ void bhv_camera_lakitu_update(void) { if (!(o->activeFlags & ACTIVE_FLAG_IN_DIFFERENT_ROOM)) { obj_update_blinking(&o->oCameraLakituBlinkTimer, 20, 40, 4); - if (o->oBehParams2ndByte != CAMERA_LAKITU_BP_FOLLOW_CAMERA) { + if (o->oBhvParams2ndByte != CAMERA_LAKITU_BP_FOLLOW_CAMERA) { switch (o->oAction) { case CAMERA_LAKITU_INTRO_ACT_TRIGGER_CUTSCENE: camera_lakitu_intro_act_trigger_cutscene(); diff --git a/src/game/behaviors/cannon.inc.c b/src/game/behaviors/cannon.inc.c index 2b0dac0d..37a9cd00 100644 --- a/src/game/behaviors/cannon.inc.c +++ b/src/game/behaviors/cannon.inc.c @@ -11,9 +11,9 @@ void opened_cannon_act_0(void) { o->oPosY = o->oHomeY; o->oPosZ = o->oHomeZ; o->oMoveAnglePitch = 0; - o->oMoveAngleYaw = (s16)(o->oBehParams2ndByte << 8); + o->oMoveAngleYaw = (s16)(o->oBhvParams2ndByte << 8); o->oCannonUnkF4 = 0; - o->oCannonUnk10C = 0; + o->oCannonUnk10C = FALSE; cur_obj_enable_rendering(); cur_obj_become_tangible(); } @@ -21,10 +21,10 @@ void opened_cannon_act_0(void) { if (o->oDistanceToMario < 500.0f) { cur_obj_become_tangible(); cur_obj_enable_rendering(); - if (o->oInteractStatus & INT_STATUS_INTERACTED + if ((o->oInteractStatus & INT_STATUS_INTERACTED) && !(o->oInteractStatus & INT_STATUS_TOUCHED_BOB_OMB)) { // bob-omb explodes when it gets into a cannon o->oAction = 4; - o->oCannonUnk10C = 1; + o->oCannonUnk10C = TRUE; o->oCannonUnkF8 = 1; } else { o->oInteractStatus = 0; @@ -32,7 +32,7 @@ void opened_cannon_act_0(void) { } else { cur_obj_become_intangible(); cur_obj_disable_rendering(); - o->oCannonUnk10C = 0; + o->oCannonUnk10C = FALSE; } } @@ -65,7 +65,7 @@ void opened_cannon_act_6(void) { } else { if (o->oTimer < 22) { o->oMoveAngleYaw = - sins(o->oCannonUnkF4) * 0x4000 + ((s16)(o->oBehParams2ndByte << 8)); + sins(o->oCannonUnkF4) * 0x4000 + ((s16)(o->oBhvParams2ndByte << 8)); o->oCannonUnkF4 += 0x400; } else if (o->oTimer < 26) { } else { @@ -99,7 +99,7 @@ void opened_cannon_act_1(void) { cur_obj_become_intangible(); cur_obj_disable_rendering(); - o->oCannonUnk10C = 0; + o->oCannonUnk10C = FALSE; gMarioShotFromCannon = TRUE; } @@ -127,7 +127,7 @@ void (*sOpenedCannonActions[])(void) = { void bhv_cannon_base_loop(void) { cur_obj_call_action_function(sOpenedCannonActions); - if (o->oCannonUnkF8) { + if (o->oCannonUnkF8 != 0) { o->oCannonUnkF8++; } diff --git a/src/game/behaviors/cannon_door.inc.c b/src/game/behaviors/cannon_door.inc.c index 52ab3e86..4407e7a4 100644 --- a/src/game/behaviors/cannon_door.inc.c +++ b/src/game/behaviors/cannon_door.inc.c @@ -5,7 +5,7 @@ void bhv_cannon_closed_init(void) { // If the cannon is open, spawn a cannon and despawn the object. struct Object *cannon = spawn_object(o, MODEL_CANNON_BASE, bhvCannon); - cannon->oBehParams2ndByte = o->oBehParams2ndByte; + cannon->oBhvParams2ndByte = o->oBhvParams2ndByte; cannon->oPosX = o->oHomeX; cannon->oPosY = o->oHomeY; cannon->oPosZ = o->oHomeZ; diff --git a/src/game/behaviors/capswitch.inc.c b/src/game/behaviors/capswitch.inc.c index aecde91d..39c983a5 100644 --- a/src/game/behaviors/capswitch.inc.c +++ b/src/game/behaviors/capswitch.inc.c @@ -3,14 +3,14 @@ UNUSED u8 sCapSwitchText[] = { DIALOG_010, DIALOG_011, DIALOG_012 }; void cap_switch_act_0(void) { - o->oAnimState = o->oBehParams2ndByte; + o->oAnimState = o->oBhvParams2ndByte; 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) { - if (save_file_get_flags() & sCapSaveFlags[o->oBehParams2ndByte]) { + if (save_file_get_flags() & sCapSaveFlags[o->oBhvParams2ndByte]) { o->oAction = 3; o->header.gfx.scale[1] = 0.1f; } else { @@ -23,7 +23,7 @@ void cap_switch_act_0(void) { void cap_switch_act_1(void) { if (cur_obj_is_mario_on_platform()) { - save_file_set_flags(sCapSaveFlags[o->oBehParams2ndByte]); + save_file_set_flags(sCapSaveFlags[o->oBhvParams2ndByte]); o->oAction = 2; cur_obj_play_sound_2(SOUND_GENERAL_ACTIVATE_CAP_SWITCH); } @@ -35,16 +35,16 @@ void cap_switch_act_2(void) { if (o->oTimer == 4) { cur_obj_shake_screen(SHAKE_POS_SMALL); spawn_mist_particles(); - spawn_triangle_break_particles(60, MODEL_CARTOON_STAR, 0.3f, o->oBehParams2ndByte); + spawn_triangle_break_particles(60, MODEL_CARTOON_STAR, 0.3f, o->oBhvParams2ndByte); #if ENABLE_RUMBLE queue_rumble_data(5, 80); #endif } } else { //! Neither of these flags are defined in this function so they do nothing. - // On an extra note, there's a specific check for this cutscene and + // On an extra note, there's a specific check for this cutscene and // there's no dialog defined since the cutscene itself calls the dialog. - s32 dialogResponse = cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_FRONT, + s32 dialogResponse = cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_FRONT, (DIALOG_FLAG_TEXT_RESPONSE | DIALOG_FLAG_UNK_CAPSWITCH), CUTSCENE_CAP_SWITCH_PRESS, 0); if (dialogResponse) { o->oAction = 3; diff --git a/src/game/behaviors/chain_chomp.inc.c b/src/game/behaviors/chain_chomp.inc.c index 54c136c9..a7189513 100644 --- a/src/game/behaviors/chain_chomp.inc.c +++ b/src/game/behaviors/chain_chomp.inc.c @@ -30,8 +30,8 @@ static struct ObjectHitbox sChainChompHitbox = { void bhv_chain_chomp_chain_part_update(void) { if (o->parentObj->oAction == CHAIN_CHOMP_ACT_UNLOAD_CHAIN) { obj_mark_for_deletion(o); - } else if (o->oBehParams2ndByte != CHAIN_CHOMP_CHAIN_PART_BP_PIVOT) { - struct ChainSegment *segment = &o->parentObj->oChainChompSegments[o->oBehParams2ndByte]; + } else if (o->oBhvParams2ndByte != CHAIN_CHOMP_CHAIN_PART_BP_PIVOT) { + struct ChainSegment *segment = &o->parentObj->oChainChompSegments[o->oBhvParams2ndByte]; // Set position relative to the pivot o->oPosX = o->parentObj->parentObj->oPosX + segment->posX; @@ -256,7 +256,7 @@ static void chain_chomp_released_trigger_cutscene(void) { //! Can delay this if we get into a cutscene-unfriendly action after the // last post ground pound and before this - if (set_mario_npc_dialog(MARIO_DIALOG_LOOK_UP) == MARIO_DIALOG_STATUS_SPEAK + if (set_mario_npc_dialog(MARIO_DIALOG_LOOK_UP) == MARIO_DIALOG_STATUS_SPEAK && (o->oMoveFlags & OBJ_MOVE_MASK_ON_GROUND) && cutscene_object(CUTSCENE_STAR_SPAWN, o) == 1) { o->oChainChompReleaseStatus = CHAIN_CHOMP_RELEASED_LUNGE_AROUND; o->oTimer = 0; @@ -503,7 +503,7 @@ void bhv_wooden_post_update(void) { if (o->oWoodenPostOffsetY != 0.0f) { o->oPosY = o->oHomeY + o->oWoodenPostOffsetY; - } else if (!(o->oBehParams & WOODEN_POST_BP_NO_COINS_MASK)) { + } else if (!(o->oBhvParams & WOODEN_POST_BP_NO_COINS_MASK)) { // Reset the timer once mario is far enough if (o->oDistanceToMario > 400.0f) { o->oTimer = o->oWoodenPostTotalMarioAngle = 0; @@ -535,7 +535,7 @@ void bhv_chain_chomp_gate_update(void) { if (o->parentObj->oChainChompHitGate) { spawn_mist_particles_with_sound(SOUND_GENERAL_WALL_EXPLOSION); set_camera_shake_from_point(SHAKE_POS_SMALL, o->oPosX, o->oPosY, o->oPosZ); - spawn_mist_particles_variable(0, 0x7F, 200.0f); + spawn_mist_particles_variable(0, 127, 200.0f); spawn_triangle_break_particles(30, MODEL_DIRT_ANIMATION, 3.0f, 4); obj_mark_for_deletion(o); } diff --git a/src/game/behaviors/checkerboard_platform.inc.c b/src/game/behaviors/checkerboard_platform.inc.c index bfba5f0a..4b1bd40b 100644 --- a/src/game/behaviors/checkerboard_platform.inc.c +++ b/src/game/behaviors/checkerboard_platform.inc.c @@ -18,14 +18,14 @@ void bhv_checkerboard_elevator_group_init(void) { s32 i; struct Object *sp2C; - if (o->oBehParams2ndByte == 0) { - o->oBehParams2ndByte = 65; + if (o->oBhvParams2ndByte == 0) { + o->oBhvParams2ndByte = 65; } - sp3C = o->oBehParams2ndByte * 10; - sp34 = (o->oBehParams >> 24) & 0xFF; + sp3C = o->oBhvParams2ndByte * 10; + sp34 = (o->oBhvParams >> 24) & 0xFF; - for (i = 0; i < 2; i++) { + for (i = 0; i <= 1; i++) { if (i == 0) { sp38 = -D_8032F754[sp34].unk0; } else { @@ -59,7 +59,7 @@ void checkerboard_plat_act_rotate(s32 a0, s16 a1) { } void bhv_checkerboard_platform_init(void) { - o->oCheckerBoardPlatformUnkFC = o->parentObj->oBehParams2ndByte; + o->oCheckerBoardPlatformUnkFC = o->parentObj->oBhvParams2ndByte; } void bhv_checkerboard_platform_loop(void) { @@ -73,7 +73,7 @@ void bhv_checkerboard_platform_loop(void) { switch (o->oAction) { case 0: - if (o->oBehParams2ndByte == 0) { + if (o->oBhvParams2ndByte == 0) { o->oAction = 1; } else { o->oAction = 3; diff --git a/src/game/behaviors/chuckya.inc.c b/src/game/behaviors/chuckya.inc.c index 6cc87f42..fe625b6e 100644 --- a/src/game/behaviors/chuckya.inc.c +++ b/src/game/behaviors/chuckya.inc.c @@ -8,9 +8,9 @@ struct UnusedChuckyaData { struct UnusedChuckyaData sUnusedChuckyaData[] = { { 2, 0.f, 1.f }, - { 2, 10.f, 1.f }, - { 2, 20.f, 1.f }, - { 2, 20.f, 1.f }, + { 2, 10.f, 1.f }, + { 2, 20.f, 1.f }, + { 2, 20.f, 1.f }, { 8, 10.f, 1.f }, }; @@ -102,11 +102,11 @@ s32 approach_forward_vel(f32 *forwardVel, f32 spC, f32 sp10) { void chuckya_act_0(void) { s32 sp3C; + UNUSED u8 filler[16]; + s32 sp28; #ifdef AVOID_UB sp3C = 0; #endif - UNUSED u8 filler[16]; - s32 sp28; if (o->oTimer == 0) { o->oChuckyaUnkFC = 0; diff --git a/src/game/behaviors/cloud.inc.c b/src/game/behaviors/cloud.inc.c index 0efc7806..05300544 100644 --- a/src/game/behaviors/cloud.inc.c +++ b/src/game/behaviors/cloud.inc.c @@ -22,7 +22,7 @@ static void cloud_act_spawn_parts(void) { s32 i; // Spawn the pieces of the cloud itself - for (i = 0; i < 5; i++) { + for (i = 0; i <= 4; i++) { cloudPart = spawn_object_relative(i, 0, 0, 0, o, MODEL_MIST, bhvCloudPart); if (cloudPart != NULL) { @@ -30,7 +30,7 @@ static void cloud_act_spawn_parts(void) { } } - if (o->oBehParams2ndByte == CLOUD_BP_FWOOSH) { + if (o->oBhvParams2ndByte == CLOUD_BP_FWOOSH) { // Spawn fwoosh's face spawn_object_relative(5, 0, 0, 0, o, MODEL_FWOOSH, bhvCloudPart); @@ -117,7 +117,7 @@ static void cloud_act_main(void) { o->oMoveAngleYaw = o->parentObj->oFaceAngleYaw; } - } else if (o->oBehParams2ndByte != CLOUD_BP_FWOOSH) { + } else if (o->oBhvParams2ndByte != CLOUD_BP_FWOOSH) { // This code should never run, since a lakitu cloud should always have // a parent if (o->oDistanceToMario > 1500.0f) { @@ -138,7 +138,7 @@ static void cloud_act_main(void) { * This action informs the cloud parts to despawn. */ static void cloud_act_unload(void) { - if (o->oBehParams2ndByte != CLOUD_BP_FWOOSH) { + if (o->oBhvParams2ndByte != CLOUD_BP_FWOOSH) { obj_mark_for_deletion(o); } else { o->oAction = CLOUD_ACT_FWOOSH_HIDDEN; @@ -175,10 +175,10 @@ void bhv_cloud_part_update(void) { obj_mark_for_deletion(o); } else { f32 scale = 2.0f / 3.0f * o->parentObj->header.gfx.scale[0]; - s16 angleFromCenter = o->parentObj->oFaceAngleYaw + 0x10000 / 5 * o->oBehParams2ndByte; + s16 angleFromCenter = o->parentObj->oFaceAngleYaw + 0x10000 / 5 * o->oBhvParams2ndByte; // Takes 32 frames to cycle - s16 localOffsetPhase = 0x800 * gGlobalTimer + 0x4000 * o->oBehParams2ndByte; + s16 localOffsetPhase = 0x800 * gGlobalTimer + 0x4000 * o->oBhvParams2ndByte; f32 localOffset; f32 cloudRadius; @@ -186,7 +186,7 @@ void bhv_cloud_part_update(void) { cur_obj_scale(scale); // Cap fwoosh's face size - if (o->oBehParams2ndByte == 5 && scale > 2.0f) { + if (o->oBhvParams2ndByte == 5 && scale > 2.0f) { scale = o->header.gfx.scale[1] = 2.0f; } @@ -198,7 +198,7 @@ void bhv_cloud_part_update(void) { o->oPosX = o->parentObj->oCloudCenterX + cloudRadius * sins(angleFromCenter) + localOffset; o->oPosY = - o->parentObj->oCloudCenterY + localOffset + scale * sCloudPartHeights[o->oBehParams2ndByte]; + o->parentObj->oCloudCenterY + localOffset + scale * sCloudPartHeights[o->oBhvParams2ndByte]; o->oPosZ = o->parentObj->oPosZ + cloudRadius * coss(angleFromCenter) + localOffset; diff --git a/src/game/behaviors/coffin.inc.c b/src/game/behaviors/coffin.inc.c index d675fdcd..32835287 100644 --- a/src/game/behaviors/coffin.inc.c +++ b/src/game/behaviors/coffin.inc.c @@ -63,7 +63,7 @@ void bhv_coffin_spawner_loop(void) { * Also controls laying the coffin down after it has stood up. */ void coffin_act_idle(void) { - if (o->oBehParams2ndByte != COFFIN_BP_STATIC) { + if (o->oBhvParams2ndByte != COFFIN_BP_STATIC) { // Lay down if standing if (o->oFaceAnglePitch != 0) { o->oAngleVelPitch = approach_s16_symmetric(o->oAngleVelPitch, -2000, 200); diff --git a/src/game/behaviors/coin.inc.c b/src/game/behaviors/coin.inc.c index bbd07fcd..ee85eb66 100644 --- a/src/game/behaviors/coin.inc.c +++ b/src/game/behaviors/coin.inc.c @@ -12,17 +12,6 @@ struct ObjectHitbox sYellowCoinHitbox = { /* hurtboxHeight: */ 0, }; -s16 sCoinArrowPositions[][2] = { - { 0, -150 }, - { 0, -50 }, - { 0, 50 }, - { 0, 150 }, - { -50, 100 }, - { -100, 50 }, - { 50, 100 }, - { 100, 50 }, -}; - s32 bhv_coin_sparkles_init(void) { if (o->oInteractStatus & INT_STATUS_INTERACTED && !(o->oInteractStatus & INT_STATUS_TOUCHED_BOB_OMB)) { @@ -66,8 +55,8 @@ void bhv_temp_coin_loop(void) { bhv_coin_sparkles_init(); } -void bhv_coin_init(void) { - o->oVelY = random_float() * 10.0f + 30 + o->oCoinUnk110; +void bhv_spawned_coin_init(void) { + o->oVelY = random_float() * 10.0f + 30.0f + o->oCoinBaseVelY; o->oForwardVel = random_float() * 10.0f; o->oMoveAngleYaw = random_u16(); @@ -76,21 +65,21 @@ void bhv_coin_init(void) { cur_obj_become_intangible(); } -void bhv_coin_loop(void) { - struct Surface *sp1C; +void bhv_spawned_coin_loop(void) { + struct Surface *floor; cur_obj_update_floor_and_walls(); cur_obj_if_hit_wall_bounce_away(); cur_obj_move_standard(-62); - if ((sp1C = o->oFloor) != NULL) { + if ((floor = o->oFloor) != NULL) { if (o->oMoveFlags & OBJ_MOVE_ON_GROUND) { o->oSubAction = 1; } if (o->oSubAction == 1) { o->oBounciness = 0; - if (sp1C->normal.y < 0.9) { - s16 sp1A = atan2s(sp1C->normal.z, sp1C->normal.x); + if (floor->normal.y < 0.9) { + s16 sp1A = atan2s(floor->normal.z, floor->normal.x); cur_obj_rotate_yaw_toward(sp1A, 0x400); } } @@ -100,7 +89,7 @@ void bhv_coin_loop(void) { cur_obj_play_sound_2(SOUND_GENERAL_COIN_SPURT); } - if (o->oVelY < 0) { + if (o->oVelY < 0.0f) { cur_obj_become_tangible(); } @@ -117,12 +106,12 @@ void bhv_coin_loop(void) { if (o->oMoveFlags & OBJ_MOVE_BOUNCE) { #ifndef VERSION_JP - if (o->oCoinUnk1B0 < 5) { + if (o->oCoinNumBounceSoundPlayed < 5) { +#endif cur_obj_play_sound_2(SOUND_GENERAL_COIN_DROP); +#ifndef VERSION_JP } - o->oCoinUnk1B0++; -#else - cur_obj_play_sound_2(SOUND_GENERAL_COIN_DROP); + o->oCoinNumBounceSoundPlayed++; #endif } @@ -139,7 +128,7 @@ void bhv_coin_formation_spawn_loop(void) { obj_set_hitbox(o, &sYellowCoinHitbox); bhv_init_room(); - if (o->oCoinUnkF8) { + if (o->oCoinOnGround) { o->oPosY += 300.0f; cur_obj_update_floor_height(); @@ -157,94 +146,110 @@ void bhv_coin_formation_spawn_loop(void) { } } else { if (bhv_coin_sparkles_init()) { - o->parentObj->oCoinUnkF4 |= bit_shift_left(o->oBehParams2ndByte); + o->parentObj->oCoinCollectedFlags |= bit_shift_left(o->oBhvParams2ndByte); } o->oAnimState++; } - if (o->parentObj->oAction == 2) { + if (o->parentObj->oAction == COIN_FORMATION_ACT_RESPAWN_COINS) { obj_mark_for_deletion(o); } } -void spawn_coin_in_formation(s32 sp50, s32 sp54) { - struct Object *sp4C; - Vec3i sp40; - s32 sp3C = 1; - s32 sp38 = 1; +s16 sCoinArrowPositions[][2] = { + { 0, -150 }, + { 0, -50 }, + { 0, 50 }, + { 0, 150 }, + { -50, 100 }, + { -100, 50 }, + { 50, 100 }, + { 100, 50 }, +}; - sp40[0] = sp40[1] = sp40[2] = 0; +void spawn_coin_in_formation(s32 coinIndex, s32 coinFormationFlags) { + struct Object *coinSpawner; + Vec3i pos; + s32 setSpawner = TRUE; + s32 onGround = TRUE; - switch (sp54 & 7) { - case 0: - sp40[2] = 160 * (sp50 - 2); - if (sp50 > 4) { - sp3C = 0; + pos[0] = pos[1] = pos[2] = 0; + + switch (coinFormationFlags & COIN_FORMATION_BP_FLAG_MASK) { + case COIN_FORMATION_BP_LINE_HORIZONTAL: + pos[2] = 160 * (coinIndex - 2); + if (coinIndex > 4) { + setSpawner = FALSE; } break; - case 1: - sp38 = 0; - sp40[1] = 160 * sp50 * 0.8; // 128 * sp50 - if (sp50 > 4) { - sp3C = 0; + + case COIN_FORMATION_BP_LINE_VERTICAL: + onGround = FALSE; + pos[1] = 160 * coinIndex * 0.8; // 128 * coinIndex + if (coinIndex > 4) { + setSpawner = FALSE; } break; - case 2: - sp40[0] = sins(sp50 << 13) * 300.0f; - sp40[2] = coss(sp50 << 13) * 300.0f; + + case COIN_FORMATION_BP_RING_HORIZONTAL: + pos[0] = sins(coinIndex << 13) * 300.0f; + pos[2] = coss(coinIndex << 13) * 300.0f; break; - case 3: - sp38 = 0; - sp40[0] = coss(sp50 << 13) * 200.0f; - sp40[1] = sins(sp50 << 13) * 200.0f + 200.0f; + + case COIN_FORMATION_BP_RING_VERTICAL: + onGround = FALSE; + pos[0] = coss(coinIndex << 13) * 200.0f; + pos[1] = sins(coinIndex << 13) * 200.0f + 200.0f; break; - case 4: - sp40[0] = sCoinArrowPositions[sp50][0]; - sp40[2] = sCoinArrowPositions[sp50][1]; + + case COIN_FORMATION_BP_ARROW: + pos[0] = sCoinArrowPositions[coinIndex][0]; + pos[2] = sCoinArrowPositions[coinIndex][1]; break; } - if (sp54 & 0x10) { - sp38 = 0; + if (coinFormationFlags & COIN_FORMATION_BP_FLAG_FLYING) { + onGround = FALSE; } - if (sp3C) { - sp4C = spawn_object_relative(sp50, sp40[0], sp40[1], sp40[2], o, MODEL_YELLOW_COIN, - bhvCoinFormationSpawn); - sp4C->oCoinUnkF8 = sp38; + if (setSpawner) { + coinSpawner = spawn_object_relative(coinIndex, pos[0], pos[1], pos[2], o, + MODEL_YELLOW_COIN, bhvCoinFormationSpawn); + coinSpawner->oCoinOnGround = onGround; } } void bhv_coin_formation_init(void) { - o->oCoinUnkF4 = (o->oBehParams >> 8) & 0xFF; + o->oCoinCollectedFlags = (o->oBhvParams >> 8) & 0xFF; } void bhv_coin_formation_loop(void) { - s32 bitIndex; + s32 coinIndex; switch (o->oAction) { - case 0: + case COIN_FORMATION_ACT_SPAWN_COINS: if (o->oDistanceToMario < 2000.0f) { - for (bitIndex = 0; bitIndex < 8; bitIndex++) { - if (!(o->oCoinUnkF4 & (1 << bitIndex))) { - spawn_coin_in_formation(bitIndex, o->oBehParams2ndByte); + for (coinIndex = 0; coinIndex <= 7; coinIndex++) { + if (!(o->oCoinCollectedFlags & (1 << coinIndex))) { + spawn_coin_in_formation(coinIndex, o->oBhvParams2ndByte); } } o->oAction++; } break; - case 1: + + case COIN_FORMATION_ACT_IDLE: if (o->oDistanceToMario > 2100.0f) { o->oAction++; } break; - case 2: - o->oAction = 0; + + case COIN_FORMATION_ACT_RESPAWN_COINS: + o->oAction = COIN_FORMATION_ACT_SPAWN_COINS; break; } - // Casting to u8 doesn't seem to match - set_object_respawn_info_bits(o, o->oCoinUnkF4 & 0xFF); + set_object_respawn_info_bits(o, o->oCoinCollectedFlags & 0xFF); } void coin_inside_boo_act_1(void) { @@ -311,11 +316,11 @@ void bhv_coin_sparkles_loop(void) { } void bhv_golden_coin_sparkles_loop(void) { - struct Object *sp2C; + struct Object *sparkles; UNUSED u8 filler[4]; f32 sp24 = 30.0f; - sp2C = spawn_object(o, MODEL_SPARKLES, bhvCoinSparkles); - sp2C->oPosX += random_float() * sp24 - sp24 / 2; - sp2C->oPosZ += random_float() * sp24 - sp24 / 2; + sparkles = spawn_object(o, MODEL_SPARKLES, bhvCoinSparkles); + sparkles->oPosX += random_float() * sp24 - sp24 / 2; + sparkles->oPosZ += random_float() * sp24 - sp24 / 2; } diff --git a/src/game/behaviors/controllable_platform.inc.c b/src/game/behaviors/controllable_platform.inc.c index ae03dc8a..f8b70745 100644 --- a/src/game/behaviors/controllable_platform.inc.c +++ b/src/game/behaviors/controllable_platform.inc.c @@ -11,7 +11,7 @@ void controllable_platform_act_1(void) { } void controllable_platform_act_2(void) { - if (o->oBehParams2ndByte == D_80331694) { + if (o->oBhvParams2ndByte == D_80331694) { return; } @@ -30,8 +30,8 @@ void bhv_controllable_platform_sub_loop(void) { } if (gMarioObject->platform == o) { - D_80331694 = o->oBehParams2ndByte; -#ifdef VERSION_SH + D_80331694 = o->oBhvParams2ndByte; +#if defined(VERSION_SH) || defined(VERSION_CN) o->parentObj->header.gfx.node.flags &= ~GRAPH_RENDER_INVISIBLE; #endif o->oAction = 1; @@ -61,16 +61,16 @@ void bhv_controllable_platform_init(void) { sp34 = spawn_object_rel_with_rot(o, MODEL_HMC_METAL_ARROW_PLATFORM, bhvControllablePlatformSub, 0, 51, 204, 0, 0, 0); - sp34->oBehParams2ndByte = 1; + sp34->oBhvParams2ndByte = 1; sp34 = spawn_object_rel_with_rot(o, MODEL_HMC_METAL_ARROW_PLATFORM, bhvControllablePlatformSub, 0, 51, -204, 0, -0x8000, 0); - sp34->oBehParams2ndByte = 2; + sp34->oBhvParams2ndByte = 2; sp34 = spawn_object_rel_with_rot(o, MODEL_HMC_METAL_ARROW_PLATFORM, bhvControllablePlatformSub, 204, 51, 0, 0, 0x4000, 0); - sp34->oBehParams2ndByte = 3; + sp34->oBhvParams2ndByte = 3; sp34 = spawn_object_rel_with_rot(o, MODEL_HMC_METAL_ARROW_PLATFORM, bhvControllablePlatformSub, -204, 51, 0, 0, -0x4000, 0); - sp34->oBehParams2ndByte = 4; + sp34->oBhvParams2ndByte = 4; D_80331694 = 0; diff --git a/src/game/behaviors/corkbox.inc.c b/src/game/behaviors/corkbox.inc.c index df2d7955..febecdc6 100644 --- a/src/game/behaviors/corkbox.inc.c +++ b/src/game/behaviors/corkbox.inc.c @@ -43,7 +43,7 @@ void bhv_respawner_loop(void) { if (!is_point_within_radius_of_mario(o->oPosX, o->oPosY, o->oPosZ, o->oRespawnerMinSpawnDist)) { struct Object *spawnedObject = spawn_object(o, o->oRespawnerModelToRespawn, o->oRespawnerBehaviorToRespawn); - spawnedObject->oBehParams = o->oBehParams; + spawnedObject->oBhvParams = o->oBhvParams; o->activeFlags = ACTIVE_FLAG_DEACTIVATED; } } @@ -51,7 +51,7 @@ void bhv_respawner_loop(void) { void create_respawner(s32 model, const BehaviorScript *behToSpawn, s32 minSpawnDist) { struct Object *respawner = spawn_object_abs_with_rot(o, 0, MODEL_NONE, bhvRespawner, o->oHomeX, o->oHomeY, o->oHomeZ, 0, 0, 0); - respawner->oBehParams = o->oBehParams; + respawner->oBhvParams = o->oBhvParams; respawner->oRespawnerModelToRespawn = model; respawner->oRespawnerMinSpawnDist = minSpawnDist; respawner->oRespawnerBehaviorToRespawn = behToSpawn; diff --git a/src/game/behaviors/cruiser.inc.c b/src/game/behaviors/cruiser.inc.c index 71b22c03..d56b87b1 100644 --- a/src/game/behaviors/cruiser.inc.c +++ b/src/game/behaviors/cruiser.inc.c @@ -6,7 +6,7 @@ void bhv_rr_cruiser_wing_init(void) { } void bhv_rr_cruiser_wing_loop(void) { - if (o->oBehParams2ndByte == 0) { + if (o->oBhvParams2ndByte == 0) { o->oFaceAngleYaw = o->oRRCruiserWingUnkF4 + sins(o->oTimer * 0x400) * 8192.0f; o->oFaceAnglePitch = o->oRRCruiserWingUnkF8 + coss(o->oTimer * 0x400) * 2048.0f; } else { diff --git a/src/game/behaviors/ddd_pole.inc.c b/src/game/behaviors/ddd_pole.inc.c index 86e5312a..d465f08d 100644 --- a/src/game/behaviors/ddd_pole.inc.c +++ b/src/game/behaviors/ddd_pole.inc.c @@ -5,7 +5,7 @@ void bhv_ddd_pole_init(void) { obj_mark_for_deletion(o); } else { o->hitboxDownOffset = 100.0f; - o->oDDDPoleMaxOffset = 100.0f * o->oBehParams2ndByte; + o->oDDDPoleMaxOffset = 100.0f * o->oBhvParams2ndByte; } } diff --git a/src/game/behaviors/ddd_warp.inc.c b/src/game/behaviors/ddd_warp.inc.c index 15b00be4..5e97435a 100644 --- a/src/game/behaviors/ddd_warp.inc.c +++ b/src/game/behaviors/ddd_warp.inc.c @@ -1,7 +1,7 @@ // ddd_warp.inc.c void bhv_ddd_warp_loop(void) { - if (gDddPaintingStatus & 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/donut_platform.inc.c b/src/game/behaviors/donut_platform.inc.c index 4c0eefc5..844ce24b 100644 --- a/src/game/behaviors/donut_platform.inc.c +++ b/src/game/behaviors/donut_platform.inc.c @@ -41,7 +41,7 @@ void bhv_donut_platform_update(void) { if (o->oTimer != 0 && ((o->oMoveFlags & OBJ_MOVE_MASK_ON_GROUND) || o->oDistanceToMario > 2500.0f)) { o->parentObj->oDonutPlatformSpawnerSpawnedPlatforms = o->parentObj->oDonutPlatformSpawnerSpawnedPlatforms - & ((1 << o->oBehParams2ndByte) ^ 0xFFFFFFFF); + & ((1 << o->oBhvParams2ndByte) ^ 0xFFFFFFFF); if (o->oDistanceToMario > 2500.0f) { obj_mark_for_deletion(o); diff --git a/src/game/behaviors/dorrie.inc.c b/src/game/behaviors/dorrie.inc.c index 8919677b..89b24deb 100644 --- a/src/game/behaviors/dorrie.inc.c +++ b/src/game/behaviors/dorrie.inc.c @@ -65,7 +65,7 @@ void dorrie_act_lower_head(void) { if (o->oTimer > 150) { dorrie_begin_head_raise(FALSE); } else if (gMarioObject->platform == o) { - if (o->oDorrieForwardDistToMario > 830.0f + if (o->oDorrieForwardDistToMario > 830.0f && set_mario_npc_dialog(MARIO_DIALOG_LOOK_UP) == MARIO_DIALOG_STATUS_START) { dorrie_begin_head_raise(TRUE); } else if (o->oDorrieForwardDistToMario > 320.0f) { diff --git a/src/game/behaviors/drawbridge.inc.c b/src/game/behaviors/drawbridge.inc.c index 6630b6b5..cb47576c 100644 --- a/src/game/behaviors/drawbridge.inc.c +++ b/src/game/behaviors/drawbridge.inc.c @@ -3,12 +3,12 @@ void bhv_lll_drawbridge_spawner_loop(void) { struct Object *drawbridge1, *drawbridge2; - drawbridge1 = spawn_object(o, MODEL_LLL_DRAWBRIDGE_PART, bhvLllDrawbridge); + drawbridge1 = spawn_object(o, MODEL_LLL_DRAWBRIDGE_PART, bhvLLLDrawbridge); drawbridge1->oMoveAngleYaw = o->oMoveAngleYaw; drawbridge1->oPosX += coss(o->oMoveAngleYaw) * 640.0f; drawbridge1->oPosZ += sins(o->oMoveAngleYaw) * 640.0f; - drawbridge2 = spawn_object(o, MODEL_LLL_DRAWBRIDGE_PART, bhvLllDrawbridge); + drawbridge2 = spawn_object(o, MODEL_LLL_DRAWBRIDGE_PART, bhvLLLDrawbridge); drawbridge2->oMoveAngleYaw = o->oMoveAngleYaw + 0x8000; drawbridge2->oPosX += coss(o->oMoveAngleYaw) * -640.0f; drawbridge2->oPosZ += sins(o->oMoveAngleYaw) * -640.0f; diff --git a/src/game/behaviors/elevator.inc.c b/src/game/behaviors/elevator.inc.c index 7d2ec042..d7968edc 100644 --- a/src/game/behaviors/elevator.inc.c +++ b/src/game/behaviors/elevator.inc.c @@ -101,15 +101,15 @@ void elevator_act_3(void) { } void bhv_elevator_init(void) { - s32 sp1C = sElevatorHeights[o->oBehParams2ndByte * 3 + 2]; + s32 sp1C = sElevatorHeights[o->oBhvParams2ndByte * 3 + 2]; if (sp1C == 0) { - o->oElevatorUnkF4 = sElevatorHeights[o->oBehParams2ndByte * 3]; + o->oElevatorUnkF4 = sElevatorHeights[o->oBhvParams2ndByte * 3]; o->oElevatorUnkF8 = o->oHomeY; o->oElevatorUnkFC = (o->oElevatorUnkF4 + o->oElevatorUnkF8) / 2; - o->oElevatorUnk100 = cur_obj_has_behavior(bhvRrElevatorPlatform); + o->oElevatorUnk100 = cur_obj_has_behavior(bhvRRElevatorPlatform); } else { - o->oElevatorUnkF4 = sElevatorHeights[o->oBehParams2ndByte * 3]; - o->oElevatorUnkF8 = sElevatorHeights[o->oBehParams2ndByte * 3 + 1]; + o->oElevatorUnkF4 = sElevatorHeights[o->oBhvParams2ndByte * 3]; + o->oElevatorUnkF8 = sElevatorHeights[o->oBhvParams2ndByte * 3 + 1]; o->oElevatorUnkFC = (o->oElevatorUnkF4 + o->oElevatorUnkF8) / 2; o->oElevatorUnk100 = 2; } diff --git a/src/game/behaviors/exclamation_box.inc.c b/src/game/behaviors/exclamation_box.inc.c index bc664769..442c88f7 100644 --- a/src/game/behaviors/exclamation_box.inc.c +++ b/src/game/behaviors/exclamation_box.inc.c @@ -12,31 +12,31 @@ struct ObjectHitbox sExclamationBoxHitbox = { /* hurtboxHeight: */ 30, }; -struct Struct802C0DF0 { - u8 unk0; - u8 unk1; - u8 unk2; +struct ExclamationBoxContents { + u8 id; + u8 unused; + u8 bhvParams1stByte; u8 model; const BehaviorScript *behavior; }; -struct Struct802C0DF0 sExclamationBoxContents[] = { - { 0, 0, 0, MODEL_MARIOS_WING_CAP, bhvWingCap }, - { 1, 0, 0, MODEL_MARIOS_METAL_CAP, bhvMetalCap }, - { 2, 0, 0, MODEL_MARIOS_CAP, bhvVanishCap }, - { 3, 0, 0, MODEL_KOOPA_SHELL, bhvKoopaShell }, - { 4, 0, 0, MODEL_YELLOW_COIN, bhvSingleCoinGetsSpawned }, - { 5, 0, 0, MODEL_NONE, bhvThreeCoinsSpawn }, - { 6, 0, 0, MODEL_NONE, bhvTenCoinsSpawn }, - { 7, 0, 0, MODEL_1UP, bhv1upWalking }, - { 8, 0, 0, MODEL_STAR, bhvSpawnedStar }, - { 9, 0, 0, MODEL_1UP, bhv1upRunningAway }, - { 10, 0, 1, MODEL_STAR, bhvSpawnedStar }, - { 11, 0, 2, MODEL_STAR, bhvSpawnedStar }, - { 12, 0, 3, MODEL_STAR, bhvSpawnedStar }, - { 13, 0, 4, MODEL_STAR, bhvSpawnedStar }, - { 14, 0, 5, MODEL_STAR, bhvSpawnedStar }, - { 99, 0, 0, 0, NULL } +struct ExclamationBoxContents sExclamationBoxContents[] = { + { EXCLAMATION_BOX_BP_WING_CAP, 0, 0, MODEL_MARIOS_WING_CAP, bhvWingCap }, + { EXCLAMATION_BOX_BP_METAL_CAP, 0, 0, MODEL_MARIOS_METAL_CAP, bhvMetalCap }, + { EXCLAMATION_BOX_BP_VANISH_CAP, 0, 0, MODEL_MARIOS_CAP, bhvVanishCap }, + { EXCLAMATION_BOX_BP_KOOPA_SHELL, 0, 0, MODEL_KOOPA_SHELL, bhvKoopaShell }, + { EXCLAMATION_BOX_BP_ONE_COIN, 0, 0, MODEL_YELLOW_COIN, bhvSingleCoinGetsSpawned }, + { EXCLAMATION_BOX_BP_THREE_COINS, 0, 0, MODEL_NONE, bhvThreeCoinsSpawn }, + { EXCLAMATION_BOX_BP_TEN_COINS, 0, 0, MODEL_NONE, bhvTenCoinsSpawn }, + { EXCLAMATION_BOX_BP_1UP_WALKING, 0, 0, MODEL_1UP, bhv1UpWalking }, + { EXCLAMATION_BOX_BP_STAR_ACT_1, 0, STAR_INDEX_ACT_1, MODEL_STAR, bhvSpawnedStar }, + { EXCLAMATION_BOX_BP_1UP_RUNNING_AWAY, 0, 0, MODEL_1UP, bhv1UpRunningAway }, + { EXCLAMATION_BOX_BP_STAR_ACT_2, 0, STAR_INDEX_ACT_2, MODEL_STAR, bhvSpawnedStar }, + { EXCLAMATION_BOX_BP_STAR_ACT_3, 0, STAR_INDEX_ACT_3, MODEL_STAR, bhvSpawnedStar }, + { EXCLAMATION_BOX_BP_STAR_ACT_4, 0, STAR_INDEX_ACT_4, MODEL_STAR, bhvSpawnedStar }, + { EXCLAMATION_BOX_BP_STAR_ACT_5, 0, STAR_INDEX_ACT_5, MODEL_STAR, bhvSpawnedStar }, + { EXCLAMATION_BOX_BP_STAR_ACT_6, 0, STAR_INDEX_ACT_6, MODEL_STAR, bhvSpawnedStar }, + { EXCLAMATION_BOX_BP_END, 0, 0, MODEL_NONE, NULL }, }; void bhv_rotating_exclamation_box_loop(void) { @@ -46,28 +46,30 @@ void bhv_rotating_exclamation_box_loop(void) { } void exclamation_box_act_0(void) { - if (o->oBehParams2ndByte < 3) { - o->oAnimState = o->oBehParams2ndByte; - if ((save_file_get_flags() & sCapSaveFlags[o->oBehParams2ndByte]) - || ((o->oBehParams >> 24) & 0xFF)) { + if (o->oBhvParams2ndByte <= EXCLAMATION_BOX_BP_SPECIAL_CAP_END) { + o->oAnimState = o->oBhvParams2ndByte; + if ((save_file_get_flags() & sCapSaveFlags[o->oBhvParams2ndByte]) + || ((o->oBhvParams >> 24) & 0xFF)) { o->oAction = 2; } else { o->oAction = 1; } } else { - o->oAnimState = 3; + o->oAnimState = EXCLAMATION_BOX_ANIM_STATE_DEFAULT; o->oAction = 2; } } void exclamation_box_act_1(void) { cur_obj_become_intangible(); + if (o->oTimer == 0) { spawn_object(o, MODEL_EXCLAMATION_POINT, bhvRotatingExclamationMark); cur_obj_set_model(MODEL_EXCLAMATION_BOX_OUTLINE); } - if ((save_file_get_flags() & sCapSaveFlags[o->oBehParams2ndByte]) - || ((o->oBehParams >> 24) & 0xFF)) { + + if ((save_file_get_flags() & sCapSaveFlags[o->oBhvParams2ndByte]) + || ((o->oBhvParams >> 24) & 0xFF)) { o->oAction = 2; cur_obj_set_model(MODEL_EXCLAMATION_BOX); } @@ -75,6 +77,7 @@ void exclamation_box_act_1(void) { void exclamation_box_act_2(void) { obj_set_hitbox(o, &sExclamationBoxHitbox); + if (o->oTimer == 0) { cur_obj_unhide(); cur_obj_become_tangible(); @@ -82,6 +85,7 @@ void exclamation_box_act_2(void) { o->oPosY = o->oHomeY; o->oGraphYOffset = 0.0f; } + if (cur_obj_was_attacked_or_ground_pounded()) { cur_obj_become_intangible(); o->oExclamationBoxUnkFC = 0x4000; @@ -93,16 +97,20 @@ void exclamation_box_act_2(void) { queue_rumble_data(5, 80); #endif } + load_object_collision_model(); } void exclamation_box_act_3(void) { UNUSED u8 filler[4]; + cur_obj_move_using_fvel_and_gravity(); + if (o->oVelY < 0.0f) { o->oVelY = 0.0f; o->oGravity = 0.0f; } + o->oExclamationBoxUnkF8 = (sins(o->oExclamationBoxUnkFC) + 1.0) * 0.3 + 0.0; o->oExclamationBoxUnkF4 = (-sins(o->oExclamationBoxUnkFC) + 1.0) * 0.5 + 1.0; o->oGraphYOffset = (-sins(o->oExclamationBoxUnkFC) + 1.0) * 26.0; @@ -110,36 +118,38 @@ void exclamation_box_act_3(void) { o->header.gfx.scale[0] = o->oExclamationBoxUnkF4 * 2.0f; o->header.gfx.scale[1] = o->oExclamationBoxUnkF8 * 2.0f; o->header.gfx.scale[2] = o->oExclamationBoxUnkF4 * 2.0f; + if (o->oTimer == 7) { o->oAction = 4; } } -void exclamation_box_spawn_contents(struct Struct802C0DF0 *a0, u8 a1) { - struct Object *sp1C = NULL; +void exclamation_box_spawn_contents(struct ExclamationBoxContents *contents, u8 targetContentsID) { + struct Object *contentsObj = NULL; - while (a0->unk0 != 99) { - if (a1 == a0->unk0) { - sp1C = spawn_object(o, a0->model, a0->behavior); - sp1C->oVelY = 20.0f; - sp1C->oForwardVel = 3.0f; - sp1C->oMoveAngleYaw = gMarioObject->oMoveAngleYaw; - o->oBehParams |= a0->unk2 << 24; - if (a0->model == MODEL_STAR) { + while (contents->id != EXCLAMATION_BOX_BP_END) { + if (targetContentsID == contents->id) { + contentsObj = spawn_object(o, contents->model, contents->behavior); + contentsObj->oVelY = 20.0f; + contentsObj->oForwardVel = 3.0f; + contentsObj->oMoveAngleYaw = gMarioObject->oMoveAngleYaw; + o->oBhvParams |= contents->bhvParams1stByte << 24; + if (contents->model == MODEL_STAR) { o->oFlags |= OBJ_FLAG_PERSISTENT_RESPAWN; } break; } - a0++; + contents++; } } void exclamation_box_act_4(void) { - exclamation_box_spawn_contents(sExclamationBoxContents, o->oBehParams2ndByte); + exclamation_box_spawn_contents(sExclamationBoxContents, o->oBhvParams2ndByte); spawn_mist_particles_variable(0, 0, 46.0f); spawn_triangle_break_particles(20, MODEL_CARTOON_STAR, 0.3f, o->oAnimState); create_sound_spawner(SOUND_GENERAL_BREAK_BOX); - if (o->oBehParams2ndByte < 3) { + + if (o->oBhvParams2ndByte <= EXCLAMATION_BOX_BP_SPECIAL_CAP_END) { o->oAction = 5; cur_obj_hide(); } else { diff --git a/src/game/behaviors/eyerok.inc.c b/src/game/behaviors/eyerok.inc.c index 89799afd..341c6512 100644 --- a/src/game/behaviors/eyerok.inc.c +++ b/src/game/behaviors/eyerok.inc.c @@ -182,7 +182,7 @@ static void eyerok_hand_pound_ground(void) { static void eyerok_hand_act_sleep(void) { if (o->parentObj->oAction != EYEROK_BOSS_ACT_SLEEP - && ++o->oEyerokHandWakeUpTimer > -3 * o->oBehParams2ndByte) { + && ++o->oEyerokHandWakeUpTimer > -3 * o->oBhvParams2ndByte) { if (cur_obj_check_if_near_animation_end()) { o->parentObj->oEyerokBossNumHands++; o->oAction = EYEROK_HAND_ACT_IDLE; @@ -190,19 +190,19 @@ static void eyerok_hand_act_sleep(void) { } else { approach_f32_ptr(&o->oPosX, o->oHomeX, 15.0f); o->oPosY = o->oHomeY - + (200 * o->oBehParams2ndByte + 400) + + (200 * o->oBhvParams2ndByte + 400) * sins((s16)(absf(o->oPosX - o->oHomeX) / 724.0f * 0x8000)); obj_face_yaw_approach(o->oMoveAngleYaw, 400); } } else { - if (o->oBehParams2ndByte < 0) { + if (o->oBhvParams2ndByte < 0) { o->collisionData = segmented_to_virtual(&ssl_seg7_collision_070284B0); } else { o->collisionData = segmented_to_virtual(&ssl_seg7_collision_07028370); } cur_obj_reverse_animation(); - o->oPosX = o->oHomeX + 724.0f * o->oBehParams2ndByte; + o->oPosX = o->oHomeX + 724.0f * o->oBhvParams2ndByte; } } @@ -216,7 +216,7 @@ static void eyerok_hand_act_idle(void) { o->oGravity = 0.0f; } } else if (o->parentObj->oEyerokBossUnk1AC == 0 && o->parentObj->oEyerokBossActiveHand != 0) { - if (o->parentObj->oEyerokBossActiveHand == o->oBehParams2ndByte) { + if (o->parentObj->oEyerokBossActiveHand == o->oBhvParams2ndByte) { if (eyerok_check_mario_relative_z(400) || random_u16() % 2 != 0) { o->oAction = EYEROK_HAND_ACT_TARGET_MARIO; o->oMoveAngleYaw = o->oAngleToMario; @@ -242,7 +242,7 @@ static void eyerok_hand_act_idle(void) { } static void eyerok_hand_act_open(void) { - o->parentObj->oEyerokBossUnk1AC = o->oBehParams2ndByte; + o->parentObj->oEyerokBossUnk1AC = o->oBhvParams2ndByte; if (cur_obj_init_anim_and_check_if_end(4)) { o->oAction = EYEROK_HAND_ACT_SHOW_EYE; @@ -271,7 +271,7 @@ static void eyerok_hand_act_show_eye(void) { if (o->oAnimState < 3) { o->oAnimState++; } else if (cur_obj_check_if_near_animation_end()) { - UNUSED s16 val06 = (s16)(o->oAngleToMario - o->oFaceAngleYaw) * o->oBehParams2ndByte; + UNUSED s16 val06 = (s16)(o->oAngleToMario - o->oFaceAngleYaw) * o->oBhvParams2ndByte; o->oAction = EYEROK_HAND_ACT_CLOSE; } } else { @@ -303,7 +303,7 @@ static void eyerok_hand_act_close(void) { if (o->parentObj->oEyerokBossNumHands != 2) { o->oAction = EYEROK_HAND_ACT_RETREAT; - o->parentObj->oEyerokBossActiveHand = o->oBehParams2ndByte; + o->parentObj->oEyerokBossActiveHand = o->oBhvParams2ndByte; } else if (o->parentObj->oEyerokBossActiveHand == 0) { o->oAction = EYEROK_HAND_ACT_IDLE; o->parentObj->oEyerokBossUnk1AC = 0; @@ -331,7 +331,7 @@ static void eyerok_hand_act_recover(void) { static void eyerok_hand_act_become_active(void) { if (o->parentObj->oEyerokBossActiveHand == 0 || o->parentObj->oEyerokBossNumHands != 2) { o->oAction = EYEROK_HAND_ACT_RETREAT; - o->parentObj->oEyerokBossActiveHand = o->oBehParams2ndByte; + o->parentObj->oEyerokBossActiveHand = o->oBhvParams2ndByte; } } @@ -363,9 +363,9 @@ static void eyerok_hand_act_retreat(void) { if (approach_f32_ptr(&o->oPosY, o->oHomeY, 20.0f) && distToHome == 0.0f && o->oFaceAngleYaw == 0) { o->oAction = EYEROK_HAND_ACT_IDLE; - o->parentObj->oEyerokBossActiveHand -= o->oBehParams2ndByte; + o->parentObj->oEyerokBossActiveHand -= o->oBhvParams2ndByte; - if (o->parentObj->oEyerokBossUnk1AC == o->oBehParams2ndByte) { + if (o->parentObj->oEyerokBossUnk1AC == o->oBhvParams2ndByte) { o->parentObj->oEyerokBossUnk1AC = 0; } } @@ -439,12 +439,12 @@ static void eyerok_hand_act_fist_sweep(void) { static void eyerok_hand_act_begin_double_pound(void) { if (o->parentObj->oEyerokBossUnk104 < 0 - || o->parentObj->oEyerokBossActiveHand == o->oBehParams2ndByte) { + || o->parentObj->oEyerokBossActiveHand == o->oBhvParams2ndByte) { o->oAction = EYEROK_HAND_ACT_DOUBLE_POUND; o->oMoveAngleYaw = (s32)(o->oFaceAngleYaw - 0x4000 * o->parentObj->oEyerokBossUnk108); } else { f32 sp4 = o->parentObj->oPosX + 400.0f * o->parentObj->oEyerokBossUnk108 - - 180.0f * o->oBehParams2ndByte; + - 180.0f * o->oBhvParams2ndByte; o->oPosX = o->oHomeX + (sp4 - o->oHomeX) * o->parentObj->oEyerokBossUnk110; o->oPosY = o->oHomeY + 300.0f * o->parentObj->oEyerokBossUnk110; @@ -455,13 +455,13 @@ static void eyerok_hand_act_begin_double_pound(void) { static void eyerok_hand_act_double_pound(void) { if (o->parentObj->oEyerokBossNumHands != 2) { - o->parentObj->oEyerokBossActiveHand = o->oBehParams2ndByte; + o->parentObj->oEyerokBossActiveHand = o->oBhvParams2ndByte; } if (o->parentObj->oEyerokBossUnk104 == 1) { o->oAction = EYEROK_HAND_ACT_RETREAT; - o->parentObj->oEyerokBossUnk1AC = o->oBehParams2ndByte; - } else if (o->parentObj->oEyerokBossActiveHand == o->oBehParams2ndByte) { + o->parentObj->oEyerokBossUnk1AC = o->oBhvParams2ndByte; + } else if (o->parentObj->oEyerokBossActiveHand == o->oBhvParams2ndByte) { if (o->oMoveFlags & OBJ_MOVE_MASK_ON_GROUND) { if (o->oGravity < -15.0f) { o->parentObj->oEyerokBossActiveHand = 0; @@ -540,5 +540,5 @@ void bhv_eyerok_hand_loop(void) { } load_object_collision_model(); - o->header.gfx.scale[0] = 1.5f * o->oBehParams2ndByte; + o->header.gfx.scale[0] = 1.5f * o->oBhvParams2ndByte; } diff --git a/src/game/behaviors/falling_pillar.inc.c b/src/game/behaviors/falling_pillar.inc.c index 6d8fe380..9ebaad68 100644 --- a/src/game/behaviors/falling_pillar.inc.c +++ b/src/game/behaviors/falling_pillar.inc.c @@ -128,7 +128,7 @@ void bhv_falling_pillar_hitbox_loop(void) { f32 x = o->parentObj->oPosX; f32 y = o->parentObj->oPosY; f32 z = o->parentObj->oPosZ; - f32 yOffset = o->oBehParams2ndByte * 400 + 300; + f32 yOffset = o->oBhvParams2ndByte * 400 + 300; // Update position of hitboxes so they fall with the pillar. o->oPosX = sins(pitch) * sins(yaw) * yOffset + x; diff --git a/src/game/behaviors/falling_rising_platform.inc.c b/src/game/behaviors/falling_rising_platform.inc.c index 38dd7192..6616deed 100644 --- a/src/game/behaviors/falling_rising_platform.inc.c +++ b/src/game/behaviors/falling_rising_platform.inc.c @@ -1,14 +1,14 @@ // falling_rising_platform.inc.c void bhv_squishable_platform_loop(void) { - o->header.gfx.scale[1] = (sins(o->oBitfsPlatformTimer) + 1.0) * 0.3 + 0.4; - o->oBitfsPlatformTimer += 0x80; + o->header.gfx.scale[1] = (sins(o->oBitFSPlatformTimer) + 1.0) * 0.3 + 0.4; + o->oBitFSPlatformTimer += 0x80; } void bhv_bitfs_sinking_platform_loop(void) { //! f32 double conversion error accumulates on Wii VC causing the platform to rise up - o->oPosY -= sins(o->oBitfsPlatformTimer) * 0.58; - o->oBitfsPlatformTimer += 0x100; + o->oPosY -= sins(o->oBitFSPlatformTimer) * 0.58; + o->oBitFSPlatformTimer += 0x100; } // TODO: Named incorrectly. fix @@ -17,14 +17,14 @@ void bhv_ddd_moving_pole_loop(void) { } void bhv_bitfs_sinking_cage_platform_loop(void) { - if (o->oBehParams2ndByte != 0) { + if (o->oBhvParams2ndByte != 0) { if (o->oTimer == 0) { o->oPosY -= 300.0f; } - o->oPosY += sins(o->oBitfsPlatformTimer) * 7.0f; + o->oPosY += sins(o->oBitFSPlatformTimer) * 7.0f; } else { - o->oPosY -= sins(o->oBitfsPlatformTimer) * 3.0f; + o->oPosY -= sins(o->oBitFSPlatformTimer) * 3.0f; } - o->oBitfsPlatformTimer += 0x100; + o->oBitFSPlatformTimer += 0x100; } diff --git a/src/game/behaviors/ferris_wheel.inc.c b/src/game/behaviors/ferris_wheel.inc.c index 2fdaf047..2a98887d 100644 --- a/src/game/behaviors/ferris_wheel.inc.c +++ b/src/game/behaviors/ferris_wheel.inc.c @@ -32,16 +32,16 @@ void bhv_ferris_wheel_axle_init(void) { s32 i; o->collisionData = - segmented_to_virtual(sFerrisWheelProperties[o->oBehParams2ndByte].axleCollision); + segmented_to_virtual(sFerrisWheelProperties[o->oBhvParams2ndByte].axleCollision); for (i = 0; i < 4; i++) { platform = spawn_object_relative(i, 0, 0, 0, o, - sFerrisWheelProperties[o->oBehParams2ndByte].platformModel, + sFerrisWheelProperties[o->oBhvParams2ndByte].platformModel, bhvFerrisWheelPlatform); if (platform != NULL) { platform->collisionData = - segmented_to_virtual(sFerrisWheelProperties[o->oBehParams2ndByte].platformCollision); + segmented_to_virtual(sFerrisWheelProperties[o->oBhvParams2ndByte].platformCollision); } } } @@ -56,7 +56,7 @@ void bhv_ferris_wheel_platform_update(void) { obj_perform_position_op(POS_OP_SAVE_POSITION); - offsetAngle = o->parentObj->oFaceAngleRoll + o->oBehParams2ndByte * 0x4000; + offsetAngle = o->parentObj->oFaceAngleRoll + o->oBhvParams2ndByte * 0x4000; offsetXZ = 400.0f * coss(offsetAngle); o->oPosX = o->parentObj->oPosX + offsetXZ * sins(o->parentObj->oMoveAngleYaw) diff --git a/src/game/behaviors/fire_piranha_plant.inc.c b/src/game/behaviors/fire_piranha_plant.inc.c index be1ea9cb..1982b4ed 100644 --- a/src/game/behaviors/fire_piranha_plant.inc.c +++ b/src/game/behaviors/fire_piranha_plant.inc.c @@ -33,14 +33,14 @@ s32 sNumActiveFirePiranhaPlants; s32 sNumKilledFirePiranhaPlants; void bhv_fire_piranha_plant_init(void) { - o->oFirePiranhaPlantNeutralScale = D_80331B5C[(u16)(o->oBehParams >> 16)]; + o->oFirePiranhaPlantNeutralScale = D_80331B5C[(u16)(o->oBhvParams >> 16)]; obj_set_hitbox(o, &sFirePiranhaPlantHitbox); - if ((u16)(o->oBehParams >> 16) != 0) { + if ((u16)(o->oBhvParams >> 16) != 0) { o->oFlags |= OBJ_FLAG_PERSISTENT_RESPAWN; o->oHealth = 1; - if (o->oBehParams & 0x0000FF00) { + if (o->oBhvParams & 0x0000FF00) { o->oNumLootCoins = 0; } else { o->oNumLootCoins = 2; @@ -67,7 +67,7 @@ static void fire_piranha_plant_act_hide(void) { sNumActiveFirePiranhaPlants--; o->oFirePiranhaPlantActive = FALSE; - if ((u16)(o->oBehParams >> 16) != 0 && o->oHealth == 0) { + if ((u16)(o->oBhvParams >> 16) != 0 && o->oHealth == 0) { if (++sNumKilledFirePiranhaPlants == 5) { spawn_default_star(-6300.0f, -1850.0f, -6300.0f); } diff --git a/src/game/behaviors/fish.inc.c b/src/game/behaviors/fish.inc.c index 7ef29699..a4d8093c 100644 --- a/src/game/behaviors/fish.inc.c +++ b/src/game/behaviors/fish.inc.c @@ -5,8 +5,8 @@ */ /** - * Spawns fish with settings chosen by oBehParams2ndByte. - * These settings are animations, colour, and spawn quantity. + * Spawns fish with settings chosen by oBhvParams2ndByte. + * These settings are animations, color, and spawn quantity. */ static void fish_spawner_act_spawn(void) { s32 i; @@ -15,7 +15,7 @@ static void fish_spawner_act_spawn(void) { f32 minDistToMario; const struct Animation * const *fishAnimation; - switch (o->oBehParams2ndByte) { + switch (o->oBhvParams2ndByte) { // Cases need to be on one line to match with and without optimizations. case FISH_SPAWNER_BP_MANY_BLUE: model = MODEL_FISH; schoolQuantity = 20; minDistToMario = 1500.0f; fishAnimation = blue_fish_seg3_anims_0301C2B0; @@ -40,7 +40,7 @@ static void fish_spawner_act_spawn(void) { if (o->oDistanceToMario < minDistToMario || gCurrLevelNum == LEVEL_SA) { for (i = 0; i < schoolQuantity; i++) { struct Object *fishObject = spawn_object(o, model, bhvFish); - fishObject->oBehParams2ndByte = o->oBehParams2ndByte; + fishObject->oBhvParams2ndByte = o->oBhvParams2ndByte; obj_init_animation_with_sound(fishObject, fishAnimation, 0); obj_translate_xyz_random(fishObject, 700.0f); } @@ -81,7 +81,7 @@ void bhv_fish_spawner_loop(void) { static void fish_vertical_roam(s32 speed) { f32 parentY = o->parentObj->oPosY; - // If the stage is Secret Aquarium, the fish can + // If the stage is Secret Aquarium, the fish can // travel as far vertically as they wish. if (gCurrLevelNum == LEVEL_SA) { if (500.0f < absf(o->oPosY - o->oFishGoalY)) { diff --git a/src/game/behaviors/flame.inc.c b/src/game/behaviors/flame.inc.c index 801b1fa5..f33aaf18 100644 --- a/src/game/behaviors/flame.inc.c +++ b/src/game/behaviors/flame.inc.c @@ -1,7 +1,7 @@ // flame.inc.c void bhv_small_piranha_flame_loop(void) { - if ((u16)(o->oBehParams >> 16) == 0) { + if ((u16)(o->oBhvParams >> 16) == 0) { if (o->oTimer > 0) { obj_mark_for_deletion(o); } else { diff --git a/src/game/behaviors/flamethrower.inc.c b/src/game/behaviors/flamethrower.inc.c index ae0922aa..b2c0fc9b 100644 --- a/src/game/behaviors/flamethrower.inc.c +++ b/src/game/behaviors/flamethrower.inc.c @@ -9,13 +9,13 @@ void bhv_flamethrower_flame_loop(void) { obj_translate_xyz_random(o, 10.0f); } - if (o->oBehParams2ndByte == 2) { + if (o->oBhvParams2ndByte == 2) { scale = o->oTimer * (o->oForwardVel - 6.0f) / 100.0 + 2.0; } else { scale = o->oTimer * (o->oForwardVel - 20.0) / 100.0 + 1.0; } - if (o->oBehParams2ndByte == 3) { + if (o->oBhvParams2ndByte == 3) { o->hitboxHeight = 200.0f; o->hitboxDownOffset = 150.0f; o->oVelY = -28.0f; @@ -34,7 +34,7 @@ void bhv_flamethrower_flame_loop(void) { cur_obj_scale(scale); - if (o->oBehParams2ndByte == 4) { + if (o->oBhvParams2ndByte == 4) { o->oPosY += o->oForwardVel; // weird? } else { cur_obj_move_using_fvel_and_gravity(); @@ -63,11 +63,11 @@ void bhv_flamethrower_loop(void) { model = MODEL_RED_FLAME; flameVel = 95.0f; - if (o->oBehParams2ndByte == 1) { + if (o->oBhvParams2ndByte == 1) { model = MODEL_BLUE_FLAME; } - if (o->oBehParams2ndByte == 2) { + if (o->oBhvParams2ndByte == 2) { flameVel = 50.0f; } @@ -83,7 +83,7 @@ void bhv_flamethrower_loop(void) { o->oFlameThowerUnk110 = sp34; - flame = spawn_object_relative(o->oBehParams2ndByte, 0, 0, 0, o, model, bhvFlamethrowerFlame); + flame = spawn_object_relative(o->oBhvParams2ndByte, 0, 0, 0, o, model, bhvFlamethrowerFlame); flame->oForwardVel = flameVel; cur_obj_play_sound_1(SOUND_AIR_BLOW_FIRE); diff --git a/src/game/behaviors/fly_guy.inc.c b/src/game/behaviors/fly_guy.inc.c index d5911582..afc6c01d 100644 --- a/src/game/behaviors/fly_guy.inc.c +++ b/src/game/behaviors/fly_guy.inc.c @@ -71,7 +71,7 @@ static void fly_guy_act_approach_mario(void) { if (abs_angle_diff(o->oAngleToMario, o->oFaceAngleYaw) < 0x2000 && (o->oPosY - gMarioObject->oPosY > 400.0f || o->oDistanceToMario < 400.0f)) { // Either shoot fire or lunge - if (o->oBehParams2ndByte != 0 && random_u16() % 2) { + if (o->oBhvParams2ndByte != FLY_GUY_BP_GENERIC && random_u16() % 2) { o->oAction = FLY_GUY_ACT_SHOOT_FIRE; o->oFlyGuyScaleVel = 0.06f; } else { diff --git a/src/game/behaviors/flying_bookend_switch.inc.c b/src/game/behaviors/flying_bookend_switch.inc.c index 91d7fdc9..9ea647ad 100644 --- a/src/game/behaviors/flying_bookend_switch.inc.c +++ b/src/game/behaviors/flying_bookend_switch.inc.c @@ -270,7 +270,7 @@ void bhv_book_switch_loop(void) { cur_obj_become_intangible(); if (approach_f32_ptr(&o->oBookSwitchUnkF4, 0.0f, 20.0f) && o->oAction != 0) { - if (o->parentObj->oBookSwitchManagerUnkF4 == o->oBehParams2ndByte) { + if (o->parentObj->oBookSwitchManagerUnkF4 == o->oBhvParams2ndByte) { play_sound(SOUND_GENERAL2_RIGHT_ANSWER, gGlobalSoundSource); o->parentObj->oBookSwitchManagerUnkF4++; } else { diff --git a/src/game/behaviors/goomba.inc.c b/src/game/behaviors/goomba.inc.c index 7089c34f..b0e55384 100644 --- a/src/game/behaviors/goomba.inc.c +++ b/src/game/behaviors/goomba.inc.c @@ -80,15 +80,15 @@ void bhv_goomba_triplet_spawner_update(void) { // is not used in the game s32 dAngle = 0x10000 - / (((o->oBehParams2ndByte & GOOMBA_TRIPLET_SPAWNER_BP_EXTRA_GOOMBAS_MASK) >> 2) + 3); + / (((o->oBhvParams2ndByte & GOOMBA_TRIPLET_SPAWNER_BP_EXTRA_GOOMBAS_MASK) >> 2) + 3); for (angle = 0, goombaFlag = 1 << 8; angle < 0xFFFF; angle += dAngle, goombaFlag <<= 1) { // Only spawn goombas which haven't been killed yet - if (!(o->oBehParams & goombaFlag)) { + if (!(o->oBhvParams & goombaFlag)) { s16 dx = 500.0f * coss(angle); s16 dz = 500.0f * sins(angle); - spawn_object_relative((o->oBehParams2ndByte & GOOMBA_TRIPLET_SPAWNER_BP_SIZE_MASK) + spawn_object_relative((o->oBhvParams2ndByte & GOOMBA_BP_SIZE_MASK) | (goombaFlag >> 6), dx, 0, dz, o, MODEL_GOOMBA, bhvGoomba); } } @@ -106,7 +106,7 @@ void bhv_goomba_triplet_spawner_update(void) { * Initialization function for goomba. */ void bhv_goomba_init(void) { - o->oGoombaSize = o->oBehParams2ndByte & GOOMBA_BP_SIZE_MASK; + o->oGoombaSize = o->oBhvParams2ndByte & GOOMBA_BP_SIZE_MASK; o->oGoombaScale = sGoombaProperties[o->oGoombaSize].scale; o->oDeathSound = sGoombaProperties[o->oGoombaSize].deathSound; @@ -138,10 +138,10 @@ static void goomba_begin_jump(void) { static void mark_goomba_as_dead(void) { if (o->parentObj != o) { set_object_respawn_info_bits( - o->parentObj, (o->oBehParams2ndByte & GOOMBA_BP_TRIPLET_FLAG_MASK) >> 2); + o->parentObj, (o->oBhvParams2ndByte & GOOMBA_BP_TRIPLET_RESPAWN_FLAG_MASK) >> 2); - o->parentObj->oBehParams = - o->parentObj->oBehParams | (o->oBehParams2ndByte & GOOMBA_BP_TRIPLET_FLAG_MASK) << 6; + o->parentObj->oBhvParams = + o->parentObj->oBhvParams | (o->oBhvParams2ndByte & GOOMBA_BP_TRIPLET_RESPAWN_FLAG_MASK) << 6; } } diff --git a/src/game/behaviors/grill_door.inc.c b/src/game/behaviors/grill_door.inc.c index 99ce3583..6c309ebf 100644 --- a/src/game/behaviors/grill_door.inc.c +++ b/src/game/behaviors/grill_door.inc.c @@ -18,7 +18,7 @@ void bhv_openable_cage_door_loop(void) { } } else if (o->oAction == 1) { if (o->oTimer < 64) { - o->oMoveAngleYaw -= o->oBehParams2ndByte * 0x100; + o->oMoveAngleYaw -= o->oBhvParams2ndByte * 0x100; } else { o->oAction++; } @@ -26,41 +26,41 @@ void bhv_openable_cage_door_loop(void) { } void bhv_openable_grill_loop(void) { - struct Object *grillObj; + struct Object *obj; s32 grillIdx; switch (o->oAction) { case 0: - grillIdx = o->oBehParams2ndByte; + grillIdx = o->oBhvParams2ndByte; - grillObj = spawn_object_relative(-1, gOpenableGrills[grillIdx].halfWidth, 0, 0, o, - gOpenableGrills[grillIdx].modelID, bhvOpenableCageDoor); - grillObj->oMoveAngleYaw += 0x8000; - obj_set_collision_data(grillObj, gOpenableGrills[grillIdx].collision); + obj = spawn_object_relative(-1, gOpenableGrills[grillIdx].halfWidth, 0, 0, o, + gOpenableGrills[grillIdx].modelID, bhvOpenableCageDoor); + obj->oMoveAngleYaw += 0x8000; + obj_set_collision_data(obj, gOpenableGrills[grillIdx].collision); - grillObj = spawn_object_relative(1, -gOpenableGrills[grillIdx].halfWidth, 0, 0, o, - gOpenableGrills[grillIdx].modelID, bhvOpenableCageDoor); - obj_set_collision_data(grillObj, gOpenableGrills[grillIdx].collision); + obj = spawn_object_relative(1, -gOpenableGrills[grillIdx].halfWidth, 0, 0, o, + gOpenableGrills[grillIdx].modelID, bhvOpenableCageDoor); + obj_set_collision_data(obj, gOpenableGrills[grillIdx].collision); o->oAction++; break; case 1: - if ((o->oOpenableGrillUnkF4 = + if ((o->oOpenableGrillPurpleSwitch = cur_obj_nearest_object_with_behavior(bhvFloorSwitchGrills)) != NULL) { o->oAction++; } break; case 2: - grillObj = o->oOpenableGrillUnkF4; + obj = o->oOpenableGrillPurpleSwitch; - if (grillObj->oAction == 2) { + if (obj->oAction == PURPLE_SWITCH_ACT_TICKING) { o->oOpenableGrillUnk88 = 2; cur_obj_play_sound_2(SOUND_GENERAL_CAGE_OPEN); o->oAction++; - if (o->oBehParams2ndByte != 0) { + if (o->oBhvParams2ndByte != OPENABLE_GRILL_BP_BOB) { play_puzzle_jingle(); } } diff --git a/src/game/behaviors/ground_particles.inc.c b/src/game/behaviors/ground_particles.inc.c index aff00af5..56ee9547 100644 --- a/src/game/behaviors/ground_particles.inc.c +++ b/src/game/behaviors/ground_particles.inc.c @@ -6,7 +6,7 @@ void bhv_pound_white_puffs_init(void) { } static struct SpawnParticlesInfo sGlobalMistParticles = { - /* behParam: */ 3, + /* bhvParam: */ 3, /* count: */ 20, /* model: */ MODEL_MIST, /* offsetY: */ 20, @@ -25,7 +25,7 @@ void spawn_mist_from_global(void) { } static struct SpawnParticlesInfo sSandParticles = { - /* behParam: */ 0, + /* bhvParam: */ 0, /* count: */ 5, /* model: */ MODEL_SAND_DUST, /* offsetY: */ 0, @@ -62,7 +62,7 @@ void clear_particle_flags(u32 flags) { } static struct SpawnParticlesInfo sSnowParticles = { - /* behParam: */ 0, + /* bhvParam: */ 0, /* count: */ 5, /* model: */ MODEL_WHITE_PARTICLE_DL, /* offsetY: */ 0, diff --git a/src/game/behaviors/heave_ho.inc.c b/src/game/behaviors/heave_ho.inc.c index 2a8ab260..cd43a2c7 100644 --- a/src/game/behaviors/heave_ho.inc.c +++ b/src/game/behaviors/heave_ho.inc.c @@ -1,7 +1,9 @@ // heave_ho.inc.c -s16 D_8032F460[][2] = { { 30, 0 }, { 42, 1 }, { 52, 0 }, { 64, 1 }, { 74, 0 }, - { 86, 1 }, { 96, 0 }, { 108, 1 }, { 118, 0 }, { -1, 0 }, }; +s16 D_8032F460[][2] = { + { 30, 0 }, { 42, 1 }, { 52, 0 }, { 64, 1 }, { 74, 0 }, + { 86, 1 }, { 96, 0 }, { 108, 1 }, { 118, 0 }, { -1, 0 }, +}; void bhv_heave_ho_throw_mario_loop(void) { o->oParentRelativePosX = 200.0f; diff --git a/src/game/behaviors/hidden_star.inc.c b/src/game/behaviors/hidden_star.inc.c index 9dd2c1e3..f041a24a 100644 --- a/src/game/behaviors/hidden_star.inc.c +++ b/src/game/behaviors/hidden_star.inc.c @@ -6,7 +6,7 @@ void bhv_hidden_star_init(void) { if (count == 0) { struct Object *star = spawn_object_abs_with_rot(o, 0, MODEL_STAR, bhvStar, o->oPosX, o->oPosY, o->oPosZ, 0, 0, 0); - star->oBehParams = o->oBehParams; + star->oBhvParams = o->oBhvParams; o->activeFlags = ACTIVE_FLAG_DEACTIVATED; } diff --git a/src/game/behaviors/hoot.inc.c b/src/game/behaviors/hoot.inc.c index 238d2754..d7f6cfde 100644 --- a/src/game/behaviors/hoot.inc.c +++ b/src/game/behaviors/hoot.inc.c @@ -255,7 +255,7 @@ void bhv_hoot_loop(void) { case HOOT_AVAIL_WANTS_TO_TALK: hoot_awake_loop(); - if (set_mario_npc_dialog(MARIO_DIALOG_LOOK_UP) == MARIO_DIALOG_STATUS_SPEAK + if (set_mario_npc_dialog(MARIO_DIALOG_LOOK_UP) == MARIO_DIALOG_STATUS_SPEAK && cutscene_object_with_dialog(CUTSCENE_DIALOG, o, DIALOG_044)) { set_mario_npc_dialog(MARIO_DIALOG_STOP); diff --git a/src/game/behaviors/intro_lakitu.inc.c b/src/game/behaviors/intro_lakitu.inc.c index 7ca8055d..a41d5cf5 100644 --- a/src/game/behaviors/intro_lakitu.inc.c +++ b/src/game/behaviors/intro_lakitu.inc.c @@ -82,7 +82,7 @@ void bhv_intro_lakitu_loop(void) { o->oIntroLakituSplineSegment = 0.0f; o->oIntroLakituSplineSegmentProgress = 0.0f; o->oIntroLakituCloud = - spawn_object_relative_with_scale(1, 0, 0, 0, 2.0f, o, MODEL_MIST, bhvCloud); + spawn_object_relative_with_scale(CLOUD_BP_LAKITU_CLOUD, 0, 0, 0, 2.0f, o, MODEL_MIST, bhvCloud); if (gCamera->cutscene == CUTSCENE_END_WAVING) { o->oAction = 100; @@ -110,7 +110,7 @@ void bhv_intro_lakitu_loop(void) { } switch (o->oTimer) { -#if defined(VERSION_US) || defined(VERSION_SH) +#if defined(VERSION_US) || defined(VERSION_SH) || defined(VERSION_CN) case 534: cur_obj_play_sound_2(SOUND_ACTION_FLYING_FAST); break; diff --git a/src/game/behaviors/jrb_ship.inc.c b/src/game/behaviors/jrb_ship.inc.c index 0918d8d0..b675b3dc 100644 --- a/src/game/behaviors/jrb_ship.inc.c +++ b/src/game/behaviors/jrb_ship.inc.c @@ -51,18 +51,18 @@ void bhv_jrb_sliding_box_loop(void) { Vec3f sp20; s16 sp1E; - if (o->oJrbSlidingBoxUnkF4 == NULL) { + if (o->oJRBSlidingBoxUnkF4 == NULL) { sp3C = cur_obj_nearest_object_with_behavior(bhvInSunkenShip3); if (sp3C != NULL) { // NULL check only for assignment, not for dereference? - o->oJrbSlidingBoxUnkF4 = sp3C; + o->oJRBSlidingBoxUnkF4 = sp3C; } o->oParentRelativePosX = o->oPosX - sp3C->oPosX; o->oParentRelativePosY = o->oPosY - sp3C->oPosY; o->oParentRelativePosZ = o->oPosZ - sp3C->oPosZ; } else { - sp3C = o->oJrbSlidingBoxUnkF4; + sp3C = o->oJRBSlidingBoxUnkF4; sp40[0] = sp3C->oFaceAnglePitch; sp40[1] = sp3C->oFaceAngleYaw; @@ -96,17 +96,17 @@ void bhv_jrb_sliding_box_loop(void) { o->oFaceAnglePitch = sp1E; } - o->oJrbSlidingBoxUnkFC = sins(o->oJrbSlidingBoxUnkF8) * 20.0f; - o->oJrbSlidingBoxUnkF8 += 0x100; - o->oParentRelativePosZ += o->oJrbSlidingBoxUnkFC; + o->oJRBSlidingBoxUnkFC = sins(o->oJRBSlidingBoxUnkF8) * 20.0f; + o->oJRBSlidingBoxUnkF8 += 0x100; + o->oParentRelativePosZ += o->oJRBSlidingBoxUnkFC; - if (gMarioObject->oPosY > 1000.0f && absf(o->oJrbSlidingBoxUnkFC) > 3.0f) { + if (gMarioObject->oPosY > 1000.0f && absf(o->oJRBSlidingBoxUnkFC) > 3.0f) { cur_obj_play_sound_1(SOUND_AIR_ROUGH_SLIDE); } obj_set_hitbox(o, &sSkullSlidingBoxHitbox); - if (!(o->oJrbSlidingBoxUnkF8 & 0x7FFF)) { + if (!(o->oJRBSlidingBoxUnkF8 & 0x7FFF)) { cur_obj_become_tangible(); } diff --git a/src/game/behaviors/king_bobomb.inc.c b/src/game/behaviors/king_bobomb.inc.c index 3c35449d..56736263 100644 --- a/src/game/behaviors/king_bobomb.inc.c +++ b/src/game/behaviors/king_bobomb.inc.c @@ -4,11 +4,11 @@ Gfx *geo_update_held_mario_pos(s32 run, UNUSED struct GraphNode *node, Mat4 mtx) { if (run == TRUE) { Mat4 sp20; - struct Object *sp1C = (struct Object *) gCurGraphNodeObject; - if (sp1C->prevObj != NULL) { + struct Object *obj = (struct Object *) gCurGraphNodeObject; + if (obj->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); + obj_update_pos_from_parent_transformation(sp20, obj->prevObj); + obj_set_gfx_pos_from_pos(obj->prevObj); } } @@ -200,7 +200,7 @@ void king_bobomb_act_6(void) { void king_bobomb_act_7(void) { cur_obj_init_animation_with_sound(2); - if (cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_UP, + if (cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_UP, DIALOG_FLAG_TEXT_DEFAULT, CUTSCENE_DIALOG, DIALOG_116)) { create_sound_spawner(SOUND_OBJ_KING_WHOMP_DEATH); @@ -319,7 +319,7 @@ void king_bobomb_act_5(void) { // bobomb returns home break; case 4: - if (cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_UP, + if (cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_UP, DIALOG_FLAG_TURN_TO_MARIO, CUTSCENE_DIALOG, DIALOG_128)) { o->oAction = 2; } diff --git a/src/game/behaviors/klepto.inc.c b/src/game/behaviors/klepto.inc.c index 9a1e10b3..6b122c96 100644 --- a/src/game/behaviors/klepto.inc.c +++ b/src/game/behaviors/klepto.inc.c @@ -76,7 +76,7 @@ static void klepto_anim_dive(void) { } void bhv_klepto_init(void) { - if (o->oBehParams2ndByte != 0) { + if (o->oBhvParams2ndByte != 0) { o->oAnimState = KLEPTO_ANIM_STATE_HOLDING_STAR; } else { o->oKleptoStartPosX = o->oPosX; @@ -297,7 +297,7 @@ static void klepto_act_retreat(void) { static void klepto_act_reset_position(void) { if (o->oTimer < 300) { klepto_circle_target(300.0f, 20.0f); - } else if (o->oBehParams2ndByte != 0) { + } else if (o->oBhvParams2ndByte != 0) { o->oHomeX = -2000.0f; o->oHomeZ = -1000.0f; o->oHomeY = o->oKleptoDistanceToTarget = 9999.0f; diff --git a/src/game/behaviors/koopa.inc.c b/src/game/behaviors/koopa.inc.c index 04b345c9..d634e3c0 100644 --- a/src/game/behaviors/koopa.inc.c +++ b/src/game/behaviors/koopa.inc.c @@ -51,8 +51,8 @@ static u8 sKoopaShelledAttackHandlers[] = { * Data to control the behavior of each instance of Koopa the Quick. */ struct KoopaTheQuickProperties { - s16 initText; - s16 winText; + s16 initDialogID; + s16 winDialogID; Trajectory const *path; Vec3s starPos; }; @@ -69,7 +69,7 @@ static struct KoopaTheQuickProperties sKoopaTheQuickProperties[] = { * Initialization function. */ void bhv_koopa_init(void) { - if ((o->oKoopaMovementType = o->oBehParams2ndByte) == KOOPA_BP_TINY) { + if ((o->oKoopaMovementType = o->oBhvParams2ndByte) == KOOPA_BP_TINY) { // Tiny koopa in THI o->oKoopaMovementType = KOOPA_BP_NORMAL; o->oKoopaAgility = 1.6f / 3.0f; @@ -517,7 +517,7 @@ static void koopa_the_quick_act_wait_before_race(void) { */ static void koopa_the_quick_act_show_init_text(void) { s32 response = obj_update_race_proposition_dialog( - sKoopaTheQuickProperties[o->oKoopaTheQuickRaceIndex].initText); + sKoopaTheQuickProperties[o->oKoopaTheQuickRaceIndex].initDialogID); if (response == DIALOG_RESPONSE_YES) { UNUSED u8 filler[4]; @@ -721,7 +721,7 @@ static void koopa_the_quick_act_after_race(void) { } else { // Mario won o->parentObj->oKoopaRaceEndpointDialog = - sKoopaTheQuickProperties[o->oKoopaTheQuickRaceIndex].winText; + sKoopaTheQuickProperties[o->oKoopaTheQuickRaceIndex].winDialogID; } } else { // KtQ won @@ -731,7 +731,7 @@ static void koopa_the_quick_act_after_race(void) { o->oFlags &= ~OBJ_FLAG_ACTIVE_FROM_AFAR; } } else if (o->parentObj->oKoopaRaceEndpointDialog > 0) { - s32 dialogResponse = cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_UP, + s32 dialogResponse = cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_UP, DIALOG_FLAG_TURN_TO_MARIO, CUTSCENE_DIALOG, o->parentObj->oKoopaRaceEndpointDialog); if (dialogResponse != 0) { o->parentObj->oKoopaRaceEndpointDialog = DIALOG_NONE; diff --git a/src/game/behaviors/lll_floating_wood_piece.inc.c b/src/game/behaviors/lll_floating_wood_piece.inc.c index 6abb42a1..8f019911 100644 --- a/src/game/behaviors/lll_floating_wood_piece.inc.c +++ b/src/game/behaviors/lll_floating_wood_piece.inc.c @@ -5,8 +5,8 @@ void bhv_lll_wood_piece_loop(void) { o->oPosY -= 100.0f; } - o->oPosY += sins(o->oLllWoodPieceOscillationTimer) * 3.0f; - o->oLllWoodPieceOscillationTimer += 0x400; + o->oPosY += sins(o->oLLLWoodPieceOscillationTimer) * 3.0f; + o->oLLLWoodPieceOscillationTimer += 0x400; if (o->parentObj->oAction == 2) { obj_mark_for_deletion(o); @@ -22,8 +22,8 @@ void bhv_lll_floating_wood_bridge_loop(void) { if (o->oDistanceToMario < 2500.0f) { for (i = 1; i < 4; i++) { sp3C = spawn_object_relative(0, (i - 2) * 300, 0, 0, o, - MODEL_LLL_WOOD_BRIDGE, bhvLllWoodPiece); - sp3C->oLllWoodPieceOscillationTimer = i * 0x1000; + MODEL_LLL_WOOD_BRIDGE, bhvLLLWoodPiece); + sp3C->oLLLWoodPieceOscillationTimer = i * 0x1000; } o->oAction = 1; } diff --git a/src/game/behaviors/lll_octagonal_rotating_mesh.inc.c b/src/game/behaviors/lll_octagonal_rotating_mesh.inc.c index 054723fd..7cf52c97 100644 --- a/src/game/behaviors/lll_octagonal_rotating_mesh.inc.c +++ b/src/game/behaviors/lll_octagonal_rotating_mesh.inc.c @@ -73,7 +73,7 @@ void bhv_lll_moving_octagonal_mesh_platform_loop(void) { o->oAction++; } else { o->oHorizontalMovementUnkF8 = - lll_octagonal_mesh_move(D_8032F8C8[o->oBehParams2ndByte], o->oHorizontalMovementUnkF8); + lll_octagonal_mesh_move(D_8032F8C8[o->oBhvParams2ndByte], o->oHorizontalMovementUnkF8); } print_debug_top_down_objectinfo("number %d\n", o->oHorizontalMovementUnkF8); diff --git a/src/game/behaviors/lll_rotating_hex_flame.inc.c b/src/game/behaviors/lll_rotating_hex_flame.inc.c index 4637f317..6193b66c 100644 --- a/src/game/behaviors/lll_rotating_hex_flame.inc.c +++ b/src/game/behaviors/lll_rotating_hex_flame.inc.c @@ -1,9 +1,9 @@ // lll_rotating_hex_flame.inc.c void bhv_lll_rotating_hex_flame_loop(void) { - f32 sp24 = o->oLllRotatingHexFlameUnkF4; - f32 sp20 = o->oLllRotatingHexFlameUnkF8; - f32 sp1C = o->oLllRotatingHexFlameUnkFC; + f32 sp24 = o->oLLLRotatingHexFlameUnkF4; + f32 sp20 = o->oLLLRotatingHexFlameUnkF8; + f32 sp1C = o->oLLLRotatingHexFlameUnkFC; cur_obj_set_pos_relative(o->parentObj, sp24, sp20, sp1C); o->oPosY = o->parentObj->oPosY + 100.0f; @@ -21,13 +21,13 @@ void fire_bar_spawn_flames(s16 a0) { f32 sp1C = sins(a0) * 200.0f; f32 sp18 = coss(a0) * 200.0f; - sp20 = o->oBehParams2ndByte == 0 ? 4 : 3; + sp20 = o->oBhvParams2ndByte == 0 ? 4 : 3; for (i = 0; i < sp20; i++) { - sp2C = spawn_object(o, MODEL_RED_FLAME, bhvLllRotatingHexFlame); - sp2C->oLllRotatingHexFlameUnkF4 += sp1C; - sp2C->oLllRotatingHexFlameUnkF8 = o->oPosY - 200.0f; - sp2C->oLllRotatingHexFlameUnkFC += sp18; + sp2C = spawn_object(o, MODEL_RED_FLAME, bhvLLLRotatingHexFlame); + sp2C->oLLLRotatingHexFlameUnkF4 += sp1C; + sp2C->oLLLRotatingHexFlameUnkF8 = o->oPosY - 200.0f; + sp2C->oLLLRotatingHexFlameUnkFC += sp18; obj_scale_xyz(sp2C, 6.0f, 6.0f, 6.0f); sp1C += sins(a0) * 150.0f; sp18 += coss(a0) * 150.0f; @@ -69,7 +69,7 @@ void (*sRotatingCwFireBarsActions[])(void) = { void bhv_lll_rotating_block_fire_bars_loop(void) { cur_obj_call_action_function(sRotatingCwFireBarsActions); - if (o->oBehParams2ndByte == 0) { + if (o->oBhvParams2ndByte == 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 22d8fd8a..af3598af 100644 --- a/src/game/behaviors/lll_sinking_rectangle.inc.c +++ b/src/game/behaviors/lll_sinking_rectangle.inc.c @@ -7,8 +7,8 @@ void sinking_rectangular_plat_actions(f32 a0, s32 a1) { break; case 1: - o->oPosY -= sins(o->oLllWoodPieceOscillationTimer) * a0; - o->oLllWoodPieceOscillationTimer += a1; + o->oPosY -= sins(o->oLLLWoodPieceOscillationTimer) * a0; + o->oLLLWoodPieceOscillationTimer += a1; break; case 2: @@ -24,8 +24,8 @@ void bhv_lll_sinking_rectangular_platform_loop(void) { if (o->oMoveAngleYaw != 0) { sinking_rectangular_plat_actions(sp1C, sp18); } else { - o->oFaceAnglePitch = sins(o->oLllWoodPieceOscillationTimer) * 0x200; - o->oLllWoodPieceOscillationTimer += 0x100; + o->oFaceAnglePitch = sins(o->oLLLWoodPieceOscillationTimer) * 0x200; + o->oLLLWoodPieceOscillationTimer += 0x100; } } diff --git a/src/game/behaviors/manta_ray.inc.c b/src/game/behaviors/manta_ray.inc.c index 62224840..f8c61d4b 100644 --- a/src/game/behaviors/manta_ray.inc.c +++ b/src/game/behaviors/manta_ray.inc.c @@ -6,15 +6,15 @@ * These rings contain a significant bug that is documented in water_ring.inc.c */ -static Trajectory sMantaRayTraj[] = { - TRAJECTORY_POS(0, /*pos*/ -4500, -1380, -40), - TRAJECTORY_POS(1, /*pos*/ -4120, -2240, 740), - TRAJECTORY_POS(2, /*pos*/ -3280, -3080, 1040), - TRAJECTORY_POS(3, /*pos*/ -2240, -3320, 720), - TRAJECTORY_POS(4, /*pos*/ -1840, -3140, -280), - TRAJECTORY_POS(5, /*pos*/ -2320, -2480, -1100), - TRAJECTORY_POS(6, /*pos*/ -3220, -1600, -1360), - TRAJECTORY_POS(7, /*pos*/ -4180, -1020, -1040), +static Trajectory sMantaRayTraj[] = { + TRAJECTORY_POS(0, /*pos*/ -4500, -1380, -40), + TRAJECTORY_POS(1, /*pos*/ -4120, -2240, 740), + TRAJECTORY_POS(2, /*pos*/ -3280, -3080, 1040), + TRAJECTORY_POS(3, /*pos*/ -2240, -3320, 720), + TRAJECTORY_POS(4, /*pos*/ -1840, -3140, -280), + TRAJECTORY_POS(5, /*pos*/ -2320, -2480, -1100), + TRAJECTORY_POS(6, /*pos*/ -3220, -1600, -1360), + TRAJECTORY_POS(7, /*pos*/ -4180, -1020, -1040), TRAJECTORY_END(), }; @@ -48,6 +48,7 @@ static void manta_ray_move(void) { #endif o->oPathedStartWaypoint = (struct Waypoint *) sMantaRayTraj; + //! Uninitialized parameter, but the parameter is unused in the called function pathStatus = cur_obj_follow_path(pathStatus); o->oMantaTargetYaw = o->oPathedTargetYaw; diff --git a/src/game/behaviors/mips.inc.c b/src/game/behaviors/mips.inc.c index 0aed1ec9..8c2d3410 100644 --- a/src/game/behaviors/mips.inc.c +++ b/src/game/behaviors/mips.inc.c @@ -14,7 +14,7 @@ void bhv_mips_init(void) { // If the player has >= 15 stars and hasn't collected first MIPS star... if (save_file_get_total_star_count(gCurrSaveFileNum - 1, COURSE_MIN - 1, COURSE_MAX - 1) >= 15 && !(starFlags & SAVE_FLAG_TO_STAR_FLAG(SAVE_FLAG_COLLECTED_MIPS_STAR_1))) { - o->oBehParams2ndByte = 0; + o->oBhvParams2ndByte = MIPS_BP_15_STARS; #ifndef VERSION_JP o->oMipsForwardVelocity = 40.0f; #endif @@ -22,7 +22,7 @@ void bhv_mips_init(void) { // If the player has >= 50 stars and hasn't collected second MIPS star... else if (save_file_get_total_star_count(gCurrSaveFileNum - 1, COURSE_MIN - 1, COURSE_MAX - 1) >= 50 && !(starFlags & SAVE_FLAG_TO_STAR_FLAG(SAVE_FLAG_COLLECTED_MIPS_STAR_2))) { - o->oBehParams2ndByte = 1; + o->oBhvParams2ndByte = MIPS_BP_50_STARS; #ifndef VERSION_JP o->oMipsForwardVelocity = 45.0f; #endif @@ -109,16 +109,18 @@ void bhv_mips_act_wait_for_nearby_mario(void) { void bhv_mips_act_follow_path(void) { s16 collisionFlags = 0; s32 followStatus; -#ifdef AVOID_UB - followStatus = 0; -#endif // Retrieve current waypoint. struct Waypoint **pathBase = segmented_to_virtual(&inside_castle_seg7_trajectory_mips); struct Waypoint *waypoint = segmented_to_virtual(*(pathBase + o->oMipsStartWaypointIndex)); +#ifdef AVOID_UB + followStatus = 0; +#endif + // Set start waypoint and follow the path from there. o->oPathedStartWaypoint = waypoint; + //! Uninitialized parameter, but the parameter is unused in the called function followStatus = cur_obj_follow_path(followStatus); // Update velocity and angle and do movement. @@ -187,7 +189,7 @@ void bhv_mips_act_idle(void) { // Spawn a star if he was just picked up for the first time. if (o->oMipsStarStatus == MIPS_STAR_STATUS_SHOULD_SPAWN_STAR) { - bhv_spawn_star_no_level_exit(o->oBehParams2ndByte + 3); + bhv_spawn_star_no_level_exit(STAR_INDEX_ACT_4 + o->oBhvParams2ndByte); o->oMipsStarStatus = MIPS_STAR_STATUS_ALREADY_SPAWNED_STAR; } } @@ -233,9 +235,9 @@ void bhv_mips_held(void) { // If MIPS hasn't spawned his star yet... if (o->oMipsStarStatus == MIPS_STAR_STATUS_HAVENT_SPAWNED_STAR) { // Choose dialog based on which MIPS encounter this is. - if (o->oBehParams2ndByte == 0) { + if (o->oBhvParams2ndByte == MIPS_BP_15_STARS) { dialogID = DIALOG_084; - } else { + } else { // MIPS_BP_50_STARS dialogID = DIALOG_162; } diff --git a/src/game/behaviors/monty_mole.inc.c b/src/game/behaviors/monty_mole.inc.c index 884774ad..0396c268 100644 --- a/src/game/behaviors/monty_mole.inc.c +++ b/src/game/behaviors/monty_mole.inc.c @@ -108,7 +108,7 @@ void bhv_monty_mole_hole_update(void) { */ void monty_mole_spawn_dirt_particles(s8 offsetY, s8 velYBase) { static struct SpawnParticlesInfo montyMoleRiseFromGroundParticles = { - /* behParam: */ 0, + /* bhvParam: */ 0, /* count: */ 3, /* model: */ MODEL_SAND_DUST, /* offsetY: */ 0, @@ -142,7 +142,7 @@ void bhv_monty_mole_init(void) { static void monty_mole_act_select_hole(void) { f32 minDistToMario; - if (o->oBehParams2ndByte != MONTY_MOLE_BP_NO_ROCK) { + if (o->oBhvParams2ndByte != MONTY_MOLE_BP_NO_ROCK) { minDistToMario = 200.0f; } else if (gMarioStates[0].forwardVel < 8.0f) { minDistToMario = 100.0f; @@ -206,7 +206,7 @@ static void monty_mole_act_spawn_rock(void) { struct Object *rock; if (cur_obj_init_anim_and_check_if_end(2)) { - if (o->oBehParams2ndByte != MONTY_MOLE_BP_NO_ROCK + if (o->oBhvParams2ndByte != MONTY_MOLE_BP_NO_ROCK && abs_angle_diff(o->oAngleToMario, o->oMoveAngleYaw) < 0x4000 && (rock = spawn_object(o, MODEL_PEBBLE, bhvMontyMoleRock)) != NULL) { o->prevObj = rock; @@ -376,7 +376,7 @@ void bhv_monty_mole_update(void) { if (distToLastKill < 1500.0f) { if (sMontyMoleKillStreak == 7) { play_puzzle_jingle(); - spawn_object(o, MODEL_1UP, bhv1upWalking); + spawn_object(o, MODEL_1UP, bhv1UpWalking); } } else { sMontyMoleKillStreak = 0; @@ -445,7 +445,7 @@ static struct ObjectHitbox sMontyMoleRockHitbox = { * The particles that spawn when a monty mole rock breaks. */ static struct SpawnParticlesInfo sMontyMoleRockBreakParticles = { - /* behParam: */ 0, + /* bhvParam: */ 0, /* count: */ 2, /* model: */ MODEL_PEBBLE, /* offsetY: */ 10, diff --git a/src/game/behaviors/mr_blizzard.inc.c b/src/game/behaviors/mr_blizzard.inc.c index 019f85e3..124cabec 100644 --- a/src/game/behaviors/mr_blizzard.inc.c +++ b/src/game/behaviors/mr_blizzard.inc.c @@ -17,7 +17,7 @@ struct ObjectHitbox sMrBlizzardHitbox = { void mr_blizzard_spawn_white_particles(s8 count, s8 offsetY, s8 forwardVelBase, s8 velYBase, s8 sizeBase) { static struct SpawnParticlesInfo D_80331A00 = { - /* behParam: */ 0, + /* bhvParam: */ 0, /* count: */ 6, /* model: */ MODEL_WHITE_PARTICLE, /* offsetY: */ 0, @@ -44,14 +44,14 @@ void mr_blizzard_spawn_white_particles(s8 count, s8 offsetY, s8 forwardVelBase, * Mr. Blizzard initialization function. */ void bhv_mr_blizzard_init(void) { - if (o->oBehParams2ndByte == MR_BLIZZARD_STYPE_JUMPING) { + if (o->oBhvParams2ndByte == MR_BLIZZARD_STYPE_JUMPING) { // Jumping Mr. Blizzard. o->oAction = MR_BLIZZARD_ACT_JUMP; o->oMrBlizzardGraphYOffset = 24.0f; o->oMrBlizzardTargetMoveYaw = o->oMoveAngleYaw; } else { // Cap wearing Mr. Blizzard from SL. - if ((o->oBehParams2ndByte != MR_BLIZZARD_STYPE_NO_CAP) + if ((o->oBhvParams2ndByte != MR_BLIZZARD_STYPE_GENERIC) && (save_file_get_flags() & SAVE_FLAG_CAP_ON_MR_BLIZZARD)) { o->oAnimState = 1; } @@ -239,7 +239,7 @@ static void mr_blizzard_act_death(void) { if (o->oMrBlizzardScale != 0.0f) { if ((o->oMrBlizzardScale -= 0.03f) <= 0.0f) { o->oMrBlizzardScale = 0.0f; - if (!(o->oBehParams & 0x0000FF00)) { + if (!(o->oBhvParams & 0x0000FF00)) { obj_spawn_loot_yellow_coins(o, o->oNumLootCoins, 20.0f); set_object_respawn_info_bits(o, 1); } diff --git a/src/game/behaviors/mr_i.inc.c b/src/game/behaviors/mr_i.inc.c index cbf0a759..9335f428 100644 --- a/src/game/behaviors/mr_i.inc.c +++ b/src/game/behaviors/mr_i.inc.c @@ -89,7 +89,7 @@ void mr_i_act_3(void) { f32 sp20; f32 sp1C; - if (o->oBehParams2ndByte != 0) { + if (o->oBhvParams2ndByte != 0) { sp1C = 2.0f; } else { sp1C = 1.0f; @@ -132,7 +132,7 @@ void mr_i_act_3(void) { cur_obj_become_intangible(); spawn_mist_particles(); o->oMrIScale = sp1C * 0.6; - if (o->oBehParams2ndByte != 0) { + if (o->oBhvParams2ndByte != 0) { o->oPosY += 100.0f; spawn_default_star(1370, 2000.0f, -320.0f); obj_mark_for_deletion(o); @@ -158,7 +158,7 @@ void mr_i_act_2(void) { s16 sp1C; if (o->oTimer == 0) { - if (o->oBehParams2ndByte != 0) { + if (o->oBhvParams2ndByte != 0) { o->oMrIUnkF4 = 200; } else { o->oMrIUnkF4 = 120; @@ -274,7 +274,7 @@ void mr_i_act_0(void) { o->oMoveAngleYaw = 0; o->oMoveAngleRoll = 0; #endif - cur_obj_scale(o->oBehParams2ndByte + 1); + cur_obj_scale(o->oBhvParams2ndByte + 1); if (o->oTimer == 0) { cur_obj_set_pos_to_home(); diff --git a/src/game/behaviors/mushroom_1up.inc.c b/src/game/behaviors/mushroom_1up.inc.c index ae0a7735..91ad6582 100644 --- a/src/game/behaviors/mushroom_1up.inc.c +++ b/src/game/behaviors/mushroom_1up.inc.c @@ -22,11 +22,11 @@ void bhv_1up_common_init(void) { void bhv_1up_init(void) { bhv_1up_common_init(); - if (o->oBehParams2ndByte == 1) { + if (o->oBhvParams2ndByte == ONE_UP_BP_BEAT_BITDW_BOWSER) { if (!(save_file_get_flags() & (SAVE_FLAG_HAVE_KEY_1 | SAVE_FLAG_UNLOCKED_BASEMENT_DOOR))) { o->activeFlags = ACTIVE_FLAG_DEACTIVATED; } - } else if (o->oBehParams2ndByte == 2) { + } else if (o->oBhvParams2ndByte == ONE_UP_BP_BEAT_BITFS_BOWSER) { if (!(save_file_get_flags() & (SAVE_FLAG_HAVE_KEY_2 | SAVE_FLAG_UNLOCKED_UPSTAIRS_DOOR))) { o->activeFlags = ACTIVE_FLAG_DEACTIVATED; } @@ -229,7 +229,7 @@ void bhv_1up_hidden_loop(void) { switch (o->oAction) { case 0: o->header.gfx.node.flags |= GRAPH_RENDER_INVISIBLE; - if (o->o1UpHiddenUnkF4 == o->oBehParams2ndByte) { + if (o->oHidden1UpNumTouchedTriggers == o->oBhvParams2ndByte) { o->oVelY = 40.0f; o->oAction = 3; o->header.gfx.node.flags &= ~GRAPH_RENDER_INVISIBLE; @@ -268,9 +268,9 @@ void bhv_1up_hidden_loop(void) { void bhv_1up_hidden_trigger_loop(void) { if (obj_check_if_collided_with_object(o, gMarioObject) == TRUE) { - struct Object *sp1C = cur_obj_nearest_object_with_behavior(bhvHidden1up); - if (sp1C != NULL) { - sp1C->o1UpHiddenUnkF4++; + struct Object *hidden1Up = cur_obj_nearest_object_with_behavior(bhvHidden1Up); + if (hidden1Up != NULL) { + hidden1Up->oHidden1UpNumTouchedTriggers++; } o->activeFlags = ACTIVE_FLAG_DEACTIVATED; @@ -283,7 +283,7 @@ void bhv_1up_hidden_in_pole_loop(void) { switch (o->oAction) { case 0: o->header.gfx.node.flags |= GRAPH_RENDER_INVISIBLE; - if (o->o1UpHiddenUnkF4 == o->oBehParams2ndByte) { + if (o->oHidden1UpNumTouchedTriggers == o->oBhvParams2ndByte) { o->oVelY = 40.0f; o->oAction = 3; o->header.gfx.node.flags &= ~GRAPH_RENDER_INVISIBLE; @@ -315,9 +315,9 @@ void bhv_1up_hidden_in_pole_loop(void) { void bhv_1up_hidden_in_pole_trigger_loop(void) { if (obj_check_if_collided_with_object(o, gMarioObject) == TRUE) { - struct Object *sp1C = cur_obj_nearest_object_with_behavior(bhvHidden1upInPole); - if (sp1C != NULL) { - sp1C->o1UpHiddenUnkF4++; + struct Object *hidden1Up = cur_obj_nearest_object_with_behavior(bhvHidden1UpInPole); + if (hidden1Up != NULL) { + hidden1Up->oHidden1UpNumTouchedTriggers++; } o->activeFlags = ACTIVE_FLAG_DEACTIVATED; @@ -327,9 +327,9 @@ void bhv_1up_hidden_in_pole_trigger_loop(void) { void bhv_1up_hidden_in_pole_spawner_loop(void) { if (is_point_within_radius_of_mario(o->oPosX, o->oPosY, o->oPosZ, 700)) { s8 i; - spawn_object_relative(2, 0, 50, 0, o, MODEL_1UP, bhvHidden1upInPole); - for (i = 0; i < 2; i++) { - spawn_object_relative(0, 0, i * -200, 0, o, MODEL_NONE, bhvHidden1upInPoleTrigger); + spawn_object_relative(2, 0, 50, 0, o, MODEL_1UP, bhvHidden1UpInPole); + for (i = 0; i <= 1; i++) { + spawn_object_relative(0, 0, i * -200, 0, o, MODEL_NONE, bhvHidden1UpInPoleTrigger); } o->activeFlags = ACTIVE_FLAG_DEACTIVATED; diff --git a/src/game/behaviors/orange_number.inc.c b/src/game/behaviors/orange_number.inc.c index 3b5554d8..422fbd21 100644 --- a/src/game/behaviors/orange_number.inc.c +++ b/src/game/behaviors/orange_number.inc.c @@ -1,7 +1,7 @@ // orange_number.inc.c void bhv_orange_number_init(void) { - o->oAnimState = o->oBehParams2ndByte; + o->oAnimState = o->oBhvParams2ndByte; o->oVelY = 26.0f; } diff --git a/src/game/behaviors/platform_on_track.inc.c b/src/game/behaviors/platform_on_track.inc.c index 51007e62..1650cb49 100644 --- a/src/game/behaviors/platform_on_track.inc.c +++ b/src/game/behaviors/platform_on_track.inc.c @@ -44,7 +44,7 @@ static void platform_on_track_reset(void) { * begin blinking, and finally reset. */ static void platform_on_track_mario_not_on_platform(void) { - if (!((u16)(o->oBehParams >> 16) & PLATFORM_ON_TRACK_BP_DONT_DISAPPEAR)) { + if (!((u16)(o->oBhvParams >> 16) & PLATFORM_ON_TRACK_BP_DONT_DISAPPEAR)) { // Once oTimer reaches 150, blink 40 times if (cur_obj_wait_then_blink(150, 40)) { platform_on_track_reset(); @@ -58,8 +58,8 @@ static void platform_on_track_mario_not_on_platform(void) { */ void bhv_platform_on_track_init(void) { if (!(o->activeFlags & ACTIVE_FLAG_IN_DIFFERENT_ROOM)) { - s16 pathIndex = (u16)(o->oBehParams >> 16) & PLATFORM_ON_TRACK_BP_MASK_PATH; - o->oPlatformOnTrackType = ((u16)(o->oBehParams >> 16) & PLATFORM_ON_TRACK_BP_MASK_TYPE) >> 4; + s16 pathIndex = (u16)(o->oBhvParams >> 16) & PLATFORM_ON_TRACK_BP_MASK_PATH; + o->oPlatformOnTrackType = ((u16)(o->oBhvParams >> 16) & PLATFORM_ON_TRACK_BP_MASK_TYPE) >> 4; o->oPlatformOnTrackIsNotSkiLift = o->oPlatformOnTrackType - PLATFORM_ON_TRACK_TYPE_SKI_LIFT; @@ -70,7 +70,7 @@ void bhv_platform_on_track_init(void) { o->oPlatformOnTrackIsNotHMC = pathIndex - 4; - o->oBehParams2ndByte = o->oMoveAngleYaw; // TODO: Weird? + o->oBhvParams2ndByte = o->oMoveAngleYaw; // TODO: Weird? if (o->oPlatformOnTrackType == PLATFORM_ON_TRACK_TYPE_CHECKERED) { o->header.gfx.scale[1] = 2.0f; @@ -93,7 +93,7 @@ static void platform_on_track_act_init(void) { o->oPosY = o->oHomeY = o->oPlatformOnTrackStartWaypoint->pos[1]; o->oPosZ = o->oHomeZ = o->oPlatformOnTrackStartWaypoint->pos[2]; - o->oFaceAngleYaw = o->oBehParams2ndByte; + o->oFaceAngleYaw = o->oBhvParams2ndByte; o->oForwardVel = o->oVelX = o->oVelY = o->oVelZ = o->oPlatformOnTrackDistMovedSinceLastBall = 0.0f; o->oPlatformOnTrackWasStoodOn = FALSE; @@ -142,7 +142,7 @@ static void platform_on_track_act_move_along_track(void) { // Fall after reaching the last waypoint if desired if (o->oPlatformOnTrackPrevWaypointFlags == WAYPOINT_FLAGS_END - && !((u16)(o->oBehParams >> 16) & PLATFORM_ON_TRACK_BP_RETURN_TO_START)) { + && !((u16)(o->oBhvParams >> 16) & PLATFORM_ON_TRACK_BP_RETURN_TO_START)) { o->oAction = PLATFORM_ON_TRACK_ACT_FALL; } else { // The ski lift should pause or stop after reaching a special waypoint @@ -189,7 +189,7 @@ static void platform_on_track_act_move_along_track(void) { // after reappearing // Turn face yaw and compute yaw vel - if (!((u16)(o->oBehParams >> 16) & PLATFORM_ON_TRACK_BP_DONT_TURN_YAW)) { + if (!((u16)(o->oBhvParams >> 16) & PLATFORM_ON_TRACK_BP_DONT_TURN_YAW)) { s16 targetFaceYaw = o->oMoveAngleYaw + 0x4000; s16 yawSpeed = abs_angle_diff(targetFaceYaw, o->oFaceAngleYaw) / 20; @@ -200,7 +200,7 @@ static void platform_on_track_act_move_along_track(void) { } // Turn face roll and compute roll vel - if (((u16)(o->oBehParams >> 16) & PLATFORM_ON_TRACK_BP_DONT_TURN_ROLL)) { + if (((u16)(o->oBhvParams >> 16) & PLATFORM_ON_TRACK_BP_DONT_TURN_ROLL)) { s16 rollSpeed = abs_angle_diff(o->oMoveAnglePitch, o->oFaceAngleRoll) / 20; initialAngle = o->oFaceAngleRoll; @@ -310,7 +310,7 @@ void bhv_platform_on_track_update(void) { void bhv_track_ball_update(void) { // Despawn after the elevator passes this ball s16 relativeIndex = - (s16) o->oBehParams2ndByte - (s16) o->parentObj->oPlatformOnTrackBaseBallIndex - 1; + (s16) o->oBhvParams2ndByte - (s16) o->parentObj->oPlatformOnTrackBaseBallIndex - 1; if (relativeIndex < 1 || relativeIndex > 5) { obj_mark_for_deletion(o); } diff --git a/src/game/behaviors/pokey.inc.c b/src/game/behaviors/pokey.inc.c index 9f870869..25571a65 100644 --- a/src/game/behaviors/pokey.inc.c +++ b/src/game/behaviors/pokey.inc.c @@ -58,15 +58,15 @@ void bhv_pokey_body_part_update(void) { // index by killing two body parts on the frame before a new part // spawns, but one of the body parts shifts upward immediately, // so not very interesting - if (o->oBehParams2ndByte > 1 - && !(o->parentObj->oPokeyAliveBodyPartFlags & (1 << (o->oBehParams2ndByte - 1)))) { + if (o->oBhvParams2ndByte > 1 + && !(o->parentObj->oPokeyAliveBodyPartFlags & (1 << (o->oBhvParams2ndByte - 1)))) { o->parentObj->oPokeyAliveBodyPartFlags = - o->parentObj->oPokeyAliveBodyPartFlags | 1 << (o->oBehParams2ndByte - 1); + o->parentObj->oPokeyAliveBodyPartFlags | 1 << (o->oBhvParams2ndByte - 1); o->parentObj->oPokeyAliveBodyPartFlags = - o->parentObj->oPokeyAliveBodyPartFlags & ((1 << o->oBehParams2ndByte) ^ ~0); + o->parentObj->oPokeyAliveBodyPartFlags & ((1 << o->oBhvParams2ndByte) ^ ~0); - o->oBehParams2ndByte--; + o->oBhvParams2ndByte--; } // Set the bottom body part size, and gradually increase it. @@ -76,19 +76,19 @@ void bhv_pokey_body_part_update(void) { // was above it will instantly shrink and begin expanding in its // place. else if (o->parentObj->oPokeyBottomBodyPartSize < 1.0f - && o->oBehParams2ndByte + 1 == o->parentObj->oPokeyNumAliveBodyParts) { + && o->oBhvParams2ndByte + 1 == o->parentObj->oPokeyNumAliveBodyParts) { approach_f32_ptr(&o->parentObj->oPokeyBottomBodyPartSize, 1.0f, 0.1f); cur_obj_scale(o->parentObj->oPokeyBottomBodyPartSize * 3.0f); } //! Pausing causes jumps in offset angle - offsetAngle = o->oBehParams2ndByte * 0x4000 + gGlobalTimer * 0x800; + offsetAngle = o->oBhvParams2ndByte * 0x4000 + gGlobalTimer * 0x800; o->oPosX = o->parentObj->oPosX + coss(offsetAngle) * 6.0f; o->oPosZ = o->parentObj->oPosZ + sins(offsetAngle) * 6.0f; // This is the height of the tower beneath the body part baseHeight = o->parentObj->oPosY - + (120 * (o->parentObj->oPokeyNumAliveBodyParts - o->oBehParams2ndByte) - 240) + + (120 * (o->parentObj->oPokeyNumAliveBodyParts - o->oBhvParams2ndByte) - 240) + 120.0f * o->parentObj->oPokeyBottomBodyPartSize; // We treat the base height as a minimum height, allowing the body @@ -99,7 +99,7 @@ void bhv_pokey_body_part_update(void) { } // Only the head has loot coins - if (o->oBehParams2ndByte == 0) { + if (o->oBhvParams2ndByte == 0) { o->oNumLootCoins = 1; } else { o->oNumLootCoins = 0; @@ -110,7 +110,7 @@ void bhv_pokey_body_part_update(void) { if (obj_handle_attacks(&sPokeyBodyPartHitbox, o->oAction, sPokeyBodyPartAttackHandlers)) { o->parentObj->oPokeyNumAliveBodyParts--; - if (o->oBehParams2ndByte == 0) { + if (o->oBhvParams2ndByte == 0) { o->parentObj->oPokeyHeadWasKilled = TRUE; // Last minute change to blue coins - not sure why they didn't // just set it to -1 above @@ -118,7 +118,7 @@ void bhv_pokey_body_part_update(void) { } o->parentObj->oPokeyAliveBodyPartFlags = - o->parentObj->oPokeyAliveBodyPartFlags & ((1 << o->oBehParams2ndByte) ^ ~0); + o->parentObj->oPokeyAliveBodyPartFlags & ((1 << o->oBhvParams2ndByte) ^ ~0); } else if (o->parentObj->oPokeyHeadWasKilled) { cur_obj_become_intangible(); @@ -130,7 +130,7 @@ void bhv_pokey_body_part_update(void) { // Die in order from top to bottom // If a new body part spawns after the head has been killed, its // death delay will be 0 - o->oPokeyBodyPartDeathDelayAfterHeadKilled = (o->oBehParams2ndByte << 2) + 20; + o->oPokeyBodyPartDeathDelayAfterHeadKilled = (o->oBhvParams2ndByte << 2) + 20; } cur_obj_move_standard(-78); diff --git a/src/game/behaviors/pole.inc.c b/src/game/behaviors/pole.inc.c index 1066e003..79acf19f 100644 --- a/src/game/behaviors/pole.inc.c +++ b/src/game/behaviors/pole.inc.c @@ -14,10 +14,10 @@ */ void bhv_pole_init(void) { /** - * This is equivalent to using `o->oBehParams2ndByte` according to + * This is equivalent to using `o->oBhvParams2ndByte` according to * `spawn_objects_from_info`. */ - s32 tenthHitboxHeight = (o->oBehParams >> 16) & 0xFF; + s32 tenthHitboxHeight = (o->oBhvParams >> 16) & 0xFF; o->hitboxHeight = tenthHitboxHeight * 10; } diff --git a/src/game/behaviors/purple_switch.inc.c b/src/game/behaviors/purple_switch.inc.c index a5157746..5531ff57 100644 --- a/src/game/behaviors/purple_switch.inc.c +++ b/src/game/behaviors/purple_switch.inc.c @@ -15,12 +15,12 @@ void bhv_purple_switch_loop(void) { * Set the switch's model and scale. If Mario is standing near the * switch's middle section, transition to the pressed state. */ - case PURPLE_SWITCH_IDLE: + case PURPLE_SWITCH_ACT_IDLE: cur_obj_set_model(MODEL_PURPLE_SWITCH); cur_obj_scale(1.5f); if (gMarioObject->platform == o && !(gMarioStates[0].action & MARIO_UNKNOWN_13)) { if (lateral_dist_between_objects(o, gMarioObject) < 127.5) { - o->oAction = PURPLE_SWITCH_PRESSED; + o->oAction = PURPLE_SWITCH_ACT_PRESSED; } } break; @@ -29,11 +29,11 @@ void bhv_purple_switch_loop(void) { * Collapse the switch downward, play a sound, and shake the screen. * Immediately transition to the ticking state. */ - case PURPLE_SWITCH_PRESSED: + case PURPLE_SWITCH_ACT_PRESSED: cur_obj_scale_over_time(2, 3, 1.5f, 0.2f); if (o->oTimer == 3) { cur_obj_play_sound_2(SOUND_GENERAL2_PURPLE_SWITCH); - o->oAction = PURPLE_SWITCH_TICKING; + o->oAction = PURPLE_SWITCH_ACT_TICKING; cur_obj_shake_screen(SHAKE_POS_SMALL); #if ENABLE_RUMBLE queue_rumble_data(5, 80); @@ -45,9 +45,9 @@ void bhv_purple_switch_loop(void) { * Play a continuous ticking sound that gets faster when time is almost * up. When time is up, move to a waiting-while-pressed state. */ - case PURPLE_SWITCH_TICKING: - if (o->oBehParams2ndByte != 0) { - if (o->oBehParams2ndByte == 1 && gMarioObject->platform != o) { + case PURPLE_SWITCH_ACT_TICKING: + if (o->oBhvParams2ndByte != 0) { + if (o->oBhvParams2ndByte == 1 && gMarioObject->platform != o) { o->oAction++; } else { if (o->oTimer < 360) { @@ -56,7 +56,7 @@ void bhv_purple_switch_loop(void) { play_sound(SOUND_GENERAL2_SWITCH_TICK_SLOW, gGlobalSoundSource); } if (o->oTimer > 400) { - o->oAction = PURPLE_SWITCH_WAIT_FOR_MARIO_TO_GET_OFF; + o->oAction = PURPLE_SWITCH_ACT_WAIT_FOR_MARIO_TO_GET_OFF; } } } @@ -66,10 +66,10 @@ void bhv_purple_switch_loop(void) { * Make the switch look unpressed again, and transition back to the * idle state. */ - case PURPLE_SWITCH_UNPRESSED: + case PURPLE_SWITCH_ACT_UNPRESSED: cur_obj_scale_over_time(2, 3, 0.2f, 1.5f); if (o->oTimer == 3) { - o->oAction = PURPLE_SWITCH_IDLE; + o->oAction = PURPLE_SWITCH_ACT_IDLE; } break; @@ -78,9 +78,9 @@ void bhv_purple_switch_loop(void) { * him to get off the switch, and when he does so, transition to the * unpressed state. */ - case PURPLE_SWITCH_WAIT_FOR_MARIO_TO_GET_OFF: + case PURPLE_SWITCH_ACT_WAIT_FOR_MARIO_TO_GET_OFF: if (!cur_obj_is_mario_on_platform()) { - o->oAction = PURPLE_SWITCH_UNPRESSED; + o->oAction = PURPLE_SWITCH_ACT_UNPRESSED; } break; } diff --git a/src/game/behaviors/pyramid_elevator.inc.c b/src/game/behaviors/pyramid_elevator.inc.c index ac089de9..34d49c02 100644 --- a/src/game/behaviors/pyramid_elevator.inc.c +++ b/src/game/behaviors/pyramid_elevator.inc.c @@ -26,9 +26,9 @@ void bhv_pyramid_elevator_loop(void) { * Do not move until Mario stands on the elevator. When he does, * transition to the starting state. */ - case PYRAMID_ELEVATOR_IDLE: + case PYRAMID_ELEVATOR_ACT_IDLE: if (gMarioObject->platform == o) { - o->oAction = PYRAMID_ELEVATOR_START_MOVING; + o->oAction = PYRAMID_ELEVATOR_ACT_START_MOVING; } break; @@ -36,10 +36,10 @@ void bhv_pyramid_elevator_loop(void) { * Use a sine wave to start the elevator's movement with a small jolt. * After a certain amount of time, transition to a constant-velocity state. */ - case PYRAMID_ELEVATOR_START_MOVING: + case PYRAMID_ELEVATOR_ACT_START_MOVING: o->oPosY = o->oHomeY - sins(o->oTimer * 0x1000) * 10.0f; if (o->oTimer == 8) { - o->oAction = PYRAMID_ELEVATOR_CONSTANT_VELOCITY; + o->oAction = PYRAMID_ELEVATOR_ACT_CONSTANT_VELOCITY; } break; @@ -47,12 +47,12 @@ void bhv_pyramid_elevator_loop(void) { * Move downwards with constant velocity. Once at the bottom of the * track, transition to the final state. */ - case PYRAMID_ELEVATOR_CONSTANT_VELOCITY: + case PYRAMID_ELEVATOR_ACT_CONSTANT_VELOCITY: o->oVelY = -10.0f; o->oPosY += o->oVelY; if (o->oPosY < 128.0f) { o->oPosY = 128.0f; - o->oAction = PYRAMID_ELEVATOR_AT_BOTTOM; + o->oAction = PYRAMID_ELEVATOR_ACT_AT_BOTTOM; } break; @@ -60,7 +60,7 @@ void bhv_pyramid_elevator_loop(void) { * Use a sine wave to stop the elevator's movement with a small jolt. * Then, remain at the bottom of the track. */ - case PYRAMID_ELEVATOR_AT_BOTTOM: + case PYRAMID_ELEVATOR_ACT_AT_BOTTOM: o->oPosY = sins(o->oTimer * 0x1000) * 10.0f + 128.0f; if (o->oTimer >= 8) { o->oVelY = 0; @@ -81,7 +81,7 @@ void bhv_pyramid_elevator_trajectory_marker_ball_loop(void) { elevator = cur_obj_nearest_object_with_behavior(bhvPyramidElevator); if (elevator != NULL) { - if (elevator->oAction != PYRAMID_ELEVATOR_IDLE) { + if (elevator->oAction != PYRAMID_ELEVATOR_ACT_IDLE) { o->activeFlags = ACTIVE_FLAG_DEACTIVATED; } } diff --git a/src/game/behaviors/pyramid_top.inc.c b/src/game/behaviors/pyramid_top.inc.c index 14b6bc2f..44b77782 100644 --- a/src/game/behaviors/pyramid_top.inc.c +++ b/src/game/behaviors/pyramid_top.inc.c @@ -71,7 +71,7 @@ void bhv_pyramid_top_explode(void) { struct Object *pyramidFragment; s16 i; - spawn_mist_particles_variable(0, 0, 690); + spawn_mist_particles_variable(0, 0, 690.0f); // Generate 30 pyramid fragments with random properties. for (i = 0; i < 30; i++) { diff --git a/src/game/behaviors/pyramid_wall.inc.c b/src/game/behaviors/pyramid_wall.inc.c index 8306aca6..3ced69ac 100644 --- a/src/game/behaviors/pyramid_wall.inc.c +++ b/src/game/behaviors/pyramid_wall.inc.c @@ -1,6 +1,6 @@ /** - * Behavior for bhvSslMovingPyramidWall. + * Behavior for bhvSSLMovingPyramidWall. * * This controls the moving walls found within Shifting Sand Land's pyramid. * Each wall starts at an initial position and moves up or down at a constant @@ -12,7 +12,7 @@ * positions. */ void bhv_ssl_moving_pyramid_wall_init(void) { - switch (o->oBehParams2ndByte) { + switch (o->oBhvParams2ndByte) { case PYRAMID_WALL_BP_POSITION_HIGH: break; diff --git a/src/game/behaviors/racing_penguin.inc.c b/src/game/behaviors/racing_penguin.inc.c index 21639ec1..3f5537f7 100644 --- a/src/game/behaviors/racing_penguin.inc.c +++ b/src/game/behaviors/racing_penguin.inc.c @@ -1,21 +1,21 @@ // racing_penguin.inc.c struct RacingPenguinData { - s16 text; + s16 dialogID; f32 radius; f32 height; }; static struct RacingPenguinData sRacingPenguinData[] = { - { DIALOG_055, 200.0f, 200.0f }, - { DIALOG_164, 350.0f, 250.0f }, + /* RACING_PENGUIN_BP_THIN */ { DIALOG_055, 200.0f, 200.0f }, + /* RACING_PENGUIN_BP_FAT */ { DIALOG_164, 350.0f, 250.0f }, }; void bhv_racing_penguin_init(void) { if (gMarioState->numStars == 120) { cur_obj_scale(8.0f); o->header.gfx.scale[1] = 5.0f; - o->oBehParams2ndByte = 1; + o->oBhvParams2ndByte = RACING_PENGUIN_BP_FAT; } } @@ -27,7 +27,7 @@ static void racing_penguin_act_wait_for_mario(void) { } static void racing_penguin_act_show_init_text(void) { - s32 response = obj_update_race_proposition_dialog(sRacingPenguinData[o->oBehParams2ndByte].text); + s32 response = obj_update_race_proposition_dialog(sRacingPenguinData[o->oBhvParams2ndByte].dialogID); if (response == DIALOG_RESPONSE_YES) { struct Object *child; @@ -141,7 +141,7 @@ static void racing_penguin_act_show_final_text(void) { } } else if (o->oRacingPenguinFinalTextbox > 0) { s32 textResult; - if ((textResult = cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_UP, + if ((textResult = cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_UP, DIALOG_FLAG_TURN_TO_MARIO, CUTSCENE_DIALOG, o->oRacingPenguinFinalTextbox))) { o->oRacingPenguinFinalTextbox = -1; o->oTimer = 0; @@ -182,8 +182,8 @@ void bhv_racing_penguin_update(void) { 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); + cur_obj_push_mario_away_from_cylinder(sRacingPenguinData[o->oBhvParams2ndByte].radius, + sRacingPenguinData[o->oBhvParams2ndByte].height); } void bhv_penguin_race_finish_line_update(void) { diff --git a/src/game/behaviors/rotating_octagonal_plat.inc.c b/src/game/behaviors/rotating_octagonal_plat.inc.c index 3e644848..72e536ca 100644 --- a/src/game/behaviors/rotating_octagonal_plat.inc.c +++ b/src/game/behaviors/rotating_octagonal_plat.inc.c @@ -8,8 +8,8 @@ static const Collision *sOctagonalPlatformCollision[] = { static s16 sOctagonalPlatformAngularVelocities[] = { 300, -300, 600, -600 }; void bhv_rotating_octagonal_plat_init(void) { - o->collisionData = segmented_to_virtual(sOctagonalPlatformCollision[(o->oBehParams >> 16) & 0xFF]); - o->oAngleVelYaw = sOctagonalPlatformAngularVelocities[(o->oBehParams >> 24) & 0xFF]; + o->collisionData = segmented_to_virtual(sOctagonalPlatformCollision[(o->oBhvParams >> 16) & 0xFF]); + o->oAngleVelYaw = sOctagonalPlatformAngularVelocities[(o->oBhvParams >> 24) & 0xFF]; } void bhv_rotating_octagonal_plat_loop(void) { diff --git a/src/game/behaviors/rotating_platform.inc.c b/src/game/behaviors/rotating_platform.inc.c index 9f381b8e..ea48a666 100644 --- a/src/game/behaviors/rotating_platform.inc.c +++ b/src/game/behaviors/rotating_platform.inc.c @@ -3,28 +3,28 @@ #include "levels/wf/header.h" #include "levels/wdw/header.h" -struct WFRotatingPlatformData { +struct RotatingPlatformData { s16 unused; s16 scale; const Collision *collisionData; s16 collisionDistance; }; -struct WFRotatingPlatformData sWFRotatingPlatformData[] = { - { 0, 100, wf_seg7_collision_rotating_platform, 2000 }, - { 0, 150, wdw_seg7_collision_070186B4, 1000 }, +struct RotatingPlatformData sRotatingPlatformData[] = { + /* ROTATING_PLATFORM_BP_WF */ { 0, 100, wf_seg7_collision_rotating_platform, 2000 }, + /* ROTATING_PLATFORM_BP_WDW */ { 0, 150, wdw_seg7_collision_070186B4, 1000 }, }; void bhv_wf_rotating_wooden_platform_loop(void) { - if (o->oAction == 0) { + if (o->oAction == WF_ROTATING_WOODEN_PLATFORM_ACT_IDLE) { o->oAngleVelYaw = 0; if (o->oTimer > 60) { o->oAction++; } - } else { + } else { // WF_ROTATING_WOODEN_PLATFORM_ACT_ROTATING o->oAngleVelYaw = 0x100; if (o->oTimer > 126) { - o->oAction = 0; + o->oAction = WF_ROTATING_WOODEN_PLATFORM_ACT_IDLE; } cur_obj_play_sound_1(SOUND_ENV_ELEVATOR2); } @@ -32,12 +32,12 @@ void bhv_wf_rotating_wooden_platform_loop(void) { } void bhv_rotating_platform_loop(void) { - s8 sp1F = o->oBehParams >> 24; + s8 bhvParams1stByte = o->oBhvParams >> 24; if (o->oTimer == 0) { - obj_set_collision_data(o, sWFRotatingPlatformData[o->oBehParams2ndByte].collisionData); - o->oCollisionDistance = sWFRotatingPlatformData[o->oBehParams2ndByte].collisionDistance; - cur_obj_scale(sWFRotatingPlatformData[o->oBehParams2ndByte].scale * 0.01f); + obj_set_collision_data(o, sRotatingPlatformData[o->oBhvParams2ndByte].collisionData); + o->oCollisionDistance = sRotatingPlatformData[o->oBhvParams2ndByte].collisionDistance; + cur_obj_scale(sRotatingPlatformData[o->oBhvParams2ndByte].scale * 0.01f); } - o->oAngleVelYaw = sp1F << 4; + o->oAngleVelYaw = bhvParams1stByte << 4; o->oFaceAngleYaw += o->oAngleVelYaw; } diff --git a/src/game/behaviors/seesaw_platform.inc.c b/src/game/behaviors/seesaw_platform.inc.c index 5b2e4bc1..b55078be 100644 --- a/src/game/behaviors/seesaw_platform.inc.c +++ b/src/game/behaviors/seesaw_platform.inc.c @@ -21,11 +21,11 @@ static Collision const *sSeesawPlatformCollisionModels[] = { * Init function for bhvSeesawPlatform. */ void bhv_seesaw_platform_init(void) { - o->collisionData = segmented_to_virtual(sSeesawPlatformCollisionModels[o->oBehParams2ndByte]); + o->collisionData = segmented_to_virtual(sSeesawPlatformCollisionModels[o->oBhvParams2ndByte]); // The S-shaped seesaw platform in BitS is large, so increase its collision // distance - if (o->oBehParams2ndByte == 2) { + if (o->oBhvParams2ndByte == 2) { o->oCollisionDistance = 2000.0f; } } diff --git a/src/game/behaviors/sliding_platform.inc.c b/src/game/behaviors/sliding_platform.inc.c index 1b8f73ce..a1466846 100644 --- a/src/game/behaviors/sliding_platform.inc.c +++ b/src/game/behaviors/sliding_platform.inc.c @@ -5,7 +5,7 @@ void bhv_wf_sliding_platform_init(void) { o->oPosX += 2.0f; o->oHomeX = o->oPosX; - switch (o->oBehParams2ndByte) { + switch (o->oBhvParams2ndByte) { case WF_SLID_BRICK_PTFM_BP_MOV_VEL_10: o->oWFSlidBrickPtfmMovVel = 10.0f; break; diff --git a/src/game/behaviors/sliding_platform_2.inc.c b/src/game/behaviors/sliding_platform_2.inc.c index 853bc409..888d1dc2 100644 --- a/src/game/behaviors/sliding_platform_2.inc.c +++ b/src/game/behaviors/sliding_platform_2.inc.c @@ -12,19 +12,19 @@ static Collision const *sSlidingPlatform2CollisionData[] = { }; void bhv_sliding_plat_2_init(void) { - s32 collisionDataIndex = ((u16)(o->oBehParams >> 16) & 0x0380) >> 7; + s32 collisionDataIndex = ((u16)(o->oBhvParams >> 16) & 0x0380) >> 7; o->collisionData = segmented_to_virtual(sSlidingPlatform2CollisionData[collisionDataIndex]); - o->oBackAndForthPlatformPathLength = 50.0f * ((u16)(o->oBehParams >> 16) & 0x003F); + o->oBackAndForthPlatformPathLength = 50.0f * ((u16)(o->oBhvParams >> 16) & 0x003F); if (collisionDataIndex < 5 || collisionDataIndex > 6) { o->oBackAndForthPlatformVel = 15.0f; - if ((u16)(o->oBehParams >> 16) & 0x0040) { + if ((u16)(o->oBhvParams >> 16) & 0x0040) { o->oMoveAngleYaw += 0x8000; } } else { o->oBackAndForthPlatformVel = 10.0f; - if ((u16)(o->oBehParams >> 16) & 0x0040) { + if ((u16)(o->oBhvParams >> 16) & 0x0040) { o->oBackAndForthPlatformDirection = -1.0f; } else { o->oBackAndForthPlatformDirection = 1.0f; diff --git a/src/game/behaviors/snow_mound.inc.c b/src/game/behaviors/snow_mound.inc.c index 3710f86e..6d233fcd 100644 --- a/src/game/behaviors/snow_mound.inc.c +++ b/src/game/behaviors/snow_mound.inc.c @@ -25,7 +25,7 @@ void bhv_sliding_snow_mound_loop(void) { } void bhv_snow_mound_spawn_loop(void) { - struct Object *sp1C; + struct Object *snowMound; if (!is_point_within_radius_of_mario(o->oPosX, o->oPosY, o->oPosZ, 6000) || o->oPosY + 1000.0f < gMarioObject->header.gfx.pos[1]) { @@ -33,12 +33,12 @@ void bhv_snow_mound_spawn_loop(void) { } if (o->oTimer == 64 || o->oTimer == 128 || o->oTimer == 192 || o->oTimer == 224 || o->oTimer == 256) { - sp1C = spawn_object(o, MODEL_SL_SNOW_TRIANGLE, bhvSlidingSnowMound); + snowMound = spawn_object(o, MODEL_SL_SNOW_TRIANGLE, bhvSlidingSnowMound); } if (o->oTimer == 256) { - sp1C->header.gfx.scale[0] = 2.0f; - sp1C->header.gfx.scale[1] = 2.0f; + snowMound->header.gfx.scale[0] = 2.0f; + snowMound->header.gfx.scale[1] = 2.0f; } if (o->oTimer >= 256) { diff --git a/src/game/behaviors/snowman.inc.c b/src/game/behaviors/snowman.inc.c index 93ed9dfd..6fda98bc 100644 --- a/src/game/behaviors/snowman.inc.c +++ b/src/game/behaviors/snowman.inc.c @@ -60,6 +60,7 @@ void snowmans_bottom_act_1(void) { o->oPathedStartWaypoint = segmented_to_virtual(&ccm_seg7_trajectory_snowman); collisionFlags = object_step_without_floor_orient(); + //! Uninitialized parameter, but the parameter is unused in the called function followStatus = cur_obj_follow_path(followStatus); o->oSnowmansBottomUnkF8 = o->oPathedTargetYaw; o->oMoveAngleYaw = approach_s16_symmetric(o->oMoveAngleYaw, o->oSnowmansBottomUnkF8, 0x400); @@ -165,7 +166,7 @@ void bhv_snowmans_bottom_loop(void) { void bhv_snowmans_head_init(void) { u8 starFlags = save_file_get_star_flags(gCurrSaveFileNum - 1, COURSE_NUM_TO_INDEX(gCurrCourseNum)); - s8 sp36 = (o->oBehParams >> 24) & 0xFF; + s8 sp36 = (o->oBhvParams >> 24) & 0xFF; cur_obj_scale(0.7f); diff --git a/src/game/behaviors/snufit.inc.c b/src/game/behaviors/snufit.inc.c index d3a9fc59..a66cb304 100644 --- a/src/game/behaviors/snufit.inc.c +++ b/src/game/behaviors/snufit.inc.c @@ -31,7 +31,7 @@ struct ObjectHitbox sSnufitBulletHitbox = { }; /** - * This geo function shifts snufit's mask when it shrinks down, + * 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) { @@ -193,7 +193,7 @@ void bhv_snufit_balls_loop(void) { o->oGravity = -4.0f; cur_obj_become_intangible(); - } else if (o->oAction == 1 + } 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 diff --git a/src/game/behaviors/sound_birds.inc.c b/src/game/behaviors/sound_birds.inc.c index 214c0c40..dd15324f 100644 --- a/src/game/behaviors/sound_birds.inc.c +++ b/src/game/behaviors/sound_birds.inc.c @@ -5,7 +5,7 @@ void bhv_birds_sound_loop(void) { return; } - switch (o->oBehParams2ndByte) { + switch (o->oBhvParams2ndByte) { case 0: cur_obj_play_sound_1(SOUND_OBJ2_BIRD_CHIRP1); break; diff --git a/src/game/behaviors/sparkle_spawn_star.inc.c b/src/game/behaviors/sparkle_spawn_star.inc.c index f9d7510b..52515285 100644 --- a/src/game/behaviors/sparkle_spawn_star.inc.c +++ b/src/game/behaviors/sparkle_spawn_star.inc.c @@ -13,14 +13,16 @@ struct ObjectHitbox sSparkleSpawnStarHitbox = { }; void bhv_spawned_star_init(void) { - s32 sp24; + s32 starIndex; if (!(o->oInteractionSubtype & INT_SUBTYPE_NO_EXIT)) { - o->oBehParams = o->parentObj->oBehParams; + o->oBhvParams = o->parentObj->oBhvParams; } - sp24 = (o->oBehParams >> 24) & 0xFF; - if (bit_shift_left(sp24) & save_file_get_star_flags(gCurrSaveFileNum - 1, COURSE_NUM_TO_INDEX(gCurrCourseNum))) { + starIndex = (o->oBhvParams >> 24) & 0xFF; + + if (bit_shift_left(starIndex) + & save_file_get_star_flags(gCurrSaveFileNum - 1, COURSE_NUM_TO_INDEX(gCurrCourseNum))) { cur_obj_set_model(MODEL_TRANSPARENT_STAR); } @@ -69,7 +71,7 @@ void bhv_spawned_star_loop(void) { set_time_stop_flags(TIME_STOP_ENABLED | TIME_STOP_MARIO_AND_DOORS); o->activeFlags |= ACTIVE_FLAG_INITIATED_TIME_STOP; o->oAngleVelYaw = 0x800; - if (o->oBehParams2ndByte == 0) { + if (o->oBhvParams2ndByte == 0) { set_home_to_mario(); } else { set_y_home_to_pos(); @@ -123,9 +125,9 @@ void bhv_spawned_star_loop(void) { o->oInteractStatus = 0; } -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; - obj_set_angle(sp1C, 0, 0, 0); +void bhv_spawn_star_no_level_exit(u32 starIndex) { + struct Object *star = spawn_object(o, MODEL_STAR, bhvSpawnedStarNoLevelExit); + star->oBhvParams = starIndex << 24; + star->oInteractionSubtype = INT_SUBTYPE_NO_EXIT; + obj_set_angle(star, 0, 0, 0); } diff --git a/src/game/behaviors/spawn_star.inc.c b/src/game/behaviors/spawn_star.inc.c index 96f71a63..9a0ee301 100644 --- a/src/game/behaviors/spawn_star.inc.c +++ b/src/game/behaviors/spawn_star.inc.c @@ -13,10 +13,10 @@ static struct ObjectHitbox sCollectStarHitbox = { }; void bhv_collect_star_init(void) { - s8 starId = (o->oBehParams >> 24) & 0xFF; + s8 starIndex = (o->oBhvParams >> 24) & 0xFF; u8 currentLevelStarFlags = save_file_get_star_flags(gCurrSaveFileNum - 1, COURSE_NUM_TO_INDEX(gCurrCourseNum)); - if (currentLevelStarFlags & (1 << starId)) { + if (currentLevelStarFlags & (1 << starIndex)) { o->header.gfx.sharedChild = gLoadedGraphNodes[MODEL_TRANSPARENT_STAR]; } else { o->header.gfx.sharedChild = gLoadedGraphNodes[MODEL_STAR]; @@ -41,7 +41,7 @@ void bhv_star_spawn_init(void) { o->oForwardVel = o->oStarSpawnDisFromHome / 30.0f; o->oStarSpawnUnkFC = o->oPosY; - if (o->oBehParams2ndByte == 0 || gCurrCourseNum == COURSE_BBH) { + if (o->oBhvParams2ndByte == 0 || gCurrCourseNum == COURSE_BBH) { cutscene_object(CUTSCENE_STAR_SPAWN, o); } else { cutscene_object(CUTSCENE_RED_COIN_STAR_SPAWN, o); @@ -111,32 +111,32 @@ void bhv_star_spawn_loop(void) { } } -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; - sp30->oHomeX = sp34; - sp30->oHomeY = sp38; - sp30->oHomeZ = sp3C; - sp30->oFaceAnglePitch = 0; - sp30->oFaceAngleRoll = 0; - return sp30; +struct Object *spawn_star(struct Object *star, f32 homeX, f32 homeY, f32 homeZ) { + star = spawn_object_abs_with_rot(o, 0, MODEL_STAR, bhvStarSpawnCoordinates, + o->oPosX, o->oPosY, o->oPosZ, 0, 0, 0); + star->oBhvParams = o->oBhvParams; + star->oHomeX = homeX; + star->oHomeY = homeY; + star->oHomeZ = homeZ; + star->oFaceAnglePitch = 0; + star->oFaceAngleRoll = 0; + return star; } -void spawn_default_star(f32 sp20, f32 sp24, f32 sp28) { - struct Object *sp1C = spawn_star(sp1C, sp20, sp24, sp28); - sp1C->oBehParams2ndByte = 0; +void spawn_default_star(f32 homeX, f32 homeY, f32 homeZ) { + struct Object *star = spawn_star(star, homeX, homeY, homeZ); + star->oBhvParams2ndByte = 0; } -void spawn_red_coin_cutscene_star(f32 sp20, f32 sp24, f32 sp28) { - struct Object *sp1C = spawn_star(sp1C, sp20, sp24, sp28); - sp1C->oBehParams2ndByte = 1; +void spawn_red_coin_cutscene_star(f32 homeX, f32 homeY, f32 homeZ) { + struct Object *star = spawn_star(star, homeX, homeY, homeZ); + star->oBhvParams2ndByte = 1; } -void spawn_no_exit_star(f32 sp20, f32 sp24, f32 sp28) { - struct Object *sp1C = spawn_star(sp1C, sp20, sp24, sp28); - sp1C->oBehParams2ndByte = 1; - sp1C->oInteractionSubtype |= INT_SUBTYPE_NO_EXIT; +void spawn_no_exit_star(f32 homeX, f32 homeY, f32 homeZ) { + struct Object *star = spawn_star(star, homeX, homeY, homeZ); + star->oBhvParams2ndByte = 1; + star->oInteractionSubtype |= INT_SUBTYPE_NO_EXIT; } void bhv_hidden_red_coin_star_init(void) { @@ -150,7 +150,7 @@ void bhv_hidden_red_coin_star_init(void) { if (count == 0) { struct Object *star = spawn_object_abs_with_rot(o, 0, MODEL_STAR, bhvStar, o->oPosX, o->oPosY, o->oPosZ, 0, 0, 0); - star->oBehParams = o->oBehParams; + star->oBhvParams = o->oBhvParams; o->activeFlags = ACTIVE_FLAG_DEACTIVATED; } diff --git a/src/game/behaviors/square_platform_cycle.inc.c b/src/game/behaviors/square_platform_cycle.inc.c index a3525a82..c4f639f3 100644 --- a/src/game/behaviors/square_platform_cycle.inc.c +++ b/src/game/behaviors/square_platform_cycle.inc.c @@ -14,7 +14,7 @@ void bhv_squarish_path_moving_loop(void) { switch (o->oAction) { case 0: - o->oAction = (o->oBehParams2ndByte & 3) + 1; + o->oAction = (o->oBhvParams2ndByte & 0x03) + 1; break; case 1: if (square_plat_set_yaw_until_timer(0, 60)) { diff --git a/src/game/behaviors/strong_wind_particle.inc.c b/src/game/behaviors/strong_wind_particle.inc.c index 993c22a7..a753bf10 100644 --- a/src/game/behaviors/strong_wind_particle.inc.c +++ b/src/game/behaviors/strong_wind_particle.inc.c @@ -26,7 +26,7 @@ void bhv_strong_wind_particle_loop(void) { 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->oMoveAngleYaw += random_f32_around_zero(o->oBhvParams2ndByte * 500); // Wind spread o->oOpacity = 100; } diff --git a/src/game/behaviors/switch_hidden_objects.inc.c b/src/game/behaviors/switch_hidden_objects.inc.c index 0dc44789..5561554d 100644 --- a/src/game/behaviors/switch_hidden_objects.inc.c +++ b/src/game/behaviors/switch_hidden_objects.inc.c @@ -13,51 +13,52 @@ struct ObjectHitbox sBreakableBoxHitbox = { }; void breakable_box_init(void) { - o->oHiddenObjectUnkF4 = NULL; + o->oHiddenObjectPurpleSwitch = NULL; o->oAnimState = 1; - switch (o->oBehParams2ndByte) { - case 0: + switch (o->oBhvParams2ndByte) { + case BREAKABLE_BOX_BP_NO_COINS: o->oNumLootCoins = 0; break; - case 1: + case BREAKABLE_BOX_BP_3_COINS: o->oNumLootCoins = 3; break; - case 2: + case BREAKABLE_BOX_BP_5_COINS: o->oNumLootCoins = 5; break; - case 3: + case BREAKABLE_BOX_BP_GIANT: cur_obj_scale(1.5f); break; } } void hidden_breakable_box_actions(void) { - struct Object *sp1C; + struct Object *purpleSwitch; obj_set_hitbox(o, &sBreakableBoxHitbox); cur_obj_set_model(MODEL_BREAKABLE_BOX_SMALL); - if (o->oAction == 0) { + if (o->oAction == HIDDEN_OBJECT_ACT_INACTIVE) { cur_obj_disable_rendering(); cur_obj_become_intangible(); if (o->oTimer == 0) { breakable_box_init(); } - if (o->oHiddenObjectUnkF4 == NULL) { - o->oHiddenObjectUnkF4 = cur_obj_nearest_object_with_behavior(bhvFloorSwitchHiddenObjects); + if (o->oHiddenObjectPurpleSwitch == NULL) { + o->oHiddenObjectPurpleSwitch = + cur_obj_nearest_object_with_behavior(bhvFloorSwitchHiddenObjects); } - if ((sp1C = o->oHiddenObjectUnkF4) != NULL) { - if (sp1C->oAction == 2) { + if ((purpleSwitch = o->oHiddenObjectPurpleSwitch) != NULL) { + if (purpleSwitch->oAction == PURPLE_SWITCH_ACT_TICKING) { o->oAction++; cur_obj_enable_rendering(); cur_obj_unhide(); } } - } else if (o->oAction == 1) { + } else if (o->oAction == HIDDEN_OBJECT_ACT_ACTIVE) { cur_obj_become_tangible(); if (cur_obj_wait_then_blink(360, 20)) { - o->oAction = 0; + o->oAction = HIDDEN_OBJECT_ACT_INACTIVE; } if (cur_obj_was_attacked_or_ground_pounded()) { spawn_mist_particles(); @@ -66,49 +67,50 @@ void hidden_breakable_box_actions(void) { cur_obj_play_sound_2(SOUND_GENERAL_BREAK_BOX); } load_object_collision_model(); - } else { + } else { // HIDDEN_OBJECT_ACT_BROKEN cur_obj_become_intangible(); cur_obj_disable_rendering(); o->oInteractStatus = 0; - if ((sp1C = o->oHiddenObjectUnkF4) != NULL) { - if (sp1C->oAction == 0) { - o->oAction = 0; + if ((purpleSwitch = o->oHiddenObjectPurpleSwitch) != NULL) { + if (purpleSwitch->oAction == PURPLE_SWITCH_ACT_IDLE) { + o->oAction = HIDDEN_OBJECT_ACT_INACTIVE; } } } } -void hidden_unbreakable_box_actions(void) { - struct Object *sp1C; +void hidden_wdw_platform_actions(void) { + struct Object *purpleSwitch; obj_set_collision_data(o, wdw_seg7_collision_07018528); - if (o->oAction == 0) { + if (o->oAction == HIDDEN_OBJECT_ACT_INACTIVE) { cur_obj_disable_rendering(); cur_obj_become_intangible(); - if (o->oHiddenObjectUnkF4 == NULL) { - o->oHiddenObjectUnkF4 = cur_obj_nearest_object_with_behavior(bhvFloorSwitchHiddenObjects); + if (o->oHiddenObjectPurpleSwitch == NULL) { + o->oHiddenObjectPurpleSwitch = + cur_obj_nearest_object_with_behavior(bhvFloorSwitchHiddenObjects); } - if ((sp1C = o->oHiddenObjectUnkF4) != NULL) { - if (sp1C->oAction == 2) { + if ((purpleSwitch = o->oHiddenObjectPurpleSwitch) != NULL) { + if (purpleSwitch->oAction == PURPLE_SWITCH_ACT_TICKING) { o->oAction++; cur_obj_enable_rendering(); cur_obj_unhide(); } } - } else { + } else { // HIDDEN_OBJECT_ACT_ACTIVE cur_obj_become_tangible(); if (cur_obj_wait_then_blink(360, 20)) { - o->oAction = 0; + o->oAction = HIDDEN_OBJECT_ACT_INACTIVE; } load_object_collision_model(); } } void bhv_hidden_object_loop(void) { - if (o->oBehParams2ndByte == 0) { - hidden_breakable_box_actions(); // Confused, that function has code depending on the action + if (o->oBhvParams2ndByte == HIDDEN_OBJECT_BP_BREAKABLE_BOX) { + hidden_breakable_box_actions(); } else { - hidden_unbreakable_box_actions(); + hidden_wdw_platform_actions(); } } diff --git a/src/game/behaviors/thi_top.inc.c b/src/game/behaviors/thi_top.inc.c index 8b5a9bca..dece40a1 100644 --- a/src/game/behaviors/thi_top.inc.c +++ b/src/game/behaviors/thi_top.inc.c @@ -1,7 +1,7 @@ // thi_top.inc.c -static struct SpawnParticlesInfo sThiTopPuffs = { - /* behParam: */ 0, +static struct SpawnParticlesInfo sTHITopPuffs = { + /* bhvParam: */ 0, /* count: */ 30, /* model: */ MODEL_WHITE_PARTICLE_SMALL, /* offsetY: */ 0, @@ -32,7 +32,7 @@ void bhv_thi_tiny_island_top_loop(void) { if (o->oDistanceToMario < 500.0f) { if (gMarioStates[0].action == ACT_GROUND_POUND_LAND) { o->oAction++; - cur_obj_spawn_particles(&sThiTopPuffs); + cur_obj_spawn_particles(&sTHITopPuffs); spawn_triangle_break_particles(20, MODEL_DIRT_ANIMATION, 0.3f, 3); cur_obj_play_sound_2(SOUND_GENERAL_ACTIVATE_CAP_SWITCH); cur_obj_hide(); diff --git a/src/game/behaviors/thwomp.inc.c b/src/game/behaviors/thwomp.inc.c index 00093c9d..41157d3d 100644 --- a/src/game/behaviors/thwomp.inc.c +++ b/src/game/behaviors/thwomp.inc.c @@ -1,25 +1,25 @@ // thwomp.inc.c -void grindel_thwomp_act_4(void) { +void grindel_thwomp_act_idle_at_bottom(void) { if (o->oTimer == 0) { - o->oThwompRandomTimer = random_float() * 10.0f + 20.0f; + o->oGrindelThwompRandomTimer = random_float() * 10.0f + 20.0f; // [20, 29] } - if (o->oTimer > o->oThwompRandomTimer) { - o->oAction = 0; + if (o->oTimer > o->oGrindelThwompRandomTimer) { + o->oAction = GRINDEL_THWOMP_ACT_RAISE; } } -void grindel_thwomp_act_2(void) { +void grindel_thwomp_act_lower(void) { o->oVelY += -4.0f; o->oPosY += o->oVelY; if (o->oPosY < o->oHomeY) { o->oPosY = o->oHomeY; o->oVelY = 0.0f; - o->oAction = 3; + o->oAction = GRINDEL_THWOMP_ACT_LAND; } } -void grindel_thwomp_act_3(void) { +void grindel_thwomp_act_land(void) { if (o->oTimer == 0) { if (o->oDistanceToMario < 1500.0f) { cur_obj_shake_screen(SHAKE_POS_SMALL); @@ -27,22 +27,22 @@ void grindel_thwomp_act_3(void) { } } if (o->oTimer >= 10) { - o->oAction = 4; + o->oAction = GRINDEL_THWOMP_ACT_IDLE_AT_BOTTOM; } } -void grindel_thwomp_act_1(void) { +void grindel_thwomp_act_idle_at_top(void) { if (o->oTimer == 0) { - o->oThwompRandomTimer = random_float() * 30.0f + 10.0f; + o->oGrindelThwompRandomTimer = random_float() * 30.0f + 10.0f; // [10, 39] } - if (o->oTimer > o->oThwompRandomTimer) { - o->oAction = 2; + if (o->oTimer > o->oGrindelThwompRandomTimer) { + o->oAction = GRINDEL_THWOMP_ACT_LOWER; } } -void grindel_thwomp_act_0(void) { - if (o->oBehParams2ndByte + 40 < o->oTimer) { - o->oAction = 1; +void grindel_thwomp_act_raise(void) { + if (o->oTimer > o->oBhvParams2ndByte + 40) { + o->oAction = GRINDEL_THWOMP_ACT_IDLE_AT_TOP; o->oPosY += 5.0f; } else { o->oPosY += 10.0f; @@ -50,11 +50,11 @@ void grindel_thwomp_act_0(void) { } void (*sGrindelThwompActions[])(void) = { - grindel_thwomp_act_0, - grindel_thwomp_act_1, - grindel_thwomp_act_2, - grindel_thwomp_act_3, - grindel_thwomp_act_4, + grindel_thwomp_act_raise, + grindel_thwomp_act_idle_at_top, + grindel_thwomp_act_lower, + grindel_thwomp_act_land, + grindel_thwomp_act_idle_at_bottom, }; void bhv_grindel_thwomp_loop(void) { diff --git a/src/game/behaviors/tilting_inverted_pyramid.inc.c b/src/game/behaviors/tilting_inverted_pyramid.inc.c index 77193dc7..9c09f04c 100644 --- a/src/game/behaviors/tilting_inverted_pyramid.inc.c +++ b/src/game/behaviors/tilting_inverted_pyramid.inc.c @@ -94,7 +94,7 @@ void bhv_tilting_inverted_pyramid_loop(void) { dy = 500.0f; dz = gMarioObject->oPosZ - o->oPosZ; d = sqrtf(dx * dx + dy * dy + dz * dz); - + //! Always true since dy = 500, making d >= 500. if (d != 0.0f) { // Normalizing @@ -120,7 +120,7 @@ void bhv_tilting_inverted_pyramid_loop(void) { o->oTiltingPyramidMarioOnPlatform = FALSE; } - // Approach the normals by 0.01f towards the new goal, then create a transform matrix and orient the object. + // Approach the normals by 0.01f towards the new goal, then create a transform matrix and orient the object. // Outside of the other conditionals since it needs to tilt regardless of whether Mario is on. o->oTiltingPyramidNormalX = approach_by_increment(dx, o->oTiltingPyramidNormalX, 0.01f); o->oTiltingPyramidNormalY = approach_by_increment(dy, o->oTiltingPyramidNormalY, 0.01f); diff --git a/src/game/behaviors/tower_platform.inc.c b/src/game/behaviors/tower_platform.inc.c index aca5c371..ea2ec202 100644 --- a/src/game/behaviors/tower_platform.inc.c +++ b/src/game/behaviors/tower_platform.inc.c @@ -99,14 +99,14 @@ void spawn_wf_platform_group(void) { o->oPlatformSpawnerUnk104 = 380.0f; o->oPlatformSpawnerUnk108 = 3.0f; - 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); + 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) { diff --git a/src/game/behaviors/tox_box.inc.c b/src/game/behaviors/tox_box.inc.c index 47c25b20..3751df8a 100644 --- a/src/game/behaviors/tox_box.inc.c +++ b/src/game/behaviors/tox_box.inc.c @@ -1,12 +1,81 @@ // tox_box.inc.c -s8 D_8032F8F0[] = { 4, 1, 4, 1, 6, 1, 6, 1, 5, 1, 5, 1, 6, 1, 6, 1, 5, 1, 2, 4, 1, 4, 1, 4, 1, 2, - 5, 1, 5, 1, 7, 1, 7, 1, 4, 1, 4, 1, 7, 1, 7, 1, 5, 1, 5, 1, 5, 1, 2, 4, 1, -1 }; -s8 D_8032F924[] = { 4, 1, 4, 1, 7, 1, 7, 1, 7, 1, 2, 6, 1, 6, 1, 6, 1, 5, - 1, 5, 1, 6, 1, 5, 1, 5, 1, 2, 4, 1, 4, 1, 7, 1, -1 }; -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 }; +#define FORWARD TOX_BOX_ACT_ROLL_FORWARD, TOX_BOX_ACT_ROLL_LAND +#define BACKWARD TOX_BOX_ACT_ROLL_BACKWARD, TOX_BOX_ACT_ROLL_LAND +#define RIGHT TOX_BOX_ACT_ROLL_RIGHT, TOX_BOX_ACT_ROLL_LAND +#define LEFT TOX_BOX_ACT_ROLL_LEFT, TOX_BOX_ACT_ROLL_LAND +#define IDLE TOX_BOX_ACT_IDLE +#define END TOX_BOX_ACT_TABLE_END + +s8 sToxBoxActionTable1[] = { + FORWARD, FORWARD, RIGHT, RIGHT, BACKWARD, BACKWARD, RIGHT, RIGHT, BACKWARD, IDLE, + + FORWARD, FORWARD, FORWARD, IDLE, + + BACKWARD, BACKWARD, LEFT, LEFT, FORWARD, FORWARD, LEFT, LEFT, BACKWARD, BACKWARD, BACKWARD, IDLE, + + FORWARD, END, +}; + +s8 sToxBoxActionTable2[] = { + FORWARD, FORWARD, LEFT, LEFT, LEFT, IDLE, + + RIGHT, RIGHT, RIGHT, BACKWARD, BACKWARD, RIGHT, BACKWARD, BACKWARD, IDLE, + + FORWARD, FORWARD, LEFT, END, +}; + +s8 sToxBoxActionTable3[] = { + FORWARD, FORWARD, FORWARD, FORWARD, FORWARD, IDLE, + + BACKWARD, BACKWARD, BACKWARD, BACKWARD, BACKWARD, LEFT, IDLE, + + RIGHT, RIGHT, BACKWARD, IDLE, + + FORWARD, LEFT, END, +}; + +#undef FORWARD +#undef BACKWARD +#undef RIGHT +#undef LEFT +#undef IDLE +#undef END + +/* + * (number = table, v = direction, * = idle) + * + * +---+ +---+ + * |1 *| |1 *| + * +---+---+---+ +---+ +---+ +---+ + * | 1 | 1 | 1 | |1 v| |2 *| | | + * +---+---+---+ +---+---+---+---+---+ +---+---+---+ + * | 1 | | 1 | | 1 | | | | 2 | | | | | + * +---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+ + * | |1 *| | 1 | 1 | 1 | | 2 |2 v| | | | | + * +---+---+ +---+---+---+ +---+---+---+---+ +---+ + * | 2 | + * +---+---+---+---+---+---+---+ +---+ + * | 2 | 2 | 2 |2 *| | |3 *| | | + * +---+---+---+---+---+---+---+---+---+ + * | 3 |3 v|3 *| + * +---+---+---+ + * | 3 | + * +---+ + * | 3 | + * +---+ + * | 3 | + * +---+ + * | 3 | + * +---+ + * |3 *| + * +---+ + */ +s8 *sToxBoxActionTables[] = { + /* TOX_BOX_BP_MOVEMENT_PATTERN_1 */ sToxBoxActionTable1, + /* TOX_BOX_BP_MOVEMENT_PATTERN_2 */ sToxBoxActionTable2, + /* TOX_BOX_BP_MOVEMENT_PATTERN_3 */ sToxBoxActionTable3, +}; void tox_box_shake_screen(void) { if (o->oDistanceToMario < 3000.0f) { @@ -14,10 +83,10 @@ void tox_box_shake_screen(void) { } } -void tox_box_move(f32 forwardVel, f32 a1, s16 deltaPitch, s16 deltaRoll) { +void tox_box_move(f32 forwardVel, f32 upVel, s16 deltaPitch, s16 deltaRoll) { o->oPosY = 99.41124 * sins((f32)(o->oTimer + 1) / 8 * 0x8000) + o->oHomeY + 3.0f; o->oForwardVel = forwardVel; - o->oUpVel = a1; + o->oUpVel = upVel; o->oFaceAnglePitch += deltaPitch; if ((s16) o->oFaceAnglePitch < 0) { @@ -28,28 +97,28 @@ void tox_box_move(f32 forwardVel, f32 a1, s16 deltaPitch, s16 deltaRoll) { cur_obj_set_pos_via_transform(); if (o->oTimer == 7) { - o->oAction = cur_obj_progress_direction_table(); + o->oAction = cur_obj_progress_action_table(); cur_obj_play_sound_2(SOUND_GENERAL_UNK46); } } -void tox_box_act_4(void) { +void tox_box_act_roll_forward(void) { tox_box_move(64.0f, 0.0f, 0x800, 0); } -void tox_box_act_5(void) { +void tox_box_act_roll_backward(void) { tox_box_move(-64.0f, 0.0f, -0x800, 0); } -void tox_box_act_6(void) { +void tox_box_act_roll_right(void) { tox_box_move(0.0f, -64.0f, 0, 0x800); } -void tox_box_act_7(void) { +void tox_box_act_roll_left(void) { tox_box_move(0.0f, 64.0f, 0, -0x800); } -void tox_box_act_1(void) { +void tox_box_act_roll_land(void) { o->oForwardVel = 0.0f; if (o->oTimer == 0) { @@ -59,36 +128,36 @@ void tox_box_act_1(void) { o->oPosY = o->oHomeY + 3.0f; if (o->oTimer == 20) { - o->oAction = cur_obj_progress_direction_table(); + o->oAction = cur_obj_progress_action_table(); } } -void tox_box_act_2(void) { +void tox_box_act_idle(void) { if (o->oTimer == 20) { - o->oAction = cur_obj_progress_direction_table(); + o->oAction = cur_obj_progress_action_table(); } } -void tox_box_act_3(void) { +void tox_box_act_unused_idle(void) { if (o->oTimer == 20) { - o->oAction = cur_obj_progress_direction_table(); + o->oAction = cur_obj_progress_action_table(); } } -void tox_box_act_0(void) { - s8 *sp1C = D_8032F96C[o->oBehParams2ndByte]; - o->oAction = cur_obj_set_direction_table(sp1C); +void tox_box_act_init(void) { + s8 *actionTable = sToxBoxActionTables[o->oBhvParams2ndByte]; + o->oAction = cur_obj_set_action_table(actionTable); } 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, + tox_box_act_init, + tox_box_act_roll_land, + tox_box_act_idle, + tox_box_act_unused_idle, + tox_box_act_roll_forward, + tox_box_act_roll_backward, + tox_box_act_roll_right, + tox_box_act_roll_left, }; void bhv_tox_box_loop(void) { diff --git a/src/game/behaviors/treasure_chest.inc.c b/src/game/behaviors/treasure_chest.inc.c index 55a6b0cc..e1fe6d60 100644 --- a/src/game/behaviors/treasure_chest.inc.c +++ b/src/game/behaviors/treasure_chest.inc.c @@ -39,8 +39,8 @@ void bhv_treasure_chest_top_loop(void) { if (o->oFaceAnglePitch < -0x4000) { o->oFaceAnglePitch = -0x4000; o->oAction++; - if (o->parentObj->oBehParams2ndByte != 4) { - spawn_orange_number(o->parentObj->oBehParams2ndByte, 0, -40, 0); + if (o->parentObj->oBhvParams2ndByte != 4) { + spawn_orange_number(o->parentObj->oBhvParams2ndByte, 0, -40, 0); } } break; @@ -71,7 +71,7 @@ void bhv_treasure_chest_bottom_loop(void) { if (obj_check_if_facing_toward_angle(o->oMoveAngleYaw, gMarioObject->header.gfx.angle[1] + 0x8000, 0x3000) && is_point_within_radius_of_mario(o->oPosX, o->oPosY, o->oPosZ, 150) && !o->parentObj->oTreasureChestUnkF8) { - if (o->parentObj->oTreasureChestUnkF4 == o->oBehParams2ndByte) { + if (o->parentObj->oTreasureChestUnkF4 == o->oBhvParams2ndByte) { play_sound(SOUND_GENERAL2_RIGHT_ANSWER, gGlobalSoundSource); o->parentObj->oTreasureChestUnkF4++; o->oAction = 1; @@ -106,7 +106,7 @@ void bhv_treasure_chest_bottom_loop(void) { void spawn_treasure_chest(s8 sp3B, s32 x, s32 y, s32 z, s16 yaw) { struct Object *sp34 = spawn_object_abs_with_rot(o, 0, MODEL_TREASURE_CHEST_BASE, bhvTreasureChestBottom, x, y, z, 0, yaw, 0); - sp34->oBehParams2ndByte = sp3B; + sp34->oBhvParams2ndByte = sp3B; } void bhv_treasure_chest_ship_init(void) { @@ -176,7 +176,7 @@ void bhv_treasure_chest_jrb_loop(void) { } } -void bhv_treasure_chest_init(void) { +void bhv_treasure_chest_ddd_init(void) { spawn_treasure_chest(1, -4500, -5119, 1300, -0x6001); spawn_treasure_chest(2, -1800, -5119, 1050, 0x1FFF); spawn_treasure_chest(3, -4500, -5119, -1100, 9102); @@ -186,7 +186,7 @@ void bhv_treasure_chest_init(void) { o->oTreasureChestUnkFC = 0; } -void bhv_treasure_chest_loop(void) { +void bhv_treasure_chest_ddd_loop(void) { switch (o->oAction) { case 0: if (o->oTreasureChestUnkF4 == 5) { diff --git a/src/game/behaviors/triplet_butterfly.inc.c b/src/game/behaviors/triplet_butterfly.inc.c index d39a3164..025cae42 100644 --- a/src/game/behaviors/triplet_butterfly.inc.c +++ b/src/game/behaviors/triplet_butterfly.inc.c @@ -1,11 +1,5 @@ // triplet_butterfly.inc.c -struct TripletButterflyActivationData { - s32 model; - const BehaviorScript *behavior; - f32 scale; -}; - static struct ObjectHitbox sTripletButterflyExplodeHitbox = { /* interactType: */ INTERACT_MR_BLIZZARD, /* downOffset: */ 50, @@ -18,17 +12,23 @@ static struct ObjectHitbox sTripletButterflyExplodeHitbox = { /* hurtboxHeight: */ 50, }; +struct TripletButterflyActivationData { + s32 model; + const BehaviorScript *behavior; + f32 scale; +}; + static struct TripletButterflyActivationData sTripletButterflyActivationData[] = { - { MODEL_BOWLING_BALL, NULL, 0.5f }, - { MODEL_1UP, bhv1upWalking, 1.0f }, + /* TRIPLET_BUTTERFLY_TYPE_EXPLODES */ { MODEL_BOWLING_BALL, NULL, 0.5f }, + /* TRIPLET_BUTTERFLY_TYPE_SPAWN_1UP */ { MODEL_1UP, bhv1UpWalking, 1.0f }, }; static void triplet_butterfly_act_init(void) { - s32 butterflyNum = o->oBehParams2ndByte & TRIPLET_BUTTERFLY_BP_BUTTERFLY_NUM; + s32 butterflySpawnType = o->oBhvParams2ndByte & TRIPLET_BUTTERFLY_BP_SPAWN_TYPE_MASK; s32 i; - if (butterflyNum != 0 || o->oDistanceToMario < 200.0f) { - if (butterflyNum == 0) { + if (butterflySpawnType != TRIPLET_BUTTERFLY_BP_SPAWN_TYPE_SPAWNER || o->oDistanceToMario < 200.0f) { + if (butterflySpawnType == TRIPLET_BUTTERFLY_BP_SPAWN_TYPE_SPAWNER) { for (i = 1; i <= 2; i++) { spawn_object_relative(i, 0, 0, 0, o, MODEL_BUTTERFLY, bhvTripletButterfly); } @@ -37,16 +37,16 @@ static void triplet_butterfly_act_init(void) { } //! TODO: Describe this glitch - if (o->parentObj->oTripletButterflySelectedButterfly == o->oBehParams2ndByte) { + if (o->parentObj->oTripletButterflySelectedButterfly == o->oBhvParams2ndByte) { o->oTripletButterflyType = TRIPLET_BUTTERFLY_TYPE_SPAWN_1UP; - } else if (o->parentObj->oBehParams2ndByte & TRIPLET_BUTTERFLY_BP_NO_BOMBS) { + } else if (o->parentObj->oBhvParams2ndByte & TRIPLET_BUTTERFLY_BP_NO_BOMBS) { o->oTripletButterflyType = TRIPLET_BUTTERFLY_TYPE_NORMAL; } // Default butterfly type is TRIPLET_BUTTERFLY_TYPE_EXPLODES o->oAction = TRIPLET_BUTTERFLY_ACT_WANDER; - o->oTripletButterflyBaseYaw = o->oBehParams2ndByte * (0x10000 / 3); + o->oTripletButterflyBaseYaw = o->oBhvParams2ndByte * (0x10000 / 3); o->oMoveAngleYaw = (s32)(o->oTripletButterflyBaseYaw + random_linear_offset(0, 0x5555)); o->oTripletButterflySpeed = random_linear_offset(15, 15); diff --git a/src/game/behaviors/ttc_2d_rotator.inc.c b/src/game/behaviors/ttc_2d_rotator.inc.c index a403381c..a439965e 100644 --- a/src/game/behaviors/ttc_2d_rotator.inc.c +++ b/src/game/behaviors/ttc_2d_rotator.inc.c @@ -38,8 +38,8 @@ static s16 sTTC2DRotatorTimeBetweenTurns[][4] = { */ void bhv_ttc_2d_rotator_init(void) { o->oTTC2DRotatorMinTimeUntilNextTurn = - sTTC2DRotatorTimeBetweenTurns[o->oBehParams2ndByte][gTTCSpeedSetting]; - o->oTTC2DRotatorIncrement = o->oTTC2DRotatorSpeed = sTTC2DRotatorSpeeds[o->oBehParams2ndByte]; + sTTC2DRotatorTimeBetweenTurns[o->oBhvParams2ndByte][gTTCSpeedSetting]; + o->oTTC2DRotatorIncrement = o->oTTC2DRotatorSpeed = sTTC2DRotatorSpeeds[o->oBhvParams2ndByte]; } /** @@ -82,7 +82,7 @@ void bhv_ttc_2d_rotator_update(void) { } o->oAngleVelYaw = o->oFaceAngleYaw - startYaw; - if (o->oBehParams2ndByte == TTC_2D_ROTATOR_BP_HAND) { + if (o->oBhvParams2ndByte == TTC_2D_ROTATOR_BP_HAND) { load_object_collision_model(); } } diff --git a/src/game/behaviors/ttc_cog.inc.c b/src/game/behaviors/ttc_cog.inc.c index 7d15c911..d1d306d7 100644 --- a/src/game/behaviors/ttc_cog.inc.c +++ b/src/game/behaviors/ttc_cog.inc.c @@ -27,8 +27,8 @@ static s16 sTTCCogNormalSpeeds[] = { 200, 400 }; */ void bhv_ttc_cog_init(void) { o->collisionData = segmented_to_virtual( - sTTCCogCollisionModels[(o->oBehParams2ndByte & TTC_COG_BP_SHAPE_MASK) >> 1]); - o->oTTCCogDir = sTTCCogDirections[o->oBehParams2ndByte & TTC_COG_BP_DIR_MASK]; + sTTCCogCollisionModels[(o->oBhvParams2ndByte & TTC_COG_BP_SHAPE_MASK) >> 1]); + o->oTTCCogDir = sTTCCogDirections[o->oBhvParams2ndByte & TTC_COG_BP_DIR_MASK]; } /** diff --git a/src/game/behaviors/ttc_elevator.inc.c b/src/game/behaviors/ttc_elevator.inc.c index f0f4fe12..41a51b74 100644 --- a/src/game/behaviors/ttc_elevator.inc.c +++ b/src/game/behaviors/ttc_elevator.inc.c @@ -17,10 +17,10 @@ static s8 sTTCElevatorSpeeds[] = { * Init function for bhvTTCElevator. */ void bhv_ttc_elevator_init(void) { - // If behParam is nonzero, then move 100 * behParam units. Otherwise default + // If bhvParam is nonzero, then move 100 * bhvParam units. Otherwise default // to 500 f32 peakOffset = - ((o->oBehParams >> 16) & 0xFFFF) ? 100.0f * ((o->oBehParams >> 16) & 0xFFFF) : 500.0f; + ((o->oBhvParams >> 16) & 0xFFFF) ? 100.0f * ((o->oBhvParams >> 16) & 0xFFFF) : 500.0f; o->oTTCElevatorPeakY = o->oPosY + peakOffset; } diff --git a/src/game/behaviors/ttc_moving_bar.inc.c b/src/game/behaviors/ttc_moving_bar.inc.c index fb6efe05..be972324 100644 --- a/src/game/behaviors/ttc_moving_bar.inc.c +++ b/src/game/behaviors/ttc_moving_bar.inc.c @@ -30,7 +30,7 @@ void bhv_ttc_moving_bar_init(void) { // This causes the first cycle to start at different times for different // bars - o->oTTCMovingBarStoppedTimer = 10 * o->oBehParams2ndByte; + o->oTTCMovingBarStoppedTimer = 10 * o->oBhvParams2ndByte; o->oMoveAngleYaw = 0x4000 - o->oMoveAngleYaw; } diff --git a/src/game/behaviors/ttc_pit_block.inc.c b/src/game/behaviors/ttc_pit_block.inc.c index ccc45f58..6424f1bd 100644 --- a/src/game/behaviors/ttc_pit_block.inc.c +++ b/src/game/behaviors/ttc_pit_block.inc.c @@ -37,7 +37,7 @@ static struct TTCPitBlockProperties sTTCPitBlockProperties[][2] = { * Init function for bhvTTCPitBlock. */ void bhv_ttc_pit_block_init(void) { - o->collisionData = segmented_to_virtual(sTTCPitBlockCollisionModels[o->oBehParams2ndByte]); + o->collisionData = segmented_to_virtual(sTTCPitBlockCollisionModels[o->oBhvParams2ndByte]); o->oTTCPitBlockPeakY = o->oPosY + 330.0f; diff --git a/src/game/behaviors/ttc_rotating_solid.inc.c b/src/game/behaviors/ttc_rotating_solid.inc.c index 6a7a5a5b..a12ddefd 100644 --- a/src/game/behaviors/ttc_rotating_solid.inc.c +++ b/src/game/behaviors/ttc_rotating_solid.inc.c @@ -26,9 +26,9 @@ static u8 sTTCRotatingSolidInitialDelays[] = { * Init function for bhvTTCRotatingSolid. */ void bhv_ttc_rotating_solid_init(void) { - o->collisionData = segmented_to_virtual(sTTCRotatingSolidCollisionModels[o->oBehParams2ndByte]); + o->collisionData = segmented_to_virtual(sTTCRotatingSolidCollisionModels[o->oBhvParams2ndByte]); - o->oTTCRotatingSolidNumSides = o->oBehParams2ndByte == TTC_ROTATING_SOLID_BP_CUBE ? 4 : 3; + o->oTTCRotatingSolidNumSides = o->oBhvParams2ndByte == TTC_ROTATING_SOLID_BP_CUBE ? 4 : 3; o->oTTCRotatingSolidRotationDelay = sTTCRotatingSolidInitialDelays[gTTCSpeedSetting]; } diff --git a/src/game/behaviors/ttc_treadmill.inc.c b/src/game/behaviors/ttc_treadmill.inc.c index 4a6c210b..f2025e50 100644 --- a/src/game/behaviors/ttc_treadmill.inc.c +++ b/src/game/behaviors/ttc_treadmill.inc.c @@ -25,7 +25,8 @@ extern s16 ttc_movtex_tris_big_surface_treadmill[]; extern s16 ttc_movtex_tris_small_surface_treadmill[]; void bhv_ttc_treadmill_init(void) { - o->collisionData = segmented_to_virtual(sTTCTreadmillCollisionModels[o->oBehParams2ndByte & 0x01]); + o->collisionData = segmented_to_virtual( + sTTCTreadmillCollisionModels[o->oBhvParams2ndByte & TTC_TREADMILL_BP_FLAG_MASK]); o->oTTCTreadmillBigSurface = segmented_to_virtual(ttc_movtex_tris_big_surface_treadmill); o->oTTCTreadmillSmallSurface = segmented_to_virtual(ttc_movtex_tris_small_surface_treadmill); diff --git a/src/game/behaviors/tumbling_bridge.inc.c b/src/game/behaviors/tumbling_bridge.inc.c index 8caf618c..7f08ce36 100644 --- a/src/game/behaviors/tumbling_bridge.inc.c +++ b/src/game/behaviors/tumbling_bridge.inc.c @@ -5,7 +5,7 @@ #include "levels/lll/header.h" #include "levels/bitfs/header.h" -struct Struct8032F34C { +struct TumblingBridgeData { s16 numBridgeSections; s16 bridgeRelativeStartingXorZ; s16 platformWidth; @@ -13,11 +13,11 @@ struct Struct8032F34C { const Collision *collision; }; -struct Struct8032F34C sTumblingBridgeParams[] = { - { 9, -512, 0x80, MODEL_WF_TUMBLING_BRIDGE_PART, wf_seg7_collision_tumbling_bridge }, - { 9, -412, 103, MODEL_BBH_TUMBLING_PLATFORM_PART, bbh_seg7_collision_07026B1C }, - { 9, -512, 0x80, MODEL_LLL_FALLING_PLATFORM, lll_seg7_collision_0701D21C }, - { 9, -512, 0x80, MODEL_BITFS_TUMBLING_PLATFORM_PART, bitfs_seg7_collision_07015288 }, +struct TumblingBridgeData sTumblingBridgeData[] = { + /* TUMBLING_BRIDGE_BP_WF */ { 9, -512, 128, MODEL_WF_TUMBLING_BRIDGE_PART, wf_seg7_collision_tumbling_bridge }, + /* TUMBLING_BRIDGE_BP_BBH */ { 9, -412, 103, MODEL_BBH_TUMBLING_PLATFORM_PART, bbh_seg7_collision_07026B1C }, + /* TUMBLING_BRIDGE_BP_LLL */ { 9, -512, 128, MODEL_LLL_FALLING_PLATFORM, lll_seg7_collision_0701D21C }, + /* TUMBLING_BRIDGE_BP_BITFS */ { 9, -512, 128, MODEL_BITFS_TUMBLING_PLATFORM_PART, bitfs_seg7_collision_07015288 }, }; void bhv_tumbling_bridge_platform_loop(void) { @@ -64,25 +64,25 @@ void bhv_tumbling_bridge_platform_loop(void) { void tumbling_bridge_act_1(void) { struct Object *platformObj; s32 i; - s32 bridgeID = o->oBehParams2ndByte; + s32 bridgeID = o->oBhvParams2ndByte; s32 relativePlatformX; s32 relativePlatformZ; s32 relativePlatformY = 0; s32 relativeInitialPlatformY = 0; - for (i = 0; i < sTumblingBridgeParams[bridgeID].numBridgeSections; i++) { + for (i = 0; i < sTumblingBridgeData[bridgeID].numBridgeSections; i++) { relativePlatformX = 0; relativePlatformZ = 0; - if (bridgeID == 3) { - relativePlatformX = sTumblingBridgeParams[bridgeID].bridgeRelativeStartingXorZ - + sTumblingBridgeParams[bridgeID].platformWidth * i; + if (bridgeID == TUMBLING_BRIDGE_BP_BITFS) { + relativePlatformX = sTumblingBridgeData[bridgeID].bridgeRelativeStartingXorZ + + sTumblingBridgeData[bridgeID].platformWidth * i; } else { - relativePlatformZ = sTumblingBridgeParams[bridgeID].bridgeRelativeStartingXorZ - + sTumblingBridgeParams[bridgeID].platformWidth * i; + relativePlatformZ = sTumblingBridgeData[bridgeID].bridgeRelativeStartingXorZ + + sTumblingBridgeData[bridgeID].platformWidth * i; } - if (cur_obj_has_behavior(bhvLllTumblingBridge)) { + if (cur_obj_has_behavior(bhvLLLTumblingBridge)) { if (i % 3 == 0) { relativePlatformY -= 150; } @@ -91,9 +91,9 @@ void tumbling_bridge_act_1(void) { platformObj = spawn_object_relative( 0, relativePlatformX, relativePlatformY + relativeInitialPlatformY, relativePlatformZ, o, - sTumblingBridgeParams[bridgeID].model, bhvTumblingBridgePlatform); + sTumblingBridgeData[bridgeID].model, bhvTumblingBridgePlatform); - obj_set_collision_data(platformObj, sTumblingBridgeParams[bridgeID].collision); + obj_set_collision_data(platformObj, sTumblingBridgeData[bridgeID].collision); } o->oAction = 2; @@ -101,7 +101,7 @@ void tumbling_bridge_act_1(void) { void tumbling_bridge_act_2(void) { cur_obj_hide(); - if (cur_obj_has_behavior(bhvLllTumblingBridge)) { + if (cur_obj_has_behavior(bhvLLLTumblingBridge)) { cur_obj_unhide(); } else if (o->oDistanceToMario > 1200.0f) { o->oAction = 3; @@ -115,7 +115,7 @@ void tumbling_bridge_act_3(void) { } void tumbling_bridge_act_0(void) { - if (cur_obj_has_behavior(bhvLllTumblingBridge) || o->oDistanceToMario < 1000.0f) { + if (cur_obj_has_behavior(bhvLLLTumblingBridge) || o->oDistanceToMario < 1000.0f) { o->oAction = 1; } } diff --git a/src/game/behaviors/tuxie.inc.c b/src/game/behaviors/tuxie.inc.c index c3c98f98..058b45f3 100644 --- a/src/game/behaviors/tuxie.inc.c +++ b/src/game/behaviors/tuxie.inc.c @@ -50,8 +50,8 @@ void tuxies_mother_act_1(void) { case 0: cur_obj_init_animation_with_sound(3); if (!cur_obj_is_mario_on_platform()) { - s32 sp2C = (o->oBehParams >> 16) & 0xFF; - s32 sp28 = (o->prevObj->oBehParams >> 16) & 0xFF; + s32 sp2C = (o->oBhvParams >> 16) & 0xFF; + s32 sp28 = (o->prevObj->oBhvParams >> 16) & 0xFF; s32 dialogID; if (sp2C == sp28) { @@ -59,7 +59,7 @@ void tuxies_mother_act_1(void) { } else { dialogID = DIALOG_059; } - if (cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_UP, + if (cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_UP, DIALOG_FLAG_TURN_TO_MARIO, CUTSCENE_DIALOG, dialogID)) { if (dialogID == DIALOG_058) { o->oSubAction = 1; @@ -129,7 +129,7 @@ void tuxies_mother_act_0(void) { } break; case 1: - if (cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_UP, + if (cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_UP, DIALOG_FLAG_TURN_TO_MARIO, CUTSCENE_DIALOG, DIALOG_057)) { o->oSubAction++; } @@ -357,5 +357,6 @@ Gfx *geo_switch_tuxie_mother_eyes(s32 run, struct GraphNode *node, UNUSED Mat4 * } } } + return NULL; } diff --git a/src/game/behaviors/tweester.inc.c b/src/game/behaviors/tweester.inc.c index 8bd28c63..4fcca71c 100644 --- a/src/game/behaviors/tweester.inc.c +++ b/src/game/behaviors/tweester.inc.c @@ -72,7 +72,7 @@ void tweester_act_idle(void) { * After Mario is twirling, then return home. */ void tweester_act_chase(void) { - f32 activationRadius = o->oBehParams2ndByte * 100; + f32 activationRadius = o->oBhvParams2ndByte * 100; o->oAngleToHome = cur_obj_angle_to_home(); cur_obj_play_sound_1(SOUND_ENV_WIND1); @@ -138,7 +138,7 @@ void (*sTweesterActions[])(void) = { }; /** - * Loop behavior for Tweester. + * Loop behavior for Tweester. * Loads the hitbox and calls its relevant action. */ void bhv_tweester_loop(void) { diff --git a/src/game/behaviors/ukiki.inc.c b/src/game/behaviors/ukiki.inc.c index ffc3e2d5..831b4a16 100644 --- a/src/game/behaviors/ukiki.inc.c +++ b/src/game/behaviors/ukiki.inc.c @@ -11,7 +11,7 @@ * or makes him wait to respawn if in water. */ void handle_cap_ukiki_reset(void) { - if (o->oBehParams2ndByte == UKIKI_CAP) { + if (o->oBhvParams2ndByte == UKIKI_BP_CAP) { if (cur_obj_mario_far_away()) { cur_obj_set_pos_to_home_and_stop(); o->oAction = UKIKI_ACT_IDLE; @@ -26,7 +26,7 @@ void handle_cap_ukiki_reset(void) { * the cap ukiki. */ s32 is_cap_ukiki_and_mario_has_normal_cap_on_head(void) { - if (o->oBehParams2ndByte == UKIKI_CAP + if (o->oBhvParams2ndByte == UKIKI_BP_CAP && does_mario_have_normal_cap_on_head(gMarioState)) { return TRUE; } @@ -38,11 +38,9 @@ s32 is_cap_ukiki_and_mario_has_normal_cap_on_head(void) { * Unused copy of geo_update_projectile_pos_from_parent. Perhaps a copy paste mistake. */ Gfx *geo_update_projectile_pos_from_parent_copy(s32 run,UNUSED struct GraphNode *node, Mat4 mtx) { - Mat4 mtx2; - if (run == TRUE) { - // TODO: change global type to Object pointer - struct Object *obj = (struct Object *) gCurGraphNodeObject; + Mat4 mtx2; + struct Object *obj = (struct Object *) gCurGraphNodeObject; // TODO: change global type to Object pointer if (obj->prevObj != NULL) { create_transformation_from_matrices(mtx2, mtx, *gCurGraphNodeCamera->matrixPtr); @@ -159,7 +157,7 @@ void ukiki_act_idle(void) { o->oUkikiTextState = UKIKI_TEXT_HAS_CAP; } - if (o->oBehParams2ndByte == UKIKI_CAP) { + if (o->oBhvParams2ndByte == UKIKI_BP_CAP) { if (o->oPosY < -1550.0f) { o->oAction = UKIKI_ACT_RETURN_HOME; } @@ -377,7 +375,7 @@ void ukiki_act_go_to_cage(void) { case UKIKI_SUB_ACT_CAGE_TALK_TO_MARIO: cur_obj_init_animation_with_sound(UKIKI_ANIM_HANDSTAND); - if (cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_DOWN, + if (cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_DOWN, DIALOG_FLAG_TURN_TO_MARIO, CUTSCENE_DIALOG, DIALOG_080)) { o->oSubAction++; } @@ -573,7 +571,7 @@ void cap_ukiki_held_loop(void) { break; case UKIKI_TEXT_HAS_CAP: - if (cur_obj_update_dialog(MARIO_DIALOG_LOOK_UP, + if (cur_obj_update_dialog(MARIO_DIALOG_LOOK_UP, (DIALOG_FLAG_TEXT_DEFAULT | DIALOG_FLAG_TIME_STOP_ENABLED), DIALOG_101, 0)) { mario_retrieve_cap(); set_mario_npc_dialog(MARIO_DIALOG_STOP); @@ -593,7 +591,7 @@ void cap_ukiki_held_loop(void) { * Initializatation for ukiki, determines if it has Mario's cap. */ void bhv_ukiki_init(void) { - if ((o->oBehParams2ndByte == UKIKI_CAP) + if ((o->oBhvParams2ndByte == UKIKI_BP_CAP) && (save_file_get_flags() & SAVE_FLAG_CAP_ON_UKIKI)) { o->oUkikiTextState = UKIKI_TEXT_HAS_CAP; o->oUkikiHasCap |= UKIKI_CAP_ON; @@ -616,7 +614,7 @@ void bhv_ukiki_loop(void) { cur_obj_unrender_set_action_and_anim(UKIKI_ANIM_HELD, 0); obj_copy_pos(o, gMarioObject); - if (o->oBehParams2ndByte == UKIKI_CAP) { + if (o->oBhvParams2ndByte == UKIKI_BP_CAP) { cap_ukiki_held_loop(); } else { cage_ukiki_held_loop(); diff --git a/src/game/behaviors/unagi.inc.c b/src/game/behaviors/unagi.inc.c index 33f37609..51235502 100644 --- a/src/game/behaviors/unagi.inc.c +++ b/src/game/behaviors/unagi.inc.c @@ -13,9 +13,9 @@ struct ObjectHitbox sUnagiHitbox = { }; void bhv_unagi_init(void) { - if (o->oBehParams2ndByte != 1) { + if (o->oBhvParams2ndByte != 1) { o->oPathedStartWaypoint = segmented_to_virtual(jrb_seg7_trajectory_unagi_1); - if (o->oBehParams2ndByte == 0) { + if (o->oBhvParams2ndByte == 0) { o->oFaceAnglePitch = -7600; } else { o->oAction = 1; @@ -174,7 +174,7 @@ void bhv_unagi_subobject_loop(void) { if (o->parentObj->oUnagiUnk1B2 == 0) { obj_mark_for_deletion(o); } else { - f32 val04 = 300.0f * o->oBehParams2ndByte; + f32 val04 = 300.0f * o->oBhvParams2ndByte; o->oPosY = o->parentObj->oPosY - val04 * sins(o->parentObj->oFaceAnglePitch) * 1.13f; @@ -183,15 +183,15 @@ void bhv_unagi_subobject_loop(void) { o->oPosX = o->parentObj->oPosX + val04 * sins(o->parentObj->oFaceAngleYaw); o->oPosZ = o->parentObj->oPosZ + val04 * coss(o->parentObj->oFaceAngleYaw); - if (o->oBehParams2ndByte == -4) { + if (o->oBhvParams2ndByte == -4) { if (o->parentObj->oAnimState != 0 && o->oDistanceToMario < 150.0f) { - o->oBehParams = o->parentObj->oBehParams; + o->oBhvParams = o->parentObj->oBhvParams; spawn_default_star(6833.0f, -3654.0f, 2230.0f); o->parentObj->oAnimState = 0; } } else { obj_check_attacks(&sUnagiHitbox, o->oAction); - if (o->oBehParams2ndByte == 3) { + if (o->oBhvParams2ndByte == 3) { o->parentObj->oUnagiUnk1AC = o->oDistanceToMario; } } diff --git a/src/game/behaviors/warp.inc.c b/src/game/behaviors/warp.inc.c index 0e910186..f0b08ee1 100644 --- a/src/game/behaviors/warp.inc.c +++ b/src/game/behaviors/warp.inc.c @@ -2,14 +2,14 @@ void bhv_warp_loop(void) { if (o->oTimer == 0) { - u16 sp6 = (o->oBehParams >> 24) & 0xFF; + u16 bhvParams1stByte = (o->oBhvParams >> 24) & 0xFF; - if (sp6 == 0) { + if (bhvParams1stByte == 0x00) { o->hitboxRadius = 50.0f; - } else if (sp6 == 0xFF) { + } else if (bhvParams1stByte == 0xFF) { o->hitboxRadius = 10000.0f; } else { - o->hitboxRadius = sp6 * 10.0; + o->hitboxRadius = bhvParams1stByte * 10.0; } o->hitboxHeight = 50.0f; } @@ -20,14 +20,14 @@ void bhv_warp_loop(void) { // identical to the above function except for o->hitboxRadius void bhv_fading_warp_loop() { if (o->oTimer == 0) { - u16 sp6 = (o->oBehParams >> 24) & 0xFF; + u16 bhvParams1stByte = (o->oBhvParams >> 24) & 0xFF; - if (sp6 == 0) { + if (bhvParams1stByte == 0x00) { o->hitboxRadius = 85.0f; - } else if (sp6 == 0xFF) { + } else if (bhvParams1stByte == 0xFF) { o->hitboxRadius = 10000.0f; } else { - o->hitboxRadius = sp6 * 10.0; + o->hitboxRadius = bhvParams1stByte * 10.0; } o->hitboxHeight = 50.0f; } diff --git a/src/game/behaviors/water_bomb.inc.c b/src/game/behaviors/water_bomb.inc.c index 889ca462..68362c1b 100644 --- a/src/game/behaviors/water_bomb.inc.c +++ b/src/game/behaviors/water_bomb.inc.c @@ -30,7 +30,7 @@ static struct ObjectHitbox sWaterBombHitbox = { */ void bhv_water_bomb_spawner_update(void) { f32 latDistToMario; - f32 spawnerRadius = 50 * (u16)(o->oBehParams >> 16) + 200.0f; + f32 spawnerRadius = 50 * (u16)(o->oBhvParams >> 16) + 200.0f; latDistToMario = lateral_dist_between_objects(o, gMarioObject); @@ -68,7 +68,7 @@ void bhv_water_bomb_spawner_update(void) { */ void water_bomb_spawn_explode_particles(s8 offsetY, s8 forwardVelRange, s8 velYBase) { static struct SpawnParticlesInfo waterBombExplodeParticles = { - /* behParam: */ 0, + /* bhvParam: */ 0, /* count: */ 5, /* model: */ MODEL_BUBBLE, /* offsetY: */ 20, @@ -176,7 +176,7 @@ static void water_bomb_act_explode(void) { */ static void water_bomb_act_shot_from_cannon(void) { static struct SpawnParticlesInfo waterBombCannonParticle = { - /* behParam: */ 0, + /* bhvParam: */ 0, /* count: */ 1, /* model: */ MODEL_BUBBLE, /* offsetY: */ 236, diff --git a/src/game/behaviors/water_bomb_cannon.inc.c b/src/game/behaviors/water_bomb_cannon.inc.c index a2134821..525ba57e 100644 --- a/src/game/behaviors/water_bomb_cannon.inc.c +++ b/src/game/behaviors/water_bomb_cannon.inc.c @@ -50,7 +50,7 @@ void water_bomb_cannon_act_0(void) { void water_bomb_cannon_act_1(void) { if (o->oDistanceToMario > 2500.0f) { o->oAction = 2; - } else if (o->oBehParams2ndByte == 0) { + } else if (o->oBhvParams2ndByte == 0) { if (o->oWaterCannonUnkF4 != 0) { o->oWaterCannonUnkF4--; } else { diff --git a/src/game/behaviors/white_puff_explode.inc.c b/src/game/behaviors/white_puff_explode.inc.c index 8b153da5..a823fd22 100644 --- a/src/game/behaviors/white_puff_explode.inc.c +++ b/src/game/behaviors/white_puff_explode.inc.c @@ -4,7 +4,7 @@ void bhv_white_puff_exploding_loop(void) { if (o->oTimer == 0) { cur_obj_compute_vel_xz(); o->oWhitePuffUnkF4 = o->header.gfx.scale[0]; - switch (o->oBehParams2ndByte) { + switch (o->oBhvParams2ndByte) { case 2: o->oOpacity = 254; o->oWhitePuffUnkF8 = -21; diff --git a/src/game/behaviors/whomp.inc.c b/src/game/behaviors/whomp.inc.c index fe39da7c..2aefe255 100644 --- a/src/game/behaviors/whomp.inc.c +++ b/src/game/behaviors/whomp.inc.c @@ -21,7 +21,7 @@ void whomp_init(void) { cur_obj_init_animation_with_accel_and_sound(0, 1.0f); cur_obj_set_pos_to_home(); - if (o->oBehParams2ndByte != 0) { + if (o->oBhvParams2ndByte != WHOMP_BP_SMALL) { gSecondCameraFocus = o; cur_obj_scale(2.0f); if (o->oSubAction == 0) { @@ -32,7 +32,7 @@ void whomp_init(void) { cur_obj_set_pos_to_home(); o->oHealth = 3; } - } else if (cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_UP, + } else if (cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_UP, DIALOG_FLAG_TURN_TO_MARIO, CUTSCENE_DIALOG, DIALOG_114)) { o->oAction = 2; } @@ -213,7 +213,7 @@ void whomp_on_ground_general(void) { o->oAngleVelYaw = 0; o->oAngleVelRoll = 0; - if (o->oBehParams2ndByte != 0) { + if (o->oBhvParams2ndByte != WHOMP_BP_SMALL) { king_whomp_on_ground(); } else { whomp_on_ground(); @@ -227,7 +227,7 @@ void whomp_on_ground_general(void) { } else { o->oAngleVelPitch = 0; o->oFaceAnglePitch = 0; - if (o->oBehParams2ndByte != 0) { + if (o->oBhvParams2ndByte != WHOMP_BP_SMALL) { o->oAction = 2; } else { o->oAction = 1; @@ -236,8 +236,8 @@ void whomp_on_ground_general(void) { } void whomp_die(void) { - if (o->oBehParams2ndByte != 0) { - if (cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_UP, + if (o->oBhvParams2ndByte != WHOMP_BP_SMALL) { + if (cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_UP, DIALOG_FLAG_TEXT_DEFAULT, CUTSCENE_DIALOG, DIALOG_115)) { obj_set_angle(o, 0, 0, 0); cur_obj_hide(); @@ -282,7 +282,7 @@ void bhv_whomp_loop(void) { cur_obj_call_action_function(sWhompActions); cur_obj_move_standard(-20); if (o->oAction != 9) { - if (o->oBehParams2ndByte != 0) { + if (o->oBhvParams2ndByte != WHOMP_BP_SMALL) { cur_obj_hide_if_mario_far_away_y(2000.0f); } else { cur_obj_hide_if_mario_far_away_y(1000.0f); diff --git a/src/game/behaviors/wiggler.inc.c b/src/game/behaviors/wiggler.inc.c index 5ba10254..ee9a973e 100644 --- a/src/game/behaviors/wiggler.inc.c +++ b/src/game/behaviors/wiggler.inc.c @@ -66,7 +66,7 @@ void bhv_wiggler_body_part_update(void) { f32 dy; f32 dz; f32 dxz; - struct ChainSegment *segment = &o->parentObj->oWigglerSegments[o->oBehParams2ndByte]; + struct ChainSegment *segment = &o->parentObj->oWigglerSegments[o->oBhvParams2ndByte]; f32 posOffset; cur_obj_scale(o->parentObj->header.gfx.scale[0]); @@ -91,7 +91,7 @@ void bhv_wiggler_body_part_update(void) { // the floor o->oPosY += -30.0f; cur_obj_update_floor_height(); - if (o->oFloorHeight > o->oPosY) { // TODO: Check ineq swap + if (o->oFloorHeight > o->oPosY) { o->oPosY = o->oFloorHeight; } } @@ -300,7 +300,7 @@ 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 (cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_UP, + if (cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_UP, DIALOG_FLAG_NONE, CUTSCENE_DIALOG, attackText[o->oHealth - 2])) { // Because we don't want the wiggler to disappear after being // defeated, we leave its health at 1 diff --git a/src/game/camera.c b/src/game/camera.c index 216fe0e3..0925e961 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -271,7 +271,7 @@ s16 sCutsceneShot; */ s16 gCutsceneTimer; s16 unused8033B3E8; -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) s16 unused8033B3E82; #endif /** @@ -3571,7 +3571,7 @@ void unused_object_angle_to_vec3s(Vec3s dst, struct Object *o) { * u is a value between 0 and 1 that represents the position along the spline, * and a0-a3 are parameters that define the spline. * - * The spline is described at www2.cs.uregina.ca/~anima/408/Notes/Interpolation/UniformBSpline.htm + * The spline is described at http://www2.cs.uregina.ca/~anima/UniformBSpline.htm */ void evaluate_cubic_spline(f32 u, Vec3f Q, Vec3f a0, Vec3f a1, Vec3f a2, Vec3f a3) { f32 B[4]; @@ -5607,7 +5607,7 @@ void set_fixed_cam_axis_sa_lobby(UNUSED s16 preset) { * Generally, block area mode changes if: * Mario is wearing the metal cap, or at the water's surface, or the camera is in Mario mode * - * However, if the level is WDW, DDD, or COTMC (levels that have metal cap and water): + * However, if the level is WDW, DDD, or CotMC (levels that have metal cap and water): * Only block area mode changes if Mario is in a cannon, * or if the camera is in Mario mode and Mario is not swimming or in water with the metal cap */ @@ -6884,7 +6884,7 @@ s16 unused_dialog_cutscene_response(u8 cutscene) { } // if playing this cutscene and Mario responded, return the response - if ((gCamera->cutscene == cutscene) && (sCutsceneDialogResponse)) { + if ((gCamera->cutscene == cutscene) && (sCutsceneDialogResponse != DIALOG_RESPONSE_NONE)) { return sCutsceneDialogResponse; } else { return 0; @@ -7024,7 +7024,7 @@ static UNUSED void unused_cutscene_mario_dialog_looking_up(UNUSED struct Camera * Lower the volume (US only) and start the peach letter background music */ BAD_RETURN(s32) cutscene_intro_peach_start_letter_music(UNUSED struct Camera *c) { -#if defined(VERSION_US) || defined(VERSION_SH) +#if defined(VERSION_US) || defined(VERSION_SH) || defined(VERSION_CN) seq_player_lower_volume(SEQ_PLAYER_LEVEL, 60, 40); #endif cutscene_intro_peach_play_message_music(); @@ -8313,7 +8313,7 @@ BAD_RETURN(s32) cutscene_exit_fall_to_castle_grounds_warp(struct Camera *c) { } /** - * Cutscene that plays when Mario falls from WMOTR. + * Cutscene that plays when Mario falls from WMotR. */ BAD_RETURN(s32) cutscene_exit_fall_to_castle_grounds(struct Camera *c) { cutscene_event(cutscene_exit_fall_to_castle_grounds_warp, c, 0, 0); @@ -9380,7 +9380,7 @@ BAD_RETURN(s32) cutscene_cap_switch_press_pan_left(struct Camera *c) { * Create a dialog box with the cap switch's text. */ BAD_RETURN(s32) cutscene_cap_switch_press_create_dialog(UNUSED struct Camera *c) { - create_dialog_box_with_response(gCutsceneFocus->oBehParams2ndByte + DIALOG_010); + create_dialog_box_with_response(gCutsceneFocus->oBhvParams2ndByte + DIALOG_010); } static UNUSED BAD_RETURN(s32) unused_cap_switch_retrieve_info(struct Camera *c) { @@ -9413,7 +9413,7 @@ BAD_RETURN(s32) cutscene_cap_switch_press(struct Camera *c) { if ((get_dialog_id() == DIALOG_NONE) && (sCutsceneVars[4].angle[0] != 0)) { sCutsceneDialogResponse = sCutsceneVars[4].angle[0]; if (sCutsceneVars[4].angle[0] == 1) { - cap_switch_save(gCutsceneFocus->oBehParams2ndByte); + cap_switch_save(gCutsceneFocus->oBhvParams2ndByte); } stop_cutscene_and_retrieve_stored_info(c); transition_next_state(c, 30); @@ -9602,7 +9602,7 @@ BAD_RETURN(s32) play_sound_intro_turn_on_hud(UNUSED struct Camera *c) { * Fly to the pipe. Near the end, the camera jumps to Lakitu's position and the hud turns on. */ BAD_RETURN(s32) cutscene_intro_peach_fly_to_pipe(struct Camera *c) { -#if defined(VERSION_US) || defined(VERSION_SH) +#if defined(VERSION_US) || defined(VERSION_SH) || defined(VERSION_CN) cutscene_event(play_sound_intro_turn_on_hud, c, 818, 818); #elif defined(VERSION_EU) cutscene_event(play_sound_intro_turn_on_hud, c, 673, 673); @@ -9737,46 +9737,46 @@ BAD_RETURN(s32) cutscene_credits_reset_spline(UNUSED struct Camera *c) { cutscene_reset_spline(); } -extern struct CutsceneSplinePoint sBobCreditsSplinePositions[]; -extern struct CutsceneSplinePoint sBobCreditsSplineFocus[]; -extern struct CutsceneSplinePoint sWfCreditsSplinePositions[]; -extern struct CutsceneSplinePoint sWfCreditsSplineFocus[]; -extern struct CutsceneSplinePoint sJrbCreditsSplinePositions[]; -extern struct CutsceneSplinePoint sJrbCreditsSplineFocus[]; -extern struct CutsceneSplinePoint sCcmSlideCreditsSplinePositions[]; -extern struct CutsceneSplinePoint sCcmSlideCreditsSplineFocus[]; -extern struct CutsceneSplinePoint sBbhCreditsSplinePositions[]; -extern struct CutsceneSplinePoint sBbhCreditsSplineFocus[]; -extern struct CutsceneSplinePoint sHmcCreditsSplinePositions[]; -extern struct CutsceneSplinePoint sHmcCreditsSplineFocus[]; -extern struct CutsceneSplinePoint sThiWigglerCreditsSplinePositions[]; -extern struct CutsceneSplinePoint sThiWigglerCreditsSplineFocus[]; +extern struct CutsceneSplinePoint sBoBCreditsSplinePositions[]; +extern struct CutsceneSplinePoint sBoBCreditsSplineFocus[]; +extern struct CutsceneSplinePoint sWFCreditsSplinePositions[]; +extern struct CutsceneSplinePoint sWFCreditsSplineFocus[]; +extern struct CutsceneSplinePoint sJRBCreditsSplinePositions[]; +extern struct CutsceneSplinePoint sJRBCreditsSplineFocus[]; +extern struct CutsceneSplinePoint sCCMSlideCreditsSplinePositions[]; +extern struct CutsceneSplinePoint sCCMSlideCreditsSplineFocus[]; +extern struct CutsceneSplinePoint sBBHCreditsSplinePositions[]; +extern struct CutsceneSplinePoint sBBHCreditsSplineFocus[]; +extern struct CutsceneSplinePoint sHMCCreditsSplinePositions[]; +extern struct CutsceneSplinePoint sHMCCreditsSplineFocus[]; +extern struct CutsceneSplinePoint sTHIWigglerCreditsSplinePositions[]; +extern struct CutsceneSplinePoint sTHIWigglerCreditsSplineFocus[]; extern struct CutsceneSplinePoint sVolcanoCreditsSplinePositions[]; extern struct CutsceneSplinePoint sVolcanoCreditsSplineFocus[]; -extern struct CutsceneSplinePoint sSslCreditsSplinePositions[]; -extern struct CutsceneSplinePoint sSslCreditsSplineFocus[]; -extern struct CutsceneSplinePoint sDddCreditsSplinePositions[]; -extern struct CutsceneSplinePoint sDddCreditsSplineFocus[]; -extern struct CutsceneSplinePoint sSlCreditsSplinePositions[]; -extern struct CutsceneSplinePoint sSlCreditsSplineFocus[]; -extern struct CutsceneSplinePoint sWdwCreditsSplinePositions[]; -extern struct CutsceneSplinePoint sWdwCreditsSplineFocus[]; -extern struct CutsceneSplinePoint sTtmCreditsSplinePositions[]; -extern struct CutsceneSplinePoint sTtmCreditsSplineFocus[]; -extern struct CutsceneSplinePoint sThiHugeCreditsSplinePositions[]; -extern struct CutsceneSplinePoint sThiHugeCreditsSplineFocus[]; -extern struct CutsceneSplinePoint sTtcCreditsSplinePositions[]; -extern struct CutsceneSplinePoint sTtcCreditsSplineFocus[]; -extern struct CutsceneSplinePoint sRrCreditsSplinePositions[]; -extern struct CutsceneSplinePoint sRrCreditsSplineFocus[]; -extern struct CutsceneSplinePoint sSaCreditsSplinePositions[]; -extern struct CutsceneSplinePoint sSaCreditsSplineFocus[]; -extern struct CutsceneSplinePoint sCotmcCreditsSplinePositions[]; -extern struct CutsceneSplinePoint sCotmcCreditsSplineFocus[]; -extern struct CutsceneSplinePoint sDddSubCreditsSplinePositions[]; -extern struct CutsceneSplinePoint sDddSubCreditsSplineFocus[]; -extern struct CutsceneSplinePoint sCcmOutsideCreditsSplinePositions[]; -extern struct CutsceneSplinePoint sCcmOutsideCreditsSplineFocus[]; +extern struct CutsceneSplinePoint sSSLCreditsSplinePositions[]; +extern struct CutsceneSplinePoint sSSLCreditsSplineFocus[]; +extern struct CutsceneSplinePoint sDDDCreditsSplinePositions[]; +extern struct CutsceneSplinePoint sDDDCreditsSplineFocus[]; +extern struct CutsceneSplinePoint sSLCreditsSplinePositions[]; +extern struct CutsceneSplinePoint sSLCreditsSplineFocus[]; +extern struct CutsceneSplinePoint sWDWCreditsSplinePositions[]; +extern struct CutsceneSplinePoint sWDWCreditsSplineFocus[]; +extern struct CutsceneSplinePoint sTTMCreditsSplinePositions[]; +extern struct CutsceneSplinePoint sTTMCreditsSplineFocus[]; +extern struct CutsceneSplinePoint sTHIHugeCreditsSplinePositions[]; +extern struct CutsceneSplinePoint sTHIHugeCreditsSplineFocus[]; +extern struct CutsceneSplinePoint sTTCCreditsSplinePositions[]; +extern struct CutsceneSplinePoint sTTCCreditsSplineFocus[]; +extern struct CutsceneSplinePoint sRRCreditsSplinePositions[]; +extern struct CutsceneSplinePoint sRRCreditsSplineFocus[]; +extern struct CutsceneSplinePoint sSACreditsSplinePositions[]; +extern struct CutsceneSplinePoint sSACreditsSplineFocus[]; +extern struct CutsceneSplinePoint sCotMCCreditsSplinePositions[]; +extern struct CutsceneSplinePoint sCotMCCreditsSplineFocus[]; +extern struct CutsceneSplinePoint sDDDSubCreditsSplinePositions[]; +extern struct CutsceneSplinePoint sDDDSubCreditsSplineFocus[]; +extern struct CutsceneSplinePoint sCCMOutsideCreditsSplinePositions[]; +extern struct CutsceneSplinePoint sCCMOutsideCreditsSplineFocus[]; /** * Follow splines through the courses of the game. @@ -9788,96 +9788,96 @@ BAD_RETURN(s32) cutscene_credits(struct Camera *c) { switch (gCurrLevelArea) { case AREA_BOB: - pos = sBobCreditsSplinePositions; - focus = sBobCreditsSplineFocus; + pos = sBoBCreditsSplinePositions; + focus = sBoBCreditsSplineFocus; break; case AREA_WF: - pos = sWfCreditsSplinePositions; - focus = sWfCreditsSplineFocus; + pos = sWFCreditsSplinePositions; + focus = sWFCreditsSplineFocus; break; case AREA_JRB_MAIN: - pos = sJrbCreditsSplinePositions; - focus = sJrbCreditsSplineFocus; + pos = sJRBCreditsSplinePositions; + focus = sJRBCreditsSplineFocus; break; case AREA_CCM_SLIDE: - pos = sCcmSlideCreditsSplinePositions; - focus = sCcmSlideCreditsSplineFocus; + pos = sCCMSlideCreditsSplinePositions; + focus = sCCMSlideCreditsSplineFocus; break; case AREA_BBH: - pos = sBbhCreditsSplinePositions; - focus = sBbhCreditsSplineFocus; + pos = sBBHCreditsSplinePositions; + focus = sBBHCreditsSplineFocus; break; case AREA_HMC: - pos = sHmcCreditsSplinePositions; - focus = sHmcCreditsSplineFocus; + pos = sHMCCreditsSplinePositions; + focus = sHMCCreditsSplineFocus; break; case AREA_THI_WIGGLER: - pos = sThiWigglerCreditsSplinePositions; - focus = sThiWigglerCreditsSplineFocus; + pos = sTHIWigglerCreditsSplinePositions; + focus = sTHIWigglerCreditsSplineFocus; break; case AREA_LLL_VOLCANO: pos = sVolcanoCreditsSplinePositions; focus = sVolcanoCreditsSplineFocus; break; case AREA_SSL_OUTSIDE: - pos = sSslCreditsSplinePositions; - focus = sSslCreditsSplineFocus; + pos = sSSLCreditsSplinePositions; + focus = sSSLCreditsSplineFocus; break; case AREA_DDD_WHIRLPOOL: - pos = sDddCreditsSplinePositions; - focus = sDddCreditsSplineFocus; + pos = sDDDCreditsSplinePositions; + focus = sDDDCreditsSplineFocus; break; case AREA_SL_OUTSIDE: - pos = sSlCreditsSplinePositions; - focus = sSlCreditsSplineFocus; + pos = sSLCreditsSplinePositions; + focus = sSLCreditsSplineFocus; break; case AREA_WDW_MAIN: - pos = sWdwCreditsSplinePositions; - focus = sWdwCreditsSplineFocus; + pos = sWDWCreditsSplinePositions; + focus = sWDWCreditsSplineFocus; break; case AREA_TTM_OUTSIDE: - pos = sTtmCreditsSplinePositions; - focus = sTtmCreditsSplineFocus; + pos = sTTMCreditsSplinePositions; + focus = sTTMCreditsSplineFocus; break; case AREA_THI_HUGE: - pos = sThiHugeCreditsSplinePositions; - focus = sThiHugeCreditsSplineFocus; + pos = sTHIHugeCreditsSplinePositions; + focus = sTHIHugeCreditsSplineFocus; break; case AREA_TTC: - pos = sTtcCreditsSplinePositions; - focus = sTtcCreditsSplineFocus; + pos = sTTCCreditsSplinePositions; + focus = sTTCCreditsSplineFocus; break; case AREA_RR: - pos = sRrCreditsSplinePositions; - focus = sRrCreditsSplineFocus; + pos = sRRCreditsSplinePositions; + focus = sRRCreditsSplineFocus; break; case AREA_SA: - pos = sSaCreditsSplinePositions; - focus = sSaCreditsSplineFocus; + pos = sSACreditsSplinePositions; + focus = sSACreditsSplineFocus; break; case AREA_COTMC: - pos = sCotmcCreditsSplinePositions; - focus = sCotmcCreditsSplineFocus; + pos = sCotMCCreditsSplinePositions; + focus = sCotMCCreditsSplineFocus; break; case AREA_DDD_SUB: - pos = sDddSubCreditsSplinePositions; - focus = sDddSubCreditsSplineFocus; + pos = sDDDSubCreditsSplinePositions; + focus = sDDDSubCreditsSplineFocus; break; case AREA_CCM_OUTSIDE: //! Checks if the "Snowman's Lost His Head" star was collected. The credits likely would //! have avoided the snowman if the player didn't collect that star, but in the end the //! developers decided against it. if (save_file_get_star_flags(gCurrSaveFileNum - 1, COURSE_NUM_TO_INDEX(gCurrCourseNum)) & (1 << 4)) { - pos = sCcmOutsideCreditsSplinePositions; - focus = sCcmOutsideCreditsSplineFocus; + pos = sCCMOutsideCreditsSplinePositions; + focus = sCCMOutsideCreditsSplineFocus; } else { - pos = sCcmOutsideCreditsSplinePositions; - focus = sCcmOutsideCreditsSplineFocus; + pos = sCCMOutsideCreditsSplinePositions; + focus = sCCMOutsideCreditsSplineFocus; } break; default: - pos = sCcmOutsideCreditsSplinePositions; - focus = sCcmOutsideCreditsSplineFocus; + pos = sCCMOutsideCreditsSplinePositions; + focus = sCCMOutsideCreditsSplineFocus; } copy_spline_segment(sCurCreditsSplinePos, pos); @@ -10381,7 +10381,7 @@ struct Cutscene sCutsceneEnding[] = { { cutscene_ending_kiss, 0x10b }, #else { cutscene_ending_mario_land_closeup, 75 }, -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) { cutscene_ending_stars_free_peach, 431 }, #else { cutscene_ending_stars_free_peach, 386 }, @@ -10389,7 +10389,7 @@ struct Cutscene sCutsceneEnding[] = { { cutscene_ending_peach_appears, 139 }, { cutscene_ending_peach_descends, 590 }, { cutscene_ending_mario_to_peach, 95 }, -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) { cutscene_ending_peach_wakeup, 455 }, { cutscene_ending_dialog, 286 }, #else @@ -10567,7 +10567,7 @@ struct Cutscene sCutsceneExitWaterfall[] = { }; /** - * Cutscene that plays when Mario falls from WMOTR. + * Cutscene that plays when Mario falls from WMotR. */ struct Cutscene sCutsceneFallToCastleGrounds[] = { { cutscene_exit_fall_to_castle_grounds, 73 }, @@ -10836,7 +10836,7 @@ STATIC_ASSERT(ARRAY_COUNT(sZoomOutAreaMasks) - 1 == LEVEL_MAX / 2, "Make sure yo * TODO: Separate these into their own file(s) */ -struct CutsceneSplinePoint sBobCreditsSplinePositions[] = { +struct CutsceneSplinePoint sBoBCreditsSplinePositions[] = { { 1, 0, { 5984, 3255, 4975 } }, { 2, 0, { 4423, 3315, 1888 } }, { 3, 0, { 776, 2740, -1825 } }, @@ -10844,7 +10844,7 @@ struct CutsceneSplinePoint sBobCreditsSplinePositions[] = { { -1, 0, { 741, 4387, -5474 } } }; -struct CutsceneSplinePoint sBobCreditsSplineFocus[] = { +struct CutsceneSplinePoint sBoBCreditsSplineFocus[] = { { 0, 30, { 5817, 3306, 4507 } }, { 0, 40, { 4025, 3378, 1593 } }, { 0, 50, { 1088, 2652, -2205 } }, @@ -10852,7 +10852,7 @@ struct CutsceneSplinePoint sBobCreditsSplineFocus[] = { { -1, 60, { 1231, 4400, -5649 } } }; -struct CutsceneSplinePoint sWfCreditsSplinePositions[] = { +struct CutsceneSplinePoint sWFCreditsSplinePositions[] = { { 0, 0, { -301, 1399, 2643 } }, { 0, 0, { -182, 2374, 4572 } }, { 0, 0, { 4696, 3864, 413 } }, @@ -10860,7 +10860,7 @@ struct CutsceneSplinePoint sWfCreditsSplinePositions[] = { { -1, 0, { 1783, 4891, -1516 } } }; -struct CutsceneSplinePoint sWfCreditsSplineFocus[] = { +struct CutsceneSplinePoint sWFCreditsSplineFocus[] = { { 1, 30, { -249, 1484, 2153 } }, { 2, 40, { -200, 2470, 4082 } }, { 3, 40, { 4200, 3916, 370 } }, @@ -10868,7 +10868,7 @@ struct CutsceneSplinePoint sWfCreditsSplineFocus[] = { { -1, 40, { 1523, 4976, -1072 } } }; -struct CutsceneSplinePoint sJrbCreditsSplinePositions[] = { +struct CutsceneSplinePoint sJRBCreditsSplinePositions[] = { { 0, 0, { 5538, -4272, 2376 } }, { 0, 0, { 5997, -3303, 2261 } }, { 0, 0, { 6345, -3255, 2179 } }, @@ -10876,7 +10876,7 @@ struct CutsceneSplinePoint sJrbCreditsSplinePositions[] = { { -1, 0, { 6694, -3203, 2116 } } }; -struct CutsceneSplinePoint sJrbCreditsSplineFocus[] = { +struct CutsceneSplinePoint sJRBCreditsSplineFocus[] = { { 0, 50, { 5261, -4683, 2443 } }, { 0, 50, { 5726, -3675, 2456 } }, { 0, 50, { 6268, -2817, 2409 } }, @@ -10884,7 +10884,7 @@ struct CutsceneSplinePoint sJrbCreditsSplineFocus[] = { { -1, 50, { 7186, -3153, 2041 } } }; -struct CutsceneSplinePoint sCcmSlideCreditsSplinePositions[] = { +struct CutsceneSplinePoint sCCMSlideCreditsSplinePositions[] = { { 0, 0, { -6324, 6745, -5626 } }, { 1, 0, { -6324, 6745, -5626 } }, { 2, 0, { -6108, 6762, -5770 } }, @@ -10892,7 +10892,7 @@ struct CutsceneSplinePoint sCcmSlideCreditsSplinePositions[] = { { -1, 0, { -5672, 6790, -5979 } } }; -struct CutsceneSplinePoint sCcmSlideCreditsSplineFocus[] = { +struct CutsceneSplinePoint sCCMSlideCreditsSplineFocus[] = { { 0, 50, { -5911, 6758, -5908 } }, { 1, 50, { -5911, 6758, -5908 } }, { 2, 50, { -5652, 6814, -5968 } }, @@ -10900,21 +10900,21 @@ struct CutsceneSplinePoint sCcmSlideCreditsSplineFocus[] = { { -1, 50, { -5179, 6804, -6060 } } }; -struct CutsceneSplinePoint sBbhCreditsSplinePositions[] = { +struct CutsceneSplinePoint sBBHCreditsSplinePositions[] = { { 1, 0, { 1088, 341, 2447 } }, { 2, 0, { 1338, 610, 2808 } }, { 3, 0, { 2267, 1612, 2966 } }, { -1, 0, { 2296, 1913, 2990 } } }; -struct CutsceneSplinePoint sBbhCreditsSplineFocus[] = { +struct CutsceneSplinePoint sBBHCreditsSplineFocus[] = { { 1, 50, { 1160, 263, 1958 } }, { 2, 50, { 1034, 472, 2436 } }, { 3, 50, { 1915, 1833, 2688 } }, { -1, 50, { 2134, 2316, 2742 } } }; -struct CutsceneSplinePoint sHmcCreditsSplinePositions[] = { +struct CutsceneSplinePoint sHMCCreditsSplinePositions[] = { { 1, 0, { -5952, 1807, -5882 } }, { 2, 0, { -5623, 1749, -4863 } }, { 3, 0, { -5472, 1955, -2520 } }, @@ -10922,7 +10922,7 @@ struct CutsceneSplinePoint sHmcCreditsSplinePositions[] = { { -1, 0, { -5547, 391, -721 } } }; -struct CutsceneSplinePoint sHmcCreditsSplineFocus[] = { +struct CutsceneSplinePoint sHMCCreditsSplineFocus[] = { { 1, 210, { -5952, 1884, -6376 } }, { 2, 58, { -5891, 1711, -5283 } }, { 3, 30, { -5595, 1699, -2108 } }, @@ -10930,13 +10930,13 @@ struct CutsceneSplinePoint sHmcCreditsSplineFocus[] = { { -1, 31, { -5548, -85, -572 } } }; -struct CutsceneSplinePoint sThiWigglerCreditsSplinePositions[] = { +struct CutsceneSplinePoint sTHIWigglerCreditsSplinePositions[] = { { 1, 0, { -1411, 2474, -1276 } }, { 2, 0, { -1606, 2479, -434 } }, { -1, 0, { -1170, 2122, 1337 } } }; -struct CutsceneSplinePoint sThiWigglerCreditsSplineFocus[] = { +struct CutsceneSplinePoint sTHIWigglerCreditsSplineFocus[] = { { 1, 50, { -1053, 2512, -928 } }, { 2, 50, { -1234, 2377, -114 } }, { -1, 50, { -758, 2147, 1054 } } @@ -10960,7 +10960,7 @@ struct CutsceneSplinePoint sVolcanoCreditsSplineFocus[] = { { -1, 50, { 1002, 460, -694 } } }; -struct CutsceneSplinePoint sSslCreditsSplinePositions[] = { +struct CutsceneSplinePoint sSSLCreditsSplinePositions[] = { { 0, 0, { -4262, 4658, -5015 } }, { 0, 0, { -3274, 2963, -4661 } }, { 0, 0, { -2568, 812, -6528 } }, @@ -10969,7 +10969,7 @@ struct CutsceneSplinePoint sSslCreditsSplinePositions[] = { { -1, 0, { 2724, 660, -6298 } } }; -struct CutsceneSplinePoint sSslCreditsSplineFocus[] = { +struct CutsceneSplinePoint sSSLCreditsSplineFocus[] = { { 0, 50, { -4083, 4277, -4745 } }, { 0, 50, { -2975, 2574, -4759 } }, { 0, 50, { -2343, 736, -6088 } }, @@ -10978,7 +10978,7 @@ struct CutsceneSplinePoint sSslCreditsSplineFocus[] = { { -1, 50, { 2448, 612, -5884 } } }; -struct CutsceneSplinePoint sDddCreditsSplinePositions[] = { +struct CutsceneSplinePoint sDDDCreditsSplinePositions[] = { { 0, 0, { -874, -4933, 366 } }, { 0, 0, { -1463, -4782, 963 } }, { 0, 0, { -1893, -4684, 1303 } }, @@ -10988,7 +10988,7 @@ struct CutsceneSplinePoint sDddCreditsSplinePositions[] = { { -1, 0, { -4681, -1084, -623 } } }; -struct CutsceneSplinePoint sDddCreditsSplineFocus[] = { +struct CutsceneSplinePoint sDDDCreditsSplineFocus[] = { { 0, 50, { -1276, -4683, 622 } }, { 0, 50, { -1858, -4407, 1097 } }, { 0, 50, { -2324, -4332, 1318 } }, @@ -10998,35 +10998,35 @@ struct CutsceneSplinePoint sDddCreditsSplineFocus[] = { { -1, 50, { -4665, -664, -1007 } } }; -struct CutsceneSplinePoint sSlCreditsSplinePositions[] = { +struct CutsceneSplinePoint sSLCreditsSplinePositions[] = { { 0, 0, { 939, 6654, 6196 } }, { 0, 0, { 1873, 5160, 3714 } }, { 0, 0, { 3120, 3564, 1314 } }, { -1, 0, { 2881, 4231, 573 } } }; -struct CutsceneSplinePoint sSlCreditsSplineFocus[] = { +struct CutsceneSplinePoint sSLCreditsSplineFocus[] = { { 0, 50, { 875, 6411, 5763 } }, { 0, 50, { 1659, 4951, 3313 } }, { 0, 50, { 2630, 3565, 1215 } }, { -1, 50, { 2417, 4056, 639 } } }; -struct CutsceneSplinePoint sWdwCreditsSplinePositions[] = { +struct CutsceneSplinePoint sWDWCreditsSplinePositions[] = { { 0, 0, { 3927, 2573, 3685 } }, { 0, 0, { 2389, 2054, 1210 } }, { 0, 0, { 2309, 2069, 22 } }, { -1, 0, { 2122, 2271, -979 } } }; -struct CutsceneSplinePoint sWdwCreditsSplineFocus[] = { +struct CutsceneSplinePoint sWDWCreditsSplineFocus[] = { { 0, 50, { 3637, 2460, 3294 } }, { 0, 50, { 1984, 2067, 918 } }, { 0, 50, { 1941, 2255, -261 } }, { -1, 50, { 1779, 2587, -1158 } } }; -struct CutsceneSplinePoint sTtmCreditsSplinePositions[] = { +struct CutsceneSplinePoint sTTMCreditsSplinePositions[] = { { 0, 0, { 386, 2535, 644 } }, { 0, 0, { 1105, 2576, 918 } }, { 0, 0, { 3565, 2261, 2098 } }, @@ -11035,7 +11035,7 @@ struct CutsceneSplinePoint sTtmCreditsSplinePositions[] = { { -1, 0, { 3917, -3130, 3656 } } }; -struct CutsceneSplinePoint sTtmCreditsSplineFocus[] = { +struct CutsceneSplinePoint sTTMCreditsSplineFocus[] = { { 1, 50, { 751, 2434, 318 } }, { 2, 50, { 768, 2382, 603 } }, { 3, 60, { 3115, 2086, 1969 } }, @@ -11044,7 +11044,7 @@ struct CutsceneSplinePoint sTtmCreditsSplineFocus[] = { { -1, 50, { 4172, -3385, 4001 } } }; -struct CutsceneSplinePoint sThiHugeCreditsSplinePositions[] = { +struct CutsceneSplinePoint sTHIHugeCreditsSplinePositions[] = { { 0, 0, { 6990, -1000, -4858 } }, { 0, 0, { 7886, -1055, 2878 } }, { 0, 0, { 1952, -1481, 10920 } }, @@ -11054,7 +11054,7 @@ struct CutsceneSplinePoint sThiHugeCreditsSplinePositions[] = { { -1, 0, { -3246, 416, 3286 } } }; -struct CutsceneSplinePoint sThiHugeCreditsSplineFocus[] = { +struct CutsceneSplinePoint sTHIHugeCreditsSplineFocus[] = { { 1, 70, { 7022, -965, -5356 } }, { 2, 40, { 7799, -915, 2405 } }, { 3, 60, { 1878, -1137, 10568 } }, @@ -11064,35 +11064,35 @@ struct CutsceneSplinePoint sThiHugeCreditsSplineFocus[] = { { -1, 50, { -2875, 182, 3045 } } }; -struct CutsceneSplinePoint sTtcCreditsSplinePositions[] = { +struct CutsceneSplinePoint sTTCCreditsSplinePositions[] = { { 1, 0, { -1724, 277, -994 } }, { 2, 0, { -1720, 456, -995 } }, { 3, 0, { -1655, 810, -1014 } }, { -1, 0, { -1753, 883, -1009 } } }; -struct CutsceneSplinePoint sTtcCreditsSplineFocus[] = { +struct CutsceneSplinePoint sTTCCreditsSplineFocus[] = { { 1, 50, { -1554, 742, -1063 } }, { 2, 50, { -1245, 571, -1102 } }, { 3, 50, { -1220, 603, -1151 } }, { -1, 50, { -1412, 520, -1053 } } }; -struct CutsceneSplinePoint sRrCreditsSplinePositions[] = { +struct CutsceneSplinePoint sRRCreditsSplinePositions[] = { { 0, 0, { -1818, 4036, 97 } }, { 0, 0, { -575, 3460, -505 } }, { 0, 0, { 1191, 3611, -1134 } }, { -1, 0, { 2701, 3777, -3686 } } }; -struct CutsceneSplinePoint sRrCreditsSplineFocus[] = { +struct CutsceneSplinePoint sRRCreditsSplineFocus[] = { { 0, 50, { -1376, 3885, -81 } }, { 0, 50, { -146, 3343, -734 } }, { 0, 50, { 1570, 3446, -1415 } }, { -1, 50, { 2794, 3627, -3218 } } }; -struct CutsceneSplinePoint sSaCreditsSplinePositions[] = { +struct CutsceneSplinePoint sSACreditsSplinePositions[] = { { 0, 0, { -295, -396, -585 } }, { 1, 0, { -295, -396, -585 } }, { 2, 0, { -292, -856, -573 } }, @@ -11100,7 +11100,7 @@ struct CutsceneSplinePoint sSaCreditsSplinePositions[] = { { -1, 0, { 175, -856, -654 } } }; -struct CutsceneSplinePoint sSaCreditsSplineFocus[] = { +struct CutsceneSplinePoint sSACreditsSplineFocus[] = { { 0, 50, { -175, -594, -142 } }, { 1, 50, { -175, -594, -142 } }, { 2, 50, { -195, -956, -92 } }, @@ -11108,7 +11108,7 @@ struct CutsceneSplinePoint sSaCreditsSplineFocus[] = { { -1, 50, { -307, -956, -537 } } }; -struct CutsceneSplinePoint sCotmcCreditsSplinePositions[] = { +struct CutsceneSplinePoint sCotMCCreditsSplinePositions[] = { { 0, 0, { -296, 495, 1607 } }, { 0, 0, { -430, 541, 654 } }, { 0, 0, { -466, 601, -359 } }, @@ -11116,7 +11116,7 @@ struct CutsceneSplinePoint sCotmcCreditsSplinePositions[] = { { -1, 0, { -95, 366, -2922 } } }; -struct CutsceneSplinePoint sCotmcCreditsSplineFocus[] = { +struct CutsceneSplinePoint sCotMCCreditsSplineFocus[] = { { 0, 50, { -176, 483, 2092 } }, { 0, 50, { -122, 392, 1019 } }, { 0, 50, { -268, 450, -792 } }, @@ -11124,7 +11124,7 @@ struct CutsceneSplinePoint sCotmcCreditsSplineFocus[] = { { -1, 50, { -51, 355, -3420 } } }; -struct CutsceneSplinePoint sDddSubCreditsSplinePositions[] = { +struct CutsceneSplinePoint sDDDSubCreditsSplinePositions[] = { { 0, 0, { 4656, 2171, 5028 } }, { 0, 0, { 4548, 1182, 4596 } }, { 0, 0, { 5007, 813, 3257 } }, @@ -11132,7 +11132,7 @@ struct CutsceneSplinePoint sDddSubCreditsSplinePositions[] = { { -1, 0, { 4644, 774, 113 } } }; -struct CutsceneSplinePoint sDddSubCreditsSplineFocus[] = { +struct CutsceneSplinePoint sDDDSubCreditsSplineFocus[] = { { 0, 50, { 4512, 2183, 4549 } }, { 0, 50, { 4327, 838, 4308 } }, { 0, 50, { 4774, 749, 2819 } }, @@ -11140,14 +11140,14 @@ struct CutsceneSplinePoint sDddSubCreditsSplineFocus[] = { { -1, 50, { 4194, 885, -75 } } }; -struct CutsceneSplinePoint sCcmOutsideCreditsSplinePositions[] = { +struct CutsceneSplinePoint sCCMOutsideCreditsSplinePositions[] = { { 1, 0, { 1427, -1387, 5409 } }, { 2, 0, { -1646, -1536, 4526 } }, { 3, 0, { -3852, -1448, 3913 } }, { -1, 0, { -5199, -1366, 1886 } } }; -struct CutsceneSplinePoint sCcmOutsideCreditsSplineFocus[] = { +struct CutsceneSplinePoint sCCMOutsideCreditsSplineFocus[] = { { 1, 50, { 958, -1481, 5262 } }, { 2, 50, { -2123, -1600, 4391 } }, { 3, 50, { -3957, -1401, 3426 } }, diff --git a/src/game/cn_common_syms_1.c b/src/game/cn_common_syms_1.c new file mode 100644 index 00000000..6dd4b66e --- /dev/null +++ b/src/game/cn_common_syms_1.c @@ -0,0 +1,29 @@ +#include + +#include "macros.h" + +// This file is used to place iQue COMMON/.scommon symbols in the right locations. + +#ifdef VERSION_CN +FORCE_BSS u32 __osBaseCounter; +FORCE_BSS s16 gSaveOptSelectIndex; +FORCE_BSS s32 sNumCountOverflows; +FORCE_BSS s32 sLastHighestCount; +FORCE_BSS u32 __osViIntrCount; +FORCE_BSS s16 gCurrActNum; +FORCE_BSS u8 __osMaxControllers; +FORCE_BSS OSTime __osCurrentTime; +FORCE_BSS s16 gMenuOptSelectIndex; +FORCE_BSS s32 sLastHighestCount2; +FORCE_BSS u8 __osContLastCmd; +FORCE_BSS OSMesg __osEepromTimerMsg; +FORCE_BSS u32 __osTimerCounter; +FORCE_BSS s16 gCurrAreaIndex; +FORCE_BSS s32 sNumCountOverflows2; +FORCE_BSS struct MemoryPool *gEffectsMemoryPool; +FORCE_BSS s8 gNeverEnteredCastle; +FORCE_BSS s8 gRedCoinsCollected; +FORCE_BSS s16 gSavedCourseNum; +FORCE_BSS u32 __osFinalrom; +FORCE_BSS s16 gCurrCourseNum; +#endif diff --git a/src/game/cn_common_syms_2.c b/src/game/cn_common_syms_2.c new file mode 100644 index 00000000..d817ca05 --- /dev/null +++ b/src/game/cn_common_syms_2.c @@ -0,0 +1,103 @@ +#include + +#include "macros.h" +#include "types.h" + +// This file is used to place iQue COMMON/.scommon symbols in the right locations. + +#ifdef VERSION_CN +// Can't include the .h files directly because they have extern declarations +struct HudDisplay { + /*0x00*/ s16 lives; + /*0x02*/ s16 coins; + /*0x04*/ s16 stars; + /*0x06*/ s16 wedges; + /*0x08*/ s16 keys; + /*0x0A*/ s16 flags; + /*0x0C*/ u16 timer; +}; + +typedef struct { + /* 0x00 */ u32 ramarray[15]; + /* 0x3C */ u32 pifstatus; +} OSPifRam; + +struct SpawnInfo { + /*0x00*/ Vec3s startPos; + /*0x06*/ Vec3s startAngle; + /*0x0C*/ s8 areaIndex; + /*0x0D*/ s8 activeAreaIndex; + /*0x10*/ u32 behaviorArg; + /*0x14*/ void *behaviorScript; + /*0x18*/ struct GraphNode *model; + /*0x1C*/ struct SpawnInfo *next; +}; + +struct WarpTransitionData { + /*0x00*/ u8 red; + /*0x01*/ u8 green; + /*0x02*/ u8 blue; + + /*0x04*/ s16 startTexRadius; + /*0x06*/ s16 endTexRadius; + /*0x08*/ s16 startTexX; + /*0x0A*/ s16 startTexY; + /*0x0C*/ s16 endTexX; + /*0x0E*/ s16 endTexY; + + /*0x10*/ s16 texTimer; // always 0, does seems to affect transition when disabled +}; + +struct WarpTransition { + /*0x00*/ u8 isActive; // Is the transition active. (either TRUE or FALSE) + /*0x01*/ u8 type; // Determines the type of transition to use (circle, star, etc.) + /*0x02*/ u8 time; // Amount of time to complete the transition (in frames) + /*0x03*/ u8 pauseRendering; // Should the game stop rendering. (either TRUE or FALSE) + /*0x04*/ struct WarpTransitionData data; +}; + +typedef struct __OSEventState +{ + OSMesgQueue *messageQueue; + OSMesg message; +} __OSEventState; + +struct Area { + /*0x00*/ s8 index; + /*0x01*/ s8 flags; // Only has 1 flag: 0x01 = Is this the active area? + /*0x02*/ u16 terrainType; // default terrain of the level (set from level script cmd 0x31) + /*0x04*/ struct GraphNodeRoot *unk04; // geometry layout data + /*0x08*/ TerrainData *terrainData; // collision data (set from level script cmd 0x2E) + /*0x0C*/ RoomData *surfaceRooms; // (set from level script cmd 0x2F) + /*0x10*/ s16 *macroObjects; // Macro Objects Ptr (set from level script cmd 0x39) + /*0x14*/ struct ObjectWarpNode *warpNodes; + /*0x18*/ struct WarpNode *paintingWarpNodes; + /*0x1C*/ struct InstantWarp *instantWarps; + /*0x20*/ struct SpawnInfo *objectSpawnInfos; + /*0x24*/ struct Camera *camera; + /*0x28*/ struct UnusedArea28 *unused; // Filled by level script 0x3A, but is unused. + /*0x2C*/ struct Whirlpool *whirlpools[2]; + /*0x34*/ u8 dialog[2]; // Level start dialog number (set by level script cmd 0x30) + /*0x36*/ u16 musicParam; + /*0x38*/ u16 musicParam2; +}; + +FORCE_BSS struct HudDisplay gHudDisplay; +FORCE_BSS OSThread __osThreadSave; +FORCE_BSS OSPifRam __osContPifRam; +FORCE_BSS OSPiHandle __Dom2SpeedParam; +FORCE_BSS struct SpawnInfo gPlayerSpawnInfos[1]; +FORCE_BSS struct GraphNode *D_8033A160[0x100]; +FORCE_BSS OSPiHandle __CartRomHandle; +FORCE_BSS u8 sBssPad[0x48]; //! TODO: What is this space in the bss? +FORCE_BSS OSMesgQueue gOsPiMessageQueue; +FORCE_BSS OSPiHandle __Dom1SpeedParam; +FORCE_BSS OSTimer __osBaseTimer; +FORCE_BSS struct WarpTransition gWarpTransition; +FORCE_BSS OSTimer __osEepromTimer; +FORCE_BSS struct MarioState gMarioStates[1]; +FORCE_BSS __OSEventState __osEventStateTab[OS_NUM_EVENTS]; +FORCE_BSS OSMesgQueue __osEepromTimerQ; +FORCE_BSS struct Area gAreaData[8]; +FORCE_BSS OSMesgQueue gOsSiMessageQueue; +#endif diff --git a/src/game/crash_screen.c b/src/game/crash_screen.c index 64a0f81a..5381bc18 100644 --- a/src/game/crash_screen.c +++ b/src/game/crash_screen.c @@ -4,7 +4,7 @@ #include "sm64.h" -#if defined(TARGET_N64) && (defined(VERSION_EU) || defined(VERSION_SH)) +#if defined(TARGET_N64) && (defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN)) #include "lib/src/printf.h" @@ -118,7 +118,7 @@ void crash_screen_print(s32 x, s32 y, const char *fmt, ...) { if (size > 0) { ptr = buf; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) while (size > 0) { #else while (*ptr) { @@ -130,7 +130,7 @@ void crash_screen_print(s32 x, s32 y, const char *fmt, ...) { crash_screen_draw_glyph(x, y, glyph); } -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) size--; #endif @@ -189,7 +189,7 @@ void draw_crash_screen(OSThread *thread) { cause = 17; } -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) osWritebackDCacheAll(); #endif diff --git a/src/game/envfx_snow.c b/src/game/envfx_snow.c index 3b55ced8..f421bc47 100644 --- a/src/game/envfx_snow.c +++ b/src/game/envfx_snow.c @@ -269,7 +269,7 @@ void envfx_update_snow_blizzard(s32 snowCylinderX, s32 snowCylinderY, s32 snowCy /*! Unused function. Checks whether a position is laterally within 3000 units * to the point (x: 3380, z: -520). Considering there is an unused blizzard * snow mode, this could have been used to check whether Mario is in a - * 'blizzard area'. In Cool Cool Mountain and Snowman's Land the area lies + * 'blizzard area'. In Cool, Cool Mountain and Snowman's Land the area lies * near the starting point and doesn't seem meaningful. Notably, the point is * close to the entrance of SL, so maybe there were plans for an extra hint to * find it. The radius of 3000 units is quite large for that though, covering diff --git a/src/game/game_init.c b/src/game/game_init.c index 4be1c7b5..89da5bf5 100644 --- a/src/game/game_init.c +++ b/src/game/game_init.c @@ -104,7 +104,7 @@ void init_rdp(void) { gDPSetColorDither(gDisplayListHead++, G_CD_MAGICSQ); gDPSetCycleType(gDisplayListHead++, G_CYC_FILL); -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) gDPSetAlphaDither(gDisplayListHead++, G_AD_PATTERN); #endif gDPPipeSync(gDisplayListHead++); @@ -407,7 +407,7 @@ UNUSED static void record_demo(void) { rawStickY = 0; } - // Rrecord the distinct input and timer so long as they are unique. + // Record the distinct input and timer so long as they are unique. // If the timer hits 0xFF, reset the timer for the next demo input. if (gRecordedDemoInput.timer == 0xFF || buttonMask != gRecordedDemoInput.buttonMask || rawStickX != gRecordedDemoInput.rawStickX || rawStickY != gRecordedDemoInput.rawStickY) { @@ -643,14 +643,21 @@ void setup_game_memory(void) { void thread5_game_loop(UNUSED void *arg) { struct LevelCommand *addr; + CN_DEBUG_PRINTF(("start gfx thread\n")); + setup_game_memory(); #if ENABLE_RUMBLE init_rumble_pak_scheduler_queue(); #endif + + CN_DEBUG_PRINTF(("init ctrl\n")); init_controllers(); + CN_DEBUG_PRINTF(("done ctrl\n")); + #if ENABLE_RUMBLE create_thread_6(); #endif + save_file_load_all(); set_vblank_handler(2, &gGameVblankHandler, &gGameVblankQueue, (OSMesg) 1); diff --git a/src/game/geo_misc.c b/src/game/geo_misc.c index 2fb8c5ef..7c34157f 100644 --- a/src/game/geo_misc.c +++ b/src/game/geo_misc.c @@ -43,10 +43,11 @@ s8 gFlyingCarpetState; * Texture coordinates are s10.5 fixed-point, which means you should left-shift the actual coordinates by 5. */ #ifndef GBI_FLOATS -void make_vertex(Vtx *vtx, s32 n, s16 x, s16 y, s16 z, s16 tx, s16 ty, u8 r, u8 g, u8 b, u8 a) { +void make_vertex(Vtx *vtx, s32 n, s16 x, s16 y, s16 z, s16 tx, s16 ty, u8 r, u8 g, u8 b, u8 a) #else -void make_vertex(Vtx *vtx, s32 n, f32 x, f32 y, f32 z, s16 tx, s16 ty, u8 r, u8 g, u8 b, u8 a) { +void make_vertex(Vtx *vtx, s32 n, f32 x, f32 y, f32 z, s16 tx, s16 ty, u8 r, u8 g, u8 b, u8 a) #endif +{ vtx[n].v.ob[0] = x; vtx[n].v.ob[1] = y; vtx[n].v.ob[2] = z; diff --git a/src/game/hud.c b/src/game/hud.c index 5a0f6806..2d94dce7 100644 --- a/src/game/hud.c +++ b/src/game/hud.c @@ -27,16 +27,6 @@ struct PowerMeterHUD { f32 unused; }; -struct UnusedHUDStruct { - u32 unused1; - u16 unused2; - u16 unused3; -}; - -struct CameraHUD { - s16 status; -}; - // Stores health segmented value defined by numHealthWedges // When the HUD is rendered this value is 8, full health. static s16 sPowerMeterStoredHealth; @@ -53,9 +43,15 @@ static struct PowerMeterHUD sPowerMeterHUD = { // when the power meter is hidden. s32 sPowerMeterVisibleTimer = 0; -UNUSED static struct UnusedHUDStruct sUnusedHUDValues = { 0x00, 0x0A, 0x00 }; +// TODO: fakediff? +#ifndef VERSION_CN +UNUSED static s32 sUnusedHUDValue1 = 0; +UNUSED static s16 sUnusedHUDValue2 = 10; +#else +UNUSED static s32 sUnusedHUDValue2 = 10; +#endif -static struct CameraHUD sCameraHUD = { CAM_STATUS_NONE }; +static s16 sCameraHUDStatus = CAM_STATUS_NONE; /** * Renders a rgba16 16x16 glyph texture from a table list. @@ -325,7 +321,10 @@ void render_hud_timer(void) { u16 timerValFrames = gHudDisplay.timer; u16 timerMins = timerValFrames / (30 * 60); u16 timerSecs = (timerValFrames - (timerMins * 1800)) / 30; - u16 timerFracSecs = ((timerValFrames - (timerMins * 1800) - (timerSecs * 30)) & 0xFFFF) / 3; + u16 timerFracSecs = ((u16) (timerValFrames - (timerMins * 1800) - (timerSecs * 30))) / 3; +#ifdef VERSION_CN + u8 timeString[2]; +#endif #ifdef VERSION_EU switch (eu_get_language()) { @@ -339,6 +338,10 @@ void render_hud_timer(void) { print_text(GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(150), 185, "ZEIT"); break; } +#elif defined(VERSION_CN) + timeString[0] = 0xC0; // TODO: iQue colorful text + timeString[1] = 0x00; + print_text_centered(GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(150), 185, (const char *) timeString); #else print_text(GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(150), 185, "TIME"); #endif @@ -358,11 +361,11 @@ void render_hud_timer(void) { * defined in update_camera_status. */ void set_hud_camera_status(s16 status) { - sCameraHUD.status = status; + sCameraHUDStatus = status; } /** - * Renders camera HUD glyphs using a table list, depending of + * Renders camera HUD glyphs using a table list. Depending on * the camera status called, a defined glyph is rendered. */ void render_hud_camera_status(void) { @@ -370,14 +373,14 @@ void render_hud_camera_status(void) { s32 x = GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(54); s32 y = 205; - if (sCameraHUD.status == CAM_STATUS_NONE) { + if (sCameraHUDStatus == CAM_STATUS_NONE) { return; } gSPDisplayList(gDisplayListHead++, dl_hud_img_begin); render_hud_tex_lut(x, y, (*cameraLUT)[GLYPH_CAM_CAMERA]); - switch (sCameraHUD.status & CAM_STATUS_MODE_GROUP) { + switch (sCameraHUDStatus & CAM_STATUS_MODE_GROUP) { case CAM_STATUS_MARIO: render_hud_tex_lut(x + 16, y, (*cameraLUT)[GLYPH_CAM_MARIO_HEAD]); break; @@ -389,7 +392,7 @@ void render_hud_camera_status(void) { break; } - switch (sCameraHUD.status & CAM_STATUS_C_MODE_GROUP) { + switch (sCameraHUDStatus & CAM_STATUS_C_MODE_GROUP) { case CAM_STATUS_C_DOWN: render_hud_small_tex_lut(x + 4, y + 16, (*cameraLUT)[GLYPH_CAM_ARROW_DOWN]); break; diff --git a/src/game/ingame_menu.c b/src/game/ingame_menu.c index 5c74037f..0ac715ba 100644 --- a/src/game/ingame_menu.c +++ b/src/game/ingame_menu.c @@ -28,26 +28,42 @@ #define LANGUAGE_FUNCTION gInGameLanguage #endif -u16 gDialogColorFadeTimer; -s8 gLastDialogLineNum; -s32 gDialogVariable; -u16 gDialogTextAlpha; -#if defined(VERSION_EU) +FORCE_BSS u16 gMenuTextColorTransTimer; +FORCE_BSS s8 gLastDialogLineNum; +FORCE_BSS s32 gDialogVariable; +FORCE_BSS u16 gMenuTextAlpha; +#ifdef VERSION_EU s16 gDialogX; s16 gDialogY; #endif -s16 gCutsceneMsgXOffset; -s16 gCutsceneMsgYOffset; +FORCE_BSS s16 gCutsceneMsgXOffset; +FORCE_BSS s16 gCutsceneMsgYOffset; s8 gRedCoinsCollected; extern u8 gLastCompletedCourseNum; extern u8 gLastCompletedStarNum; -enum DialogBoxState { - DIALOG_STATE_OPENING, - DIALOG_STATE_VERTICAL, - DIALOG_STATE_HORIZONTAL, - DIALOG_STATE_CLOSING +enum MenuState { + MENU_STATE_0, + MENU_STATE_1, + MENU_STATE_2, + MENU_STATE_3, + MENU_STATE_DEFAULT = MENU_STATE_0, + + // Dialog + MENU_STATE_DIALOG_OPENING = MENU_STATE_0, + MENU_STATE_DIALOG_OPEN = MENU_STATE_1, + MENU_STATE_DIALOG_SCROLLING = MENU_STATE_2, + MENU_STATE_DIALOG_CLOSING = MENU_STATE_3, + + // Pause Screen + MENU_STATE_PAUSE_SCREEN_OPENING = MENU_STATE_0, + MENU_STATE_PAUSE_SCREEN_COURSE = MENU_STATE_1, + MENU_STATE_PAUSE_SCREEN_CASTLE = MENU_STATE_2, + + // Course Complete Screen + MENU_STATE_COURSE_COMPLETE_SCREEN_OPENING = MENU_STATE_0, + MENU_STATE_COURSE_COMPLETE_SCREEN_OPEN = MENU_STATE_1 }; enum DialogBoxPageState { @@ -61,10 +77,10 @@ enum DialogBoxType { DIALOG_TYPE_ZOOM // used in signposts and wall signs and etc }; -#define DEFAULT_DIALOG_BOX_ANGLE 90.0f -#define DEFAULT_DIALOG_BOX_SCALE 19.0f +#define DIALOG_BOX_ANGLE_DEFAULT 90.0f +#define DIALOG_BOX_SCALE_DEFAULT 19.0f -#if defined(VERSION_US) || defined(VERSION_EU) +#if defined(VERSION_US) || defined(VERSION_EU) || defined(VERSION_CN) u8 gDialogCharWidths[256] = { // TODO: Is there a way to auto generate this? 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 5, 8, 8, 6, 6, 6, 6, 6, 5, 6, 6, @@ -97,24 +113,23 @@ u8 gDialogCharWidths[256] = { // TODO: Is there a way to auto generate this? }; #endif -s8 gDialogBoxState = DIALOG_STATE_OPENING; -f32 gDialogBoxOpenTimer = DEFAULT_DIALOG_BOX_ANGLE; -f32 gDialogBoxScale = DEFAULT_DIALOG_BOX_SCALE; +s8 gMenuState = MENU_STATE_DEFAULT; +f32 gDialogBoxAngle = DIALOG_BOX_ANGLE_DEFAULT; +f32 gDialogBoxScale = DIALOG_BOX_SCALE_DEFAULT; s16 gDialogScrollOffsetY = 0; s8 gDialogBoxType = DIALOG_TYPE_ROTATE; s16 gDialogID = DIALOG_NONE; -s16 gLastDialogPageStrPos = 0; -s16 gDialogTextPos = 0; +s16 gNextDialogPageStartStrIndex = 0; +s16 gDialogPageStartStrIndex = 0; #ifdef VERSION_EU s32 gInGameLanguage = LANGUAGE_ENGLISH; #endif -s8 gDialogLineNum = 1; -s8 gLastDialogResponse = 0; +s8 gMenuLineNum = 1; +s8 gDialogWithChoice = FALSE; u8 gMenuHoldKeyIndex = 0; u8 gMenuHoldKeyTimer = 0; s32 gDialogResponse = DIALOG_RESPONSE_NONE; - void create_dl_identity_matrix(void) { Mtx *matrix = (Mtx *) alloc_display_list(sizeof(Mtx)); @@ -209,6 +224,33 @@ void create_dl_ortho_matrix(void) { #if defined(VERSION_US) || defined(VERSION_EU) UNUSED #endif +#ifdef VERSION_CN +static u8 *alloc_ia8_text_from_i1(u8 *in) { + s32 i, j; + u8 l, r; + u8 bitMask = 0x80; + u8 *out = alloc_display_list(8 * 8); + + if (out == NULL) { + return NULL; + } + + for (i = 0; i < 16; i++) { + for (j = 0; j < 8;) { + r = 0; + l = ((in[i] & (bitMask >> j)) >> (7 - j)) != 0 ? 0xF0 : 0x00; + j++; + r = ((in[i] & (bitMask >> j)) >> (7 - j)) != 0 ? 0x0F : 0x00; + out[i * 4 + j / 2] = l | r; + CN_DEBUG_PRINTF(("%x, ", out[i * 4 + j / 2])); + j++; + } + CN_DEBUG_PRINTF(("\n")); + } + + return out; +} +#else static u8 *alloc_ia8_text_from_i1(u16 *in, s16 width, s16 height) { s32 inPos; u16 bitMask; @@ -238,8 +280,14 @@ static u8 *alloc_ia8_text_from_i1(u16 *in, s16 width, s16 height) { return out; } +#endif -void render_generic_char(u8 c) { +#ifdef VERSION_CN +void render_generic_char(u16 c) +#else +void render_generic_char(u8 c) +#endif +{ void **fontLUT = segmented_to_virtual(main_font_lut); void *packedTexture = segmented_to_virtual(fontLUT[c]); #if defined(VERSION_JP) || defined(VERSION_SH) @@ -315,10 +363,22 @@ void render_uppercase_diacritic(s16 *xPos, s16 *yPos, u8 letter, u8 diacritic) { } #endif // VERSION_EU -#if defined(VERSION_US) || defined(VERSION_EU) +#ifdef VERSION_CN +void render_generic_char_cn(u16 c) { + void **fontLUT = segmented_to_virtual(main_font_lut); + void *packedTexture = segmented_to_virtual(fontLUT[c]); + void *unpackedTexture = alloc_ia8_text_from_i1(packedTexture); + + gDPPipeSync(gDisplayListHead++); + gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_IA, G_IM_SIZ_16b, 1, VIRTUAL_TO_PHYSICAL(unpackedTexture)); + gSPDisplayList(gDisplayListHead++, dl_ia_text_tex_settings); +} +#endif + +#if defined(VERSION_US) || defined(VERSION_EU) || defined(VERSION_CN) +// First byte is length, rest is string struct MultiTextEntry { - u8 length; - u8 str[4]; + u8 str[5]; }; #define TEXT_THE_RAW ASCII_TO_DIALOG('t'), ASCII_TO_DIALOG('h'), ASCII_TO_DIALOG('e'), 0x00 @@ -331,7 +391,7 @@ enum MultiStringIDs { STRING_THE, STRING_YOU }; * 0: 'the' * 1: 'you' */ -#if defined(VERSION_US) +#if defined(VERSION_US) || defined(VERSION_CN) void render_multi_text_string(s8 multiTextID) #elif defined(VERSION_EU) void render_multi_text_string(s16 *xPos, s16 *yPos, s8 multiTextID) @@ -339,31 +399,38 @@ void render_multi_text_string(s16 *xPos, s16 *yPos, s8 multiTextID) { s8 i; struct MultiTextEntry textLengths[2] = { - { 3, { TEXT_THE_RAW } }, - { 3, { TEXT_YOU_RAW } }, + { { 3, TEXT_THE_RAW } }, + { { 3, TEXT_YOU_RAW } }, }; - for (i = 0; i < textLengths[multiTextID].length; i++) { -#if defined(VERSION_US) - render_generic_char(textLengths[multiTextID].str[i]); + for (i = 0; i < textLengths[multiTextID].str[0]; i++) { +#if defined(VERSION_US) || defined(VERSION_CN) + render_generic_char(textLengths[multiTextID].str[1 + i]); create_dl_translation_matrix( - MENU_MTX_NOPUSH, (f32)(gDialogCharWidths[textLengths[multiTextID].str[i]]), 0.0f, 0.0f); + MENU_MTX_NOPUSH, (f32)(gDialogCharWidths[textLengths[multiTextID].str[1 + i]]), 0.0f, 0.0f); #elif defined(VERSION_EU) - render_generic_char_at_pos(*xPos, *yPos, textLengths[multiTextID].str[i]); - *xPos += gDialogCharWidths[textLengths[multiTextID].str[i]]; + render_generic_char_at_pos(*xPos, *yPos, textLengths[multiTextID].str[1 + i]); + *xPos += gDialogCharWidths[textLengths[multiTextID].str[1 + i]]; #endif } } #endif #if defined(VERSION_JP) || defined(VERSION_SH) + #define CUR_CHAR str[strPos] #define MAX_STRING_WIDTH 18 #define CHAR_WIDTH_SPACE 5.0f #define CHAR_WIDTH_DEFAULT 10.0f +#elif defined(VERSION_CN) + #define CUR_CHAR strChar + #define MAX_STRING_WIDTH 18 + #define CHAR_WIDTH_SPACE gDialogCharWidths[DIALOG_CHAR_SPACE] + #define CHAR_WIDTH_DEFAULT gDialogCharWidths[CUR_CHAR] #else + #define CUR_CHAR str[strPos] #define MAX_STRING_WIDTH 16 - #define CHAR_WIDTH_SPACE (f32)(gDialogCharWidths[DIALOG_CHAR_SPACE]) - #define CHAR_WIDTH_DEFAULT (f32)(gDialogCharWidths[str[strPos]]) + #define CHAR_WIDTH_SPACE gDialogCharWidths[DIALOG_CHAR_SPACE] + #define CHAR_WIDTH_DEFAULT gDialogCharWidths[CUR_CHAR] #endif /** @@ -378,82 +445,102 @@ void print_generic_string(s16 x, s16 y, const u8 *str) { s16 xCoord = x; s16 yCoord = 240 - y; #endif +#ifdef VERSION_CN + s32 strChar; +#endif #ifndef VERSION_EU create_dl_translation_matrix(MENU_MTX_PUSH, x, y, 0.0f); #endif - while (str[strPos] != DIALOG_CHAR_TERMINATOR) { - switch (str[strPos]) { -#ifdef VERSION_EU - case DIALOG_CHAR_SPACE: - xCoord += 5; - break; - case DIALOG_CHAR_NEWLINE: - yCoord += 16; - xCoord = x; - lineNum++; - break; - case DIALOG_CHAR_LOWER_A_GRAVE: - case DIALOG_CHAR_LOWER_A_CIRCUMFLEX: - case DIALOG_CHAR_LOWER_A_UMLAUT: - render_lowercase_diacritic(&xCoord, &yCoord, ASCII_TO_DIALOG('a'), str[strPos] & 0xF); - break; - case DIALOG_CHAR_UPPER_A_UMLAUT: // @bug grave and circumflex (0x64-0x65) are absent here - render_uppercase_diacritic(&xCoord, &yCoord, ASCII_TO_DIALOG('A'), str[strPos] & 0xF); - break; - case DIALOG_CHAR_LOWER_E_GRAVE: - case DIALOG_CHAR_LOWER_E_CIRCUMFLEX: - case DIALOG_CHAR_LOWER_E_UMLAUT: - case DIALOG_CHAR_LOWER_E_ACUTE: - render_lowercase_diacritic(&xCoord, &yCoord, ASCII_TO_DIALOG('e'), str[strPos] & 0xF); - break; - case DIALOG_CHAR_UPPER_E_GRAVE: - case DIALOG_CHAR_UPPER_E_CIRCUMFLEX: - case DIALOG_CHAR_UPPER_E_UMLAUT: - case DIALOG_CHAR_UPPER_E_ACUTE: - render_uppercase_diacritic(&xCoord, &yCoord, ASCII_TO_DIALOG('E'), str[strPos] & 0xF); - break; - case DIALOG_CHAR_LOWER_U_GRAVE: - case DIALOG_CHAR_LOWER_U_CIRCUMFLEX: - case DIALOG_CHAR_LOWER_U_UMLAUT: - render_lowercase_diacritic(&xCoord, &yCoord, ASCII_TO_DIALOG('u'), str[strPos] & 0xF); - break; - case DIALOG_CHAR_UPPER_U_UMLAUT: // @bug grave and circumflex (0x84-0x85) are absent here - render_uppercase_diacritic(&xCoord, &yCoord, ASCII_TO_DIALOG('U'), str[strPos] & 0xF); - break; - case DIALOG_CHAR_LOWER_O_CIRCUMFLEX: - case DIALOG_CHAR_LOWER_O_UMLAUT: - render_lowercase_diacritic(&xCoord, &yCoord, ASCII_TO_DIALOG('o'), str[strPos] & 0xF); - break; - case DIALOG_CHAR_UPPER_O_UMLAUT: // @bug circumflex (0x95) is absent here - render_uppercase_diacritic(&xCoord, &yCoord, ASCII_TO_DIALOG('O'), str[strPos] & 0xF); - break; - case DIALOG_CHAR_LOWER_I_CIRCUMFLEX: - case DIALOG_CHAR_LOWER_I_UMLAUT: - render_lowercase_diacritic(&xCoord, &yCoord, DIALOG_CHAR_I_NO_DIA, str[strPos] & 0xF); - break; -#else // i.e. not EU - case DIALOG_CHAR_DAKUTEN: - mark = DIALOG_MARK_DAKUTEN; - break; - case DIALOG_CHAR_PERIOD_OR_HANDAKUTEN: - mark = DIALOG_MARK_HANDAKUTEN; - break; - case DIALOG_CHAR_NEWLINE: +#ifdef VERSION_CN + while (str[strPos] != DIALOG_CHAR_SPECIAL_MODIFIER || str[strPos + 1] != DIALOG_CHAR_TERMINATOR) { + strChar = str[strPos] << 8 | str[strPos + 1]; +#else + while (str[strPos] != SPECIAL_CHAR(DIALOG_CHAR_TERMINATOR)) { +#endif + switch (CUR_CHAR) { +#ifdef VERSION_CN + case SPECIAL_CHAR(DIALOG_CHAR_NEWLINE): gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); create_dl_translation_matrix(MENU_MTX_PUSH, x, y - (lineNum * MAX_STRING_WIDTH), 0.0f); lineNum++; break; - case DIALOG_CHAR_PERIOD: + case SPECIAL_CHAR(DIALOG_CHAR_STAR_OPEN): // ??? + create_dl_translation_matrix(MENU_MTX_NOPUSH, 32.0f, 0.0f, 0.0f); + break; +#endif +#ifdef VERSION_EU + case SPECIAL_CHAR(DIALOG_CHAR_SPACE): + xCoord += 5; + break; + case SPECIAL_CHAR(DIALOG_CHAR_NEWLINE): + yCoord += 16; + xCoord = x; + lineNum++; + break; + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_A_GRAVE): + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_A_CIRCUMFLEX): + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_A_UMLAUT): + render_lowercase_diacritic(&xCoord, &yCoord, ASCII_TO_DIALOG('a'), CUR_CHAR & 0xF); + break; + case SPECIAL_CHAR(DIALOG_CHAR_UPPER_A_UMLAUT): // @bug grave and circumflex (0x64-0x65) are absent here + render_uppercase_diacritic(&xCoord, &yCoord, ASCII_TO_DIALOG('A'), CUR_CHAR & 0xF); + break; + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_E_GRAVE): + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_E_CIRCUMFLEX): + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_E_UMLAUT): + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_E_ACUTE): + render_lowercase_diacritic(&xCoord, &yCoord, ASCII_TO_DIALOG('e'), CUR_CHAR & 0xF); + break; + case SPECIAL_CHAR(DIALOG_CHAR_UPPER_E_GRAVE): + case SPECIAL_CHAR(DIALOG_CHAR_UPPER_E_CIRCUMFLEX): + case SPECIAL_CHAR(DIALOG_CHAR_UPPER_E_UMLAUT): + case SPECIAL_CHAR(DIALOG_CHAR_UPPER_E_ACUTE): + render_uppercase_diacritic(&xCoord, &yCoord, ASCII_TO_DIALOG('E'), CUR_CHAR & 0xF); + break; + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_U_GRAVE): + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_U_CIRCUMFLEX): + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_U_UMLAUT): + render_lowercase_diacritic(&xCoord, &yCoord, ASCII_TO_DIALOG('u'), CUR_CHAR & 0xF); + break; + case SPECIAL_CHAR(DIALOG_CHAR_UPPER_U_UMLAUT): // @bug grave and circumflex (0x84-0x85) are absent here + render_uppercase_diacritic(&xCoord, &yCoord, ASCII_TO_DIALOG('U'), CUR_CHAR & 0xF); + break; + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_O_CIRCUMFLEX): + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_O_UMLAUT): + render_lowercase_diacritic(&xCoord, &yCoord, ASCII_TO_DIALOG('o'), CUR_CHAR & 0xF); + break; + case SPECIAL_CHAR(DIALOG_CHAR_UPPER_O_UMLAUT): // @bug circumflex (0x95) is absent here + render_uppercase_diacritic(&xCoord, &yCoord, ASCII_TO_DIALOG('O'), CUR_CHAR & 0xF); + break; + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_I_CIRCUMFLEX): + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_I_UMLAUT): + render_lowercase_diacritic(&xCoord, &yCoord, DIALOG_CHAR_I_NO_DIA, CUR_CHAR & 0xF); + break; +#else // i.e. not EU + case SPECIAL_CHAR(DIALOG_CHAR_DAKUTEN): + mark = DIALOG_MARK_DAKUTEN; + break; + case SPECIAL_CHAR(DIALOG_CHAR_PERIOD_OR_HANDAKUTEN): + mark = DIALOG_MARK_HANDAKUTEN; + break; +#ifndef VERSION_CN + case SPECIAL_CHAR(DIALOG_CHAR_NEWLINE): + gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); + create_dl_translation_matrix(MENU_MTX_PUSH, x, y - (lineNum * MAX_STRING_WIDTH), 0.0f); + lineNum++; + break; +#endif + case SPECIAL_CHAR(DIALOG_CHAR_PERIOD): create_dl_translation_matrix(MENU_MTX_PUSH, -2.0f, -5.0f, 0.0f); render_generic_char(DIALOG_CHAR_PERIOD_OR_HANDAKUTEN); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); break; #endif -#if defined(VERSION_US) || defined(VERSION_EU) - case DIALOG_CHAR_SLASH: +#if defined(VERSION_US) || defined(VERSION_EU) || defined(VERSION_CN) + case SPECIAL_CHAR(DIALOG_CHAR_SLASH): #ifdef VERSION_EU xCoord += gDialogCharWidths[DIALOG_CHAR_SPACE] * 2; #else @@ -461,14 +548,14 @@ void print_generic_string(s16 x, s16 y, const u8 *str) { MENU_MTX_NOPUSH, (f32)(gDialogCharWidths[DIALOG_CHAR_SPACE] * 2), 0.0f, 0.0f); #endif break; - case DIALOG_CHAR_MULTI_THE: + case SPECIAL_CHAR(DIALOG_CHAR_MULTI_THE): #ifdef VERSION_EU render_multi_text_string(&xCoord, &yCoord, STRING_THE); #else render_multi_text_string(STRING_THE); #endif break; - case DIALOG_CHAR_MULTI_YOU: + case SPECIAL_CHAR(DIALOG_CHAR_MULTI_YOU): #ifdef VERSION_EU render_multi_text_string(&xCoord, &yCoord, STRING_YOU); #else @@ -478,7 +565,7 @@ void print_generic_string(s16 x, s16 y, const u8 *str) { #endif #ifndef VERSION_EU - case DIALOG_CHAR_SPACE: + case SPECIAL_CHAR(DIALOG_CHAR_SPACE): create_dl_translation_matrix(MENU_MTX_NOPUSH, CHAR_WIDTH_SPACE, 0.0f, 0.0f); break; #ifdef VERSION_JP @@ -488,10 +575,20 @@ void print_generic_string(s16 x, s16 y, const u8 *str) { default: #ifdef VERSION_EU - render_generic_char_at_pos(xCoord, yCoord, str[strPos]); - xCoord += gDialogCharWidths[str[strPos]]; + render_generic_char_at_pos(xCoord, yCoord, CUR_CHAR); + xCoord += gDialogCharWidths[CUR_CHAR]; #else - render_generic_char(str[strPos]); +#ifdef VERSION_CN + if (strChar >= 0x0100) { + strChar = (strChar - 0xFF) * 2 + 0xFE; + render_generic_char_cn(strChar); + create_dl_translation_matrix(MENU_MTX_NOPUSH, 8.0f, 0.0f, 0.0f); + render_generic_char_cn(strChar + 1); + create_dl_translation_matrix(MENU_MTX_NOPUSH, 8.0f, 0.0f, 0.0f); + break; + } +#endif + render_generic_char(CUR_CHAR); if (mark != DIALOG_MARK_NONE) { create_dl_translation_matrix(MENU_MTX_PUSH, 5.0f, 5.0f, 0.0f); render_generic_char(DIALOG_CHAR_MARK_START + mark); @@ -506,7 +603,11 @@ void print_generic_string(s16 x, s16 y, const u8 *str) { #endif } +#ifdef VERSION_CN + strPos += 2; +#else strPos++; +#endif } #ifndef VERSION_EU @@ -539,6 +640,9 @@ void print_hud_lut_string(s8 hudLUT, s16 x, s16 y, const u8 *str) { u32 curX = x; u32 curY = y; +#ifdef VERSION_CN + u32 xOffset = 0; +#else u32 xStride; // X separation if (hudLUT == HUD_LUT_JPMENU) { @@ -550,11 +654,17 @@ void print_hud_lut_string(s8 hudLUT, s16 x, s16 y, const u8 *str) { xStride = 12; //? Shindou uses this. #endif } +#endif - while (str[strPos] != GLOBAR_CHAR_TERMINATOR) { + while (str[strPos] != GLOBAL_CHAR_TERMINATOR) { #ifndef VERSION_JP switch (str[strPos]) { -#ifdef VERSION_EU +#ifdef VERSION_CN + case GLOBAL_CHAR_NEWLINE: + curY += 16; + curX -= xOffset; + break; +#elif defined(VERSION_EU) case GLOBAL_CHAR_SPACE: curX += xStride / 2; break; @@ -579,19 +689,33 @@ void print_hud_lut_string(s8 hudLUT, s16 x, s16 y, const u8 *str) { #endif gDPPipeSync(gDisplayListHead++); +#ifndef VERSION_CN if (hudLUT == HUD_LUT_JPMENU) { gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, hudLUT1[str[strPos]]); } if (hudLUT == HUD_LUT_GLOBAL) { +#endif gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, hudLUT2[str[strPos]]); +#ifndef VERSION_CN } +#endif gSPDisplayList(gDisplayListHead++, dl_rgba16_load_tex_block); gSPTextureRectangle(gDisplayListHead++, curX << 2, curY << 2, (curX + 16) << 2, (curY + 16) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); +#ifdef VERSION_CN + if (str[strPos] < 0x3A) { + curX += 12; + xOffset += 12; + } else { + curX += 16; + xOffset += 16; + } +#else curX += xStride; +#endif #ifndef VERSION_JP } #endif @@ -666,7 +790,7 @@ void print_menu_generic_string(s16 x, s16 y, const u8 *str) { mark = DIALOG_MARK_NONE; } #endif -#if defined(VERSION_JP) || defined(VERSION_SH) +#if defined(VERSION_JP) || defined(VERSION_SH) || defined(VERSION_CN) curX += 9; #else curX += gDialogCharWidths[str[strPos]]; @@ -689,7 +813,7 @@ void print_credits_string(s16 x, s16 y, const u8 *str) { G_TX_CLAMP, 3, G_TX_NOLOD, G_TX_CLAMP, 3, G_TX_NOLOD); gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, (8 - 1) << G_TEXTURE_IMAGE_FRAC, (8 - 1) << G_TEXTURE_IMAGE_FRAC); - while (str[strPos] != GLOBAR_CHAR_TERMINATOR) { + while (str[strPos] != GLOBAL_CHAR_TERMINATOR) { switch (str[strPos]) { case GLOBAL_CHAR_SPACE: curX += 4; @@ -762,16 +886,28 @@ void handle_menu_scrolling(s8 scrollDirection, s8 *currentIndex, s8 minIndex, s8 } // EU has both get_str_x_pos_from_center and get_str_x_pos_from_center_scale -// JP, US and Shindou only implement one or the other -#if defined(VERSION_US) || defined(VERSION_EU) +// JP, US, Shindou and iQue only implement one or the other +#if defined(VERSION_US) || defined(VERSION_EU) || defined(VERSION_CN) s16 get_str_x_pos_from_center(s16 centerPos, u8 *str, UNUSED f32 scale) { s16 strPos = 0; f32 spacesWidth = 0.0f; +#ifdef VERSION_CN + while (!(str[strPos] == DIALOG_CHAR_SPECIAL_MODIFIER && str[strPos + 1] == DIALOG_CHAR_TERMINATOR)) { + u16 character = (str[strPos] << 8) | str[strPos + 1]; + if (character <= 0xFF) { + spacesWidth += gDialogCharWidths[character]; + } else { + spacesWidth += 16.0; + } + strPos += 2; + } +#else while (str[strPos] != DIALOG_CHAR_TERMINATOR) { spacesWidth += gDialogCharWidths[str[strPos]]; strPos++; } +#endif // return the x position of where the string starts as half the string's // length from the position of the provided center. return (s16)(centerPos - (s16)(spacesWidth / 2.0)); @@ -800,15 +936,27 @@ s16 get_str_x_pos_from_center_scale(s16 centerPos, u8 *str, f32 scale) { } #endif -#if defined(VERSION_US) || defined(VERSION_EU) +#if defined(VERSION_US) || defined(VERSION_EU) || defined(VERSION_CN) s16 get_string_width(u8 *str) { s16 strPos = 0; s16 width = 0; +#ifdef VERSION_CN + while (!(str[strPos] == DIALOG_CHAR_SPECIAL_MODIFIER && str[strPos + 1] == DIALOG_CHAR_TERMINATOR)) { + u16 character = (str[strPos] << 8) | str[strPos + 1]; + if (character <= 0xFF) { + width += gDialogCharWidths[character]; + } else { + width += 16; + } + strPos += 2; + } +#else while (str[strPos] != DIALOG_CHAR_TERMINATOR) { width += gDialogCharWidths[str[strPos]]; strPos++; } +#endif return width; } #endif @@ -868,17 +1016,62 @@ void int_to_str(s32 num, u8 *dst) { digit3 = (num - digit1 * 100) - (digit2 * 10); if (digit1 != 0) { - dst[pos++] = digit1; + dst[pos] = digit1; pos++; } if (digit2 != 0 || digit1 != 0) { - dst[pos++] = digit2; + dst[pos] = digit2; pos++; } - dst[pos++] = digit3; + dst[pos] = digit3; + pos++; dst[pos] = DIALOG_CHAR_TERMINATOR; } +#ifdef VERSION_CN +void int_to_str_2(s32 num, u8 *dst) { + s32 digit1; + s32 digit2; + s32 digit3; + + s8 pos = 0; + + if (num > 999) { + dst[0] = 0x00; + dst[1] = 0x00; + dst[2] = DIALOG_CHAR_SPECIAL_MODIFIER; + dst[3] = DIALOG_CHAR_TERMINATOR; + return; + } + + digit1 = num / 100; + digit2 = (num - digit1 * 100) / 10; + digit3 = (num - digit1 * 100) - (digit2 * 10); + + if (digit1 != 0) { + dst[pos] = 0x00; + pos++; + dst[pos] = digit1; + pos++; + } + + if (digit2 != 0 || digit1 != 0) { + dst[pos] = 0x00; + pos++; + dst[pos] = digit2; + pos++; + } + + dst[pos] = 0x00; + pos++; + dst[pos] = digit3; + pos++; + dst[pos] = DIALOG_CHAR_SPECIAL_MODIFIER; + pos++; + dst[pos] = DIALOG_CHAR_TERMINATOR; +} +#endif + s16 get_dialog_id(void) { return gDialogID; } @@ -909,7 +1102,7 @@ void create_dialog_box_with_response(s16 dialog) { if (gDialogID == DIALOG_NONE) { gDialogID = dialog; gDialogBoxType = DIALOG_TYPE_ROTATE; - gLastDialogResponse = 1; + gDialogWithChoice = TRUE; } } @@ -920,13 +1113,13 @@ void reset_dialog_render_state(void) { trigger_cutscene_dialog(2); } - gDialogBoxScale = 19.0f; - gDialogBoxOpenTimer = 90.0f; - gDialogBoxState = DIALOG_STATE_OPENING; + gDialogBoxScale = DIALOG_BOX_SCALE_DEFAULT; + gDialogBoxAngle = DIALOG_BOX_ANGLE_DEFAULT; + gMenuState = MENU_STATE_DEFAULT; gDialogID = DIALOG_NONE; - gDialogTextPos = 0; - gLastDialogResponse = 0; - gLastDialogPageStrPos = 0; + gDialogPageStartStrIndex = 0; + gDialogWithChoice = FALSE; + gNextDialogPageStartStrIndex = 0; gDialogResponse = DIALOG_RESPONSE_NONE; } @@ -941,21 +1134,23 @@ void reset_dialog_render_state(void) { #endif void render_dialog_box_type(struct DialogEntry *dialog, s8 linesPerBox) { +#ifndef VERSION_CN UNUSED u8 filler[4]; +#endif create_dl_translation_matrix(MENU_MTX_NOPUSH, dialog->leftOffset, dialog->width, 0); switch (gDialogBoxType) { case DIALOG_TYPE_ROTATE: // Renders a dialog black box with zoom and rotation - if (gDialogBoxState == DIALOG_STATE_OPENING || gDialogBoxState == DIALOG_STATE_CLOSING) { + if (gMenuState == MENU_STATE_DIALOG_OPENING || gMenuState == MENU_STATE_DIALOG_CLOSING) { create_dl_scale_matrix(MENU_MTX_NOPUSH, 1.0 / gDialogBoxScale, 1.0 / gDialogBoxScale, 1.0f); // convert the speed into angle - create_dl_rotation_matrix(MENU_MTX_NOPUSH, gDialogBoxOpenTimer * 4.0f, 0, 0, 1.0f); + create_dl_rotation_matrix(MENU_MTX_NOPUSH, gDialogBoxAngle * 4.0f, 0, 0, 1.0f); } gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, 150); break; case DIALOG_TYPE_ZOOM: // Renders a dialog white box with zoom - if (gDialogBoxState == DIALOG_STATE_OPENING || gDialogBoxState == DIALOG_STATE_CLOSING) { + if (gMenuState == MENU_STATE_DIALOG_OPENING || gMenuState == MENU_STATE_DIALOG_CLOSING) { create_dl_translation_matrix(MENU_MTX_NOPUSH, 65.0 - (65.0 / gDialogBoxScale), (40.0 / gDialogBoxScale) - 40, 0); create_dl_scale_matrix(MENU_MTX_NOPUSH, 1.0 / gDialogBoxScale, 1.0 / gDialogBoxScale, 1.0f); @@ -965,22 +1160,26 @@ void render_dialog_box_type(struct DialogEntry *dialog, s8 linesPerBox) { } create_dl_translation_matrix(MENU_MTX_PUSH, X_VAL1, Y_VAL1, 0); +#ifdef VERSION_CN + create_dl_scale_matrix(MENU_MTX_NOPUSH, 1.1f, ((f32)(linesPerBox + 1) / Y_VAL2) + 0.1, 1.0f); +#else create_dl_scale_matrix(MENU_MTX_NOPUSH, 1.1f, ((f32) linesPerBox / Y_VAL2) + 0.1, 1.0f); +#endif gSPDisplayList(gDisplayListHead++, dl_draw_text_bg_box); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); } void change_and_flash_dialog_text_color_lines(s8 colorMode, s8 lineNum) { - u8 colorFade; + u8 color; - if (colorMode == 1) { + if (colorMode == 1) { // unused if (lineNum == 1) { gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, 255); } else { - if (lineNum == gDialogLineNum) { - colorFade = (gSineTable[gDialogColorFadeTimer >> 4] * 50.0f) + 200.0f; - gDPSetEnvColor(gDisplayListHead++, colorFade, colorFade, colorFade, 255); + if (lineNum == gMenuLineNum) { + color = sins(gMenuTextColorTransTimer) * 50.0f + 200.0f; + gDPSetEnvColor(gDisplayListHead++, color, color, color, 255); } else { gDPSetEnvColor(gDisplayListHead++, 200, 200, 200, 255); } @@ -1019,6 +1218,9 @@ void render_generic_dialog_char_at_pos(struct DialogEntry *dialog, s16 x, s16 y, #if defined(VERSION_JP) || defined(VERSION_SH) #define X_VAL3 5.0f #define Y_VAL3 20 +#elif defined(VERSION_CN) + #define X_VAL3 0.0f + #define Y_VAL3 20 #else #define X_VAL3 0.0f #define Y_VAL3 16 @@ -1077,7 +1279,7 @@ void render_star_count_dialog_text(s8 *xMatrix, s16 *linePos) #if defined(VERSION_JP) || defined(VERSION_SH) create_dl_translation_matrix(MENU_MTX_NOPUSH, 10 * *xMatrix, 0, 0); render_generic_char(tensDigit); -#elif defined(VERSION_US) +#elif defined(VERSION_US) || defined(VERSION_CN) if (*xMatrix != 1) { create_dl_translation_matrix( MENU_MTX_NOPUSH, (f32)(gDialogCharWidths[DIALOG_CHAR_SPACE] * *xMatrix), 0, 0); @@ -1105,7 +1307,7 @@ void render_star_count_dialog_text(s8 *xMatrix, s16 *linePos) #if defined(VERSION_JP) || defined(VERSION_SH) create_dl_translation_matrix(MENU_MTX_NOPUSH, 10 * *xMatrix, 0, 0); render_generic_char(onesDigit); -#elif defined(VERSION_US) +#elif defined(VERSION_US) || defined(VERSION_CN) if (*xMatrix != 1) { create_dl_translation_matrix( MENU_MTX_NOPUSH, (f32)(gDialogCharWidths[DIALOG_CHAR_SPACE] * (*xMatrix - 1)), 0, 0); @@ -1123,7 +1325,7 @@ void render_star_count_dialog_text(s8 *xMatrix, s16 *linePos) #endif } -#if defined(VERSION_US) || defined(VERSION_EU) +#if defined(VERSION_US) || defined(VERSION_EU) || defined(VERSION_CN) #ifdef VERSION_EU void render_multi_text_string_lines(s8 multiTextId, s8 lineNum, s8 linesPerBox, UNUSED s8 xMatrix, s8 lowerBound, struct DialogEntry *dialog) #else @@ -1132,31 +1334,31 @@ void render_multi_text_string_lines(s8 multiTextId, s8 lineNum, s16 *linePos, s8 { s8 i; struct MultiTextEntry textLengths[2] = { - { 3, { TEXT_THE_RAW } }, - { 3, { TEXT_YOU_RAW } }, + { { 3, TEXT_THE_RAW } }, + { { 3, TEXT_YOU_RAW } }, }; if (lineNum >= lowerBound && lineNum <= (lowerBound + linesPerBox)) { -#ifdef VERSION_US +#ifndef VERSION_EU if (*linePos != 0 || xMatrix != 1) { create_dl_translation_matrix( MENU_MTX_NOPUSH, (gDialogCharWidths[DIALOG_CHAR_SPACE] * (xMatrix - 1)), 0, 0); } #endif - for (i = 0; i < textLengths[multiTextId].length; i++) { + for (i = 0; i < textLengths[multiTextId].str[0]; i++) { #ifdef VERSION_EU - render_generic_dialog_char_at_pos(dialog, gDialogX, gDialogY, textLengths[multiTextId].str[i]); - gDialogX += gDialogCharWidths[textLengths[multiTextId].str[i]]; + render_generic_dialog_char_at_pos(dialog, gDialogX, gDialogY, textLengths[multiTextId].str[1 + i]); + gDialogX += gDialogCharWidths[textLengths[multiTextId].str[1 + i]]; #else - render_generic_char(textLengths[multiTextId].str[i]); + render_generic_char(textLengths[multiTextId].str[1 + i]); create_dl_translation_matrix( - MENU_MTX_NOPUSH, (gDialogCharWidths[textLengths[multiTextId].str[i]]), 0, 0); + MENU_MTX_NOPUSH, (gDialogCharWidths[textLengths[multiTextId].str[1 + i]]), 0, 0); #endif } } -#ifdef VERSION_US - linePos += textLengths[multiTextId].length; +#ifndef VERSION_EU + linePos += textLengths[multiTextId].str[0]; #endif } #endif @@ -1189,41 +1391,53 @@ void handle_dialog_text_and_pages(s8 colorMode, struct DialogEntry *dialog) void handle_dialog_text_and_pages(s8 colorMode, struct DialogEntry *dialog, s8 lowerBound) #endif { - UNUSED u8 filler[8]; + UNUSED u64 filler; #ifdef VERSION_EU s16 startY = 14; #endif +#ifdef VERSION_CN + s32 strChar; +#else u8 strChar; +#endif u8 *str = segmented_to_virtual(dialog->str); s8 lineNum = 1; s8 totalLines; s8 pageState = DIALOG_PAGE_STATE_NONE; - UNUSED s8 mark = DIALOG_MARK_NONE; // unused in US and EU + UNUSED s8 mark = DIALOG_MARK_NONE; // only used in JP and SH s8 xMatrix = 1; s8 linesPerBox = dialog->linesPerBox; - s16 strIdx; + s16 strIndex; #ifndef VERSION_EU s16 linePos = 0; #endif - if (gDialogBoxState == DIALOG_STATE_HORIZONTAL) { + if (gMenuState == MENU_STATE_DIALOG_SCROLLING) { // If scrolling, consider the number of lines for both // the current page and the page being scrolled to. +#ifdef VERSION_CN + totalLines = linesPerBox * 2 - 1; +#else totalLines = linesPerBox * 2 + 1; +#endif } else { +#ifdef VERSION_CN + totalLines = linesPerBox; +#else totalLines = linesPerBox + 1; +#endif } gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); - strIdx = gDialogTextPos; + strIndex = gDialogPageStartStrIndex; #ifdef VERSION_EU gDialogX = 0; gDialogY = startY; #endif - if (gDialogBoxState == DIALOG_STATE_HORIZONTAL) { + if (gMenuState == MENU_STATE_DIALOG_SCROLLING) { #ifdef VERSION_EU gDialogY -= gDialogScrollOffsetY; #else @@ -1237,16 +1451,21 @@ void handle_dialog_text_and_pages(s8 colorMode, struct DialogEntry *dialog, s8 l while (pageState == DIALOG_PAGE_STATE_NONE) { change_and_flash_dialog_text_color_lines(colorMode, lineNum); - strChar = str[strIdx]; + +#ifdef VERSION_CN + strChar = str[strIndex] << 8 | str[strIndex + 1]; +#else + strChar = str[strIndex]; +#endif switch (strChar) { - case DIALOG_CHAR_TERMINATOR: + case SPECIAL_CHAR(DIALOG_CHAR_TERMINATOR): pageState = DIALOG_PAGE_STATE_END; #ifndef VERSION_EU gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); #endif break; - case DIALOG_CHAR_NEWLINE: + case SPECIAL_CHAR(DIALOG_CHAR_NEWLINE): lineNum++; #ifdef VERSION_EU handle_dialog_scroll_page_state(lineNum, totalLines, &pageState, &xMatrix); @@ -1260,60 +1479,71 @@ void handle_dialog_text_and_pages(s8 colorMode, struct DialogEntry *dialog, s8 l break; #ifdef VERSION_EU - case DIALOG_CHAR_LOWER_A_GRAVE: - case DIALOG_CHAR_LOWER_A_CIRCUMFLEX: - case DIALOG_CHAR_LOWER_A_UMLAUT: + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_A_GRAVE): + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_A_CIRCUMFLEX): + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_A_UMLAUT): render_dialog_lowercase_diacritic(dialog, ASCII_TO_DIALOG('a'), strChar & 0xF); break; - case DIALOG_CHAR_UPPER_A_GRAVE: - case DIALOG_CHAR_UPPER_A_CIRCUMFLEX: - case DIALOG_CHAR_UPPER_A_UMLAUT: + case SPECIAL_CHAR(DIALOG_CHAR_UPPER_A_GRAVE): + case SPECIAL_CHAR(DIALOG_CHAR_UPPER_A_CIRCUMFLEX): + case SPECIAL_CHAR(DIALOG_CHAR_UPPER_A_UMLAUT): render_dialog_uppercase_diacritic(dialog, ASCII_TO_DIALOG('A'), strChar & 0xF); break; - case DIALOG_CHAR_LOWER_E_GRAVE: - case DIALOG_CHAR_LOWER_E_CIRCUMFLEX: - case DIALOG_CHAR_LOWER_E_UMLAUT: - case DIALOG_CHAR_LOWER_E_ACUTE: + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_E_GRAVE): + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_E_CIRCUMFLEX): + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_E_UMLAUT): + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_E_ACUTE): render_dialog_lowercase_diacritic(dialog, ASCII_TO_DIALOG('e'), strChar & 0xF); break; - case DIALOG_CHAR_UPPER_E_GRAVE: - case DIALOG_CHAR_UPPER_E_CIRCUMFLEX: - case DIALOG_CHAR_UPPER_E_UMLAUT: - case DIALOG_CHAR_UPPER_E_ACUTE: + case SPECIAL_CHAR(DIALOG_CHAR_UPPER_E_GRAVE): + case SPECIAL_CHAR(DIALOG_CHAR_UPPER_E_CIRCUMFLEX): + case SPECIAL_CHAR(DIALOG_CHAR_UPPER_E_UMLAUT): + case SPECIAL_CHAR(DIALOG_CHAR_UPPER_E_ACUTE): render_dialog_uppercase_diacritic(dialog, ASCII_TO_DIALOG('E'), strChar & 0xF); break; - case DIALOG_CHAR_LOWER_U_GRAVE: - case DIALOG_CHAR_LOWER_U_CIRCUMFLEX: - case DIALOG_CHAR_LOWER_U_UMLAUT: + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_U_GRAVE): + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_U_CIRCUMFLEX): + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_U_UMLAUT): render_dialog_lowercase_diacritic(dialog, ASCII_TO_DIALOG('u'), strChar & 0xF); break; - case DIALOG_CHAR_UPPER_U_GRAVE: - case DIALOG_CHAR_UPPER_U_CIRCUMFLEX: - case DIALOG_CHAR_UPPER_U_UMLAUT: + case SPECIAL_CHAR(DIALOG_CHAR_UPPER_U_GRAVE): + case SPECIAL_CHAR(DIALOG_CHAR_UPPER_U_CIRCUMFLEX): + case SPECIAL_CHAR(DIALOG_CHAR_UPPER_U_UMLAUT): render_dialog_uppercase_diacritic(dialog, ASCII_TO_DIALOG('U'), strChar & 0xF); break; - case DIALOG_CHAR_LOWER_O_CIRCUMFLEX: - case DIALOG_CHAR_LOWER_O_UMLAUT: + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_O_CIRCUMFLEX): + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_O_UMLAUT): render_dialog_lowercase_diacritic(dialog, ASCII_TO_DIALOG('o'), strChar & 0xF); break; - case DIALOG_CHAR_UPPER_O_CIRCUMFLEX: - case DIALOG_CHAR_UPPER_O_UMLAUT: + case SPECIAL_CHAR(DIALOG_CHAR_UPPER_O_CIRCUMFLEX): + case SPECIAL_CHAR(DIALOG_CHAR_UPPER_O_UMLAUT): render_dialog_uppercase_diacritic(dialog, ASCII_TO_DIALOG('O'), strChar & 0xF); break; - case DIALOG_CHAR_LOWER_I_CIRCUMFLEX: - case DIALOG_CHAR_LOWER_I_UMLAUT: + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_I_CIRCUMFLEX): + case SPECIAL_CHAR(DIALOG_CHAR_LOWER_I_UMLAUT): render_dialog_lowercase_diacritic(dialog, DIALOG_CHAR_I_NO_DIA, strChar & 0xF); break; #else - case DIALOG_CHAR_DAKUTEN: + case SPECIAL_CHAR(DIALOG_CHAR_DAKUTEN): +#ifndef VERSION_CN mark = DIALOG_MARK_DAKUTEN; +#endif break; - case DIALOG_CHAR_PERIOD_OR_HANDAKUTEN: + case SPECIAL_CHAR(DIALOG_CHAR_PERIOD_OR_HANDAKUTEN): +#ifndef VERSION_CN mark = DIALOG_MARK_HANDAKUTEN; +#endif break; #endif - case DIALOG_CHAR_SPACE: +#ifdef VERSION_CN + case SPECIAL_CHAR(DIALOG_CHAR_STAR_OPEN): // ??? + xMatrix += 2; + linePos += 2; + break; +#endif + + case SPECIAL_CHAR(DIALOG_CHAR_SPACE): #ifdef VERSION_EU gDialogX += gDialogCharWidths[DIALOG_CHAR_SPACE]; #else @@ -1329,11 +1559,11 @@ void handle_dialog_text_and_pages(s8 colorMode, struct DialogEntry *dialog, s8 l break; #if defined(VERSION_JP) || defined(VERSION_SH) - case DIALOG_CHAR_PERIOD: + case SPECIAL_CHAR(DIALOG_CHAR_PERIOD): adjust_pos_and_print_period_char(&xMatrix, &linePos); break; #else - case DIALOG_CHAR_SLASH: + case SPECIAL_CHAR(DIALOG_CHAR_SLASH): #ifdef VERSION_EU gDialogX += gDialogCharWidths[DIALOG_CHAR_SPACE] * 2; #else @@ -1341,7 +1571,7 @@ void handle_dialog_text_and_pages(s8 colorMode, struct DialogEntry *dialog, s8 l linePos += 2; #endif break; - case DIALOG_CHAR_MULTI_THE: + case SPECIAL_CHAR(DIALOG_CHAR_MULTI_THE): #ifdef VERSION_EU render_multi_text_string_lines(STRING_THE, lineNum, linesPerBox, xMatrix, lowerBound, dialog); #else @@ -1349,7 +1579,7 @@ void handle_dialog_text_and_pages(s8 colorMode, struct DialogEntry *dialog, s8 l #endif xMatrix = 1; break; - case DIALOG_CHAR_MULTI_YOU: + case SPECIAL_CHAR(DIALOG_CHAR_MULTI_YOU): #ifdef VERSION_EU render_multi_text_string_lines(STRING_YOU, lineNum, linesPerBox, xMatrix, lowerBound, dialog); #else @@ -1359,7 +1589,7 @@ void handle_dialog_text_and_pages(s8 colorMode, struct DialogEntry *dialog, s8 l break; #endif - case DIALOG_CHAR_STAR_COUNT: + case SPECIAL_CHAR(DIALOG_CHAR_STAR_COUNT): #ifdef VERSION_EU render_star_count_dialog_text(dialog, &xMatrix); #else @@ -1368,14 +1598,45 @@ void handle_dialog_text_and_pages(s8 colorMode, struct DialogEntry *dialog, s8 l break; #ifdef VERSION_EU - case DIALOG_CHAR_DOUBLE_LOW_QUOTE: + case SPECIAL_CHAR(DIALOG_CHAR_DOUBLE_LOW_QUOTE): render_generic_dialog_char_at_pos(dialog, gDialogX, gDialogY + 8, 0xF6); gDialogX += gDialogCharWidths[0xF6]; break; #endif default: // any other character -#if defined(VERSION_JP) || defined(VERSION_SH) +#ifdef VERSION_CN + if (strChar >= 0x0100) { + strChar = strChar * 2 - 0x0100; + + if (lineNum < lowerBound || lineNum > (lowerBound + linesPerBox)) { + break; + } + + if (linePos != 0 || xMatrix != 1) { + create_dl_translation_matrix(MENU_MTX_NOPUSH, gDialogCharWidths[DIALOG_CHAR_SPACE] * (xMatrix - 1), 0.0f, 0.0f); + } + + render_generic_char_cn(strChar); + create_dl_translation_matrix(MENU_MTX_NOPUSH, 8.0f, 0.0f, 0.0f); + render_generic_char_cn(strChar + 1); + create_dl_translation_matrix(MENU_MTX_NOPUSH, 8.0f, 0.0f, 0.0f); + } else { + if (lineNum < lowerBound || lineNum > (lowerBound + linesPerBox)) { + break; + } + + if (linePos != 0 || xMatrix != 1) { + create_dl_translation_matrix(MENU_MTX_NOPUSH, gDialogCharWidths[DIALOG_CHAR_SPACE] * (xMatrix - 1), 0.0f, 0.0f); + } + + render_generic_char(strChar); + create_dl_translation_matrix(MENU_MTX_NOPUSH, gDialogCharWidths[strChar], 0.0f, 0.0f); + } + + xMatrix = 1; + linePos++; +#elif defined(VERSION_JP) || defined(VERSION_SH) #ifdef VERSION_SH if (lineNum >= lowerBound && lineNum <= (lowerBound + linesPerBox)) { #endif @@ -1418,22 +1679,22 @@ void handle_dialog_text_and_pages(s8 colorMode, struct DialogEntry *dialog, s8 l #ifdef VERSION_JP if (linePos == 12) { - if (str[strIdx + 1] == DIALOG_CHAR_PERIOD) { + if (str[strIndex + 1] == DIALOG_CHAR_PERIOD) { adjust_pos_and_print_period_char(&xMatrix, &linePos); - strIdx++; + strIndex++; } - if (str[strIdx + 1] == DIALOG_CHAR_COMMA) { + if (str[strIndex + 1] == DIALOG_CHAR_COMMA) { create_dl_translation_matrix(MENU_MTX_NOPUSH, 10 * xMatrix, 0, 0); render_generic_char(DIALOG_CHAR_COMMA); - strIdx++; + strIndex++; } - if (str[strIdx + 1] == DIALOG_CHAR_NEWLINE) { - strIdx++; + if (str[strIndex + 1] == DIALOG_CHAR_NEWLINE) { + strIndex++; } - if (str[strIdx + 1] == DIALOG_CHAR_TERMINATOR) { + if (str[strIndex + 1] == DIALOG_CHAR_TERMINATOR) { pageState = DIALOG_PAGE_STATE_END; gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); break; // exit loop @@ -1444,16 +1705,20 @@ void handle_dialog_text_and_pages(s8 colorMode, struct DialogEntry *dialog, s8 l } #endif - strIdx++; +#ifdef VERSION_CN + strIndex += 2; +#else + strIndex++; +#endif } gSPDisplayList(gDisplayListHead++, dl_ia_text_end); - if (gDialogBoxState == DIALOG_STATE_VERTICAL) { + if (gMenuState == MENU_STATE_DIALOG_OPEN) { if (pageState == DIALOG_PAGE_STATE_END) { - gLastDialogPageStrPos = -1; + gNextDialogPageStartStrIndex = -1; } else { - gLastDialogPageStrPos = strIdx; + gNextDialogPageStartStrIndex = strIndex; } } @@ -1465,23 +1730,28 @@ void handle_dialog_text_and_pages(s8 colorMode, struct DialogEntry *dialog, s8 l #define X_VAL4_2 25 #define Y_VAL4_1 1 #define Y_VAL4_2 20 +#elif defined(VERSION_CN) + #define X_VAL4_1 58 + #define X_VAL4_2 0 + #define Y_VAL4_1 2 + #define Y_VAL4_2 20 #else #define X_VAL4_1 56 - #define X_VAL4_2 47 + #define X_VAL4_2 9 #define Y_VAL4_1 2 #define Y_VAL4_2 16 #endif void render_dialog_triangle_choice(void) { - if (gDialogBoxState == DIALOG_STATE_VERTICAL) { - handle_menu_scrolling(MENU_SCROLL_HORIZONTAL, &gDialogLineNum, 1, 2); + if (gMenuState == MENU_STATE_DIALOG_OPEN) { + handle_menu_scrolling(MENU_SCROLL_HORIZONTAL, &gMenuLineNum, 1, 2); } - create_dl_translation_matrix(MENU_MTX_NOPUSH, (gDialogLineNum * X_VAL4_1) - X_VAL4_2, Y_VAL4_1 - (gLastDialogLineNum * Y_VAL4_2), 0); + create_dl_translation_matrix(MENU_MTX_NOPUSH, ((gMenuLineNum - 1) * X_VAL4_1) + X_VAL4_2, Y_VAL4_1 - (gLastDialogLineNum * Y_VAL4_2), 0); - if (gDialogBoxType == DIALOG_TYPE_ROTATE) { + if (gDialogBoxType == DIALOG_TYPE_ROTATE) { // White Text gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, 255); - } else { + } else { // Black Text gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, 255); } @@ -1503,6 +1773,11 @@ void render_dialog_triangle_choice(void) { #define Y_VAL5_1 -16 #define Y_VAL5_2 3 #define X_Y_VAL6 0.5f +#elif defined(VERSION_CN) + #define X_VAL5 118.0f + #define Y_VAL5_1 -18 + #define Y_VAL5_2 5 + #define X_Y_VAL6 0.8f #endif void render_dialog_triangle_next(s8 linesPerBox) { @@ -1514,7 +1789,7 @@ void render_dialog_triangle_next(s8 linesPerBox) { create_dl_translation_matrix(MENU_MTX_PUSH, X_VAL5, (linesPerBox * Y_VAL5_1) + Y_VAL5_2, 0); create_dl_scale_matrix(MENU_MTX_NOPUSH, X_Y_VAL6, X_Y_VAL6, 1.0f); - create_dl_rotation_matrix(MENU_MTX_NOPUSH, -DEFAULT_DIALOG_BOX_ANGLE, 0, 0, 1.0f); + create_dl_rotation_matrix(MENU_MTX_NOPUSH, -90.0f, 0, 0, 1.0f); if (gDialogBoxType == DIALOG_TYPE_ROTATE) { // White Text gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, 255); @@ -1552,14 +1827,14 @@ void handle_special_dialog_text(s16 dialogID) { // dialog ID tables, in order } for (i = 0; i < (s16) ARRAY_COUNT(dialogRaceSound); i++) { - if (dialogRaceSound[i] == dialogID && gDialogLineNum == 1) { + if (dialogRaceSound[i] == dialogID && gMenuLineNum == DIALOG_RESPONSE_YES) { play_race_fanfare(); return; } } for (i = 0; i < (s16) ARRAY_COUNT(dialogStarSound); i++) { - if (dialogStarSound[i] == dialogID && gDialogLineNum == 1) { + if (dialogStarSound[i] == dialogID && gMenuLineNum == DIALOG_RESPONSE_YES) { play_sound(SOUND_MENU_STAR_SOUND, gGlobalSoundSource); return; } @@ -1575,6 +1850,17 @@ void handle_special_dialog_text(s16 dialogID) { // dialog ID tables, in order s16 gMenuMode = MENU_MODE_NONE; +#ifdef VERSION_CN +u8 gEndCutsceneStrEn0[] = { TEXT_EMPTY_STRING }; +u8 gEndCutsceneStrEn1[] = { TEXT_EMPTY_STRING }; +u8 gEndCutsceneStrEn2[] = { TEXT_EMPTY_STRING }; +u8 gEndCutsceneStrEn3[] = { TEXT_EMPTY_STRING }; +u8 gEndCutsceneStrEn4[] = { TEXT_EMPTY_STRING }; +u8 gEndCutsceneStrEn5[] = { TEXT_EMPTY_STRING }; +u8 gEndCutsceneStrEn6[] = { TEXT_EMPTY_STRING }; +u8 gEndCutsceneStrEn7[] = { TEXT_EMPTY_STRING }; +u8 gEndCutsceneStrEn8[] = { TEXT_EMPTY_STRING }; +#else u8 gEndCutsceneStrEn0[] = { TEXT_FILE_MARIO_EXCLAMATION }; u8 gEndCutsceneStrEn1[] = { TEXT_POWER_STARS_RESTORED }; u8 gEndCutsceneStrEn2[] = { TEXT_THANKS_TO_YOU }; @@ -1584,6 +1870,7 @@ u8 gEndCutsceneStrEn5[] = { TEXT_LISTEN_EVERYBODY }; u8 gEndCutsceneStrEn6[] = { TEXT_LETS_HAVE_CAKE }; u8 gEndCutsceneStrEn7[] = { TEXT_FOR_MARIO }; u8 gEndCutsceneStrEn8[] = { TEXT_FILE_MARIO_QUESTION }; +#endif u8 *gEndCutsceneStringsEn[] = { gEndCutsceneStrEn0, @@ -1665,7 +1952,7 @@ s8 gDialogCourseActNum = 1; #define DIAG_VAL4 4 #else #define DIAG_VAL1 16 -#ifdef VERSION_US +#if defined(VERSION_US) || defined(VERSION_CN) #define DIAG_VAL2 240 #else #define DIAG_VAL2 238 @@ -1680,7 +1967,7 @@ void render_dialog_entries(void) { #endif void **dialogTable; struct DialogEntry *dialog; -#if defined(VERSION_US) || defined(VERSION_SH) +#if defined(VERSION_US) || defined(VERSION_SH) || defined(VERSION_CN) s8 lowerBound; #endif @@ -1703,7 +1990,7 @@ void render_dialog_entries(void) { dialog = segmented_to_virtual(dialogTable[gDialogID]); // if the dialog entry is invalid, set the ID to DIALOG_NONE. - if (segmented_to_virtual(NULL) == dialog) { + if (dialog == segmented_to_virtual(NULL)) { gDialogID = DIALOG_NONE; return; } @@ -1713,40 +2000,40 @@ void render_dialog_entries(void) { gDialogY = 0; #endif - switch (gDialogBoxState) { - case DIALOG_STATE_OPENING: - if (gDialogBoxOpenTimer == DEFAULT_DIALOG_BOX_ANGLE) { + switch (gMenuState) { + case MENU_STATE_DIALOG_OPENING: + if (gDialogBoxAngle == DIALOG_BOX_ANGLE_DEFAULT) { play_dialog_sound(gDialogID); play_sound(SOUND_MENU_MESSAGE_APPEAR, gGlobalSoundSource); } if (gDialogBoxType == DIALOG_TYPE_ROTATE) { - gDialogBoxOpenTimer -= 7.5; + gDialogBoxAngle -= 7.5; gDialogBoxScale -= 1.5; } else { - gDialogBoxOpenTimer -= 10.0; + gDialogBoxAngle -= 10.0; gDialogBoxScale -= 2.0; } - if (gDialogBoxOpenTimer == 0.0f) { - gDialogBoxState = DIALOG_STATE_VERTICAL; - gDialogLineNum = 1; + if (gDialogBoxAngle == 0.0f) { + gMenuState = MENU_STATE_DIALOG_OPEN; + gMenuLineNum = 1; } #ifndef VERSION_JP lowerBound = 1; #endif break; - case DIALOG_STATE_VERTICAL: - gDialogBoxOpenTimer = 0.0f; + case MENU_STATE_DIALOG_OPEN: + gDialogBoxAngle = 0.0f; if ((gPlayer3Controller->buttonPressed & A_BUTTON) - || (gPlayer3Controller->buttonPressed & B_BUTTON)) { - if (gLastDialogPageStrPos == -1) { + || (gPlayer3Controller->buttonPressed & B_BUTTON)) { + if (gNextDialogPageStartStrIndex == -1) { handle_special_dialog_text(gDialogID); - gDialogBoxState = DIALOG_STATE_CLOSING; + gMenuState = MENU_STATE_DIALOG_CLOSING; } else { - gDialogBoxState = DIALOG_STATE_HORIZONTAL; + gMenuState = MENU_STATE_DIALOG_SCROLLING; play_sound(SOUND_MENU_MESSAGE_NEXT_PAGE, gGlobalSoundSource); } } @@ -1755,12 +2042,12 @@ void render_dialog_entries(void) { #endif break; - case DIALOG_STATE_HORIZONTAL: + case MENU_STATE_DIALOG_SCROLLING: gDialogScrollOffsetY += dialog->linesPerBox * 2; if (gDialogScrollOffsetY >= dialog->linesPerBox * DIAG_VAL1) { - gDialogTextPos = gLastDialogPageStrPos; - gDialogBoxState = DIALOG_STATE_VERTICAL; + gDialogPageStartStrIndex = gNextDialogPageStartStrIndex; + gMenuState = MENU_STATE_DIALOG_OPEN; gDialogScrollOffsetY = 0; } #ifndef VERSION_JP @@ -1768,8 +2055,8 @@ void render_dialog_entries(void) { #endif break; - case DIALOG_STATE_CLOSING: - if (gDialogBoxOpenTimer == 20.0f) { + case MENU_STATE_DIALOG_CLOSING: + if (gDialogBoxAngle == 20.0f) { level_set_transition(0, NULL); play_sound(SOUND_MENU_MESSAGE_DISAPPEAR, gGlobalSoundSource); @@ -1777,18 +2064,18 @@ void render_dialog_entries(void) { trigger_cutscene_dialog(2); } - gDialogResponse = gDialogLineNum; + gDialogResponse = gMenuLineNum; } - gDialogBoxOpenTimer = gDialogBoxOpenTimer + 10.0f; - gDialogBoxScale = gDialogBoxScale + 2.0f; + gDialogBoxAngle += 10.0f; + gDialogBoxScale += 2.0f; - if (gDialogBoxOpenTimer == DEFAULT_DIALOG_BOX_ANGLE) { - gDialogBoxState = DIALOG_STATE_OPENING; + if (gDialogBoxAngle == DIALOG_BOX_ANGLE_DEFAULT) { + gMenuState = MENU_STATE_DEFAULT; gDialogID = DIALOG_NONE; - gDialogTextPos = 0; - gLastDialogResponse = 0; - gLastDialogPageStrPos = 0; + gDialogPageStartStrIndex = 0; + gDialogWithChoice = FALSE; + gNextDialogPageStartStrIndex = 0; gDialogResponse = DIALOG_RESPONSE_NONE; } #ifndef VERSION_JP @@ -1799,6 +2086,20 @@ void render_dialog_entries(void) { render_dialog_box_type(dialog, dialog->linesPerBox); +#ifdef VERSION_CN +// This isn't really a diff. The iQue compiler doesn't allow the use of ifdefs inside a macro for some reason, so those were eliminated. +#ifdef WIDESCREEN +#define ulx 0 +#define lrx SCREEN_WIDTH +#else +#define ulx ensure_nonnegative(dialog->leftOffset) +#define lrx ensure_nonnegative(dialog->leftOffset + DIAG_VAL3) +#endif + gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, ulx, ensure_nonnegative(DIAG_VAL2 - dialog->width), + lrx, ensure_nonnegative((256 - dialog->width) + (dialog->linesPerBox * 80 / DIAG_VAL4))); +#undef ulx +#undef lrx +#else gDPSetScissor( gDisplayListHead++, G_SC_NON_INTERLACE, // Horizontal scissoring isn't really required and can potentially mess up widescreen enhancements. @@ -1824,6 +2125,7 @@ void render_dialog_entries(void) { ensure_nonnegative((240 - dialog->width) + (dialog->linesPerBox * 80 / DIAG_VAL4)) #endif ); +#endif #ifdef VERSION_JP handle_dialog_text_and_pages(0, dialog); @@ -1831,7 +2133,7 @@ void render_dialog_entries(void) { handle_dialog_text_and_pages(0, dialog, lowerBound); #endif - if (gLastDialogPageStrPos == -1 && gLastDialogResponse == 1) { + if (gNextDialogPageStartStrIndex == -1 && gDialogWithChoice == TRUE) { render_dialog_triangle_choice(); } @@ -1845,7 +2147,7 @@ void render_dialog_entries(void) { #define BORDER_HEIGHT 1 #endif - if (gLastDialogPageStrPos != -1 && gDialogBoxState == DIALOG_STATE_VERTICAL) { + if (gNextDialogPageStartStrIndex != -1 && gMenuState == MENU_STATE_DIALOG_OPEN) { render_dialog_triangle_next(dialog->linesPerBox); } } @@ -1913,12 +2215,12 @@ void print_credits_str_ascii(s16 x, s16 y, const char *str) { u8 c = str[pos]; u8 creditStr[100]; - while (c != 0) { + while (c != '\0') { creditStr[pos++] = ascii_to_credits_char(c); c = str[pos]; } - creditStr[pos] = GLOBAR_CHAR_TERMINATOR; + creditStr[pos] = GLOBAL_CHAR_TERMINATOR; print_credits_string(x, y, creditStr); } @@ -2103,12 +2405,12 @@ void render_hud_cannon_reticle(void) { gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); create_dl_translation_matrix(MENU_MTX_PUSH, 8.0f, -20.0f, 0); - create_dl_rotation_matrix(MENU_MTX_NOPUSH, DEFAULT_DIALOG_BOX_ANGLE, 0, 0, 1.0f); + create_dl_rotation_matrix(MENU_MTX_NOPUSH, 90.0f, 0, 0, 1.0f); gSPDisplayList(gDisplayListHead++, dl_draw_triangle); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); create_dl_translation_matrix(MENU_MTX_PUSH, -8.0f, 20.0f, 0); - create_dl_rotation_matrix(MENU_MTX_NOPUSH, -DEFAULT_DIALOG_BOX_ANGLE, 0, 0, 1.0f); + create_dl_rotation_matrix(MENU_MTX_NOPUSH, -90.0f, 0, 0, 1.0f); gSPDisplayList(gDisplayListHead++, dl_draw_triangle); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); @@ -2145,7 +2447,7 @@ void shade_screen(void) { } void print_animated_red_coin(s16 x, s16 y) { - s32 globalTimer = gGlobalTimer; + u32 globalTimer = gGlobalTimer; create_dl_translation_matrix(MENU_MTX_PUSH, x, y, 0); create_dl_scale_matrix(MENU_MTX_NOPUSH, 0.2f, 0.2f, 1.0f); @@ -2189,25 +2491,35 @@ u8 gTextCourse[][7] = { #if defined(VERSION_JP) || defined(VERSION_SH) #define CRS_NUM_X1 93 -#elif defined(VERSION_US) +#elif defined(VERSION_US) || defined(VERSION_CN) #define CRS_NUM_X1 100 #elif defined(VERSION_EU) #define CRS_NUM_X1 get_string_width(LANGUAGE_ARRAY(textCourse)) + 51 #endif -#ifdef VERSION_EU +#if defined(VERSION_EU) #define TXT_COURSE_X 48 #define TXT_STAR_X 89 #define ACT_NAME_X 107 - #define LVL_NAME_X 108 - #define SECRET_LVL_NAME_X get_str_x_pos_from_center(159, &courseName[3], 10.0f) + #define CRS_NAME_START 3 + #define CRS_NAME_X 108 + #define SECRET_CRS_NAME_X get_str_x_pos_from_center(159, &courseName[CRS_NAME_START], 10.0f) #define MYSCORE_X 48 +#elif defined(VERSION_CN) + #define TXT_COURSE_X 63 + #define TXT_STAR_X 98 + #define ACT_NAME_X 112 + #define CRS_NAME_START 6 + #define CRS_NAME_X 117 + #define SECRET_CRS_NAME_X 94 + #define MYSCORE_X 42 #else #define TXT_COURSE_X 63 #define TXT_STAR_X 98 #define ACT_NAME_X 116 - #define LVL_NAME_X 117 - #define SECRET_LVL_NAME_X 94 + #define CRS_NAME_START 3 + #define CRS_NAME_X 117 + #define SECRET_CRS_NAME_X 94 #define MYSCORE_X 62 #endif @@ -2222,7 +2534,7 @@ void render_pause_my_score_coins(void) { u8 textCourse[] = { TEXT_COURSE }; u8 textMyScore[] = { TEXT_MY_SCORE }; #endif - u8 textStar[] = { TEXT_STAR }; + u8 textStar[] = { TEXT_STAR_DIFF }; u8 textUnfilledStar[] = { TEXT_UNFILLED_STAR }; u8 strCourseNum[4]; @@ -2259,7 +2571,7 @@ void render_pause_my_score_coins(void) { #endif gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gMenuTextAlpha); if (courseIndex <= COURSE_NUM_TO_INDEX(COURSE_STAGES_MAX)) { print_hud_my_score_coins(1, gCurrSaveFileNum - 1, courseIndex, 178, 103); @@ -2269,7 +2581,7 @@ void render_pause_my_score_coins(void) { gSPDisplayList(gDisplayListHead++, dl_rgba16_text_end); gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gMenuTextAlpha); if (courseIndex <= COURSE_NUM_TO_INDEX(COURSE_STAGES_MAX) && save_file_get_course_star_count(gCurrSaveFileNum - 1, courseIndex) != 0) { @@ -2280,7 +2592,7 @@ void render_pause_my_score_coins(void) { if (courseIndex <= COURSE_NUM_TO_INDEX(COURSE_STAGES_MAX)) { print_generic_string(TXT_COURSE_X, 157, LANGUAGE_ARRAY(textCourse)); - int_to_str(gCurrCourseNum, strCourseNum); + INT_TO_STR_DIFF(gCurrCourseNum, strCourseNum); print_generic_string(CRS_NUM_X1, 157, strCourseNum); actName = segmented_to_virtual(actNameTbl[COURSE_NUM_TO_INDEX(gCurrCourseNum) * 6 + gDialogCourseActNum - 1]); @@ -2293,14 +2605,14 @@ void render_pause_my_score_coins(void) { print_generic_string(ACT_NAME_X, 140, actName); #ifndef VERSION_JP - print_generic_string(LVL_NAME_X, 157, &courseName[3]); + print_generic_string(CRS_NAME_X, 157, &courseName[CRS_NAME_START]); } else { - print_generic_string(SECRET_LVL_NAME_X, 157, &courseName[3]); + print_generic_string(SECRET_CRS_NAME_X, 157, &courseName[CRS_NAME_START]); #endif } #ifdef VERSION_JP - print_generic_string(LVL_NAME_X, 157, &courseName[3]); + print_generic_string(CRS_NAME_X, 157, &courseName[CRS_NAME_START]); #endif gSPDisplayList(gDisplayListHead++, dl_ia_text_end); @@ -2317,8 +2629,8 @@ void render_pause_my_score_coins(void) { #endif void render_pause_camera_options(s16 x, s16 y, s8 *index, s16 xIndex) { - u8 textLakituMario[] = { TEXT_LAKITU_MARIO }; - u8 textLakituStop[] = { TEXT_LAKITU_STOP }; + UNUSED_CN u8 textLakituMario[] = { TEXT_LAKITU_MARIO }; + UNUSED_CN u8 textLakituStop[] = { TEXT_LAKITU_STOP }; #ifdef VERSION_EU u8 textNormalUpClose[][20] = { { TEXT_NORMAL_UPCLOSE }, @@ -2338,16 +2650,21 @@ void render_pause_camera_options(s16 x, s16 y, s8 *index, s16 xIndex) { handle_menu_scrolling(MENU_SCROLL_HORIZONTAL, index, 1, 2); gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gMenuTextAlpha); +#ifdef VERSION_CN + print_generic_string(x + 14, y + 2, textNormalUpClose); + print_generic_string(x + 124, y + 2, textNormalFixed); +#else print_generic_string(x + 14, y + 2, textLakituMario); print_generic_string(x + TXT1_X, y - 13, LANGUAGE_ARRAY(textNormalUpClose)); print_generic_string(x + 124, y + 2, textLakituStop); print_generic_string(x + TXT2_X, y - 13, LANGUAGE_ARRAY(textNormalFixed)); +#endif gSPDisplayList(gDisplayListHead++, dl_ia_text_end); - create_dl_translation_matrix(MENU_MTX_PUSH, ((*index - 1) * xIndex) + x, y + Y_VAL7, 0); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); + create_dl_translation_matrix(MENU_MTX_PUSH, x + ((*index - 1) * xIndex), y + Y_VAL7, 0); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gMenuTextAlpha); gSPDisplayList(gDisplayListHead++, dl_draw_triangle); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); @@ -2364,9 +2681,18 @@ void render_pause_camera_options(s16 x, s16 y, s8 *index, s16 xIndex) { #if defined(VERSION_JP) || defined(VERSION_SH) #define X_VAL8 0 #define Y_VAL8 4 -#else + #define Y_OFFSET1 17 + #define Y_OFFSET2 33 +#elif defined(VERSION_US) || defined(VERSION_EU) #define X_VAL8 4 #define Y_VAL8 2 + #define Y_OFFSET1 17 + #define Y_OFFSET2 33 +#elif defined(VERSION_CN) + #define X_VAL8 4 + #define Y_VAL8 2 + #define Y_OFFSET1 20 + #define Y_OFFSET2 38 #endif void render_pause_course_options(s16 x, s16 y, s8 *index, s16 yIndex) { @@ -2395,18 +2721,18 @@ void render_pause_course_options(s16 x, s16 y, s8 *index, s16 yIndex) { handle_menu_scrolling(MENU_SCROLL_VERTICAL, index, 1, 3); gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gMenuTextAlpha); print_generic_string(x + 10, y - 2, LANGUAGE_ARRAY(textContinue)); - print_generic_string(x + 10, y - 17, LANGUAGE_ARRAY(textExitCourse)); + print_generic_string(x + 10, y - Y_OFFSET1, LANGUAGE_ARRAY(textExitCourse)); if (*index != MENU_OPT_CAMERA_ANGLE_R) { - print_generic_string(x + 10, y - 33, LANGUAGE_ARRAY(textCameraAngleR)); + print_generic_string(x + 10, y - Y_OFFSET2, LANGUAGE_ARRAY(textCameraAngleR)); gSPDisplayList(gDisplayListHead++, dl_ia_text_end); create_dl_translation_matrix(MENU_MTX_PUSH, x - X_VAL8, (y - ((*index - 1) * yIndex)) - Y_VAL8, 0); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gMenuTextAlpha); gSPDisplayList(gDisplayListHead++, dl_draw_triangle); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); } @@ -2424,8 +2750,8 @@ void render_pause_castle_menu_box(s16 x, s16 y) { gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); create_dl_translation_matrix(MENU_MTX_PUSH, x + 6, y - 28, 0); - create_dl_rotation_matrix(MENU_MTX_NOPUSH, DEFAULT_DIALOG_BOX_ANGLE, 0, 0, 1.0f); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); + create_dl_rotation_matrix(MENU_MTX_NOPUSH, 90.0f, 0, 0, 1.0f); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gMenuTextAlpha); gSPDisplayList(gDisplayListHead++, dl_draw_triangle); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); @@ -2436,23 +2762,25 @@ void render_pause_castle_menu_box(s16 x, s16 y) { } void highlight_last_course_complete_stars(void) { - u8 doneCourseIndex; + u8 completedCourseIndex; if (gLastCompletedCourseNum == COURSE_NONE) { - doneCourseIndex = 0; + completedCourseIndex = 0; } else { - doneCourseIndex = COURSE_NUM_TO_INDEX(gLastCompletedCourseNum); + completedCourseIndex = COURSE_NUM_TO_INDEX(gLastCompletedCourseNum); - if (doneCourseIndex >= COURSE_NUM_TO_INDEX(COURSE_BONUS_STAGES)) { - doneCourseIndex = COURSE_NUM_TO_INDEX(COURSE_BONUS_STAGES); + if (completedCourseIndex >= COURSE_NUM_TO_INDEX(COURSE_BONUS_STAGES)) { + completedCourseIndex = COURSE_NUM_TO_INDEX(COURSE_BONUS_STAGES); } } - gDialogLineNum = doneCourseIndex; + gMenuLineNum = completedCourseIndex; } -#ifdef VERSION_EU +#if defined(VERSION_EU) #define PAUSE_X get_str_x_pos_from_center_scale(SCREEN_WIDTH / 2, textPause, 12.0f) +#elif defined(VERSION_CN) + #define PAUSE_X 113 #else #define PAUSE_X 123 #endif @@ -2461,7 +2789,7 @@ void print_hud_pause_colorful_str(void) { u8 textPause[] = { TEXT_PAUSE }; gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gMenuTextAlpha); print_hud_lut_string(HUD_LUT_GLOBAL, PAUSE_X, 81, textPause); @@ -2471,7 +2799,11 @@ void print_hud_pause_colorful_str(void) { void render_pause_castle_course_stars(s16 x, s16 y, s16 fileIndex, s16 courseIndex) { s16 hasStar = 0; - u8 str[COURSE_STAGES_COUNT * 2]; +#ifdef VERSION_CN + u8 str[60]; +#else + u8 str[30]; +#endif u8 textStar[] = { TEXT_STAR }; @@ -2487,23 +2819,50 @@ void render_pause_castle_course_stars(s16 x, s16 y, s16 fileIndex, s16 courseInd while (hasStar != starCount) { if (starFlags & (1 << nextStar)) { +#ifdef VERSION_CN + str[nextStar * 4] = 0x00; + str[nextStar * 4 + 1] = DIALOG_CHAR_STAR_FILLED; +#else str[nextStar * 2] = DIALOG_CHAR_STAR_FILLED; +#endif hasStar++; } else { +#ifdef VERSION_CN + str[nextStar * 4] = 0x00; + str[nextStar * 4 + 1] = DIALOG_CHAR_STAR_OPEN; +#else str[nextStar * 2] = DIALOG_CHAR_STAR_OPEN; +#endif } +#ifdef VERSION_CN + str[nextStar * 4 + 2] = DIALOG_CHAR_SPECIAL_MODIFIER; + str[nextStar * 4 + 3] = DIALOG_CHAR_SPACE; +#else str[nextStar * 2 + 1] = DIALOG_CHAR_SPACE; +#endif nextStar++; } if (starCount == nextStar && starCount != 6) { +#ifdef VERSION_CN + str[nextStar * 4] = DIALOG_CHAR_SPECIAL_MODIFIER; + str[nextStar * 4 + 1] = DIALOG_CHAR_SLASH; //! Meant to be DIALOG_CHAR_STAR_OPEN? + str[nextStar * 4 + 2] = DIALOG_CHAR_SPECIAL_MODIFIER; + str[nextStar * 4 + 3] = DIALOG_CHAR_SPACE; +#else str[nextStar * 2] = DIALOG_CHAR_STAR_OPEN; str[nextStar * 2 + 1] = DIALOG_CHAR_SPACE; +#endif nextStar++; } +#ifdef VERSION_CN + str[nextStar * 4] = DIALOG_CHAR_SPECIAL_MODIFIER; + str[nextStar * 4 + 1] = DIALOG_CHAR_TERMINATOR; +#else str[nextStar * 2] = DIALOG_CHAR_TERMINATOR; +#endif print_generic_string(x + 14, y + 13, str); } @@ -2525,7 +2884,7 @@ void render_pause_castle_main_strings(s16 x, s16 y) { void *courseName; u8 strVal[8]; - s16 prevCourseIndex = gDialogLineNum; + s16 prevCourseIndex = gMenuLineNum; #ifdef VERSION_EU switch (gInGameLanguage) { @@ -2542,45 +2901,45 @@ void render_pause_castle_main_strings(s16 x, s16 y) { #endif handle_menu_scrolling( - MENU_SCROLL_VERTICAL, &gDialogLineNum, + MENU_SCROLL_VERTICAL, &gMenuLineNum, COURSE_NUM_TO_INDEX(COURSE_MIN) - 1, COURSE_NUM_TO_INDEX(COURSE_BONUS_STAGES) + 1 ); - if (gDialogLineNum == COURSE_NUM_TO_INDEX(COURSE_BONUS_STAGES) + 1) { - gDialogLineNum = COURSE_NUM_TO_INDEX(COURSE_MIN); // Exceeded max, set to min + if (gMenuLineNum == COURSE_NUM_TO_INDEX(COURSE_BONUS_STAGES) + 1) { + gMenuLineNum = COURSE_NUM_TO_INDEX(COURSE_MIN); // Exceeded max, set to min } - if (gDialogLineNum == COURSE_NUM_TO_INDEX(COURSE_MIN) - 1) { - gDialogLineNum = COURSE_NUM_TO_INDEX(COURSE_BONUS_STAGES); // Exceeded min, set to max + if (gMenuLineNum == COURSE_NUM_TO_INDEX(COURSE_MIN) - 1) { + gMenuLineNum = COURSE_NUM_TO_INDEX(COURSE_BONUS_STAGES); // Exceeded min, set to max } - if (gDialogLineNum != COURSE_NUM_TO_INDEX(COURSE_BONUS_STAGES)) { - while (save_file_get_course_star_count(gCurrSaveFileNum - 1, gDialogLineNum) == 0) { - if (gDialogLineNum >= prevCourseIndex) { - gDialogLineNum++; + if (gMenuLineNum != COURSE_NUM_TO_INDEX(COURSE_BONUS_STAGES)) { + while (save_file_get_course_star_count(gCurrSaveFileNum - 1, gMenuLineNum) == 0) { + if (gMenuLineNum >= prevCourseIndex) { + gMenuLineNum++; } else { - gDialogLineNum--; + gMenuLineNum--; } - if (gDialogLineNum == COURSE_NUM_TO_INDEX(COURSE_STAGES_MAX) + 1 - || gDialogLineNum == COURSE_NUM_TO_INDEX(COURSE_MIN) - 1) { - gDialogLineNum = COURSE_NUM_TO_INDEX(COURSE_BONUS_STAGES); + if (gMenuLineNum == COURSE_NUM_TO_INDEX(COURSE_STAGES_MAX) + 1 + || gMenuLineNum == COURSE_NUM_TO_INDEX(COURSE_MIN) - 1) { + gMenuLineNum = COURSE_NUM_TO_INDEX(COURSE_BONUS_STAGES); break; } } } gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gMenuTextAlpha); - if (gDialogLineNum <= COURSE_NUM_TO_INDEX(COURSE_STAGES_MAX)) { // Main courses - courseName = segmented_to_virtual(courseNameTbl[gDialogLineNum]); - render_pause_castle_course_stars(x, y, gCurrSaveFileNum - 1, gDialogLineNum); + if (gMenuLineNum <= COURSE_NUM_TO_INDEX(COURSE_STAGES_MAX)) { // Main courses + courseName = segmented_to_virtual(courseNameTbl[gMenuLineNum]); + render_pause_castle_course_stars(x, y, gCurrSaveFileNum - 1, gMenuLineNum); print_generic_string(x + 34, y - 5, textCoin); #ifdef VERSION_EU print_generic_string(x + 44, y - 5, textX); #endif - int_to_str(save_file_get_course_coin_score(gCurrSaveFileNum - 1, gDialogLineNum), strVal); + INT_TO_STR_DIFF(save_file_get_course_coin_score(gCurrSaveFileNum - 1, gMenuLineNum), strVal); print_generic_string(x + 54, y - 5, strVal); #ifdef VERSION_EU print_generic_string(x - 17, y + 30, courseName); @@ -2589,7 +2948,7 @@ void render_pause_castle_main_strings(s16 x, s16 y) { u8 textStarX[] = { TEXT_STAR_X }; courseName = segmented_to_virtual(courseNameTbl[COURSE_MAX]); print_generic_string(x + 40, y + 13, textStarX); - int_to_str(save_file_get_total_star_count(gCurrSaveFileNum - 1, COURSE_BONUS_STAGES - 1, COURSE_MAX - 1), strVal); + INT_TO_STR_DIFF(save_file_get_total_star_count(gCurrSaveFileNum - 1, COURSE_BONUS_STAGES - 1, COURSE_MAX - 1), strVal); print_generic_string(x + 60, y + 13, strVal); #ifdef VERSION_EU print_generic_string(get_str_x_pos_from_center(x + 51, courseName, 10.0f), y + 30, courseName); @@ -2604,56 +2963,56 @@ void render_pause_castle_main_strings(s16 x, s16 y) { } s8 gCourseCompleteCoinsEqual = FALSE; -s32 gCourseDoneMenuTimer = 0; +s32 gCourseCompleteScreenTimer = 0; s32 gCourseCompleteCoins = 0; s8 gHudFlash = 0; -s16 render_pause_courses_and_castle(void) { +s16 render_pause_screen(void) { s16 index; #ifdef VERSION_EU gInGameLanguage = eu_get_language(); #endif - switch (gDialogBoxState) { - case DIALOG_STATE_OPENING: - gDialogLineNum = MENU_OPT_DEFAULT; - gDialogTextAlpha = 0; + switch (gMenuState) { + case MENU_STATE_PAUSE_SCREEN_OPENING: + gMenuLineNum = MENU_OPT_DEFAULT; + gMenuTextAlpha = 0; level_set_transition(-1, NULL); play_sound(SOUND_MENU_PAUSE, gGlobalSoundSource); if (gCurrCourseNum >= COURSE_MIN && gCurrCourseNum <= COURSE_MAX) { change_dialog_camera_angle(); - gDialogBoxState = DIALOG_STATE_VERTICAL; + gMenuState = MENU_STATE_PAUSE_SCREEN_COURSE; } else { highlight_last_course_complete_stars(); - gDialogBoxState = DIALOG_STATE_HORIZONTAL; + gMenuState = MENU_STATE_PAUSE_SCREEN_CASTLE; } break; - case DIALOG_STATE_VERTICAL: + case MENU_STATE_PAUSE_SCREEN_COURSE: shade_screen(); render_pause_my_score_coins(); render_pause_red_coins(); if (gMarioStates[0].action & ACT_FLAG_PAUSE_EXIT) { - render_pause_course_options(99, 93, &gDialogLineNum, 15); + render_pause_course_options(99, 93, &gMenuLineNum, 15); } #ifdef VERSION_EU - if (gPlayer3Controller->buttonPressed & (A_BUTTON | Z_TRIG | START_BUTTON)) + if (gPlayer3Controller->buttonPressed & (A_BUTTON | START_BUTTON | Z_TRIG)) #else - if (gPlayer3Controller->buttonPressed & A_BUTTON - || gPlayer3Controller->buttonPressed & START_BUTTON) + if ((gPlayer3Controller->buttonPressed & A_BUTTON) + || (gPlayer3Controller->buttonPressed & START_BUTTON)) #endif { level_set_transition(0, NULL); play_sound(SOUND_MENU_PAUSE_2, gGlobalSoundSource); - gDialogBoxState = DIALOG_STATE_OPENING; + gMenuState = MENU_STATE_DEFAULT; gMenuMode = MENU_MODE_NONE; - if (gDialogLineNum == MENU_OPT_EXIT_COURSE) { - index = gDialogLineNum; + if (gMenuLineNum == MENU_OPT_EXIT_COURSE) { + index = gMenuLineNum; } else { // MENU_OPT_CONTINUE or MENU_OPT_CAMERA_ANGLE_R index = MENU_OPT_DEFAULT; } @@ -2662,31 +3021,31 @@ s16 render_pause_courses_and_castle(void) { } break; - case DIALOG_STATE_HORIZONTAL: + case MENU_STATE_PAUSE_SCREEN_CASTLE: shade_screen(); print_hud_pause_colorful_str(); render_pause_castle_menu_box(160, 143); render_pause_castle_main_strings(104, 60); #ifdef VERSION_EU - if (gPlayer3Controller->buttonPressed & (A_BUTTON | Z_TRIG | START_BUTTON)) + if (gPlayer3Controller->buttonPressed & (A_BUTTON | START_BUTTON | Z_TRIG)) #else - if (gPlayer3Controller->buttonPressed & A_BUTTON - || gPlayer3Controller->buttonPressed & START_BUTTON) + if ((gPlayer3Controller->buttonPressed & A_BUTTON) + || (gPlayer3Controller->buttonPressed & START_BUTTON)) #endif { level_set_transition(0, NULL); play_sound(SOUND_MENU_PAUSE_2, gGlobalSoundSource); gMenuMode = MENU_MODE_NONE; - gDialogBoxState = DIALOG_STATE_OPENING; + gMenuState = MENU_STATE_DEFAULT; return MENU_OPT_DEFAULT; } break; } - if (gDialogTextAlpha < 250) { - gDialogTextAlpha += 25; + if (gMenuTextAlpha < 250) { + gMenuTextAlpha += 25; } return MENU_OPT_NONE; @@ -2696,18 +3055,27 @@ s16 render_pause_courses_and_castle(void) { #define TXT_HISCORE_X 112 #define TXT_HISCORE_Y 48 #define TXT_CONGRATS_X 60 + #define TXT_CONGRATS_Y 67 #elif defined(VERSION_US) #define TXT_HISCORE_X 109 #define TXT_HISCORE_Y 36 #define TXT_CONGRATS_X 70 + #define TXT_CONGRATS_Y 67 #elif defined(VERSION_EU) #define TXT_HISCORE_X get_str_x_pos_from_center_scale(160, LANGUAGE_ARRAY(textHiScore), 12.0f) #define TXT_HISCORE_Y 36 #define TXT_CONGRATS_X get_str_x_pos_from_center_scale(160, LANGUAGE_ARRAY(textCongratulations), 12.0f) + #define TXT_CONGRATS_Y 67 #elif defined(VERSION_SH) #define TXT_HISCORE_X 118 #define TXT_HISCORE_Y 48 #define TXT_CONGRATS_X 70 + #define TXT_CONGRATS_Y 67 +#elif defined(VERSION_CN) + #define TXT_HISCORE_X 109 + #define TXT_HISCORE_Y 26 + #define TXT_CONGRATS_X 100 + #define TXT_CONGRATS_Y 62 #endif #define HUD_PRINT_HISCORE 0 @@ -2730,15 +3098,15 @@ void print_hud_course_complete_string(s8 str) { u8 textCongratulations[] = { TEXT_HUD_CONGRATULATIONS }; #endif - u8 colorFade = sins(gDialogColorFadeTimer) * 50.0f + 200.0f; + u8 color = sins(gMenuTextColorTransTimer) * 50.0f + 200.0f; gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); - gDPSetEnvColor(gDisplayListHead++, colorFade, colorFade, colorFade, 255); + gDPSetEnvColor(gDisplayListHead++, color, color, color, 255); if (str == HUD_PRINT_HISCORE) { print_hud_lut_string(HUD_LUT_GLOBAL, TXT_HISCORE_X, TXT_HISCORE_Y, LANGUAGE_ARRAY(textHiScore)); } else { // HUD_PRINT_CONGRATULATIONS - print_hud_lut_string(HUD_LUT_GLOBAL, TXT_CONGRATS_X, 67, LANGUAGE_ARRAY(textCongratulations)); + print_hud_lut_string(HUD_LUT_GLOBAL, TXT_CONGRATS_X, TXT_CONGRATS_Y, LANGUAGE_ARRAY(textCongratulations)); } gSPDisplayList(gDisplayListHead++, dl_rgba16_text_end); @@ -2768,7 +3136,7 @@ void print_hud_course_complete_coins(s16 x, s16 y) { print_hud_course_complete_string(HUD_PRINT_HISCORE); } } else { - if ((gCourseDoneMenuTimer & 1) || gHudDisplay.coins > 70) { + if ((gCourseCompleteScreenTimer & 1) || gHudDisplay.coins > 70) { gCourseCompleteCoins++; play_sound(SOUND_MENU_YOSHI_GAIN_LIVES, gGlobalSoundSource); @@ -2778,14 +3146,14 @@ void print_hud_course_complete_coins(s16 x, s16 y) { } } - if (gHudDisplay.coins == gCourseCompleteCoins && gGotFileCoinHiScore) { + if (gCourseCompleteCoins == gHudDisplay.coins && gGotFileCoinHiScore) { play_sound(SOUND_MENU_MARIO_CASTLE_WARP2, gGlobalSoundSource); } } } -void play_star_fanfare_and_flash_hud(s32 arg, u8 starNum) { - if (gHudDisplay.coins == gCourseCompleteCoins && (gCurrCourseStarFlags & starNum) == 0 && gHudFlash == 0) { +void play_star_fanfare_and_flash_hud(s32 arg, u8 starFlag) { + if (gCourseCompleteCoins == gHudDisplay.coins && !(gCurrCourseStarFlags & starFlag) && gHudFlash == 0) { play_star_fanfare(); gHudFlash = arg; } @@ -2822,8 +3190,8 @@ void render_course_complete_lvl_info_and_hud_str(void) { u8 textSymStar[] = { GLYPH_STAR, GLYPH_SPACE }; #else u8 textCourse[] = { TEXT_COURSE }; - UNUSED u8 textCatch[] = { TEXT_CATCH }; // unused in US - UNUSED u8 textClear[] = { TEXT_CLEAR }; + UNUSED u8 textCatch[] = { TEXT_CATCH }; // unused in US and iQue + u8 textClear[] = { TEXT_CLEAR }; u8 textSymStar[] = { GLYPH_STAR, GLYPH_SPACE }; #endif @@ -2867,13 +3235,13 @@ void render_course_complete_lvl_info_and_hud_str(void) { // Print course number gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); - int_to_str(gLastCompletedCourseNum, strCourseNum); + INT_TO_STR_DIFF(gLastCompletedCourseNum, strCourseNum); - gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, gDialogTextAlpha); + gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, gMenuTextAlpha); print_generic_string(65, 165, LANGUAGE_ARRAY(textCourse)); print_generic_string(CRS_NUM_X2, 165, strCourseNum); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gMenuTextAlpha); print_generic_string(63, 167, LANGUAGE_ARRAY(textCourse)); print_generic_string(CRS_NUM_X3, 167, strCourseNum); @@ -2884,7 +3252,7 @@ void render_course_complete_lvl_info_and_hud_str(void) { // Print course name and clear text gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); - gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, gDialogTextAlpha); + gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, gMenuTextAlpha); #ifdef VERSION_EU centerX = get_str_x_pos_from_center(153, name, 12.0f); #endif @@ -2893,7 +3261,7 @@ void render_course_complete_lvl_info_and_hud_str(void) { print_generic_string(TXT_CLEAR_X1, 130, textClear); #endif - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gMenuTextAlpha); print_generic_string(TXT_NAME_X2, 132, name); #ifndef VERSION_EU print_generic_string(TXT_CLEAR_X2, 132, textClear); @@ -2916,7 +3284,7 @@ void render_course_complete_lvl_info_and_hud_str(void) { // Print star glyph gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gMenuTextAlpha); print_hud_lut_string(HUD_LUT_GLOBAL, 55, 77, textSymStar); gSPDisplayList(gDisplayListHead++, dl_rgba16_text_end); @@ -2924,13 +3292,13 @@ void render_course_complete_lvl_info_and_hud_str(void) { // Print act name and catch text gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); - gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, gDialogTextAlpha); + gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, gMenuTextAlpha); print_generic_string(76, 145, name); #if defined(VERSION_JP) || defined(VERSION_SH) print_generic_string(220, 145, textCatch); #endif - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gMenuTextAlpha); print_generic_string(74, 147, name); #if defined(VERSION_JP) || defined(VERSION_SH) print_generic_string(218, 147, textCatch); @@ -2959,9 +3327,9 @@ void render_course_complete_lvl_info_and_hud_str(void) { #endif #ifdef VERSION_EU -void render_save_confirmation(s16 y, s8 *index, s16 sp6e) +void render_save_confirmation(s16 y, s8 *index, s16 yOffset) #else -void render_save_confirmation(s16 x, s16 y, s8 *index, s16 sp6e) +void render_save_confirmation(s16 x, s16 y, s8 *index, s16 yOffset) #endif { #ifdef VERSION_EU @@ -2990,7 +3358,7 @@ void render_save_confirmation(s16 x, s16 y, s8 *index, s16 sp6e) handle_menu_scrolling(MENU_SCROLL_VERTICAL, index, 1, 3); gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gMenuTextAlpha); print_generic_string(TXT_SAVEOPTIONS_X, y + TXT_SAVECONT_Y, LANGUAGE_ARRAY(textSaveAndContinue)); print_generic_string(TXT_SAVEOPTIONS_X, y - TXT_SAVEQUIT_Y, LANGUAGE_ARRAY(textSaveAndQuit)); @@ -2998,9 +3366,9 @@ void render_save_confirmation(s16 x, s16 y, s8 *index, s16 sp6e) gSPDisplayList(gDisplayListHead++, dl_ia_text_end); - create_dl_translation_matrix(MENU_MTX_PUSH, X_VAL9, y - ((*index - 1) * sp6e), 0); + create_dl_translation_matrix(MENU_MTX_PUSH, X_VAL9, y - ((*index - 1) * yOffset), 0); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gMenuTextAlpha); gSPDisplayList(gDisplayListHead++, dl_draw_triangle); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); @@ -3012,39 +3380,39 @@ s16 render_course_complete_screen(void) { gInGameLanguage = eu_get_language(); #endif - switch (gDialogBoxState) { - case DIALOG_STATE_OPENING: + switch (gMenuState) { + case MENU_STATE_COURSE_COMPLETE_SCREEN_OPENING: render_course_complete_lvl_info_and_hud_str(); - if (gCourseDoneMenuTimer > 100 && gCourseCompleteCoinsEqual == TRUE) { - gDialogBoxState = DIALOG_STATE_VERTICAL; + if (gCourseCompleteScreenTimer > 100 && gCourseCompleteCoinsEqual == TRUE) { + gMenuState = MENU_STATE_COURSE_COMPLETE_SCREEN_OPEN; level_set_transition(-1, NULL); - gDialogTextAlpha = 0; - gDialogLineNum = MENU_OPT_DEFAULT; + gMenuTextAlpha = 0; + gMenuLineNum = MENU_OPT_DEFAULT; } break; - case DIALOG_STATE_VERTICAL: + case MENU_STATE_COURSE_COMPLETE_SCREEN_OPEN: shade_screen(); render_course_complete_lvl_info_and_hud_str(); #ifdef VERSION_EU - render_save_confirmation(86, &gDialogLineNum, 20); + render_save_confirmation(86, &gMenuLineNum, 20); #else - render_save_confirmation(100, 86, &gDialogLineNum, 20); + render_save_confirmation(100, 86, &gMenuLineNum, 20); #endif - if (gCourseDoneMenuTimer > 110 - && (gPlayer3Controller->buttonPressed & A_BUTTON - || gPlayer3Controller->buttonPressed & START_BUTTON + if (gCourseCompleteScreenTimer > 110 + && ((gPlayer3Controller->buttonPressed & A_BUTTON) + || (gPlayer3Controller->buttonPressed & START_BUTTON) #ifdef VERSION_EU - || gPlayer3Controller->buttonPressed & Z_TRIG + || (gPlayer3Controller->buttonPressed & Z_TRIG) #endif )) { level_set_transition(0, NULL); play_sound(SOUND_MENU_STAR_SOUND, gGlobalSoundSource); - gDialogBoxState = DIALOG_STATE_OPENING; + gMenuState = MENU_STATE_DEFAULT; gMenuMode = MENU_MODE_NONE; - index = gDialogLineNum; - gCourseDoneMenuTimer = 0; + index = gMenuLineNum; + gCourseCompleteScreenTimer = 0; gCourseCompleteCoins = 0; gCourseCompleteCoinsEqual = FALSE; gHudFlash = 0; @@ -3054,11 +3422,11 @@ s16 render_course_complete_screen(void) { break; } - if (gDialogTextAlpha < 250) { - gDialogTextAlpha += 25; + if (gMenuTextAlpha < 250) { + gMenuTextAlpha += 25; } - gCourseDoneMenuTimer++; + gCourseCompleteScreenTimer++; return MENU_OPT_NONE; } @@ -3071,10 +3439,10 @@ s16 render_menus_and_dialogs(void) { if (gMenuMode != MENU_MODE_NONE) { switch (gMenuMode) { case MENU_MODE_UNUSED_0: - index = render_pause_courses_and_castle(); + index = render_pause_screen(); break; case MENU_MODE_RENDER_PAUSE_SCREEN: - index = render_pause_courses_and_castle(); + index = render_pause_screen(); break; case MENU_MODE_RENDER_COURSE_COMPLETE_SCREEN: index = render_course_complete_screen(); @@ -3084,7 +3452,7 @@ s16 render_menus_and_dialogs(void) { break; } - gDialogColorFadeTimer = (s16) gDialogColorFadeTimer + 0x1000; + gMenuTextColorTransTimer = (s16) gMenuTextColorTransTimer + 0x1000; } else if (gDialogID != DIALOG_NONE) { // The Peach "Dear Mario" message needs to be repositioned separately if (gDialogID == DIALOG_020) { @@ -3093,7 +3461,7 @@ s16 render_menus_and_dialogs(void) { } render_dialog_entries(); - gDialogColorFadeTimer = (s16) gDialogColorFadeTimer + 0x1000; + gMenuTextColorTransTimer = (s16) gMenuTextColorTransTimer + 0x1000; } return index; diff --git a/src/game/ingame_menu.h b/src/game/ingame_menu.h index d341855e..c875c7dc 100644 --- a/src/game/ingame_menu.h +++ b/src/game/ingame_menu.h @@ -27,6 +27,13 @@ #define HUD_LUT_DIFF HUD_LUT_GLOBAL #endif +// They didn't change it everywhere in iQue +#ifdef VERSION_CN +#define HUD_LUT_DIFF2 HUD_LUT_JPMENU +#else +#define HUD_LUT_DIFF2 HUD_LUT_DIFF +#endif + enum MenuMode { MENU_MODE_NONE = -1, MENU_MODE_UNUSED_0, @@ -47,7 +54,7 @@ struct DialogEntry { }; // EU only -enum HudSpecialHUDChars { +enum HudSpecialCharsEU { HUD_CHAR_A_UMLAUT = 0x3A, HUD_CHAR_O_UMLAUT = 0x3B, HUD_CHAR_U_UMLAUT = 0x3C @@ -55,7 +62,10 @@ enum HudSpecialHUDChars { enum SpecialFontChars { GLOBAL_CHAR_SPACE = 0x9E, - GLOBAR_CHAR_TERMINATOR = 0xFF +#ifdef VERSION_CN + GLOBAL_CHAR_NEWLINE = 0xFE, +#endif + GLOBAL_CHAR_TERMINATOR = 0xFF }; enum DialogMark { @@ -96,7 +106,7 @@ enum DialogSpecialChars { DIALOG_CHAR_I_NO_DIA = 0xEB, // 'i' without diacritic DIALOG_CHAR_DOUBLE_LOW_QUOTE = 0xF0, // German opening quotation mark #endif -#if defined(VERSION_US) || defined(VERSION_EU) +#if defined(VERSION_US) || defined(VERSION_EU) || defined(VERSION_CN) DIALOG_CHAR_SLASH = 0xD0, DIALOG_CHAR_MULTI_THE = 0xD1, // 'the' DIALOG_CHAR_MULTI_YOU = 0xD2, // 'you' @@ -115,6 +125,13 @@ enum DialogSpecialChars { DIALOG_CHAR_TERMINATOR = 0xFF }; +#ifdef VERSION_CN +#define DIALOG_CHAR_SPECIAL_MODIFIER 0xFF +#define SPECIAL_CHAR(x) (DIALOG_CHAR_SPECIAL_MODIFIER << 8 | (x)) +#else +#define SPECIAL_CHAR(x) (x) +#endif + // gDialogResponse enum DialogResponseDefines { DIALOG_RESPONSE_NONE, @@ -124,10 +141,10 @@ enum DialogResponseDefines { }; extern s32 gDialogResponse; -extern u16 gDialogColorFadeTimer; +extern u16 gMenuTextColorTransTimer; extern s8 gLastDialogLineNum; extern s32 gDialogVariable; -extern u16 gDialogTextAlpha; +extern u16 gMenuTextAlpha; extern s16 gCutsceneMsgXOffset; extern s16 gCutsceneMsgYOffset; extern s8 gRedCoinsCollected; @@ -135,11 +152,13 @@ extern s8 gRedCoinsCollected; void create_dl_identity_matrix(void); void create_dl_translation_matrix(s8 pushOp, f32 x, f32 y, f32 z); void create_dl_ortho_matrix(void); + void print_generic_string(s16 x, s16 y, const u8 *str); void print_hud_lut_string(s8 hudLUT, s16 x, s16 y, const u8 *str); void print_menu_generic_string(s16 x, s16 y, const u8 *str); + void handle_menu_scrolling(s8 scrollDirection, s8 *currentIndex, s8 minIndex, s8 maxIndex); -#if defined(VERSION_US) || defined(VERSION_EU) +#if defined(VERSION_US) || defined(VERSION_EU) || defined(VERSION_CN) s16 get_str_x_pos_from_center(s16 centerPos, u8 *str, f32 scale); #endif #if defined(VERSION_JP) || defined(VERSION_SH) @@ -149,7 +168,19 @@ s16 get_str_x_pos_from_center(s16 centerPos, u8 *str, f32 scale); s16 get_str_x_pos_from_center_scale(s16 centerPos, u8 *str, f32 scale); #endif void print_hud_my_score_coins(s32 useCourseCoinScore, s8 fileIndex, s8 courseIndex, s16 x, s16 y); + void int_to_str(s32 num, u8 *dst); + +#ifdef VERSION_CN +void int_to_str_2(s32 num, u8 *dst); +#endif + +#ifdef VERSION_CN +#define INT_TO_STR_DIFF int_to_str_2 +#else +#define INT_TO_STR_DIFF int_to_str +#endif + s16 get_dialog_id(void); void create_dialog_box(s16 dialog); void create_dialog_box_with_var(s16 dialog, s32 dialogVar); diff --git a/src/game/interaction.c b/src/game/interaction.c index c35d1b3e..ea6e4559 100644 --- a/src/game/interaction.c +++ b/src/game/interaction.c @@ -129,7 +129,7 @@ static u32 sBackwardKnockbackActions[][3] = { static u8 sDisplayingDoorText = FALSE; static u8 sJustTeleported = FALSE; -static u8 sPssSlideStarted = FALSE; +static u8 sPSSSlideStarted = FALSE; /** * Returns the type of cap Mario is wearing. @@ -746,10 +746,11 @@ u32 interact_coin(struct MarioState *m, UNUSED u32 interactType, struct Object * o->oInteractStatus = INT_STATUS_INTERACTED; - if (COURSE_IS_MAIN_COURSE(gCurrCourseNum) && m->numCoins - o->oDamageOrCoinValue < 100 - && m->numCoins >= 100) { - bhv_spawn_star_no_level_exit(6); + if (COURSE_IS_MAIN_COURSE(gCurrCourseNum) + && m->numCoins - o->oDamageOrCoinValue < 100 && m->numCoins >= 100) { + bhv_spawn_star_no_level_exit(STAR_INDEX_100_COINS); } + #if ENABLE_RUMBLE if (o->oDamageOrCoinValue >= 2) { queue_rumble_data(5, 80); @@ -807,7 +808,7 @@ u32 interact_star_or_key(struct MarioState *m, UNUSED u32 interactType, struct O m->interactObj = o; m->usedObj = o; - starIndex = (o->oBehParams >> 24) & 0x1F; + starIndex = (o->oBhvParams >> 24) & 0x1F; save_file_collect_star_or_key(m->numCoins, starIndex); m->numStars = @@ -902,7 +903,7 @@ u32 interact_warp(struct MarioState *m, UNUSED u32 interactType, struct Object * u32 interact_warp_door(struct MarioState *m, UNUSED u32 interactType, struct Object *o) { u32 doorAction = 0; u32 saveFlags = save_file_get_flags(); - s16 warpDoorId = o->oBehParams >> 24; + s16 warpDoorId = o->oBhvParams >> 24; u32 actionArg; if (m->action == ACT_WALKING || m->action == ACT_DECELERATING) { @@ -957,14 +958,14 @@ u32 interact_warp_door(struct MarioState *m, UNUSED u32 interactType, struct Obj u32 get_door_save_file_flag(struct Object *door) { u32 saveFileFlag = 0; - s16 requiredNumStars = door->oBehParams >> 24; + s16 requiredNumStars = door->oBhvParams >> 24; - s16 isCcmDoor = door->oPosX < 0.0f; - s16 isPssDoor = door->oPosY > 500.0f; + s16 isCCMDoor = door->oPosX < 0.0f; + s16 isPSSDoor = door->oPosY > 500.0f; switch (requiredNumStars) { case 1: - if (isPssDoor) { + if (isPSSDoor) { saveFileFlag = SAVE_FLAG_UNLOCKED_PSS_DOOR; } else { saveFileFlag = SAVE_FLAG_UNLOCKED_WF_DOOR; @@ -972,7 +973,7 @@ u32 get_door_save_file_flag(struct Object *door) { break; case 3: - if (isCcmDoor) { + if (isCCMDoor) { saveFileFlag = SAVE_FLAG_UNLOCKED_CCM_DOOR; } else { saveFileFlag = SAVE_FLAG_UNLOCKED_JRB_DOOR; @@ -996,7 +997,7 @@ u32 get_door_save_file_flag(struct Object *door) { } u32 interact_door(struct MarioState *m, UNUSED u32 interactType, struct Object *o) { - s16 requiredNumStars = o->oBehParams >> 24; + s16 requiredNumStars = o->oBhvParams >> 24; s16 numStars = save_file_get_total_star_count(gCurrSaveFileNum - 1, COURSE_MIN - 1, COURSE_MAX - 1); if (m->action == ACT_WALKING || m->action == ACT_DECELERATING) { @@ -1142,7 +1143,7 @@ u32 interact_strong_wind(struct MarioState *m, UNUSED u32 interactType, struct O m->usedObj = o; m->faceAngle[1] = o->oMoveAngleYaw + 0x8000; - m->unkC4 = 0.4f; + m->gettingBlownGravity = 0.4f; m->forwardVel = -24.0f; m->vel[1] = 12.0f; @@ -1510,7 +1511,7 @@ u32 interact_pole(struct MarioState *m, UNUSED u32 interactType, struct Object * s32 actionId = m->action & ACT_ID_MASK; if (actionId >= 0x080 && actionId < 0x0A0) { if (!(m->prevAction & ACT_FLAG_ON_POLE) || m->usedObj != o) { -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) f32 velConv = m->forwardVel; // conserve the velocity. struct Object *marioObj = m->marioObj; u32 lowSpeed; @@ -1521,7 +1522,7 @@ u32 interact_pole(struct MarioState *m, UNUSED u32 interactType, struct Object * mario_stop_riding_and_holding(m); -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) lowSpeed = (velConv <= 10.0f); #endif @@ -1540,7 +1541,7 @@ u32 interact_pole(struct MarioState *m, UNUSED u32 interactType, struct Object * //! @bug Using m->forwardVel here is assumed to be 0.0f due to the set from earlier. // This is fixed in the Shindou version. -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) marioObj->oMarioPoleYawVel = (s32)(velConv * 0x100 + 0x1000); #else marioObj->oMarioPoleYawVel = (s32)(m->forwardVel * 0x100 + 0x1000); @@ -1838,19 +1839,19 @@ void pss_begin_slide(UNUSED struct MarioState *m) { if (!(gHudDisplay.flags & HUD_DISPLAY_FLAG_TIMER)) { level_control_timer(TIMER_CONTROL_SHOW); level_control_timer(TIMER_CONTROL_START); - sPssSlideStarted = TRUE; + sPSSSlideStarted = TRUE; } } void pss_end_slide(struct MarioState *m) { //! This flag isn't set on death or level entry, allowing double star spawn - if (sPssSlideStarted) { + if (sPSSSlideStarted) { u16 slideTime = level_control_timer(TIMER_CONTROL_STOP); if (slideTime < 630) { - m->marioObj->oBehParams = (1 << 24); + m->marioObj->oBhvParams = (STAR_INDEX_ACT_2 << 24); spawn_default_star(-6358.0f, -4300.0f, 4700.0f); } - sPssSlideStarted = FALSE; + sPSSSlideStarted = FALSE; } } diff --git a/src/game/level_update.c b/src/game/level_update.c index 03d44077..a6186c38 100644 --- a/src/game/level_update.c +++ b/src/game/level_update.c @@ -40,23 +40,13 @@ #define WARP_TYPE_CHANGE_AREA 2 #define WARP_TYPE_SAME_AREA 3 -#define WARP_NODE_F0 0xF0 -#define WARP_NODE_DEATH 0xF1 -#define WARP_NODE_F2 0xF2 -#define WARP_NODE_WARP_FLOOR 0xF3 -#define WARP_NODE_CREDITS_START 0xF8 -#define WARP_NODE_CREDITS_NEXT 0xF9 -#define WARP_NODE_CREDITS_END 0xFA - -#define WARP_NODE_CREDITS_MIN 0xF8 - // TODO: Make these ifdefs better const char *credits01[] = { "1GAME DIRECTOR", "SHIGERU MIYAMOTO" }; const char *credits02[] = { "2ASSISTANT DIRECTORS", "YOSHIAKI KOIZUMI", "TAKASHI TEZUKA" }; const char *credits03[] = { "2SYSTEM PROGRAMMERS", "YASUNARI NISHIDA", "YOSHINORI TANIMOTO" }; const char *credits04[] = { "3PROGRAMMERS", "HAJIME YAJIMA", "DAIKI IWAMOTO", "TOSHIO IWAWAKI" }; -#if defined(VERSION_JP) || defined(VERSION_SH) +#if defined(VERSION_JP) || defined(VERSION_SH) || defined(VERSION_CN) const char *credits05[] = { "1CAMERA PROGRAMMER", "TAKUMI KAWAGOE" }; const char *credits06[] = { "1MARIO FACE PROGRAMMER", "GILES GODDARD" }; @@ -73,8 +63,8 @@ const char *credits14[] = { "1CG DESIGNER", "MASANAO ARIMOTO" }; const char *credits15[] = { "3TECHNICAL SUPPORT", "TAKAO SAWANO", "HIROHITO YOSHIMOTO", "HIROTO YADA" }; const char *credits16[] = { "1TECHNICAL SUPPORT", "SGI. 64PROJECT STAFF" }; const char *credits17[] = { "2PROGRESS MANAGEMENT", "KIMIYOSHI FUKUI", "KEIZO KATO" }; -#else // VERSION_SH -// Shindou combines sound effects and sound programmer in order to make room for Mario voice and Peach voice +#else // VERSION_SH || VERSION_CN +// Shindou and iQue combine sound effects and sound programmer in order to make room for Mario voice and Peach voice const char *credits11[] = { "4SOUND EFFECTS", "SOUND PROGRAMMER", "YOJI INAGAKI", "HIDEAKI SHIMIZU" }; const char *credits12[] = { "23D ANIMATORS", "YOSHIAKI KOIZUMI", "SATORU TAKIZAWA" }; const char *credits13[] = { "1CG DESIGNER", "MASANAO ARIMOTO" }; @@ -94,13 +84,13 @@ const char *credits08[] = { "3COURSE DESIGNERS", "YOSHIKI HARUHANA", "MAKOTO MIY #ifdef VERSION_US const char *credits09[] = { "1SOUND COMPOSER", "KOJI KONDO" }; // ...as well as sound effects and sound programmer in order to make room for screen text writer, Mario voice, and Peach voice -const char *credits10[] = { "4SOUND EFFECTS", "SOUND PROGRAMMER", "YOJI INAGAKI", "HIDEAKI SHIMIZU" }; +const char *credits10[] = { "4SOUND EFFECTS", "SOUND PROGRAMMER", "YOJI INAGAKI", "HIDEAKI SHIMIZU" }; const char *credits11[] = { "23-D ANIMATORS", "YOSHIAKI KOIZUMI", "SATORU TAKIZAWA" }; const char *credits12[] = { "1ADDITIONAL GRAPHICS", "MASANAO ARIMOTO" }; const char *credits13[] = { "3TECHNICAL SUPPORT", "TAKAO SAWANO", "HIROHITO YOSHIMOTO", "HIROTO YADA" }; const char *credits14[] = { "1TECHNICAL SUPPORT", "SGI N64 PROJECT STAFF" }; const char *credits15[] = { "2PROGRESS MANAGEMENT", "KIMIYOSHI FUKUI", "KEIZO KATO" }; -const char *credits16[] = { "5SCREEN TEXT WRITER", "TRANSLATION", "LESLIE SWAN", "MINA AKINO", "HIRO YAMADA" }; +const char *credits16[] = { "5SCREEN TEXT WRITER", "TRANSLATION", "LESLIE SWAN", "MINA AKINO", "HIRO YAMADA" }; #else // VERSION_EU // ...as well as sound composer, sound effects, and sound programmer, and... const char *credits09[] = { "7SOUND COMPOSER", "SOUND EFFECTS", "SOUND PROGRAMMER", "KOJI KONDO", "YOJI INAGAKI", "HIDEAKI SHIMIZU" }; @@ -120,7 +110,8 @@ const char *credits16[] = { "4SCREEN TEXT WRITER", "GERMAN TRANSLATION", "THOMAS const char *credits17[] = { "4MARIO VOICE", "PEACH VOICE", "CHARLES MARTINET", "LESLIE SWAN" }; #endif -#if defined(VERSION_JP) || defined(VERSION_SH) +#if defined(VERSION_JP) || defined(VERSION_SH) || defined(VERSION_CN) +// iQue uses this despite Jyoho Kaihatubu being Japanese const char *credits18[] = { "3SPECIAL THANKS TO", "JYOHO KAIHATUBU", "ALL NINTENDO", "MARIO CLUB STAFF" }; #elif defined(VERSION_US) const char *credits18[] = { "3SPECIAL THANKS TO", "EAD STAFF", "ALL NINTENDO PERSONNEL", "MARIO CLUB STAFF" }; @@ -128,9 +119,14 @@ const char *credits18[] = { "3SPECIAL THANKS TO", "EAD STAFF", "ALL NINTENDO PER const char *credits18[] = { "3SPECIAL THANKS TO", "EAD STAFF", "ALL NINTENDO PERSONNEL", "SUPER MARIO CLUB STAFF" }; #endif +#ifdef VERSION_CN +// iQue combines producer and executive producer in order to make room for China production +const char *credits19[] = { "4PRODUCER", "EXECUTIVE PRODUCER", "SHIGERU MIYAMOTO", "HIROSHI YAMAUCHI" }; +const char *credits20[] = { "1CHINA PRODUCTION", "IQUE ENGINEERING" }; +#else const char *credits19[] = { "1PRODUCER", "SHIGERU MIYAMOTO" }; const char *credits20[] = { "1EXECUTIVE PRODUCER", "HIROSHI YAMAUCHI" }; - +#endif struct CreditsEntry sCreditsSequence[] = { { LEVEL_CASTLE_GROUNDS, 1, 1, -128, { 0, 8000, 0 }, NULL }, @@ -160,27 +156,25 @@ struct CreditsEntry sCreditsSequence[] = { struct MarioState gMarioStates[1]; struct HudDisplay gHudDisplay; -s16 sCurrPlayMode; -u16 D_80339ECA; -s16 sTransitionTimer; -void (*sTransitionUpdate)(s16 *); -struct WarpDest sWarpDest; -s16 D_80339EE0; -s16 sDelayedWarpOp; -s16 sDelayedWarpTimer; -s16 sSourceWarpNodeId; -s32 sDelayedWarpArg; -#if defined(VERSION_EU) || defined(VERSION_SH) -s16 unusedEULevelUpdateBss1; -#endif -s8 sTimerRunning; + +FORCE_BSS s16 sCurrPlayMode; +FORCE_BSS u16 D_80339ECA; +FORCE_BSS s16 sTransitionTimer; +FORCE_BSS void (*sTransitionUpdate)(s16 *); +FORCE_BSS struct WarpDest sWarpDest; +FORCE_BSS s16 D_80339EE0; +FORCE_BSS s16 sDelayedWarpOp; +FORCE_BSS s16 sDelayedWarpTimer; +FORCE_BSS s16 sSourceWarpNodeId; +FORCE_BSS s32 sDelayedWarpArg; +FORCE_BSS s16 sUnusedLevelUpdateBss; +FORCE_BSS s8 sTimerRunning; s8 gNeverEnteredCastle; struct MarioState *gMarioState = &gMarioStates[0]; -u8 unused1[4] = { 0 }; +u8 unused1[2] = { 0 }; s8 sWarpCheckpointActive = FALSE; u8 unused2[4]; -u8 unused3[2]; u16 level_control_timer(s32 timerOp) { switch (timerOp) { @@ -248,7 +242,7 @@ void stub_level_update_1(void) { void load_level_init_text(u32 arg) { s32 gotAchievement; - u32 dialogID = gCurrentArea->dialog[arg]; + s32 dialogID = gCurrentArea->dialog[arg]; switch (dialogID) { case DIALOG_129: @@ -289,7 +283,7 @@ void init_door_warp(struct SpawnInfo *spawnInfo, u32 arg1) { } void set_mario_initial_cap_powerup(struct MarioState *m) { - u32 capCourseIndex = gCurrCourseNum - COURSE_CAP_COURSES; + s32 capCourseIndex = gCurrCourseNum - COURSE_CAP_COURSES; switch (capCourseIndex) { case COURSE_COTMC - COURSE_CAP_COURSES: @@ -512,7 +506,7 @@ void warp_credits(void) { vec3s_set(gPlayerSpawnInfos[0].startPos, gCurrCreditsEntry->marioPos[0], gCurrCreditsEntry->marioPos[1], gCurrCreditsEntry->marioPos[2]); - vec3s_set(gPlayerSpawnInfos[0].startAngle, 0, 0x100 * gCurrCreditsEntry->marioAngle, 0); + vec3s_set(gPlayerSpawnInfos[0].startAngle, 0, gCurrCreditsEntry->marioAngle << 8, 0); gPlayerSpawnInfos[0].areaIndex = sWarpDest.areaIdx; @@ -713,7 +707,7 @@ s16 level_trigger_warp(struct MarioState *m, s32 warpOp) { switch (warpOp) { case WARP_OP_DEMO_NEXT: case WARP_OP_DEMO_END: sDelayedWarpTimer = 20; // Must be one line to match on -O2 - sSourceWarpNodeId = WARP_NODE_F0; + sSourceWarpNodeId = WARP_NODE_SUCCESS; gSavedCourseNum = COURSE_NONE; val04 = FALSE; play_transition(WARP_TRANSITION_FADE_INTO_STAR, 0x14, 0x00, 0x00, 0x00); @@ -721,7 +715,7 @@ s16 level_trigger_warp(struct MarioState *m, s32 warpOp) { case WARP_OP_CREDITS_END: sDelayedWarpTimer = 60; - sSourceWarpNodeId = WARP_NODE_F0; + sSourceWarpNodeId = WARP_NODE_SUCCESS; val04 = FALSE; gSavedCourseNum = COURSE_NONE; play_transition(WARP_TRANSITION_FADE_INTO_COLOR, 0x3C, 0x00, 0x00, 0x00); @@ -729,7 +723,7 @@ s16 level_trigger_warp(struct MarioState *m, s32 warpOp) { case WARP_OP_STAR_EXIT: sDelayedWarpTimer = 32; - sSourceWarpNodeId = WARP_NODE_F0; + sSourceWarpNodeId = WARP_NODE_SUCCESS; gSavedCourseNum = COURSE_NONE; play_transition(WARP_TRANSITION_FADE_INTO_MARIO, 0x20, 0x00, 0x00, 0x00); break; @@ -757,24 +751,24 @@ s16 level_trigger_warp(struct MarioState *m, s32 warpOp) { play_transition(WARP_TRANSITION_FADE_INTO_CIRCLE, 0x14, 0x00, 0x00, 0x00); break; - case WARP_OP_UNKNOWN_01: // enter totwc + case WARP_OP_UNKNOWN_01: // enter TotWC sDelayedWarpTimer = 30; - sSourceWarpNodeId = WARP_NODE_F2; + sSourceWarpNodeId = WARP_NODE_TOTWC; play_transition(WARP_TRANSITION_FADE_INTO_COLOR, 0x1E, 0xFF, 0xFF, 0xFF); #ifndef VERSION_JP play_sound(SOUND_MENU_STAR_SOUND, gGlobalSoundSource); #endif break; - case WARP_OP_UNKNOWN_02: // bbh enter + case WARP_OP_UNKNOWN_02: // enter BBH sDelayedWarpTimer = 30; - sSourceWarpNodeId = (m->usedObj->oBehParams & 0x00FF0000) >> 16; + sSourceWarpNodeId = (m->usedObj->oBhvParams & 0x00FF0000) >> 16; play_transition(WARP_TRANSITION_FADE_INTO_COLOR, 0x1E, 0xFF, 0xFF, 0xFF); break; case WARP_OP_TELEPORT: sDelayedWarpTimer = 20; - sSourceWarpNodeId = (m->usedObj->oBehParams & 0x00FF0000) >> 16; + sSourceWarpNodeId = (m->usedObj->oBhvParams & 0x00FF0000) >> 16; val04 = !music_changed_through_warp(sSourceWarpNodeId); play_transition(WARP_TRANSITION_FADE_INTO_COLOR, 0x14, 0xFF, 0xFF, 0xFF); break; @@ -782,14 +776,14 @@ s16 level_trigger_warp(struct MarioState *m, s32 warpOp) { case WARP_OP_WARP_DOOR: sDelayedWarpTimer = 20; sDelayedWarpArg = m->actionArg; - sSourceWarpNodeId = (m->usedObj->oBehParams & 0x00FF0000) >> 16; + sSourceWarpNodeId = (m->usedObj->oBhvParams & 0x00FF0000) >> 16; 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; + sSourceWarpNodeId = (m->usedObj->oBhvParams & 0x00FF0000) >> 16; val04 = !music_changed_through_warp(sSourceWarpNodeId); play_transition(WARP_TRANSITION_FADE_INTO_STAR, 0x14, 0x00, 0x00, 0x00); break; @@ -1166,13 +1160,7 @@ s32 init_level(void) { sDelayedWarpOp = WARP_OP_NONE; sTransitionTimer = 0; D_80339EE0 = 0; - - if (gCurrCreditsEntry == NULL) { - gHudDisplay.flags = HUD_DISPLAY_DEFAULT; - } else { - gHudDisplay.flags = HUD_DISPLAY_NONE; - } - + gHudDisplay.flags = gCurrCreditsEntry == NULL ? HUD_DISPLAY_DEFAULT : HUD_DISPLAY_NONE; sTimerRunning = FALSE; if (sWarpDest.type != WARP_TYPE_NOT_WARPING) { diff --git a/src/game/level_update.h b/src/game/level_update.h index b55d2737..787d0032 100644 --- a/src/game/level_update.h +++ b/src/game/level_update.h @@ -49,6 +49,77 @@ #define MARIO_SPAWN_LAUNCH_DEATH 0x25 #define MARIO_SPAWN_UNKNOWN_27 0x27 +enum WarpNodes { + WARP_NODE_00, + WARP_NODE_01, + WARP_NODE_02, + WARP_NODE_03, + WARP_NODE_04, + WARP_NODE_05, + WARP_NODE_06, + WARP_NODE_07, + WARP_NODE_08, + WARP_NODE_09, + WARP_NODE_0A, + WARP_NODE_0B, + WARP_NODE_0C, + WARP_NODE_0D, + WARP_NODE_0E, + WARP_NODE_0F, + WARP_NODE_10, + WARP_NODE_11, + WARP_NODE_14 = 0x14, + WARP_NODE_15, + WARP_NODE_16, + WARP_NODE_17, + WARP_NODE_18, + WARP_NODE_19, + WARP_NODE_1A, + WARP_NODE_1B, + WARP_NODE_1C, + WARP_NODE_1D, + WARP_NODE_1E, + WARP_NODE_1F, + WARP_NODE_20, + WARP_NODE_21, + WARP_NODE_22, + WARP_NODE_23, + WARP_NODE_24, + WARP_NODE_25, + WARP_NODE_26, + WARP_NODE_27, + WARP_NODE_28, + WARP_NODE_29, + WARP_NODE_2A, + WARP_NODE_32 = 0x32, + WARP_NODE_33, + WARP_NODE_34, + WARP_NODE_35, + WARP_NODE_36, + WARP_NODE_37, + WARP_NODE_38, + WARP_NODE_3A = 0x3A, + WARP_NODE_64 = 0x64, + WARP_NODE_65, + WARP_NODE_66, + WARP_NODE_67, + WARP_NODE_68, + WARP_NODE_69, + WARP_NODE_6B = 0x6B, + WARP_NODE_6C, + WARP_NODE_6D, + + // Special Warps + WARP_NODE_SUCCESS = 0xF0, + WARP_NODE_DEATH = 0xF1, + WARP_NODE_TOTWC = 0xF2, + WARP_NODE_WARP_FLOOR = 0xF3, + WARP_NODE_CREDITS_START = 0xF8, + WARP_NODE_CREDITS_MIN = WARP_NODE_CREDITS_START, + WARP_NODE_CREDITS_NEXT = 0xF9, + WARP_NODE_CREDITS_END = 0xFA +}; + struct CreditsEntry { /*0x00*/ u8 levelNum; @@ -85,7 +156,7 @@ extern s16 sDelayedWarpOp; extern s16 sDelayedWarpTimer; extern s16 sSourceWarpNodeId; extern s32 sDelayedWarpArg; -extern u8 unused3[2]; +extern s16 sUnusedLevelUpdateBss; extern s8 sTimerRunning; struct HudDisplay { diff --git a/src/game/macro_special_objects.c b/src/game/macro_special_objects.c index bd02e19c..48b82dc0 100644 --- a/src/game/macro_special_objects.c +++ b/src/game/macro_special_objects.c @@ -4,12 +4,10 @@ #include "object_helpers.h" #include "macro_special_objects.h" #include "object_list_processor.h" - #include "behavior_data.h" -#include "macro_presets.h" - -#include "special_presets.h" +#include "macro_presets.inc.c" +#include "special_presets.inc.c" /* * Converts the rotation value supplied by macro objects into one @@ -40,27 +38,27 @@ s16 convert_rotation(s16 inRotation) { /* * Spawns an object at an absolute location with rotation around the y-axis and - * parameters filling up the upper 2 bytes of newObj->oBehParams. + * parameters filling up the upper 2 bytes of newObj->oBhvParams. * The object will not spawn if 'behavior' is NULL. */ void spawn_macro_abs_yrot_2params(s32 model, const BehaviorScript *behavior, s16 x, s16 y, s16 z, s16 ry, s16 params) { if (behavior != NULL) { struct Object *newObj = spawn_object_abs_with_rot( &gMacroObjectDefaultParent, 0, model, behavior, x, y, z, 0, convert_rotation(ry), 0); - newObj->oBehParams = ((u32) params) << 16; + newObj->oBhvParams = ((u32) params) << 16; } } /* * Spawns an object at an absolute location with rotation around the y-axis and - * a single parameter filling up the upper byte of newObj->oBehParams. + * a single parameter filling up the upper byte of newObj->oBhvParams. * The object will not spawn if 'behavior' is NULL. */ void spawn_macro_abs_yrot_param1(s32 model, const BehaviorScript *behavior, s16 x, s16 y, s16 z, s16 ry, s16 param) { if (behavior != NULL) { struct Object *newObj = spawn_object_abs_with_rot( &gMacroObjectDefaultParent, 0, model, behavior, x, y, z, 0, convert_rotation(ry), 0); - newObj->oBehParams = ((u32) param) << 24; + newObj->oBhvParams = ((u32) param) << 24; } } @@ -79,31 +77,29 @@ void spawn_macro_abs_special(s32 model, const BehaviorScript *behavior, s16 x, s newObj->oMacroUnk110 = (f32) unkC; } -UNUSED static void spawn_macro_coin_unknown(const BehaviorScript *behavior, s16 a1[]) { - struct Object *sp3C; - s16 model; - - model = bhvYellowCoin == behavior ? MODEL_YELLOW_COIN : MODEL_NONE; - - sp3C = spawn_object_abs_with_rot(&gMacroObjectDefaultParent, 0, model, behavior, - a1[1], a1[2], a1[3], 0, convert_rotation(a1[0]), 0); - - sp3C->oUnk1A8 = a1[4]; - sp3C->oBehParams = (a1[4] & 0xFF) >> 16; -} - -struct LoadedPreset { - /*0x00*/ const BehaviorScript *behavior; - /*0x04*/ s16 param; // huh? why does the below function swap these.. just use the struct.. - /*0x06*/ s16 model; -}; - #define MACRO_OBJ_Y_ROT 0 #define MACRO_OBJ_X 1 #define MACRO_OBJ_Y 2 #define MACRO_OBJ_Z 3 #define MACRO_OBJ_PARAMS 4 +UNUSED static void spawn_macro_coin_unknown(const BehaviorScript *behavior, s16 objInfo[]) { + struct Object *coin; + s16 model = bhvYellowCoin == behavior ? MODEL_YELLOW_COIN : MODEL_NONE; + + coin = spawn_object_abs_with_rot(&gMacroObjectDefaultParent, 0, model, behavior, + objInfo[MACRO_OBJ_X], objInfo[MACRO_OBJ_Y], objInfo[MACRO_OBJ_Z], + 0, convert_rotation(objInfo[MACRO_OBJ_Y_ROT]), 0); + coin->oUnusedBhvParams = objInfo[MACRO_OBJ_PARAMS]; + coin->oBhvParams = (objInfo[MACRO_OBJ_PARAMS] & 0xFF) >> 16; +} + +struct LoadedPreset { + /* 0x00 */ const BehaviorScript *behavior; + /* 0x04 */ s16 param; // huh? why does the below function swap these.. just use the struct.. + /* 0x06 */ s16 model; +}; + void spawn_macro_objects(s16 areaIndex, s16 *macroObjList) { UNUSED u8 filler[4]; s32 presetID; @@ -120,7 +116,7 @@ void spawn_macro_objects(s16 areaIndex, s16 *macroObjList) { break; } - presetID = (*macroObjList & 0x1FF) - 31; // Preset identifier for MacroObjectPresets array + presetID = (*macroObjList & 0x1FF) - 31; // Preset identifier for sMacroObjectPresets array if (presetID < 0) { break; @@ -133,10 +129,10 @@ void spawn_macro_objects(s16 areaIndex, s16 *macroObjList) { macroObject[MACRO_OBJ_Z] = *macroObjList++; // Z position macroObject[MACRO_OBJ_PARAMS] = *macroObjList++; // Behavior params - // Get the preset values from the MacroObjectPresets list. - preset.model = MacroObjectPresets[presetID].model; - preset.behavior = MacroObjectPresets[presetID].behavior; - preset.param = MacroObjectPresets[presetID].param; + // Get the preset values from the sMacroObjectPresets list. + preset.model = sMacroObjectPresets[presetID].model; + preset.behavior = sMacroObjectPresets[presetID].behavior; + preset.param = sMacroObjectPresets[presetID].param; if (preset.param != 0) { macroObject[MACRO_OBJ_PARAMS] = @@ -160,10 +156,10 @@ void spawn_macro_objects(s16 areaIndex, s16 *macroObjList) { 0 // Z-rotation ); - newObj->oUnk1A8 = macroObject[MACRO_OBJ_PARAMS]; - newObj->oBehParams = ((macroObject[MACRO_OBJ_PARAMS] & 0x00FF) << 16) + newObj->oUnusedBhvParams = macroObject[MACRO_OBJ_PARAMS]; + newObj->oBhvParams = ((macroObject[MACRO_OBJ_PARAMS] & 0x00FF) << 16) + (macroObject[MACRO_OBJ_PARAMS] & 0xFF00); - newObj->oBehParams2ndByte = macroObject[MACRO_OBJ_PARAMS] & 0x00FF; + newObj->oBhvParams2ndByte = macroObject[MACRO_OBJ_PARAMS] & 0x00FF; newObj->respawnInfoType = RESPAWN_INFO_TYPE_16; newObj->respawnInfo = macroObjList - 1; newObj->parentObj = newObj; @@ -208,11 +204,11 @@ void spawn_macro_objects_hardcoded(s16 areaIndex, s16 *macroObjList) { break; case 1: spawn_macro_abs_yrot_2params(MODEL_BBH_TILTING_FLOOR_PLATFORM, - bhvBbhTiltingTrapPlatform, macroObjX, macroObjY, macroObjZ, + bhvBBHTiltingTrapPlatform, macroObjX, macroObjY, macroObjZ, macroObjRY, 0); break; case 2: - spawn_macro_abs_yrot_2params(MODEL_BBH_TUMBLING_PLATFORM, bhvBbhTumblingBridge, + spawn_macro_abs_yrot_2params(MODEL_BBH_TUMBLING_PLATFORM, bhvBBHTumblingBridge, macroObjX, macroObjY, macroObjZ, macroObjRY, 0); break; case 3: @@ -237,7 +233,7 @@ void spawn_macro_objects_hardcoded(s16 areaIndex, s16 *macroObjList) { } } -void spawn_special_objects(s16 areaIndex, s16 **specialObjList) { +void spawn_special_objects(s16 areaIndex, TerrainData **specialObjList) { s32 numOfSpecialObjects; s32 i; s32 offset; @@ -269,20 +265,20 @@ void spawn_special_objects(s16 areaIndex, s16 **specialObjList) { offset = 0; while (TRUE) { - if (SpecialObjectPresets[offset].preset_id == presetID) { + if (sSpecialObjectPresets[offset].presetID == presetID) { break; } - if (SpecialObjectPresets[offset].preset_id == 0xFF) { + if (sSpecialObjectPresets[offset].presetID == special_null_end) { } offset++; } - model = SpecialObjectPresets[offset].model; - behavior = SpecialObjectPresets[offset].behavior; - type = SpecialObjectPresets[offset].type; - defaultParam = SpecialObjectPresets[offset].defParam; + model = sSpecialObjectPresets[offset].model; + behavior = sSpecialObjectPresets[offset].behavior; + type = sSpecialObjectPresets[offset].type; + defaultParam = sSpecialObjectPresets[offset].defParam; switch (type) { case SPTYPE_NO_YROT_OR_PARAMS: @@ -340,13 +336,13 @@ u32 get_special_objects_size(s16 *data) { offset = 0; while (TRUE) { - if (SpecialObjectPresets[offset].preset_id == presetID) { + if (sSpecialObjectPresets[offset].presetID == presetID) { break; } offset++; } - switch (SpecialObjectPresets[offset].type) { + switch (sSpecialObjectPresets[offset].type) { case SPTYPE_NO_YROT_OR_PARAMS: break; case SPTYPE_YROT_NO_PARAMS: diff --git a/src/game/macro_special_objects.h b/src/game/macro_special_objects.h index d8bdc237..acef0a93 100644 --- a/src/game/macro_special_objects.h +++ b/src/game/macro_special_objects.h @@ -13,7 +13,7 @@ void spawn_macro_abs_special(s32 model, const BehaviorScript *behavior, s16 x, s void spawn_macro_objects(s16 areaIndex, s16 *macroObjList); void spawn_macro_objects_hardcoded(s16 areaIndex, s16 *macroObjList); -void spawn_special_objects(s16 areaIndex, s16 **specialObjList); +void spawn_special_objects(s16 areaIndex, TerrainData **specialObjList); #ifdef NO_SEGMENTED_MEMORY u32 get_special_objects_size(s16 *data); #endif diff --git a/src/game/main.c b/src/game/main.c index 3d6de1fe..4d8bf9b7 100644 --- a/src/game/main.c +++ b/src/game/main.c @@ -9,6 +9,7 @@ #include "profiler.h" #include "buffers/buffers.h" #include "segments.h" +#include "segment_symbols.h" #include "main.h" #include "rumble_init.h" @@ -141,7 +142,7 @@ void create_thread(OSThread *thread, OSId id, void (*entry)(void *), void *arg, osCreateThread(thread, id, entry, arg, sp, pri); } -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) extern void func_sh_802f69cc(void); #endif @@ -151,7 +152,7 @@ void handle_nmi_request(void) { stop_sounds_in_continuous_banks(); sound_banks_disable(SEQ_PLAYER_SFX, SOUND_BANKS_BACKGROUND); fadeout_music(90); -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) func_sh_802f69cc(); #endif } @@ -222,7 +223,7 @@ void handle_vblank(void) { stub_main_3(); gNumVblanks++; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) if (gResetTimer > 0 && gResetTimer < 100) { gResetTimer++; } @@ -419,12 +420,12 @@ void turn_off_audio(void) { * Initialize hardware, start main thread, then idle. */ void thread1_idle(UNUSED void *arg) { -#if defined(VERSION_US) || defined(VERSION_SH) +#if defined(VERSION_US) || defined(VERSION_SH) || defined(VERSION_CN) s32 sp24 = osTvType; #endif osCreateViManager(OS_PRIORITY_VIMGR); -#if defined(VERSION_US) || defined(VERSION_SH) +#if defined(VERSION_US) || defined(VERSION_SH) || defined(VERSION_CN) if (sp24 == TV_TYPE_NTSC) { osViSetMode(&osViModeTable[OS_VI_NTSC_LAN1]); } else { diff --git a/src/game/main.h b/src/game/main.h index 91f99015..e0a670ae 100644 --- a/src/game/main.h +++ b/src/game/main.h @@ -3,42 +3,16 @@ #include "config.h" -struct RumbleData { - u8 unk00; - u8 unk01; - s16 unk02; - s16 unk04; -}; - -struct StructSH8031D9B0 { - s16 unk00; - s16 unk02; - s16 unk04; - s16 unk06; - s16 unk08; - s16 unk0A; - s16 unk0C; - s16 unk0E; -}; - extern OSThread D_80339210; extern OSThread gIdleThread; extern OSThread gMainThread; extern OSThread gGameLoopThread; extern OSThread gSoundThread; -#if ENABLE_RUMBLE -extern OSThread gRumblePakThread; - -extern s32 gRumblePakPfs; // Actually an OSPfs but we don't have that header yet -#endif extern OSMesgQueue gPIMesgQueue; extern OSMesgQueue gIntrMesgQueue; extern OSMesgQueue gSPTaskMesgQueue; -#if ENABLE_RUMBLE -extern OSMesgQueue gRumblePakSchedulerMesgQueue; -extern OSMesgQueue gRumbleThreadVIMesgQueue; -#endif + extern OSMesg gDmaMesgBuf[1]; extern OSMesg gPIMesgBuf[32]; extern OSMesg gSIEventMesgBuf[1]; @@ -48,13 +22,6 @@ extern OSIoMesg gDmaIoMesg; extern OSMesg gMainReceivedMesg; extern OSMesgQueue gDmaMesgQueue; extern OSMesgQueue gSIEventMesgQueue; -#if ENABLE_RUMBLE -extern OSMesg gRumblePakSchedulerMesgBuf[1]; -extern OSMesg gRumbleThreadVIMesgBuf[1]; - -extern struct RumbleData gRumbleDataQueue[3]; -extern struct StructSH8031D9B0 gCurrRumbleSettings; -#endif extern struct VblankHandler *gVblankHandler1; extern struct VblankHandler *gVblankHandler2; diff --git a/src/game/mario.c b/src/game/mario.c index cc5e8646..32c63c90 100644 --- a/src/game/mario.c +++ b/src/game/mario.c @@ -79,7 +79,7 @@ s16 set_mario_animation(struct MarioState *m, s32 targetAnimID) { if (targetAnim->flags & ANIM_FLAG_2) { o->header.gfx.animInfo.animFrame = targetAnim->startFrame; } else { - if (targetAnim->flags & ANIM_FLAG_FORWARD) { + if (targetAnim->flags & ANIM_FLAG_BACKWARD) { o->header.gfx.animInfo.animFrame = targetAnim->startFrame + 1; } else { o->header.gfx.animInfo.animFrame = targetAnim->startFrame - 1; @@ -111,7 +111,7 @@ s16 set_mario_anim_with_accel(struct MarioState *m, s32 targetAnimID, s32 accel) if (targetAnim->flags & ANIM_FLAG_2) { o->header.gfx.animInfo.animFrameAccelAssist = (targetAnim->startFrame << 0x10); } else { - if (targetAnim->flags & ANIM_FLAG_FORWARD) { + if (targetAnim->flags & ANIM_FLAG_BACKWARD) { o->header.gfx.animInfo.animFrameAccelAssist = (targetAnim->startFrame << 0x10) + accel; } else { o->header.gfx.animInfo.animFrameAccelAssist = (targetAnim->startFrame << 0x10) - accel; @@ -134,13 +134,13 @@ void set_anim_to_frame(struct MarioState *m, s16 animFrame) { struct Animation *curAnim = animInfo->curAnim; if (animInfo->animAccel != 0) { - if (curAnim->flags & ANIM_FLAG_FORWARD) { + if (curAnim->flags & ANIM_FLAG_BACKWARD) { animInfo->animFrameAccelAssist = (animFrame << 0x10) + animInfo->animAccel; } else { animInfo->animFrameAccelAssist = (animFrame << 0x10) - animInfo->animAccel; } } else { - if (curAnim->flags & ANIM_FLAG_FORWARD) { + if (curAnim->flags & ANIM_FLAG_BACKWARD) { animInfo->animFrame = animFrame + 1; } else { animInfo->animFrame = animFrame - 1; @@ -155,7 +155,7 @@ s32 is_anim_past_frame(struct MarioState *m, s16 animFrame) { struct Animation *curAnim = animInfo->curAnim; if (animInfo->animAccel != 0) { - if (curAnim->flags & ANIM_FLAG_FORWARD) { + if (curAnim->flags & ANIM_FLAG_BACKWARD) { isPastFrame = (animInfo->animFrameAccelAssist > acceleratedFrame) && (acceleratedFrame >= (animInfo->animFrameAccelAssist - animInfo->animAccel)); @@ -165,7 +165,7 @@ s32 is_anim_past_frame(struct MarioState *m, s16 animFrame) { && (acceleratedFrame <= (animInfo->animFrameAccelAssist + animInfo->animAccel)); } } else { - if (curAnim->flags & ANIM_FLAG_FORWARD) { + if (curAnim->flags & ANIM_FLAG_BACKWARD) { isPastFrame = (animInfo->animFrame == (animFrame + 1)); } else { isPastFrame = ((animInfo->animFrame + 1) == animFrame); @@ -1329,7 +1329,7 @@ void update_mario_geometry_inputs(struct MarioState *m) { m->floorHeight = find_floor(m->pos[0], m->pos[1], m->pos[2], &m->floor); } - m->ceilHeight = vec3f_find_ceil(&m->pos[0], m->floorHeight, &m->ceil); + m->ceilHeight = vec3f_find_ceil(m->pos, m->floorHeight, &m->ceil); gasLevel = find_poison_gas_level(m->pos[0], m->pos[2]); m->waterLevel = find_water_level(m->pos[0], m->pos[2]); @@ -1393,7 +1393,7 @@ void update_mario_inputs(struct MarioState *m) { if (!(m->input & (INPUT_NONZERO_ANALOG | INPUT_A_PRESSED))) { m->input |= INPUT_UNKNOWN_5; } - + // These 3 flags are defined by Bowser stomping attacks if (m->marioObj->oInteractStatus & (INT_STATUS_MARIO_STUNNED | INT_STATUS_MARIO_KNOCKBACK_DMG | INT_STATUS_MARIO_SHOCKWAVE)) { diff --git a/src/game/mario_actions_airborne.c b/src/game/mario_actions_airborne.c index 60c7c091..0d9a5395 100644 --- a/src/game/mario_actions_airborne.c +++ b/src/game/mario_actions_airborne.c @@ -1271,8 +1271,8 @@ s32 act_getting_blown(struct MarioState *m) { m->forwardVel += 0.8f; } - if (m->vel[1] < 0.0f && m->unkC4 < 4.0f) { - m->unkC4 += 0.05f; + if (m->vel[1] < 0.0f && m->gettingBlownGravity < 4.0f) { + m->gettingBlownGravity += 0.05f; } } diff --git a/src/game/mario_actions_automatic.c b/src/game/mario_actions_automatic.c index 40235766..f973c665 100644 --- a/src/game/mario_actions_automatic.c +++ b/src/game/mario_actions_automatic.c @@ -567,13 +567,12 @@ s32 act_ledge_grab(struct MarioState *m) { } return let_go_of_ledge(m); } + if (m->actionTimer == 10 && (m->input & INPUT_NONZERO_ANALOG) #ifdef VERSION_EU - // On EU, you can't slow climb up ledges while holding A. - if (m->actionTimer == 10 && (m->input & INPUT_NONZERO_ANALOG) && !(m->input & INPUT_A_DOWN)) -#else - if (m->actionTimer == 10 && (m->input & INPUT_NONZERO_ANALOG)) + // On EU, you can't slow climb up ledges while holding A. + && !(m->input & INPUT_A_DOWN) #endif - { + ) { if (intendedDYaw >= -0x4000 && intendedDYaw <= 0x4000) { if (hasSpaceForMario) { return set_mario_action(m, ACT_LEDGE_CLIMB_SLOW_1, 0); diff --git a/src/game/mario_actions_cutscene.c b/src/game/mario_actions_cutscene.c index ab797405..fcee2c29 100644 --- a/src/game/mario_actions_cutscene.c +++ b/src/game/mario_actions_cutscene.c @@ -514,7 +514,7 @@ s32 act_reading_sign(struct MarioState *m) { m->pos[2] += marioObj->oMarioReadingSignDPosZ / 11.0f; // create the text box if (m->actionTimer++ == 10) { - create_dialog_inverted_box(m->usedObj->oBehParams2ndByte); + create_dialog_inverted_box(m->usedObj->oBhvParams2ndByte); m->actionState = 2; } break; @@ -800,7 +800,7 @@ s32 act_unlocking_key_door(struct MarioState *m) { stop_and_set_height_to_floor(m); if (is_anim_at_end(m)) { - if (m->usedObj->oBehParams >> 24 == 1) { + if (m->usedObj->oBhvParams >> 24 == 1) { save_file_set_flags(SAVE_FLAG_UNLOCKED_UPSTAIRS_DOOR); save_file_clear_flags(SAVE_FLAG_HAVE_KEY_2); } else { @@ -2053,7 +2053,7 @@ static void end_peach_cutscene_summon_jumbo_star(struct MarioState *m) { #if defined(VERSION_EU) #define TIMER_FADE_IN_PEACH 201 #define TIMER_DESCEND_PEACH 280 -#elif defined(VERSION_SH) +#elif defined(VERSION_SH) || defined(VERSION_CN) #define TIMER_FADE_IN_PEACH 276 #define TIMER_DESCEND_PEACH 400 #else @@ -2186,15 +2186,15 @@ static void end_peach_cutscene_dialog_1(struct MarioState *m) { } switch (m->actionTimer) { -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) case 110: #else case 80: #endif sEndPeachAnimation = 6; break; - -#ifdef VERSION_SH + +#if defined(VERSION_SH) || defined(VERSION_CN) case 111: #else case 81: @@ -2202,7 +2202,7 @@ static void end_peach_cutscene_dialog_1(struct MarioState *m) { D_8032CBE4 = 3; break; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) case 175: #else case 145: @@ -2210,7 +2210,7 @@ static void end_peach_cutscene_dialog_1(struct MarioState *m) { D_8032CBE4 = 2; break; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) case 258: #else case 228: @@ -2219,7 +2219,7 @@ static void end_peach_cutscene_dialog_1(struct MarioState *m) { D_8032CBE8 = 1; break; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) case 260: #else case 230: @@ -2231,7 +2231,7 @@ static void end_peach_cutscene_dialog_1(struct MarioState *m) { #endif break; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) case 305: #else case 275: @@ -2240,7 +2240,7 @@ static void end_peach_cutscene_dialog_1(struct MarioState *m) { D_8032CBE8 = 0; break; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) case 320: #else case 290: @@ -2251,7 +2251,7 @@ static void end_peach_cutscene_dialog_1(struct MarioState *m) { #endif break; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) case 510: #else case 480: @@ -2264,7 +2264,7 @@ static void end_peach_cutscene_dialog_1(struct MarioState *m) { #if defined(VERSION_EU) #define TIMER_SOMETHING_SPECIAL 150 #define TIMER_PEACH_KISS 260 -#elif defined(VERSION_SH) +#elif defined(VERSION_SH) || defined(VERSION_CN) #define TIMER_SOMETHING_SPECIAL 170 #define TIMER_PEACH_KISS 250 #else @@ -2280,7 +2280,7 @@ static void end_peach_cutscene_dialog_2(struct MarioState *m) { sEndPeachAnimation = 9; switch (m->actionTimer) { -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) case 39: #else case 29: @@ -2291,15 +2291,15 @@ static void end_peach_cutscene_dialog_2(struct MarioState *m) { #endif break; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) case 65: -#else +#else case 45: #endif D_8032CBE8 = 1; break; -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) case 105: #else case 75: @@ -2569,7 +2569,7 @@ static s32 act_end_peach_cutscene(struct MarioState *m) { #define TIMER_CREDITS_SHOW 51 #define TIMER_CREDITS_PROGRESS 80 #define TIMER_CREDITS_WARP 160 -#elif defined(VERSION_SH) +#elif defined(VERSION_SH) || defined(VERSION_CN) #define TIMER_CREDITS_SHOW 61 #define TIMER_CREDITS_PROGRESS 90 #define TIMER_CREDITS_WARP 204 diff --git a/src/game/mario_actions_moving.c b/src/game/mario_actions_moving.c index 071ea66c..9da6abb8 100644 --- a/src/game/mario_actions_moving.c +++ b/src/game/mario_actions_moving.c @@ -1845,7 +1845,7 @@ s32 act_hold_freefall_land(struct MarioState *m) { } s32 act_long_jump_land(struct MarioState *m) { -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) // BLJ (Backwards Long Jump) speed build up fix, crushing SimpleFlips's dreams since July 1997 if (m->forwardVel < 0.0f) { m->forwardVel = 0.0f; diff --git a/src/game/mario_misc.c b/src/game/mario_misc.c index b2eb7ddb..92641df6 100644 --- a/src/game/mario_misc.c +++ b/src/game/mario_misc.c @@ -123,22 +123,22 @@ static void toad_message_opaque(void) { } static void toad_message_talking(void) { - if (cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_DOWN, - DIALOG_FLAG_TURN_TO_MARIO, CUTSCENE_DIALOG, gCurrentObject->oToadMessageDialogId)) { + if (cur_obj_update_dialog_with_cutscene(MARIO_DIALOG_LOOK_DOWN, + DIALOG_FLAG_TURN_TO_MARIO, CUTSCENE_DIALOG, gCurrentObject->oToadMessageDialogID)) { gCurrentObject->oToadMessageRecentlyTalked = TRUE; gCurrentObject->oToadMessageState = TOAD_MESSAGE_FADING; - switch (gCurrentObject->oToadMessageDialogId) { + switch (gCurrentObject->oToadMessageDialogID) { case TOAD_STAR_1_DIALOG: - gCurrentObject->oToadMessageDialogId = TOAD_STAR_1_DIALOG_AFTER; - bhv_spawn_star_no_level_exit(0); + gCurrentObject->oToadMessageDialogID = TOAD_STAR_1_DIALOG_AFTER; + bhv_spawn_star_no_level_exit(STAR_INDEX_ACT_1); break; case TOAD_STAR_2_DIALOG: - gCurrentObject->oToadMessageDialogId = TOAD_STAR_2_DIALOG_AFTER; - bhv_spawn_star_no_level_exit(1); + gCurrentObject->oToadMessageDialogID = TOAD_STAR_2_DIALOG_AFTER; + bhv_spawn_star_no_level_exit(STAR_INDEX_ACT_2); break; case TOAD_STAR_3_DIALOG: - gCurrentObject->oToadMessageDialogId = TOAD_STAR_3_DIALOG_AFTER; - bhv_spawn_star_no_level_exit(2); + gCurrentObject->oToadMessageDialogID = TOAD_STAR_3_DIALOG_AFTER; + bhv_spawn_star_no_level_exit(STAR_INDEX_ACT_3); break; } } @@ -182,31 +182,32 @@ void bhv_toad_message_loop(void) { void bhv_toad_message_init(void) { s32 saveFlags = save_file_get_flags(); s32 starCount = save_file_get_total_star_count(gCurrSaveFileNum - 1, COURSE_MIN - 1, COURSE_MAX - 1); - s32 dialogId = (gCurrentObject->oBehParams >> 24) & 0xFF; + s32 dialogID = (gCurrentObject->oBhvParams >> 24) & 0xFF; s32 enoughStars = TRUE; - switch (dialogId) { + switch (dialogID) { case TOAD_STAR_1_DIALOG: enoughStars = (starCount >= TOAD_STAR_1_REQUIREMENT); if (saveFlags & SAVE_FLAG_COLLECTED_TOAD_STAR_1) { - dialogId = TOAD_STAR_1_DIALOG_AFTER; + dialogID = TOAD_STAR_1_DIALOG_AFTER; } break; case TOAD_STAR_2_DIALOG: enoughStars = (starCount >= TOAD_STAR_2_REQUIREMENT); if (saveFlags & SAVE_FLAG_COLLECTED_TOAD_STAR_2) { - dialogId = TOAD_STAR_2_DIALOG_AFTER; + dialogID = TOAD_STAR_2_DIALOG_AFTER; } break; case TOAD_STAR_3_DIALOG: enoughStars = (starCount >= TOAD_STAR_3_REQUIREMENT); if (saveFlags & SAVE_FLAG_COLLECTED_TOAD_STAR_3) { - dialogId = TOAD_STAR_3_DIALOG_AFTER; + dialogID = TOAD_STAR_3_DIALOG_AFTER; } break; } + if (enoughStars) { - gCurrentObject->oToadMessageDialogId = dialogId; + gCurrentObject->oToadMessageDialogID = dialogID; gCurrentObject->oToadMessageRecentlyTalked = FALSE; gCurrentObject->oToadMessageState = TOAD_MESSAGE_FADED; gCurrentObject->oOpacity = 81; @@ -644,5 +645,6 @@ Gfx *geo_mirror_mario_backface_culling(s32 callContext, struct GraphNode *node, } asGenerated->fnNode.node.flags = (asGenerated->fnNode.node.flags & 0xFF) | (LAYER_OPAQUE << 8); } + return gfx; } diff --git a/src/game/mario_step.c b/src/game/mario_step.c index c3da0cbb..9f442fc4 100644 --- a/src/game/mario_step.c +++ b/src/game/mario_step.c @@ -552,7 +552,7 @@ void apply_gravity(struct MarioState *m) { m->vel[1] = -65.0f; } } else if (m->action == ACT_GETTING_BLOWN) { - m->vel[1] -= m->unkC4; + m->vel[1] -= m->gettingBlownGravity; if (m->vel[1] < -75.0f) { m->vel[1] = -75.0f; } diff --git a/src/game/memory.c b/src/game/memory.c index dcc9223d..0d081568 100644 --- a/src/game/memory.c +++ b/src/game/memory.c @@ -4,13 +4,14 @@ #define INCLUDED_FROM_MEMORY_C +#include "buffers/zbuffer.h" #include "buffers/buffers.h" #include "decompress.h" #include "game_init.h" #include "main.h" #include "memory.h" -#include "segment_symbols.h" #include "segments.h" +#include "segment_symbols.h" // round up to the next multiple #define ALIGN4(val) (((val) + 0x3) & ~0x3) @@ -40,6 +41,7 @@ struct MemoryPool { struct MemoryBlock freeList; }; +// Double declared to preserve US bss ordering. extern uintptr_t sSegmentTable[32]; extern u32 sPoolFreeSpace; extern u8 *sPoolStart; @@ -54,13 +56,12 @@ extern struct MainPoolBlock *sPoolListHeadR; */ struct MemoryPool *gEffectsMemoryPool; -uintptr_t sSegmentTable[32]; -u32 sPoolFreeSpace; -u8 *sPoolStart; -u8 *sPoolEnd; -struct MainPoolBlock *sPoolListHeadL; -struct MainPoolBlock *sPoolListHeadR; - +FORCE_BSS uintptr_t sSegmentTable[32]; +FORCE_BSS u32 sPoolFreeSpace; +FORCE_BSS u8 *sPoolStart; +FORCE_BSS u8 *sPoolEnd; +FORCE_BSS struct MainPoolBlock *sPoolListHeadL; +FORCE_BSS struct MainPoolBlock *sPoolListHeadR; static struct MainPoolState *gMainPoolState = NULL; @@ -112,8 +113,12 @@ void move_segment_table_to_dmem(void) { * that grow inward from the left and right. It therefore only supports * freeing the object that was most recently allocated from a side. */ -void main_pool_init(void *start, void *end) { +void main_pool_init(UNUSED_CN void *start, void *end) { +#if defined(VERSION_CN) && !defined(USE_EXT_RAM) + sPoolStart = (u8 *) ALIGN16((uintptr_t) &gZBufferEnd) + 16; +#else sPoolStart = (u8 *) ALIGN16((uintptr_t) start) + 16; +#endif sPoolEnd = (u8 *) ALIGN16((uintptr_t) end - 15) - 16; sPoolFreeSpace = sPoolEnd - sPoolStart; @@ -332,7 +337,10 @@ void *load_segment_decompress(s32 segment, u8 *srcStart, u8 *srcEnd) { dma_read(compressed, srcStart, srcEnd); dest = main_pool_alloc(*size, MEMORY_POOL_LEFT); if (dest != NULL) { + CN_DEBUG_PRINTF(("start decompress\n")); decompress(compressed, dest); + CN_DEBUG_PRINTF(("end decompress\n")); + set_segment_base_addr(segment, dest); main_pool_free(compressed); } else { @@ -481,7 +489,7 @@ void *mem_pool_alloc(struct MemoryPool *pool, u32 size) { /** * Free a block that was allocated using mem_pool_alloc. */ -void mem_pool_free(struct MemoryPool *pool, void *addr) { +BAD_RETURN(s32) mem_pool_free(struct MemoryPool *pool, void *addr) { struct MemoryBlock *block = (struct MemoryBlock *) ((u8 *) addr - sizeof(struct MemoryBlock)); struct MemoryBlock *freeList = pool->freeList.next; @@ -503,21 +511,25 @@ void mem_pool_free(struct MemoryPool *pool, void *addr) { if (freeList < block && block < freeList->next) { break; } + freeList = freeList->next; } - if ((u8 *) freeList + freeList->size == (u8 *) block) { + + if (block == (struct MemoryBlock *) ((u8 *) freeList + freeList->size)) { freeList->size += block->size; block = freeList; } else { block->next = freeList->next; freeList->next = block; } + if (block->next != NULL && (u8 *) block->next == (u8 *) block + block->size) { block->size = block->size + block->next->size; block->next = block->next->next; } } } + // nothing is returned, but must have non-void return type for render_text_labels to match on iQue } void *alloc_display_list(u32 size) { @@ -535,7 +547,7 @@ void *alloc_display_list(u32 size) { static struct DmaTable *load_dma_table_address(u8 *srcAddr) { struct DmaTable *table = dynamic_dma_read(srcAddr, srcAddr + sizeof(u32), MEMORY_POOL_LEFT); - u32 size = table->count * sizeof(struct OffsetSizePair) + + u32 size = table->count * sizeof(struct OffsetSizePair) + sizeof(struct DmaTable) - sizeof(struct OffsetSizePair); main_pool_free(table); @@ -560,7 +572,7 @@ s32 load_patchable_table(struct DmaHandlerList *list, s32 index) { u8 *addr = table->srcAddr + table->anim[index].offset; s32 size = table->anim[index].size; - if (list->currentAddr != addr) { + if (addr != list->currentAddr) { dma_read(list->bufTarget, addr, addr + size); list->currentAddr = addr; ret = TRUE; diff --git a/src/game/memory.h b/src/game/memory.h index 0d958b8e..6bf3ca23 100644 --- a/src/game/memory.h +++ b/src/game/memory.h @@ -75,7 +75,7 @@ struct AllocOnlyPool *alloc_only_pool_resize(struct AllocOnlyPool *pool, u32 siz struct MemoryPool *mem_pool_init(u32 size, u32 side); void *mem_pool_alloc(struct MemoryPool *pool, u32 size); -void mem_pool_free(struct MemoryPool *pool, void *addr); +BAD_RETURN(s32) mem_pool_free(struct MemoryPool *pool, void *addr); void *alloc_display_list(u32 size); void setup_dma_table_list(struct DmaHandlerList *list, void *srcAddr, void *buffer); diff --git a/src/game/moving_texture.c b/src/game/moving_texture.c index 175b854a..86ffa2b7 100644 --- a/src/game/moving_texture.c +++ b/src/game/moving_texture.c @@ -118,7 +118,7 @@ s8 gMovtexVtxColor = MOVTEX_VTX_COLOR_DEFAULT; float gPaintingMarioYEntry = 0.0f; /// Variable to ensure the initial Wet-Dry World water level is set only once -s32 gWdwWaterLevelSet = FALSE; +s32 gWDWWaterLevelSet = FALSE; extern u8 ssl_quicksand[]; extern u8 ssl_pyramid_sand[]; @@ -243,7 +243,7 @@ struct MovtexObject gMovtexNonColored[] = { { MOVTEX_COTMC_WATER, TEXTURE_WATER, 14, cotmc_movtex_tris_water, cotmc_dl_water_begin, cotmc_dl_water_end, cotmc_dl_water, 0xff, 0xff, 0xff, 0xb4, LAYER_TRANSPARENT_INTER }, - // Tall Tall mountain has water going from the top to the bottom of the mountain. + // Tall, Tall mountain has water going from the top to the bottom of the mountain. { MOVTEX_TTM_BEGIN_WATERFALL, TEXTURE_WATER, 6, ttm_movtex_tris_begin_waterfall, dl_waterbox_rgba16_begin, dl_waterbox_end, ttm_dl_waterfall, 0xff, 0xff, 0xff, 0xb4, LAYER_TRANSPARENT }, @@ -308,9 +308,9 @@ Gfx *geo_wdw_set_initial_water_level(s32 callContext, UNUSED struct GraphNode *n // Why was this global variable needed when they could just check for GEO_CONTEXT_AREA_LOAD? if (callContext != GEO_CONTEXT_RENDER) { - gWdwWaterLevelSet = FALSE; + gWDWWaterLevelSet = FALSE; } else if (callContext == GEO_CONTEXT_RENDER && gEnvironmentRegions != NULL - && !gWdwWaterLevelSet) { + && !gWDWWaterLevelSet) { if (gPaintingMarioYEntry <= 1382.4) { wdwWaterHeight = 31; } else if (gPaintingMarioYEntry >= 1600.0) { @@ -321,7 +321,7 @@ Gfx *geo_wdw_set_initial_water_level(s32 callContext, UNUSED struct GraphNode *n for (i = 0; i < *gEnvironmentRegions; i++) { gEnvironmentRegions[i * 6 + 6] = wdwWaterHeight; } - gWdwWaterLevelSet = TRUE; + gWDWWaterLevelSet = TRUE; } return NULL; } @@ -670,8 +670,9 @@ Gfx *geo_movtex_draw_water_regions(s32 callContext, struct GraphNode *node, UNUS waterId = gEnvironmentRegions[i * 6 + 1]; waterY = gEnvironmentRegions[i * 6 + 6]; subList = movtex_gen_quads_id(waterId, waterY, quadCollection); - if (subList != NULL) + if (subList != NULL) { gSPDisplayList(gfx++, VIRTUAL_TO_PHYSICAL(subList)); + } } gSPDisplayList(gfx++, dl_waterbox_end); gSPEndDisplayList(gfx); diff --git a/src/game/obj_behaviors.c b/src/game/obj_behaviors.c index 68c78e23..d2a45c97 100644 --- a/src/game/obj_behaviors.c +++ b/src/game/obj_behaviors.c @@ -100,7 +100,6 @@ Gfx UNUSED *geo_obj_transparency_something(s32 callContext, struct GraphNode *no obj = (struct Object *) node; unusedObject = (struct Object *) node; - if (gCurGraphNodeHeldObject != NULL) { heldObject = gCurGraphNodeHeldObject->objNode; } @@ -753,14 +752,14 @@ s8 obj_lava_death(void) { /** * Spawns an orange number object relatively, such as those that count up for secrets. */ -void spawn_orange_number(s8 behParam, s16 relX, s16 relY, s16 relZ) { +void spawn_orange_number(s8 bhvParam, s16 relX, s16 relY, s16 relZ) { struct Object *orangeNumber; - if (behParam >= 10) { + if (bhvParam >= 10) { return; } - orangeNumber = spawn_object_relative(behParam, relX, relY, relZ, o, MODEL_NUMBER, bhvOrangeNumber); + orangeNumber = spawn_object_relative(bhvParam, relX, relY, relZ, o, MODEL_NUMBER, bhvOrangeNumber); orangeNumber->oPosY += 25.0f; } diff --git a/src/game/obj_behaviors.h b/src/game/obj_behaviors.h index 9755984f..f4442189 100644 --- a/src/game/obj_behaviors.h +++ b/src/game/obj_behaviors.h @@ -160,6 +160,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); -void spawn_default_star(f32 sp20, f32 sp24, f32 sp28); +void spawn_default_star(f32 homeX, f32 homeY, f32 homeZ); #endif // OBJ_BEHAVIORS_H diff --git a/src/game/obj_behaviors_2.c b/src/game/obj_behaviors_2.c index 3715a137..f6149218 100644 --- a/src/game/obj_behaviors_2.c +++ b/src/game/obj_behaviors_2.c @@ -70,7 +70,6 @@ extern struct Object *sMasterTreadmill; */ struct Object *sMasterTreadmill; - f32 sObjSavedPosX; f32 sObjSavedPosY; f32 sObjSavedPosZ; @@ -159,7 +158,7 @@ static void platform_on_track_update_pos_or_spawn_ball(s32 ballIndex, f32 x, f32 f32 dz; f32 distToNextWaypoint; - if (ballIndex == 0 || ((u16)(o->oBehParams >> 16) & 0x0080)) { + if (ballIndex == 0 || ((u16)(o->oBhvParams >> 16) & 0x0080)) { initialPrevWaypoint = o->oPlatformOnTrackPrevWaypoint; nextWaypoint = initialPrevWaypoint; @@ -180,7 +179,7 @@ static void platform_on_track_update_pos_or_spawn_ball(s32 ballIndex, f32 x, f32 o->oPlatformOnTrackPrevWaypointFlags = WAYPOINT_FLAGS_END; } - if (((u16)(o->oBehParams >> 16) & PLATFORM_ON_TRACK_BP_RETURN_TO_START)) { + if (((u16)(o->oBhvParams >> 16) & PLATFORM_ON_TRACK_BP_RETURN_TO_START)) { nextWaypoint = o->oPlatformOnTrackStartWaypoint; } else { return; @@ -625,8 +624,8 @@ static void obj_die_if_health_non_positive(void) { spawn_mist_particles(); } - if ((s32)o->oNumLootCoins < 0) { - spawn_object(o, MODEL_BLUE_COIN, bhvMrIBlueCoin); + if (o->oNumLootCoins < 0) { + spawn_object(o, MODEL_BLUE_COIN, bhvSpawnedBlueCoin); } else { obj_spawn_loot_yellow_coins(o, o->oNumLootCoins, 20.0f); } @@ -787,7 +786,7 @@ static void obj_act_squished(f32 baseScale) { if (approach_f32_ptr(&o->header.gfx.scale[1], targetScaleY, baseScale * 0.14f)) { o->header.gfx.scale[0] = o->header.gfx.scale[2] = baseScale * 2.0f - o->header.gfx.scale[1]; - if (o->oTimer >= 16) { + if (o->oTimer > 15) { obj_die_if_health_non_positive(); } } diff --git a/src/game/object_helpers.c b/src/game/object_helpers.c index 338d5263..54cf24f4 100644 --- a/src/game/object_helpers.c +++ b/src/game/object_helpers.c @@ -27,7 +27,7 @@ #include "spawn_object.h" #include "spawn_sound.h" -static s8 sBbhStairJiggleOffsets[] = { -8, 8, -4, 4 }; +static s8 sBBHStairJiggleOffsets[] = { -8, 8, -4, 4 }; static s16 sPowersOfTwo[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }; static s8 sLevelsWithRooms[] = { LEVEL_BBH, LEVEL_CASTLE, LEVEL_HMC, -1 }; @@ -36,17 +36,16 @@ static s32 clear_move_flag(u32 *, s32); #define o gCurrentObject Gfx *geo_update_projectile_pos_from_parent(s32 callContext, UNUSED struct GraphNode *node, Mat4 mtx) { - Mat4 sp20; - struct Object *sp1C; - if (callContext == GEO_CONTEXT_RENDER) { - sp1C = (struct Object *) gCurGraphNodeObject; // TODO: change global type to Object pointer - if (sp1C->prevObj) { + Mat4 sp20; + struct Object *obj = (struct Object *) gCurGraphNodeObject; // TODO: change global type to Object pointer + if (obj->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); + obj_update_pos_from_parent_transformation(sp20, obj->prevObj); + obj_set_gfx_pos_from_pos(obj->prevObj); } } + return NULL; } @@ -134,10 +133,11 @@ Gfx *geo_update_layer_transparency(s32 callContext, struct GraphNode *node, UNUS * o32 calling convention. */ #ifdef AVOID_UB -Gfx *geo_switch_anim_state(s32 callContext, struct GraphNode *node, UNUSED void *context) { +Gfx *geo_switch_anim_state(s32 callContext, struct GraphNode *node, UNUSED void *context) #else -Gfx *geo_switch_anim_state(s32 callContext, struct GraphNode *node) { +Gfx *geo_switch_anim_state(s32 callContext, struct GraphNode *node) #endif +{ struct Object *obj; struct GraphNodeSwitchCase *switchCase; @@ -167,10 +167,11 @@ Gfx *geo_switch_anim_state(s32 callContext, struct GraphNode *node) { //! @bug Same issue as geo_switch_anim_state. #ifdef AVOID_UB -Gfx *geo_switch_area(s32 callContext, struct GraphNode *node, UNUSED void *context) { +Gfx *geo_switch_area(s32 callContext, struct GraphNode *node, UNUSED void *context) #else -Gfx *geo_switch_area(s32 callContext, struct GraphNode *node) { +Gfx *geo_switch_area(s32 callContext, struct GraphNode *node) #endif +{ s16 sp26; struct Surface *sp20; UNUSED struct Object *sp1C = @@ -257,9 +258,9 @@ void create_transformation_from_matrices(Mat4 a0, Mat4 a1, Mat4 a2) { a0[3][1] = a1[3][0] * a2[1][0] + a1[3][1] * a2[1][1] + a1[3][2] * a2[1][2] - sp8; a0[3][2] = a1[3][0] * a2[2][0] + a1[3][1] * a2[2][1] + a1[3][2] * a2[2][2] - sp4; - a0[0][3] = 0; - a0[1][3] = 0; - a0[2][3] = 0; + a0[0][3] = 0.0f; + a0[1][3] = 0.0f; + a0[2][3] = 0.0f; a0[3][3] = 1.0f; } @@ -583,8 +584,8 @@ struct Object *spawn_object_relative(s16 behaviorParam, s16 relativePosX, s16 re obj_set_parent_relative_pos(obj, relativePosX, relativePosY, relativePosZ); obj_build_relative_transform(obj); - obj->oBehParams2ndByte = behaviorParam; - obj->oBehParams = (behaviorParam & 0xFF) << 16; + obj->oBhvParams2ndByte = behaviorParam; + obj->oBhvParams = (behaviorParam & 0xFF) << 16; return obj; } @@ -732,8 +733,8 @@ void cur_obj_init_animation_with_accel_and_sound(s32 animIndex, f32 accel) { } void obj_init_animation_with_sound(struct Object *obj, const struct Animation * const* animations, s32 animIndex) { - struct Animation **anims = (struct Animation **)animations; - obj->oAnimations = (struct Animation **)animations; + struct Animation **anims = (struct Animation **) animations; + obj->oAnimations = (struct Animation **) animations; geo_obj_init_animation(&obj->header.gfx, &anims[animIndex]); obj->oSoundStateID = animIndex; } @@ -907,13 +908,9 @@ s32 count_objects_with_behavior(const BehaviorScript *behavior) { 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; - struct Object *foundObj; - - listHead = &gObjectLists[OBJ_LIST_GENACTOR]; - obj = (struct Object *) listHead->next; - foundObj = NULL; + struct ObjectNode *listHead = &gObjectLists[OBJ_LIST_GENACTOR]; + struct Object *obj = (struct Object *) listHead->next; + struct Object *foundObj = NULL; while ((struct Object *) listHead != obj) { if (obj->behavior == behaviorAddr) { @@ -946,14 +943,14 @@ void cur_obj_change_action(s32 action) { cur_obj_reset_timer_and_subaction(); } -void cur_obj_set_vel_from_mario_vel(f32 f12, f32 f14) { - f32 sp4 = gMarioStates[0].forwardVel; - f32 sp0 = f12 * f14; +void cur_obj_set_vel_from_mario_vel(f32 objBaseForwardVel, f32 multiplier) { + f32 marioForwardVel = gMarioStates[0].forwardVel; + f32 objForwardVel = objBaseForwardVel * multiplier; - if (sp4 < sp0) { - o->oForwardVel = sp0; + if (marioForwardVel < objForwardVel) { + o->oForwardVel = objForwardVel; } else { - o->oForwardVel = sp4 * f14; + o->oForwardVel = marioForwardVel * multiplier; } } @@ -964,10 +961,12 @@ BAD_RETURN(s16) cur_obj_reverse_animation(void) { } BAD_RETURN(s32) cur_obj_extend_animation_if_at_end(void) { - s32 sp4 = o->header.gfx.animInfo.animFrame; + s32 animFrame = o->header.gfx.animInfo.animFrame; s32 sp0 = o->header.gfx.animInfo.curAnim->loopEnd - 2; - if (sp4 == sp0) o->header.gfx.animInfo.animFrame--; + if (animFrame == sp0) { + o->header.gfx.animInfo.animFrame--; + } } s32 cur_obj_check_if_near_animation_end(void) { @@ -1056,7 +1055,7 @@ void cur_obj_set_y_vel_and_animation(f32 yVel, s32 animIndex) { void cur_obj_unrender_set_action_and_anim(s32 animIndex, s32 action) { cur_obj_become_intangible(); cur_obj_disable_rendering(); - + // only set animation if non-negative value if (animIndex >= 0) { cur_obj_init_animation_with_sound(animIndex); @@ -1549,8 +1548,8 @@ void cur_obj_set_pos_to_home(void) { void cur_obj_set_pos_to_home_and_stop(void) { cur_obj_set_pos_to_home(); - o->oForwardVel = 0; - o->oVelY = 0; + o->oForwardVel = 0.0f; + o->oVelY = 0.0f; } void cur_obj_shake_y(f32 amount) { @@ -1588,7 +1587,7 @@ void cur_obj_set_hurtbox_radius_and_height(f32 radius, f32 height) { o->hurtboxHeight = height; } -static void obj_spawn_loot_coins(struct Object *obj, s32 numCoins, f32 sp30, +static void obj_spawn_loot_coins(struct Object *obj, s32 numCoins, f32 baseVelY, const BehaviorScript *coinBehavior, s16 posJitter, s16 model) { s32 i; @@ -1611,16 +1610,16 @@ static void obj_spawn_loot_coins(struct Object *obj, s32 numCoins, f32 sp30, coin = spawn_object(obj, model, coinBehavior); obj_translate_xz_random(coin, posJitter); coin->oPosY = spawnHeight; - coin->oCoinUnk110 = sp30; + coin->oCoinBaseVelY = baseVelY; } } -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 obj_spawn_loot_blue_coins(struct Object *obj, s32 numCoins, f32 baseVelY, s16 posJitter) { + obj_spawn_loot_coins(obj, numCoins, baseVelY, bhvBlueCoinJumping, posJitter, MODEL_BLUE_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_yellow_coins(struct Object *obj, s32 numCoins, f32 baseVelY) { + obj_spawn_loot_coins(obj, numCoins, baseVelY, bhvSingleCoinGetsSpawned, 0, MODEL_YELLOW_COIN); } void cur_obj_spawn_loot_coin_at_mario_pos(void) { @@ -2105,7 +2104,7 @@ void cur_obj_spawn_particles(struct SpawnParticlesInfo *info) { particle = spawn_object(o, info->model, bhvWhitePuffExplosion); - particle->oBehParams2ndByte = info->behParam; + particle->oBhvParams2ndByte = info->bhvParam; particle->oMoveAngleYaw = random_u16(); particle->oGravity = info->gravity; particle->oDragStrength = info->dragStrength; @@ -2193,9 +2192,9 @@ void spawn_mist_particles(void) { spawn_mist_particles_variable(0, 0, 46.0f); } -void spawn_mist_particles_with_sound(u32 sp18) { +void spawn_mist_particles_with_sound(u32 soundMagic) { spawn_mist_particles_variable(0, 0, 46.0f); - create_sound_spawner(sp18); + create_sound_spawner(soundMagic); } void cur_obj_push_mario_away(f32 radius) { @@ -2238,30 +2237,30 @@ void bhv_dust_smoke_loop(void) { UNUSED static void stub_obj_helpers_2(void) { } -s32 cur_obj_set_direction_table(s8 *a0) { - o->oToxBoxMovementPattern = a0; - o->oToxBoxMovementStep = 0; +s32 cur_obj_set_action_table(s8 *actionTable) { + o->oToxBoxActionTable = actionTable; + o->oToxBoxActionStep = 0; - return *(s8 *) o->oToxBoxMovementPattern; + return *(s8 *) o->oToxBoxActionTable; } -s32 cur_obj_progress_direction_table(void) { - s8 spF; - s8 *sp8 = o->oToxBoxMovementPattern; - s32 sp4 = o->oToxBoxMovementStep + 1; +s32 cur_obj_progress_action_table(void) { + s8 nextAction; + s8 *actionTable = o->oToxBoxActionTable; + s32 nextActionIndex = o->oToxBoxActionStep + 1; - if (sp8[sp4] != -1) { - spF = sp8[sp4]; - o->oToxBoxMovementStep++; + if (actionTable[nextActionIndex] != TOX_BOX_ACT_TABLE_END) { + nextAction = actionTable[nextActionIndex]; + o->oToxBoxActionStep++; } else { - spF = sp8[0]; - o->oToxBoxMovementStep = 0; + nextAction = actionTable[0]; + o->oToxBoxActionStep = 0; } - return spF; + return nextAction; } -void stub_obj_helpers_3(UNUSED s32 sp0, UNUSED s32 sp4) { +void stub_obj_helpers_3(UNUSED s32 arg0, UNUSED s32 arg1) { } void cur_obj_scale_over_time(s32 a0, s32 a1, f32 sp10, f32 sp14) { @@ -2318,7 +2317,7 @@ s32 jiggle_bbh_stair(s32 a0) { return TRUE; } - o->oPosY += sBbhStairJiggleOffsets[a0]; + o->oPosY += sBBHStairJiggleOffsets[a0]; return FALSE; } @@ -2330,8 +2329,8 @@ void cur_obj_call_action_function(void (*actionFunctions[])(void)) { 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; - sp1C->oBehParams2ndByte = sp20; + sp1C->oBhvParams = o->oBhvParams; + sp1C->oBhvParams2ndByte = sp20; return sp1C; } @@ -2461,9 +2460,8 @@ s32 cur_obj_set_hitbox_and_die_if_attacked(struct ObjectHitbox *hitbox, s32 deat return interacted; } - -void obj_explode_and_spawn_coins(f32 sp18, s32 sp1C) { - spawn_mist_particles_variable(0, 0, sp18); +void obj_explode_and_spawn_coins(f32 mistParticleSize, s32 sp1C) { + spawn_mist_particles_variable(0, 0, mistParticleSize); spawn_triangle_break_particles(30, MODEL_DIRT_ANIMATION, 3.0f, 4); obj_mark_for_deletion(o); @@ -2824,8 +2822,8 @@ s32 cur_obj_was_attacked_or_ground_pounded(void) { } void obj_copy_behavior_params(struct Object *dst, struct Object *src) { - dst->oBehParams = src->oBehParams; - dst->oBehParams2ndByte = src->oBehParams2ndByte; + dst->oBhvParams = src->oBhvParams; + dst->oBhvParams2ndByte = src->oBhvParams2ndByte; } void cur_obj_init_animation_and_anim_frame(s32 animIndex, s32 animFrame) { @@ -2900,7 +2898,7 @@ s32 cur_obj_check_interacted(void) { void cur_obj_spawn_loot_blue_coin(void) { if (o->oNumLootCoins >= 5) { - spawn_object(o, MODEL_BLUE_COIN, bhvMrIBlueCoin); + spawn_object(o, MODEL_BLUE_COIN, bhvSpawnedBlueCoin); o->oNumLootCoins -= 5; } } diff --git a/src/game/object_helpers.h b/src/game/object_helpers.h index fcd985b4..187468a6 100644 --- a/src/game/object_helpers.h +++ b/src/game/object_helpers.h @@ -49,7 +49,7 @@ struct Struct802A272C { }; struct SpawnParticlesInfo { - /*0x00*/ s8 behParam; + /*0x00*/ s8 bhvParam; /*0x01*/ s8 count; /*0x02*/ u8 model; /*0x03*/ s8 offsetY; @@ -139,7 +139,7 @@ s32 count_unimportant_objects(void); s32 count_objects_with_behavior(const BehaviorScript *behavior); struct Object *cur_obj_find_nearby_held_actor(const BehaviorScript *behavior, f32 maxDist); void cur_obj_change_action(s32 action); -void cur_obj_set_vel_from_mario_vel(f32 f12,f32 f14); +void cur_obj_set_vel_from_mario_vel(f32 objBaseForwardVel, f32 multiplier); BAD_RETURN(s16) cur_obj_reverse_animation(void); BAD_RETURN(s32) cur_obj_extend_animation_if_at_end(void); s32 cur_obj_check_if_near_animation_end(void); @@ -182,12 +182,12 @@ void cur_obj_set_pos_to_home(void); void cur_obj_set_pos_to_home_and_stop(void); void cur_obj_shake_y(f32 amount); void cur_obj_start_cam_event(UNUSED struct Object *obj, s32 cameraEvent); -void set_mario_interact_true_if_in_range(UNUSED s32 sp0, UNUSED s32 sp4, f32 sp8); +void set_mario_interact_true_if_in_range(UNUSED s32 arg0, UNUSED s32 arg1, f32 range); void obj_set_billboard(struct Object *obj); void cur_obj_set_hitbox_radius_and_height(f32 radius, f32 height); void cur_obj_set_hurtbox_radius_and_height(f32 radius, f32 height); -void obj_spawn_loot_blue_coins(struct Object *obj, s32 numCoins, f32 sp28, s16 posJitter); -void obj_spawn_loot_yellow_coins(struct Object *obj, s32 numCoins, f32 sp28); +void obj_spawn_loot_blue_coins(struct Object *obj, s32 numCoins, f32 baseVelY, s16 posJitter); +void obj_spawn_loot_yellow_coins(struct Object *obj, s32 numCoins, f32 baseVelY); void cur_obj_spawn_loot_coin_at_mario_pos(void); s32 cur_obj_advance_looping_anim(void); s32 cur_obj_resolve_wall_collisions(void); @@ -229,12 +229,12 @@ s32 absi(s32 a0); s32 cur_obj_wait_then_blink(s32 timeUntilBlinking, s32 numBlinks); s32 cur_obj_is_mario_ground_pounding_platform(void); void spawn_mist_particles(void); -void spawn_mist_particles_with_sound(u32 sp18); +void spawn_mist_particles_with_sound(u32 soundMagic); void cur_obj_push_mario_away(f32 radius); void cur_obj_push_mario_away_from_cylinder(f32 radius, f32 extentY); -s32 cur_obj_set_direction_table(s8 *a0); -s32 cur_obj_progress_direction_table(void); -void stub_obj_helpers_3(UNUSED s32 sp0, UNUSED s32 sp4); +s32 cur_obj_set_action_table(s8 *actionTable); +s32 cur_obj_progress_action_table(void); +void stub_obj_helpers_3(UNUSED s32 arg0, UNUSED s32 arg1); void cur_obj_scale_over_time(s32 a0, s32 a1, f32 sp10, f32 sp14); void cur_obj_set_pos_to_home_with_debug(void); s32 cur_obj_is_mario_on_platform(void); @@ -247,7 +247,7 @@ s32 is_mario_moving_fast_or_in_air(s32 speedThreshold); s32 is_item_in_array(s8 item, s8 *array); void cur_obj_enable_rendering_if_mario_in_room(void); s32 cur_obj_set_hitbox_and_die_if_attacked(struct ObjectHitbox *hitbox, s32 deathSound, s32 noLootCoins); -void obj_explode_and_spawn_coins(f32 sp18, s32 sp1C); +void obj_explode_and_spawn_coins(f32 mistParticleSize, s32 sp1C); void obj_set_collision_data(struct Object *obj, const void *segAddr); void cur_obj_if_hit_wall_bounce_away(void); s32 cur_obj_hide_if_mario_far_away_y(f32 distY); diff --git a/src/game/object_list_processor.c b/src/game/object_list_processor.c index 80a49fb6..a2590a22 100644 --- a/src/game/object_list_processor.c +++ b/src/game/object_list_processor.c @@ -146,9 +146,9 @@ struct MemoryPool *gObjectMemoryPool; s16 gCheckingSurfaceCollisionsForCamera; s16 gFindFloorIncludeSurfaceIntangible; -s16 *gEnvironmentRegions; +TerrainData *gEnvironmentRegions; s32 gEnvironmentLevels[20]; -s8 gDoorAdjacentRooms[60][2]; +RoomData gDoorAdjacentRooms[60][2]; s16 gMarioCurrentRoom; s16 D_8035FEE2; s16 D_8035FEE4; @@ -483,10 +483,10 @@ void spawn_objects_from_info(UNUSED s32 unused, struct SpawnInfo *spawnInfo) { // Behavior parameters are often treated as four separate bytes, but // are stored as an s32. - object->oBehParams = spawnInfo->behaviorArg; + object->oBhvParams = spawnInfo->behaviorArg; // The second byte of the behavior parameters is copied over to a special field // as it is the most frequently used by objects. - object->oBehParams2ndByte = ((spawnInfo->behaviorArg) >> 16) & 0xFF; + object->oBhvParams2ndByte = ((spawnInfo->behaviorArg) >> 16) & 0xFF; object->behavior = script; object->unused1 = 0; diff --git a/src/game/object_list_processor.h b/src/game/object_list_processor.h index aed11fb9..5bea549f 100644 --- a/src/game/object_list_processor.h +++ b/src/game/object_list_processor.h @@ -99,9 +99,9 @@ extern struct MemoryPool *gObjectMemoryPool; extern s16 gCheckingSurfaceCollisionsForCamera; extern s16 gFindFloorIncludeSurfaceIntangible; -extern s16 *gEnvironmentRegions; +extern TerrainData *gEnvironmentRegions; extern s32 gEnvironmentLevels[20]; -extern s8 gDoorAdjacentRooms[60][2]; +extern RoomData gDoorAdjacentRooms[60][2]; extern s16 gMarioCurrentRoom; extern s16 D_8035FEE2; extern s16 D_8035FEE4; diff --git a/src/game/paintings.c b/src/game/paintings.c index 481db8f3..08706d9a 100644 --- a/src/game/paintings.c +++ b/src/game/paintings.c @@ -162,9 +162,9 @@ struct Painting *gRipplingPainting; /** * Whether the DDD painting is moved forward, should being moving backwards, or has already moved backwards. */ -s8 gDddPaintingStatus; +s8 gDDDPaintingStatus; -struct Painting *sHmcPaintings[] = { +struct Painting *sHMCPaintings[] = { &cotmc_painting, NULL, }; @@ -175,15 +175,15 @@ struct Painting *sInsideCastlePaintings[] = { &ttm_painting, &ttc_painting, &sl_painting, &thi_huge_painting, NULL, }; -struct Painting *sTtmPaintings[] = { +struct Painting *sTTMPaintings[] = { &ttm_slide_painting, NULL, }; struct Painting **sPaintingGroups[] = { - sHmcPaintings, + sHMCPaintings, sInsideCastlePaintings, - sTtmPaintings, + sTTMPaintings, }; s16 gPaintingUpdateCounter = 1; @@ -1102,7 +1102,7 @@ void reset_painting(struct Painting *painting) { * 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: + * 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 @@ -1120,12 +1120,12 @@ void move_ddd_painting(struct Painting *painting, f32 frontPos, f32 backPos, f32 if (!bowsersSubBeaten && !dddBack) { // If we haven't collected the star or moved the painting, put the painting at the front painting->posX = frontPos; - gDddPaintingStatus = 0; + 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; + gDDDPaintingStatus = BOWSERS_SUB_BEATEN; if (painting->posX >= backPos) { painting->posX = backPos; // Tell the save file that we've moved DDD back. @@ -1134,7 +1134,7 @@ void move_ddd_painting(struct Painting *painting, f32 frontPos, f32 backPos, f32 } else if (bowsersSubBeaten && dddBack) { // If the painting has already moved back, place it in the back position. painting->posX = backPos; - gDddPaintingStatus = BOWSERS_SUB_BEATEN | DDD_BACK; + gDDDPaintingStatus = BOWSERS_SUB_BEATEN | DDD_BACK; } } diff --git a/src/game/paintings.h b/src/game/paintings.h index 8c930331..10fcd819 100644 --- a/src/game/paintings.h +++ b/src/game/paintings.h @@ -132,7 +132,7 @@ extern f32 gPaintingMarioZPos; extern struct PaintingMeshVertex *gPaintingMesh; extern Vec3f *gPaintingTriNorms; extern struct Painting *gRipplingPainting; -extern s8 gDddPaintingStatus; +extern s8 gDDDPaintingStatus; Gfx *geo_painting_draw(s32 callContext, struct GraphNode *node, UNUSED void *context); Gfx *geo_painting_update(s32 callContext, UNUSED struct GraphNode *node, UNUSED Mat4 c); diff --git a/src/game/print.c b/src/game/print.c index c804cb4a..d02b39a5 100644 --- a/src/game/print.c +++ b/src/game/print.c @@ -2,6 +2,7 @@ #include #include "config.h" +#include "gfx_dimensions.h" #include "game_init.h" #include "memory.h" #include "print.h" @@ -23,7 +24,7 @@ struct TextLabel { * Stores the text to be rendered on screen * and how they are to be rendered. */ -struct TextLabel *sTextLabels[52]; +FORCE_BSS struct TextLabel *sTextLabels[52]; s16 sTextLabelsCount = 0; /** @@ -98,11 +99,10 @@ void format_integer(s32 n, s32 base, char *dest, s32 *totalLength, u8 width, s8 powBase = int_pow(base, i); digit = n / powBase; - // FIXME: Why doesn't [] match? if (digit < 10) { - *(dest + len + numDigits - 1 - i) = digit + '0'; + *(dest + len + (numDigits - 1) - i) = digit + '0'; } else { - *(dest + len + numDigits - 1 - i) = digit + '7'; + *(dest + len + (numDigits - 1) - i) = digit + '7'; } n -= digit * powBase; @@ -153,7 +153,7 @@ void parse_width_field(const char *str, s32 *srcIndex, u8 *width, s8 *zeroPad) { // Sum the digits to calculate the total width. for (i = 0; i < digitsLen - 1; i++) { - *width = *width + digits[i] * ((digitsLen - i - 1) * 10); + *width = *width + ((digitsLen - i - 1) * 10) * digits[i]; } *width = *width + digits[digitsLen - 1]; @@ -185,7 +185,7 @@ void print_text_fmt_int(s32 x, s32 y, const char *str, s32 n) { c = str[srcIndex]; - while (c != 0) { + while (c != '\0') { if (c == '%') { srcIndex++; @@ -236,7 +236,7 @@ void print_text(s32 x, s32 y, const char *str) { c = str[srcIndex]; // Set the array with the text to print while finding length. - while (c != 0) { + while (c != '\0') { sTextLabels[sTextLabelsCount]->buffer[length] = c; length++; srcIndex++; @@ -256,6 +256,9 @@ void print_text_centered(s32 x, s32 y, const char *str) { UNUSED s32 unused2 = 0; s32 length = 0; s32 srcIndex = 0; +#ifdef VERSION_CN + s32 width = 0; +#endif // Don't continue if there is no memory to do so. if ((sTextLabels[sTextLabelsCount] = mem_pool_alloc(gEffectsMemoryPool, @@ -266,7 +269,14 @@ void print_text_centered(s32 x, s32 y, const char *str) { c = str[srcIndex]; // Set the array with the text to print while finding length. - while (c != 0) { + while (c != '\0') { +#ifdef VERSION_CN + if ((u8) c == 0xB0 || (u8) c == 0xC0) { + width = 16; + } else { + width = 12; + } +#endif sTextLabels[sTextLabelsCount]->buffer[length] = c; length++; srcIndex++; @@ -274,7 +284,11 @@ void print_text_centered(s32 x, s32 y, const char *str) { } sTextLabels[sTextLabelsCount]->length = length; - sTextLabels[sTextLabelsCount]->x = x - length * 12 / 2; +#ifdef VERSION_CN + sTextLabels[sTextLabelsCount]->x = x - width * length / 2; +#else + sTextLabels[sTextLabelsCount]->x = x - 12 * length / 2; +#endif sTextLabels[sTextLabelsCount]->y = y; sTextLabelsCount++; } @@ -353,7 +367,11 @@ void add_glyph_texture(s8 glyphIndex) { const u8 *const *glyphs = segmented_to_virtual(main_hud_lut); gDPPipeSync(gDisplayListHead++); +#ifdef VERSION_CN + gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, glyphs[(u8) glyphIndex]); +#else gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, glyphs[glyphIndex]); +#endif gSPDisplayList(gDisplayListHead++, dl_hud_img_load_tex_block); } @@ -383,8 +401,13 @@ void clip_to_bounds(s32 *x, s32 *y) { /** * Renders the glyph that's set at the given position. */ +#ifdef VERSION_CN +void render_textrect(s32 x, s32 y, s32 pos, s32 width) { + s32 rectBaseX = x + pos * width; +#else void render_textrect(s32 x, s32 y, s32 pos) { s32 rectBaseX = x + pos * 12; +#endif s32 rectBaseY = 224 - y; s32 rectX; s32 rectY; @@ -427,7 +450,19 @@ void render_text_labels(void) { for (i = 0; i < sTextLabelsCount; i++) { for (j = 0; j < sTextLabels[i]->length; j++) { +#ifdef VERSION_CN + if ((u8) sTextLabels[i]->buffer[j] < 0xA0) { + glyphIndex = char_to_glyph_index(sTextLabels[i]->buffer[j]); + } else if ((u8) sTextLabels[i]->buffer[j] == 0xB0) { + glyphIndex = 0xB0; + } else if ((u8) sTextLabels[i]->buffer[j] == 0xC0) { + glyphIndex = 0xC0; + } else { + glyphIndex = GLYPH_SPACE; + } +#else glyphIndex = char_to_glyph_index(sTextLabels[i]->buffer[j]); +#endif if (glyphIndex != GLYPH_SPACE) { #ifdef VERSION_EU @@ -443,6 +478,37 @@ void render_text_labels(void) { add_glyph_texture(glyphIndex); render_textrect(sTextLabels[i]->x, sTextLabels[i]->y, j); } +#elif defined(VERSION_CN) + if ((u8) glyphIndex == 0xB0) { + add_glyph_texture(0x92); + render_textrect(45, 50, 0, 16); + add_glyph_texture(0x93); + render_textrect(45, 50, 1, 16); + add_glyph_texture(0x94); + render_textrect(45, 34, 0, 16); + add_glyph_texture(0x95); + render_textrect(45, 34, 1, 16); + } else if ((u8) glyphIndex == 0xC0) { + add_glyph_texture(0xAE); + render_textrect(GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(150), 193, 0, 16); + add_glyph_texture(0xAF); + render_textrect(GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(150), 193, 1, 16); + add_glyph_texture(0xB0); + render_textrect(GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(150), 177, 0, 16); + add_glyph_texture(0xB1); + render_textrect(GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(150), 177, 1, 16); + add_glyph_texture(0xB2); + render_textrect(GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(150), 193, 2, 16); + add_glyph_texture(0xB3); + render_textrect(GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(150), 193, 3, 16); + add_glyph_texture(0xB4); + render_textrect(GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(150), 177, 2, 16); + add_glyph_texture(0xB5); + render_textrect(GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(150), 177, 3, 16); + } else { + add_glyph_texture(glyphIndex); + render_textrect(sTextLabels[i]->x, sTextLabels[i]->y, j, 12); + } #else add_glyph_texture(glyphIndex); render_textrect(sTextLabels[i]->x, sTextLabels[i]->y, j); diff --git a/src/game/rendering_graph_node.c b/src/game/rendering_graph_node.c index 8ea0d399..23430689 100644 --- a/src/game/rendering_graph_node.c +++ b/src/game/rendering_graph_node.c @@ -455,12 +455,15 @@ static void geo_process_billboard(struct GraphNodeBillboard *node) { mtxf_to_mtx(mtx, gMatStack[gMatStackIndex]); gMatStackFixed[gMatStackIndex] = mtx; + if (node->displayList != NULL) { geo_append_display_list(node->displayList, node->node.flags >> 8); } + if (node->node.children != NULL) { geo_process_node_and_siblings(node->node.children); } + gMatStackIndex--; } @@ -704,6 +707,7 @@ static void geo_process_shadow(struct GraphNodeShadow *node) { gMatStackIndex--; } } + if (node->node.children != NULL) { geo_process_node_and_siblings(node->node.children); } diff --git a/src/game/rumble_init.c b/src/game/rumble_init.c index 6c89f86f..d9fb4619 100644 --- a/src/game/rumble_init.c +++ b/src/game/rumble_init.c @@ -1,39 +1,34 @@ +#include "config.h" + +#if ENABLE_RUMBLE + #include +#include #include "macros.h" #include "buffers/buffers.h" #include "main.h" #include "rumble_init.h" -#include "config.h" -#if ENABLE_RUMBLE +FORCE_BSS OSThread gRumblePakThread; -OSThread gRumblePakThread; +FORCE_BSS OSPfs gRumblePakPfs; -s32 gRumblePakPfs; // Actually an OSPfs but we don't have that header yet +FORCE_BSS OSMesg gRumblePakSchedulerMesgBuf; +FORCE_BSS OSMesgQueue gRumblePakSchedulerMesgQueue; +FORCE_BSS OSMesg gRumbleThreadVIMesgBuf; +FORCE_BSS OSMesgQueue gRumbleThreadVIMesgQueue; -s8 D_SH_8031D8F8[0x60]; - -OSMesg gRumblePakSchedulerMesgBuf[1]; -OSMesgQueue gRumblePakSchedulerMesgQueue; -OSMesg gRumbleThreadVIMesgBuf[1]; -OSMesgQueue gRumbleThreadVIMesgQueue; - -struct RumbleData gRumbleDataQueue[3]; -struct StructSH8031D9B0 gCurrRumbleSettings; +FORCE_BSS struct RumbleData gRumbleDataQueue[3]; +FORCE_BSS struct StructSH8031D9B0 gCurrRumbleSettings; s32 sRumblePakThreadActive = FALSE; s32 sRumblePakActive = FALSE; s32 sRumblePakErrorCount = 0; s32 gRumblePakTimer = 0; -// These void* are OSPfs* but we don't have that header -extern s32 osMotorStop(void *); -extern s32 osMotorStart(void *); -extern u32 osMotorInit(OSMesgQueue *, void *, s32); - void init_rumble_pak_scheduler_queue(void) { - osCreateMesgQueue(&gRumblePakSchedulerMesgQueue, gRumblePakSchedulerMesgBuf, 1); + osCreateMesgQueue(&gRumblePakSchedulerMesgQueue, &gRumblePakSchedulerMesgBuf, 1); osSendMesg(&gRumblePakSchedulerMesgQueue, (OSMesg) 0, OS_MESG_NOBLOCK); } @@ -53,7 +48,11 @@ static void start_rumble(void) { block_until_rumble_pak_free(); +#ifdef VERSION_CN + if (!__osMotorAccess(&gRumblePakPfs, MOTOR_START)) { +#else if (!osMotorStart(&gRumblePakPfs)) { +#endif sRumblePakErrorCount = 0; } else { sRumblePakErrorCount++; @@ -69,7 +68,11 @@ static void stop_rumble(void) { block_until_rumble_pak_free(); +#ifdef VERSION_CN + if (!__osMotorAccess(&gRumblePakPfs, MOTOR_STOP)) { +#else if (!osMotorStop(&gRumblePakPfs)) { +#endif sRumblePakErrorCount = 0; } else { sRumblePakErrorCount++; @@ -241,10 +244,13 @@ void func_sh_8024CA04(void) { static void thread6_rumble_loop(UNUSED void *a0) { OSMesg msg; - cancel_rumble(); + CN_DEBUG_PRINTF(("start motor thread\n")); + cancel_rumble(); sRumblePakThreadActive = TRUE; + CN_DEBUG_PRINTF(("go motor thread\n")); + while (TRUE) { // Block until VI osRecvMesg(&gRumbleThreadVIMesgQueue, &msg, OS_MESG_BLOCK); @@ -257,7 +263,7 @@ static void thread6_rumble_loop(UNUSED void *a0) { sRumblePakActive = FALSE; } } else if (gNumVblanks % 60 == 0) { - sRumblePakActive = osMotorInit(&gSIEventMesgQueue, &gRumblePakPfs, gPlayer1Controller->port) < 1; + sRumblePakActive = osMotorInit(&gSIEventMesgQueue, &gRumblePakPfs, gPlayer1Controller->port) == 0; sRumblePakErrorCount = 0; } @@ -268,10 +274,14 @@ static void thread6_rumble_loop(UNUSED void *a0) { } void cancel_rumble(void) { - sRumblePakActive = osMotorInit(&gSIEventMesgQueue, &gRumblePakPfs, gPlayer1Controller->port) < 1; + sRumblePakActive = osMotorInit(&gSIEventMesgQueue, &gRumblePakPfs, gPlayer1Controller->port) == 0; if (sRumblePakActive) { +#ifdef VERSION_CN + __osMotorAccess(&gRumblePakPfs, MOTOR_STOP); +#else osMotorStop(&gRumblePakPfs); +#endif } gRumbleDataQueue[0].unk00 = 0; @@ -285,7 +295,7 @@ void cancel_rumble(void) { } void create_thread_6(void) { - osCreateMesgQueue(&gRumbleThreadVIMesgQueue, gRumbleThreadVIMesgBuf, 1); + osCreateMesgQueue(&gRumbleThreadVIMesgQueue, &gRumbleThreadVIMesgBuf, 1); osCreateThread(&gRumblePakThread, 6, thread6_rumble_loop, NULL, gThread6Stack + 0x2000, 30); osStartThread(&gRumblePakThread); } @@ -295,8 +305,10 @@ void rumble_thread_update_vi(void) { return; } - // 0x56525443 = 'VRTC' - osSendMesg(&gRumbleThreadVIMesgQueue, (OSMesg) 0x56525443, OS_MESG_NOBLOCK); +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wmultichar" + osSendMesg(&gRumbleThreadVIMesgQueue, (OSMesg) 'VRTC', OS_MESG_NOBLOCK); +#pragma GCC diagnostic pop } #endif diff --git a/src/game/rumble_init.h b/src/game/rumble_init.h index cc47d75b..bc9b43e5 100644 --- a/src/game/rumble_init.h +++ b/src/game/rumble_init.h @@ -1,12 +1,40 @@ #ifndef RUMBLE_INIT_H #define RUMBLE_INIT_H -#include - #include "config.h" #if ENABLE_RUMBLE +struct RumbleData { + u8 unk00; + u8 unk01; + s16 unk02; + s16 unk04; +}; + +struct StructSH8031D9B0 { + s16 unk00; + s16 unk02; + s16 unk04; + s16 unk06; + s16 unk08; + s16 unk0A; + s16 unk0C; + s16 unk0E; +}; + +extern OSThread gRumblePakThread; + +extern OSPfs gRumblePakPfs; + +extern OSMesg gRumblePakSchedulerMesgBuf; +extern OSMesgQueue gRumblePakSchedulerMesgQueue; +extern OSMesg gRumbleThreadVIMesgBuf; +extern OSMesgQueue gRumbleThreadVIMesgQueue; + +extern struct RumbleData gRumbleDataQueue[3]; +extern struct StructSH8031D9B0 gCurrRumbleSettings; + extern s32 gRumblePakTimer; void init_rumble_pak_scheduler_queue(void); diff --git a/src/game/segment7.h b/src/game/segment7.h index 6692ac6b..54aceb64 100644 --- a/src/game/segment7.h +++ b/src/game/segment7.h @@ -24,8 +24,8 @@ extern const u8 eu_course_strings_de_table[]; #endif // from intro_segment7 -extern Gfx *intro_seg7_dl_0700B3A0; -extern Gfx *intro_seg7_dl_0700C6A0; +extern Gfx *intro_seg7_dl_logo; +extern Gfx *intro_seg7_dl_copyright; extern f32 intro_seg7_table_0700C790[]; extern f32 intro_seg7_table_0700C880[]; diff --git a/src/game/sound_init.c b/src/game/sound_init.c index c4bad21c..1ef5331b 100644 --- a/src/game/sound_init.c +++ b/src/game/sound_init.c @@ -349,7 +349,7 @@ void thread4_sound(UNUSED void *arg) { if (gResetTimer < 25) { struct SPTask *spTask; profiler_log_thread4_time(); - spTask = create_next_audio_frame_task(); + spTask = create_next_audio_frame_task(); if (spTask != NULL) { dispatch_audio_sptask(spTask); } diff --git a/src/goddard/draw_objects.c b/src/goddard/draw_objects.c index 85974d50..60c438e6 100644 --- a/src/goddard/draw_objects.c +++ b/src/goddard/draw_objects.c @@ -1,6 +1,10 @@ #include #include +#if defined(VERSION_JP) || defined(VERSION_US) +#include "prevent_bss_reordering.h" +#endif + #include "debug_utils.h" #include "dynlist_proc.h" #include "gd_macros.h" @@ -1269,7 +1273,7 @@ static void find_thisface_verts(struct ObjFace *face, struct ObjGroup *vertexGrp struct ListNode *node; for (i = 0; i < face->vtxCount; i++) { - // find the vertex or particle whose index in vertexGrp equals face->vertices[i] + // find the vertex or particle whose index in vertexGrp equals face->vertices[i] node = vertexGrp->firstMember; currIndex = 0; while (node != NULL) { diff --git a/src/goddard/dynlist_proc.c b/src/goddard/dynlist_proc.c index 82ddae28..f999c5a6 100644 --- a/src/goddard/dynlist_proc.c +++ b/src/goddard/dynlist_proc.c @@ -1228,7 +1228,7 @@ void d_map_materials(DynObjName name) { /** * For all faces in the current `ObjGroup`, resolve their vertex indices to - * `ObjVertex` pointers that point to vertices in the specified vertex group. + * `ObjVertex` pointers that point to vertices in the specified vertex group. * Also compute normals for all faces in the current `ObjGroup` and all vertices * in the specified vertex group. * See `map_vertices()` for more info. @@ -2635,7 +2635,7 @@ void d_set_parm_ptr(enum DParmPtr param, void *ptr) { fatal_printf("dsetparmp() too many points"); } // `ptr` here is a vertex index, not an actual pointer. - // These vertex indices later get converted to `ObjVertex` pointers when `find_thisface_verts` is called. + // These vertex indices later get converted to `ObjVertex` pointers when `find_thisface_verts` is called. ((struct ObjFace *) sDynListCurObj)->vertices[((struct ObjFace *) sDynListCurObj)->vtxCount++] = ptr; break; default: diff --git a/src/goddard/dynlists/dynlist_macros.h b/src/goddard/dynlists/dynlist_macros.h index decb8fa9..cbde7263 100644 --- a/src/goddard/dynlists/dynlist_macros.h +++ b/src/goddard/dynlists/dynlist_macros.h @@ -24,7 +24,7 @@ /** * Set the initial position of the current object - * Supported Objs: joints, particles, nets, vertices, cameras + * Supported Objs: joints, particles, nets, vertices, cameras */ #define SetInitialPosition(x, y, z) \ { 1, {0}, {0}, {(x), (y), (z)} } @@ -150,7 +150,7 @@ { 19, {0}, {(void *)(type)}, {0.0, 0.0, 0.0} } /** - * Set the current shape's material group to the specified group. + * Set the current shape's material group to the specified group. * Supported Objs: shapes */ #define SetMaterialGroup(mtlGrpName) \ diff --git a/src/goddard/dynlists/dynlist_mario_face.c b/src/goddard/dynlists/dynlist_mario_face.c index e742dd54..b504f785 100644 --- a/src/goddard/dynlists/dynlist_mario_face.c +++ b/src/goddard/dynlists/dynlist_mario_face.c @@ -354,7 +354,7 @@ struct DynList dynlist_mario_face_shape[] = { MakeDynObj(D_DATA_GRP, DYNOBJ_MARIO_FACE_TRI_GROUP), LinkWithPtr(&mario_Face_FaceInfo), - StartGroup(DYNOBJ_MARIO_FACE_MTL_GROUP), + StartGroup(DYNOBJ_MARIO_FACE_MTL_GROUP), // Teeth color MakeDynObj(D_MATERIAL, 0), SetId(0), @@ -366,7 +366,7 @@ struct DynList dynlist_mario_face_shape[] = { SetAmbient(0.883, 0.602, 0.408), SetDiffuse(0.883, 0.602, 0.408), // Shadow on back of hat - MakeDynObj(D_MATERIAL, 0), + MakeDynObj(D_MATERIAL, 0), SetId(2), SetAmbient(0.362, 0.0, 0.0), SetDiffuse(0.362, 0.0, 0.0), diff --git a/src/goddard/dynlists/dynlist_mario_master.c b/src/goddard/dynlists/dynlist_mario_master.c index 6a5b19ca..e359280b 100644 --- a/src/goddard/dynlists/dynlist_mario_master.c +++ b/src/goddard/dynlists/dynlist_mario_master.c @@ -1089,7 +1089,7 @@ struct DynList dynlist_mario_master[] = { AttachTo(0x0, DYNOBJ_MARIO_MAIN_ANIMATOR), SetNodeGroup(DYNOBJ_RIGHT_EYELID_ANIMDATA_GROUP), LinkWith(DYNOBJ_RIGHT_EYELID_JOINT_1), - + // whole head animator? MakeDynObj(D_DATA_GRP, DYNOBJ_MARIO_HEAD_ANIMDATA_GROUP), LinkWithPtr(&anim_mario_intro), diff --git a/src/goddard/gd_macros.h b/src/goddard/gd_macros.h index 9b65978d..afc4603b 100644 --- a/src/goddard/gd_macros.h +++ b/src/goddard/gd_macros.h @@ -3,7 +3,7 @@ /** * @file gd_macros.h - * + * * Common macros that Goddard used throughout the Mario Head subsytem code. */ diff --git a/src/goddard/gd_math.c b/src/goddard/gd_math.c index baf43dd8..7cbe0b30 100644 --- a/src/goddard/gd_math.c +++ b/src/goddard/gd_math.c @@ -514,7 +514,7 @@ f32 gd_mat4f_det(Mat4f *mtx) { * returns the determinant. */ f32 gd_3x3_det(f32 r0c0, f32 r0c1, f32 r0c2, - f32 r1c0, f32 r1c1, f32 r1c2, + f32 r1c0, f32 r1c1, f32 r1c2, f32 r2c0, f32 r2c1, f32 r2c2) { f32 det; @@ -654,7 +654,7 @@ void gd_shift_mat_up(Mat4f *mtx) { * | 0 w^2+i^2-j^2-k^2 2ij+2wk 2ik+2wj | * | 0 2ij-2wk w^2+j^2-i^2-k^2 2jk+2wi | * | 0 2ik+2wj 2jk-2wi w^2+k^2-i^2-j^2 | - * + * * Potentially broken if 'mtx' is not an identity matrix/zero'ed. */ void UNUSED gd_create_quat_rot_mat(f32 quat[4], UNUSED s32 unused, Mat4f *mtx) { @@ -698,10 +698,10 @@ void UNUSED gd_create_quat_rot_mat(f32 quat[4], UNUSED s32 unused, Mat4f *mtx) { * Creates a rotation matrix to multiply the primary matrix by. * s/c are sin(angle)/cos(angle). That angular rotation is about vector * 'vec'. - * + * * Matrix has form- * - * | (1-c)z^2+c (1-c)zy-sx (1-c)xz-sy 0 | + * | (1-c)z^2+c (1-c)zy-sx (1-c)xz-sy 0 | * | (1-c)zy-sx (1-c)y^2+c (1-c)xy-sz 0 | * | (1-c)xz-sy (1-c)xy-sz (1-c)x^2+c 0 | * | 0 0 0 1 | diff --git a/src/goddard/gd_math.h b/src/goddard/gd_math.h index 53c35397..1028dc83 100644 --- a/src/goddard/gd_math.h +++ b/src/goddard/gd_math.h @@ -24,7 +24,7 @@ enum GdRotAxis { void gd_adjunct_mat4f(Mat4f *src, Mat4f *dst); f32 gd_mat4f_det(Mat4f *mtx); f32 gd_3x3_det(f32 r0c0, f32 r0c1, f32 r0c2, - f32 r1c0, f32 r1c1, f32 r1c2, + f32 r1c0, f32 r1c1, f32 r1c2, f32 r2c0, f32 r2c1, f32 r2c2); f32 gd_2x2_det(f32 a, f32 b, f32 c, f32 d); diff --git a/src/goddard/gd_types.h b/src/goddard/gd_types.h index cff1fff6..f654ab85 100644 --- a/src/goddard/gd_types.h +++ b/src/goddard/gd_types.h @@ -472,7 +472,7 @@ struct ObjGadget { /* 0x38 */ f32 rangeMin; /* 0x3C */ f32 rangeMax; /* 0x40 */ struct GdVec3f size; // size (x = width, y = height) - /* 0x4C */ struct ObjGroup *valueGrp; // group containing `ObjValPtr`s controlled by this gadget + /* 0x4C */ struct ObjGroup *valueGrp; // group containing `ObjValPtr`s controlled by this gadget /* 0x50 */ struct ObjShape *shapePtr; /* 0x54 */ struct ObjGroup *unk54; //node group? /* 0x58 */ u8 filler2[4]; @@ -604,7 +604,7 @@ struct ObjValPtr { /* 0x14 */ struct GdObj *obj; // maybe just a void *? /* 0x18 */ uintptr_t offset; // value pointed to is `obj` + `offset` /* 0x1C */ enum ValPtrType datatype; - /* 0x20 */ s32 flag; // TODO: better name for this? If 0x40000, then `offset` is an offset to a field in `obj`. Otherwise, `obj` is NULL, and `offset` is the address of a variable. + /* 0x20 */ s32 flag; // TODO: better name for this? If 0x40000, then `offset` is an offset to a field in `obj`. Otherwise, `obj` is NULL, and `offset` is the address of a variable. }; /* sizeof = 0x24 */ enum GdLightFlags { diff --git a/src/goddard/joints.c b/src/goddard/joints.c index 00178efb..53dc6677 100644 --- a/src/goddard/joints.c +++ b/src/goddard/joints.c @@ -1,6 +1,6 @@ #include -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) #include "prevent_bss_reordering.h" #endif diff --git a/src/goddard/objects.c b/src/goddard/objects.c index b1d136cd..cb02381a 100644 --- a/src/goddard/objects.c +++ b/src/goddard/objects.c @@ -120,7 +120,7 @@ void get_some_bounding_box(struct GdBoundingBox *a0) { /* @ 22A6A0 for 0x24 */ void stub_objects_1(UNUSED struct ObjGroup *a0, UNUSED struct GdObj *a1) { - UNUSED u8 sp00[8]; + UNUSED u8 filler[8]; /* Debug stub? */ return; } @@ -870,8 +870,9 @@ s32 group_contains_obj(struct ObjGroup *group, struct GdObj *obj) { struct ListNode *node = group->firstMember; while (node != NULL) { - if (node->obj->index == obj->index) + if (node->obj->index == obj->index) { return TRUE; + } node = node->next; } @@ -879,7 +880,7 @@ s32 group_contains_obj(struct ObjGroup *group, struct GdObj *obj) { } /** - * Unused (not called) - this shows details about all objects in the main object linked list + * Unused (not called) - this shows details about all objects in the main object linked list */ void show_details(enum ObjTypeFlag type) { enum ObjTypeFlag curObjType; diff --git a/src/goddard/renderer.c b/src/goddard/renderer.c index 75ff7338..294f16c4 100644 --- a/src/goddard/renderer.c +++ b/src/goddard/renderer.c @@ -84,7 +84,7 @@ struct DynListBankInfo { }; // bss -#if defined(VERSION_EU) || defined(VERSION_SH) +#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) static OSMesgQueue D_801BE830; // controller msg queue static OSMesg D_801BE848[10]; u8 EUpad1[0x40]; @@ -506,11 +506,11 @@ static Gfx gd_dl_sparkle[] = { gsSPClearGeometryMode(G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR), gsDPSetRenderMode(G_RM_AA_ZB_TEX_EDGE, G_RM_NOOP2), gsSPTexture(0x8000, 0x8000, 0, G_TX_RENDERTILE, G_ON), - gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD, + gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD), gsDPLoadSync(), gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)), - gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0, G_TX_RENDERTILE, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD, + gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0, G_TX_RENDERTILE, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD), gsDPSetTileSize(0, 0, 0, (32 - 1) << G_TEXTURE_IMAGE_FRAC, (32 - 1) << G_TEXTURE_IMAGE_FRAC), gsSPVertex(gd_vertex_sparkle, 4, 0), @@ -659,7 +659,7 @@ static Gfx gd_dl_mario_face_shine[] = { gsDPSetTexturePersp(G_TP_PERSP), gsDPSetTextureFilter(G_TF_BILERP), gsDPSetCombineMode(G_CC_HILITERGBA, G_CC_HILITERGBA), - gsDPLoadTextureBlock(gd_texture_mario_face_shine, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 32, 0, + gsDPLoadTextureBlock(gd_texture_mario_face_shine, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 32, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_WRAP | G_TX_NOMIRROR, 5, 5, G_TX_NOLOD, G_TX_NOLOD), gsDPPipeSync(), gsSPEndDisplayList(), @@ -1278,7 +1278,7 @@ void gd_vblank(void) { } /** - * Copies the player1 controller data from p1cont to sGdContPads[0]. + * Copies the player1 controller data from p1cont to sGdContPads[0]. */ void gd_copy_p1_contpad(OSContPad *p1cont) { u32 i; // 24 @@ -2397,7 +2397,7 @@ void parse_p1_controller(void) { OSContPad *currInputs; OSContPad *prevInputs; - // Copy current inputs to previous + // Copy current inputs to previous u8 *src = (u8 *) gdctrl; u8 *dest = (u8 *) gdctrl->prevFrame; for (i = 0; i < sizeof(struct GdControl); i++) { @@ -3317,7 +3317,7 @@ void stub_renderer_14(UNUSED s8 *arg0) { * functions from IRIS GL. * @param buf pointer to an array of 16-bit values * @param len maximum number of values to store - */ + */ void init_pick_buf(s16 *buf, s32 len) { buf[0] = 0; buf[1] = 0; @@ -3776,7 +3776,7 @@ struct GdObj *load_dynlist(struct DynList *dynlist) { fatal_printf("load_dynlist() unkown bank"); } -#define PAGE_SIZE 65536 // size of a 64K TLB page +#define PAGE_SIZE 65536 // size of a 64K TLB page segSize = dynlistSegEnd - dynlistSegStart; allocSegSpace = gd_malloc_temp(segSize + PAGE_SIZE); diff --git a/src/goddard/shape_helper.c b/src/goddard/shape_helper.c index ee1dbf63..c811c918 100644 --- a/src/goddard/shape_helper.c +++ b/src/goddard/shape_helper.c @@ -161,7 +161,7 @@ void calc_face_normal(struct ObjFace *face) { p3.z = vtx3->pos.z; // calculate the cross product of edges (p2 - p1) and (p3 - p2) - // not sure why each component is multiplied by 1000. maybe to avoid loss of precision when normalizing? + // not sure why each component is multiplied by 1000. maybe to avoid loss of precision when normalizing? normal.x = (((p2.y - p1.y) * (p3.z - p2.z)) - ((p2.z - p1.z) * (p3.y - p2.y))) * mul; normal.y = (((p2.z - p1.z) * (p3.x - p2.x)) - ((p2.x - p1.x) * (p3.z - p2.z))) * mul; normal.z = (((p2.x - p1.x) * (p3.y - p2.y)) - ((p2.y - p1.y) * (p3.x - p2.x))) * mul; diff --git a/src/goddard/skin_movement.c b/src/goddard/skin_movement.c index 05cb7e31..8209d4b3 100644 --- a/src/goddard/skin_movement.c +++ b/src/goddard/skin_movement.c @@ -1,5 +1,9 @@ #include +#if defined(VERSION_SH) || defined(VERSION_CN) +#include "prevent_bss_reordering.h" +#endif + #include "debug_utils.h" #include "gd_math.h" #include "gd_types.h" diff --git a/src/menu/file_select.c b/src/menu/file_select.c index fce9a9e2..f06a09cf 100644 --- a/src/menu/file_select.c +++ b/src/menu/file_select.c @@ -28,6 +28,16 @@ #define LANGUAGE_FUNCTION sLanguageMode #endif +#ifdef VERSION_CN +#define FILE_SELECT_PRINT_STRING print_generic_string +#define FILE_SELECT_TEXT_DL_BEGIN dl_ia_text_begin +#define FILE_SELECT_TEXT_DL_END dl_ia_text_end +#else +#define FILE_SELECT_PRINT_STRING print_menu_generic_string +#define FILE_SELECT_TEXT_DL_BEGIN dl_menu_ia8_text_begin +#define FILE_SELECT_TEXT_DL_END dl_menu_ia8_text_end +#endif + /** * @file file_select.c * This file implements how the file select and it's menus render and function. @@ -60,6 +70,12 @@ static u8 sYesNoColor[2]; // The button that is selected when it is clicked. static s8 sSelectedButtonID = MENU_BUTTON_NONE; +// On iQue, the courses can't all fit on one screen; there are two pages, +// switched between with the L and R triggers. +#ifdef VERSION_CN +static s8 sScorePage = 0; +#endif + // Whether we are on the main menu or one of the submenus. static s8 sCurrentMenuLevel = MENU_LAYER_MAIN; @@ -126,163 +142,163 @@ static s8 sOpenLangSettings = FALSE; #endif #ifndef VERSION_EU -static unsigned char textReturn[] = { TEXT_RETURN }; +static u8 textReturn[] = { TEXT_RETURN }; #else -static unsigned char textReturn[][8] = {{ TEXT_RETURN }, { TEXT_RETURN_FR }, { TEXT_RETURN_DE }}; +static u8 textReturn[][8] = {{ TEXT_RETURN }, { TEXT_RETURN_FR }, { TEXT_RETURN_DE }}; #endif #ifndef VERSION_EU -static unsigned char textViewScore[] = { TEXT_CHECK_SCORE }; +static u8 textViewScore[] = { TEXT_CHECK_SCORE }; #else -static unsigned char textViewScore[][12] = {{ TEXT_CHECK_SCORE }, {TEXT_CHECK_SCORE_FR}, {TEXT_CHECK_SCORE_DE}}; +static u8 textViewScore[][12] = {{ TEXT_CHECK_SCORE }, {TEXT_CHECK_SCORE_FR}, {TEXT_CHECK_SCORE_DE}}; #endif #ifndef VERSION_EU -static unsigned char textCopyFileButton[] = { TEXT_COPY_FILE_BUTTON }; +static u8 textCopyFileButton[] = { TEXT_COPY_FILE_BUTTON }; #else -static unsigned char textCopyFileButton[][15] = {{ TEXT_COPY_FILE }, { TEXT_COPY_FILE_FR }, { TEXT_COPY_FILE_DE }}; +static u8 textCopyFileButton[][15] = {{ TEXT_COPY_FILE }, { TEXT_COPY_FILE_FR }, { TEXT_COPY_FILE_DE }}; #endif #ifndef VERSION_EU -static unsigned char textEraseFileButton[] = { TEXT_ERASE_FILE_BUTTON }; +static u8 textEraseFileButton[] = { TEXT_ERASE_FILE_BUTTON }; #else -static unsigned char textEraseFileButton[][16] = { {TEXT_ERASE_FILE}, {TEXT_ERASE_FILE_FR}, {TEXT_ERASE_FILE_DE} }; +static u8 textEraseFileButton[][16] = { {TEXT_ERASE_FILE}, {TEXT_ERASE_FILE_FR}, {TEXT_ERASE_FILE_DE} }; #endif #ifndef VERSION_EU -static unsigned char textSoundModes[][8] = { { TEXT_STEREO }, { TEXT_MONO }, { TEXT_HEADSET } }; +static u8 textSoundModes[][8] = { { TEXT_STEREO }, { TEXT_MONO }, { TEXT_HEADSET } }; #endif -static unsigned char textMarioA[] = { TEXT_FILE_MARIO_A }; -static unsigned char textMarioB[] = { TEXT_FILE_MARIO_B }; -static unsigned char textMarioC[] = { TEXT_FILE_MARIO_C }; -static unsigned char textMarioD[] = { TEXT_FILE_MARIO_D }; +static u8 textMarioA[] = { TEXT_FILE_MARIO_A }; +static u8 textMarioB[] = { TEXT_FILE_MARIO_B }; +static u8 textMarioC[] = { TEXT_FILE_MARIO_C }; +static u8 textMarioD[] = { TEXT_FILE_MARIO_D }; #ifndef VERSION_EU -static unsigned char textNew[] = { TEXT_NEW }; -static unsigned char starIcon[] = { GLYPH_STAR, GLYPH_SPACE }; -static unsigned char xIcon[] = { GLYPH_MULTIPLY, GLYPH_SPACE }; +static u8 textNew[] = { TEXT_NEW }; +static u8 starIcon[] = { GLYPH_STAR, GLYPH_SPACE }; +static u8 xIcon[] = { GLYPH_MULTIPLY, GLYPH_SPACE }; #endif #ifndef VERSION_EU -static unsigned char textSelectFile[] = { TEXT_SELECT_FILE }; +static u8 textSelectFile[] = { TEXT_SELECT_FILE }; #else -static unsigned char textSelectFile[][17] = {{ TEXT_SELECT_FILE }, { TEXT_SELECT_FILE_FR }, { TEXT_SELECT_FILE_DE }}; +static u8 textSelectFile[][17] = {{ TEXT_SELECT_FILE }, { TEXT_SELECT_FILE_FR }, { TEXT_SELECT_FILE_DE }}; #endif #ifndef VERSION_EU -static unsigned char textScore[] = { TEXT_SCORE }; +static u8 textScore[] = { TEXT_SCORE }; #else -static unsigned char textScore[][9] = {{ TEXT_SCORE }, { TEXT_SCORE_FR }, { TEXT_SCORE_DE }}; +static u8 textScore[][9] = {{ TEXT_SCORE }, { TEXT_SCORE_FR }, { TEXT_SCORE_DE }}; #endif #ifndef VERSION_EU -static unsigned char textCopy[] = { TEXT_COPY }; +static u8 textCopy[] = { TEXT_COPY }; #else -static unsigned char textCopy[][9] = {{ TEXT_COPY }, { TEXT_COPY_FR }, { TEXT_COPY_DE }}; +static u8 textCopy[][9] = {{ TEXT_COPY }, { TEXT_COPY_FR }, { TEXT_COPY_DE }}; #endif #ifndef VERSION_EU -static unsigned char textErase[] = { TEXT_ERASE }; +static u8 textErase[] = { TEXT_ERASE }; #else -static unsigned char textErase[][8] = {{ TEXT_ERASE }, { TEXT_ERASE_FR }, { TEXT_ERASE_DE }}; +static u8 textErase[][8] = {{ TEXT_ERASE }, { TEXT_ERASE_FR }, { TEXT_ERASE_DE }}; #endif #ifdef VERSION_EU -static unsigned char textOption[][9] = {{ TEXT_OPTION }, { TEXT_OPTION_FR }, { TEXT_OPTION_DE } }; +static u8 textOption[][9] = {{ TEXT_OPTION }, { TEXT_OPTION_FR }, { TEXT_OPTION_DE } }; #endif #ifndef VERSION_EU -static unsigned char textCheckFile[] = { TEXT_CHECK_FILE }; +static u8 textCheckFile[] = { TEXT_CHECK_FILE }; #else -static unsigned char textCheckFile[][18] = {{ TEXT_CHECK_FILE }, { TEXT_CHECK_FILE_FR }, { TEXT_CHECK_FILE_DE }}; +static u8 textCheckFile[][18] = {{ TEXT_CHECK_FILE }, { TEXT_CHECK_FILE_FR }, { TEXT_CHECK_FILE_DE }}; #endif #ifndef VERSION_EU -static unsigned char textNoSavedDataExists[] = { TEXT_NO_SAVED_DATA_EXISTS }; +static u8 textNoSavedDataExists[] = { TEXT_NO_SAVED_DATA_EXISTS }; #else -static unsigned char textNoSavedDataExists[][30] = {{ TEXT_NO_SAVED_DATA_EXISTS }, { TEXT_NO_SAVED_DATA_EXISTS_FR }, { TEXT_NO_SAVED_DATA_EXISTS_DE }}; +static u8 textNoSavedDataExists[][30] = {{ TEXT_NO_SAVED_DATA_EXISTS }, { TEXT_NO_SAVED_DATA_EXISTS_FR }, { TEXT_NO_SAVED_DATA_EXISTS_DE }}; #endif #ifndef VERSION_EU -static unsigned char textCopyFile[] = { TEXT_COPY_FILE }; +static u8 textCopyFile[] = { TEXT_COPY_FILE }; #else -static unsigned char textCopyFile[][16] = {{ TEXT_COPY_FILE_BUTTON }, { TEXT_COPY_FILE_BUTTON_FR }, { TEXT_COPY_FILE_BUTTON_DE }}; +static u8 textCopyFile[][16] = {{ TEXT_COPY_FILE_BUTTON }, { TEXT_COPY_FILE_BUTTON_FR }, { TEXT_COPY_FILE_BUTTON_DE }}; #endif #ifndef VERSION_EU -static unsigned char textCopyItToWhere[] = { TEXT_COPY_IT_TO_WHERE }; +static u8 textCopyItToWhere[] = { TEXT_COPY_IT_TO_WHERE }; #else -static unsigned char textCopyItToWhere[][18] = {{ TEXT_COPY_IT_TO_WHERE }, { TEXT_COPY_IT_TO_WHERE_FR }, { TEXT_COPY_IT_TO_WHERE_DE }}; +static u8 textCopyItToWhere[][18] = {{ TEXT_COPY_IT_TO_WHERE }, { TEXT_COPY_IT_TO_WHERE_FR }, { TEXT_COPY_IT_TO_WHERE_DE }}; +#endif + +#if !defined(VERSION_EU) +static u8 textNoSavedDataExistsCopy[] = { TEXT_NO_SAVED_DATA_EXISTS }; #endif #ifndef VERSION_EU -static unsigned char textNoSavedDataExistsCopy[] = { TEXT_NO_SAVED_DATA_EXISTS }; -#endif - -#ifndef VERSION_EU -static unsigned char textCopyCompleted[] = { TEXT_COPYING_COMPLETED }; +static u8 textCopyCompleted[] = { TEXT_COPYING_COMPLETED }; #else -static unsigned char textCopyCompleted[][18] = {{ TEXT_COPYING_COMPLETED }, { TEXT_COPYING_COMPLETED_FR }, { TEXT_COPYING_COMPLETED_DE }}; +static u8 textCopyCompleted[][18] = {{ TEXT_COPYING_COMPLETED }, { TEXT_COPYING_COMPLETED_FR }, { TEXT_COPYING_COMPLETED_DE }}; #endif #ifndef VERSION_EU -static unsigned char textSavedDataExists[] = { TEXT_SAVED_DATA_EXISTS }; +static u8 textSavedDataExists[] = { TEXT_SAVED_DATA_EXISTS }; #else -static unsigned char textSavedDataExists[][20] = {{ TEXT_SAVED_DATA_EXISTS }, { TEXT_SAVED_DATA_EXISTS_FR }, { TEXT_SAVED_DATA_EXISTS_DE }}; +static u8 textSavedDataExists[][20] = {{ TEXT_SAVED_DATA_EXISTS }, { TEXT_SAVED_DATA_EXISTS_FR }, { TEXT_SAVED_DATA_EXISTS_DE }}; #endif #ifndef VERSION_EU -static unsigned char textNoFileToCopyFrom[] = { TEXT_NO_FILE_TO_COPY_FROM }; +static u8 textNoFileToCopyFrom[] = { TEXT_NO_FILE_TO_COPY_FROM }; #else -static unsigned char textNoFileToCopyFrom[][21] = {{ TEXT_NO_FILE_TO_COPY_FROM }, { TEXT_NO_FILE_TO_COPY_FROM_FR }, { TEXT_NO_FILE_TO_COPY_FROM_DE }}; +static u8 textNoFileToCopyFrom[][21] = {{ TEXT_NO_FILE_TO_COPY_FROM }, { TEXT_NO_FILE_TO_COPY_FROM_FR }, { TEXT_NO_FILE_TO_COPY_FROM_DE }}; #endif #ifndef VERSION_EU -static unsigned char textYes[] = { TEXT_YES }; +static u8 textYes[] = { TEXT_YES }; #else -static unsigned char textYes[][4] = {{ TEXT_YES }, { TEXT_YES_FR }, { TEXT_YES_DE }}; +static u8 textYes[][4] = {{ TEXT_YES }, { TEXT_YES_FR }, { TEXT_YES_DE }}; #endif #ifndef VERSION_EU -static unsigned char textNo[] = { TEXT_NO }; +static u8 textNo[] = { TEXT_NO }; #else -static unsigned char textNo[][5] = {{ TEXT_NO }, { TEXT_NO_FR }, { TEXT_NO_DE }}; +static u8 textNo[][5] = {{ TEXT_NO }, { TEXT_NO_FR }, { TEXT_NO_DE }}; #endif #ifdef VERSION_EU // In EU, Erase File and Sound Select strings are outside it's print string function -static unsigned char textEraseFile[][17] = { +static u8 textEraseFile[][17] = { { TEXT_ERASE_FILE_BUTTON }, { TEXT_ERASE_FILE_BUTTON_FR }, { TEXT_ERASE_FILE_BUTTON_DE } }; -static unsigned char textSure[][8] = {{ TEXT_SURE }, { TEXT_SURE_FR }, { TEXT_SURE_DE }}; -static unsigned char textMarioAJustErased[][20] = { +static u8 textSure[][8] = {{ TEXT_SURE }, { TEXT_SURE_FR }, { TEXT_SURE_DE }}; +static u8 textMarioAJustErased[][20] = { { TEXT_FILE_MARIO_A_JUST_ERASED }, { TEXT_FILE_MARIO_A_JUST_ERASED_FR }, { TEXT_FILE_MARIO_A_JUST_ERASED_DE } }; -static unsigned char textSoundSelect[][13] = { +static u8 textSoundSelect[][13] = { { TEXT_SOUND_SELECT }, { TEXT_SOUND_SELECT_FR }, { TEXT_SOUND_SELECT_DE } }; -static unsigned char textLanguageSelect[][17] = { +static u8 textLanguageSelect[][17] = { { TEXT_LANGUAGE_SELECT }, { TEXT_LANGUAGE_SELECT_FR }, { TEXT_LANGUAGE_SELECT_DE } }; -static unsigned char textSoundModes[][10] = { +static u8 textSoundModes[][10] = { { TEXT_STEREO }, { TEXT_MONO }, { TEXT_HEADSET }, { TEXT_STEREO_FR }, { TEXT_MONO_FR }, { TEXT_HEADSET_FR }, { TEXT_STEREO_DE }, { TEXT_MONO_DE }, { TEXT_HEADSET_DE } }; -static unsigned char textLanguage[][9] = {{ TEXT_ENGLISH }, { TEXT_FRENCH }, { TEXT_GERMAN }}; +static u8 textLanguage[][9] = {{ TEXT_ENGLISH }, { TEXT_FRENCH }, { TEXT_GERMAN }}; -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 textMyScore[][10] = {{ TEXT_MY_SCORE }, { TEXT_MY_SCORE_FR }, { TEXT_MY_SCORE_DE }}; +static u8 textMario[] = { TEXT_MARIO }; +static u8 textHiScore[][15] = {{ TEXT_HI_SCORE }, { TEXT_HI_SCORE_FR }, { TEXT_HI_SCORE_DE }}; +static u8 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 }; -static unsigned char xIcon[] = { GLYPH_MULTIPLY, GLYPH_SPACE }; +static u8 textNew[][5] = {{ TEXT_NEW }, { TEXT_NEW_FR }, { TEXT_NEW_DE }}; +static u8 starIcon[] = { GLYPH_STAR, GLYPH_SPACE }; +static u8 xIcon[] = { GLYPH_MULTIPLY, GLYPH_SPACE }; #endif /** @@ -800,7 +816,7 @@ void copy_action_file_button(struct Object *copyButton, s32 copyFileButtonID) { gLoadedGraphNodes[MODEL_MAIN_MENU_MARIO_SAVE_BUTTON_FADE]; } else { // If clicked in a existing save file, play buzz sound - if (MENU_BUTTON_COPY_FILE_A + sSelectedFileIndex == copyFileButtonID) { + if (copyFileButtonID == MENU_BUTTON_COPY_FILE_A + sSelectedFileIndex) { play_sound(SOUND_MENU_CAMERA_BUZZ, gGlobalSoundSource); #if ENABLE_RUMBLE queue_rumble_data(5, 80); @@ -966,7 +982,7 @@ void erase_action_file_button(struct Object *eraseButton, s32 eraseFileButtonID) } break; case ERASE_PHASE_PROMPT: // Erase Menu "SURE? YES NO" Phase (after a file is selected) - if (MENU_BUTTON_ERASE_MIN + sSelectedFileIndex == eraseFileButtonID) { + if (eraseFileButtonID == MENU_BUTTON_ERASE_MIN + sSelectedFileIndex) { // If clicked in a existing save file, play click sound and zoom out button // Note: The prompt functions are actually called when the ERASE_MSG_PROMPT // message is displayed with print_erase_menu_prompt @@ -1636,6 +1652,11 @@ void handle_cursor_button_input(void) { } else if (gPlayer3Controller->buttonPressed & A_BUTTON) { sScoreFileCoinScoreMode = 1 - sScoreFileCoinScoreMode; play_sound(SOUND_MENU_CLICK_FILE_SELECT, gGlobalSoundSource); +#ifdef VERSION_CN + } else if ((gPlayer3Controller->buttonPressed & L_TRIG) || (gPlayer3Controller->buttonPressed & R_TRIG)) { + sScorePage = 1 - sScorePage; + play_sound(SOUND_MENU_CLICK_FILE_SELECT, gGlobalSoundSource); +#endif } } else { // If cursor is clicked if (gPlayer3Controller->buttonPressed @@ -1699,12 +1720,14 @@ void print_menu_cursor(void) { handle_controller_cursor_input(); create_dl_translation_matrix(MENU_MTX_PUSH, sCursorPos[0] + 160.0f - 5.0, sCursorPos[1] + 120.0f - 25.0, 0.0f); // Get the right graphic to use for the cursor. - if (sCursorClickingTimer == 0) + if (sCursorClickingTimer == 0) { // Idle gSPDisplayList(gDisplayListHead++, dl_menu_idle_hand); - if (sCursorClickingTimer != 0) + } + if (sCursorClickingTimer != 0) { // Grabbing gSPDisplayList(gDisplayListHead++, dl_menu_grabbing_hand); + } gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); if (sCursorClickingTimer != 0) { sCursorClickingTimer++; // This is a very strange way to implement a timer? It counts up and @@ -1718,7 +1741,7 @@ void print_menu_cursor(void) { /** * Prints a hud string depending of the hud table list defined with text fade properties. */ -void print_hud_lut_string_fade(s8 hudLUT, s16 x, s16 y, const unsigned char *text) { +void print_hud_lut_string_fade(s8 hudLUT, s16 x, s16 y, const u8 *text) { gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha - sTextFadeAlpha); print_hud_lut_string(hudLUT, x, y, text); @@ -1728,7 +1751,7 @@ void print_hud_lut_string_fade(s8 hudLUT, s16 x, s16 y, const unsigned char *tex /** * Prints a generic white string with text fade properties. */ -void print_generic_string_fade(s16 x, s16 y, const unsigned char *text) { +void print_generic_string_fade(s16 x, s16 y, const u8 *text) { gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha - sTextFadeAlpha); print_generic_string(x, y, text); @@ -1774,15 +1797,20 @@ void print_save_file_star_count(s8 fileIndex, s16 x, s16 y) { } // Print star count int_to_str(starCount, starCountText); - print_hud_lut_string(HUD_LUT_GLOBAL, x + offset + 16, y, starCountText); + print_hud_lut_string(HUD_LUT_GLOBAL, x + (offset + 16), y, starCountText); } else { // Print "new" text +#ifdef VERSION_CN + print_hud_lut_string(HUD_LUT_GLOBAL, x - 2, y - 5, LANGUAGE_ARRAY(textNew)); +#else print_hud_lut_string(HUD_LUT_GLOBAL, x, y, LANGUAGE_ARRAY(textNew)); +#endif } } #if defined(VERSION_JP) || defined(VERSION_SH) #define SELECT_FILE_X 96 + #define SELECT_FILE_Y 35 #define SCORE_X 50 #define COPY_X 115 #define ERASE_X 180 @@ -1795,8 +1823,11 @@ void print_save_file_star_count(s8 fileIndex, s16 x, s16 y) { #define SAVEFILE_X2 209 #define MARIOTEXT_X1 92 #define MARIOTEXT_X2 207 + #define MARIOTEXT_Y1 65 + #define MARIOTEXT_Y2 105 #elif defined(VERSION_US) #define SELECT_FILE_X 93 + #define SELECT_FILE_Y 35 #define SCORE_X 52 #define COPY_X 117 #define ERASE_X 177 @@ -1805,11 +1836,28 @@ void print_save_file_star_count(s8 fileIndex, s16 x, s16 y) { #define SAVEFILE_X2 209 #define MARIOTEXT_X1 92 #define MARIOTEXT_X2 207 + #define MARIOTEXT_Y1 65 + #define MARIOTEXT_Y2 105 #elif defined(VERSION_EU) #define SAVEFILE_X1 97 #define SAVEFILE_X2 204 #define MARIOTEXT_X1 97 #define MARIOTEXT_X2 204 + #define MARIOTEXT_Y1 65 + #define MARIOTEXT_Y2 105 +#elif defined(VERSION_CN) + #define SELECT_FILE_X 106 + #define SELECT_FILE_Y 25 + #define SCORE_X 52 + #define COPY_X 113 + #define ERASE_X 177 + #define SOUNDMODE_X1 sSoundTextX + #define SAVEFILE_X1 92 + #define SAVEFILE_X2 209 + #define MARIOTEXT_X1 92 + #define MARIOTEXT_X2 207 + #define MARIOTEXT_Y1 164 + #define MARIOTEXT_Y2 124 #endif /** @@ -1820,7 +1868,7 @@ void print_save_file_star_count(s8 fileIndex, s16 x, s16 y) { * Same rule applies for score, copy and erase strings. */ void print_main_menu_strings(void) { -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) // The current sound mode is automatically centered on US and Shindou. static s16 sSoundTextX; // TODO: There should be a way to make this match on both US and Shindou. #endif @@ -1828,7 +1876,7 @@ void print_main_menu_strings(void) { gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); #ifndef VERSION_EU - print_hud_lut_string(HUD_LUT_DIFF, SELECT_FILE_X, 35, textSelectFile); + print_hud_lut_string(HUD_LUT_DIFF2, SELECT_FILE_X, SELECT_FILE_Y, textSelectFile); #endif // Print file star counts print_save_file_star_count(SAVE_FILE_A, SAVEFILE_X1, 78); @@ -1849,14 +1897,15 @@ void print_main_menu_strings(void) { print_generic_string(SOUNDMODE_X1, 39, textSoundModes[sSoundMode]); gSPDisplayList(gDisplayListHead++, dl_ia_text_end); #endif + // Print file names - gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_begin); + gSPDisplayList(gDisplayListHead++, FILE_SELECT_TEXT_DL_BEGIN); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - print_menu_generic_string(MARIOTEXT_X1, 65, textMarioA); - print_menu_generic_string(MARIOTEXT_X2, 65, textMarioB); - print_menu_generic_string(MARIOTEXT_X1, 105, textMarioC); - print_menu_generic_string(MARIOTEXT_X2, 105, textMarioD); - gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_end); + FILE_SELECT_PRINT_STRING(MARIOTEXT_X1, MARIOTEXT_Y1, textMarioA); + FILE_SELECT_PRINT_STRING(MARIOTEXT_X2, MARIOTEXT_Y1, textMarioB); + FILE_SELECT_PRINT_STRING(MARIOTEXT_X1, MARIOTEXT_Y2, textMarioC); + FILE_SELECT_PRINT_STRING(MARIOTEXT_X2, MARIOTEXT_Y2, textMarioD); + gSPDisplayList(gDisplayListHead++, FILE_SELECT_TEXT_DL_END); } #ifdef VERSION_EU @@ -1894,13 +1943,20 @@ void print_main_lang_strings(void) { #if defined(VERSION_JP) || defined(VERSION_SH) #define CHECK_FILE_X 90 + #define CHECK_FILE_Y 35 #define NOSAVE_DATA_X1 90 #elif defined(VERSION_US) #define CHECK_FILE_X 95 + #define CHECK_FILE_Y 35 #define NOSAVE_DATA_X1 99 #elif defined(VERSION_EU) #define CHECK_FILE_X checkFileX + #define CHECK_FILE_Y 35 #define NOSAVE_DATA_X1 noSaveDataX +#elif defined(VERSION_CN) + #define CHECK_FILE_X 106 + #define CHECK_FILE_Y 25 + #define NOSAVE_DATA_X1 99 #endif /** @@ -1916,7 +1972,7 @@ void score_menu_display_message(s8 messageID) { #ifdef VERSION_EU checkFileX = get_str_x_pos_from_center_scale(160, LANGUAGE_ARRAY(textCheckFile), 12.0f); #endif - print_hud_lut_string_fade(HUD_LUT_DIFF, CHECK_FILE_X, 35, LANGUAGE_ARRAY(textCheckFile)); + print_hud_lut_string_fade(HUD_LUT_DIFF, CHECK_FILE_X, CHECK_FILE_Y, LANGUAGE_ARRAY(textCheckFile)); break; case SCORE_MSG_NOSAVE_DATA: #ifdef VERSION_EU @@ -1931,14 +1987,30 @@ void score_menu_display_message(s8 messageID) { #define RETURN_X 45 #define COPYFILE_X1 128 #define ERASEFILE_X1 228 + #define SCORE_FILE_Y1 62 + #define SCORE_FILE_Y2 105 #elif defined(VERSION_US) #define RETURN_X 44 #define COPYFILE_X1 135 #define ERASEFILE_X1 231 + #define SCORE_FILE_Y1 62 + #define SCORE_FILE_Y2 105 #elif defined(VERSION_EU) #define RETURN_X centeredX #define COPYFILE_X1 centeredX #define ERASEFILE_X1 centeredX +#elif defined(VERSION_CN) + #define RETURN_X 44 + #define COPYFILE_X1 135 + #define ERASEFILE_X1 231 + #define SCORE_FILE_Y1 164 + #define SCORE_FILE_Y2 121 +#endif + +#ifdef VERSION_CN + #define RETURN_X_OLD 45 // this X wasn't changed in all places +#else + #define RETURN_X_OLD RETURN_X #endif #ifdef VERSION_EU @@ -1997,17 +2069,17 @@ void print_score_menu_strings(void) { print_generic_string(ERASEFILE_X1, 35, LANGUAGE_ARRAY(textEraseFileButton)); gSPDisplayList(gDisplayListHead++, dl_ia_text_end); + // Print file names #ifdef VERSION_EU print_main_menu_strings(); #else - // Print file names - gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_begin); + gSPDisplayList(gDisplayListHead++, FILE_SELECT_TEXT_DL_BEGIN); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - print_menu_generic_string(89, 62, textMarioA); - print_menu_generic_string(211, 62, textMarioB); - print_menu_generic_string(89, 105, textMarioC); - print_menu_generic_string(211, 105, textMarioD); - gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_end); + FILE_SELECT_PRINT_STRING(89, SCORE_FILE_Y1, textMarioA); + FILE_SELECT_PRINT_STRING(211, SCORE_FILE_Y1, textMarioB); + FILE_SELECT_PRINT_STRING(89, SCORE_FILE_Y2, textMarioC); + FILE_SELECT_PRINT_STRING(211, SCORE_FILE_Y2, textMarioD); + gSPDisplayList(gDisplayListHead++, FILE_SELECT_TEXT_DL_END); #endif } @@ -2018,6 +2090,7 @@ void print_score_menu_strings(void) { #define NOSAVE_DATA_X2 90 #define COPYCOMPLETE_X 90 #define SAVE_EXISTS_X1 90 + #define COPY_FILE_Y 35 #elif defined(VERSION_US) #define NOFILE_COPY_X 119 #define COPY_FILE_X 104 @@ -2025,6 +2098,7 @@ void print_score_menu_strings(void) { #define NOSAVE_DATA_X2 101 #define COPYCOMPLETE_X 110 #define SAVE_EXISTS_X1 110 + #define COPY_FILE_Y 35 #elif defined(VERSION_EU) #define NOFILE_COPY_X centeredX #define COPY_FILE_X centeredX @@ -2032,6 +2106,15 @@ void print_score_menu_strings(void) { #define NOSAVE_DATA_X2 centeredX #define COPYCOMPLETE_X centeredX #define SAVE_EXISTS_X1 centeredX + #define COPY_FILE_Y 35 +#elif defined(VERSION_CN) + #define NOFILE_COPY_X 119 + #define COPY_FILE_X 104 + #define COPYIT_WHERE_X 109 + #define NOSAVE_DATA_X2 101 + #define COPYCOMPLETE_X 110 + #define SAVE_EXISTS_X1 110 + #define COPY_FILE_Y 25 #endif /** @@ -2053,7 +2136,7 @@ void copy_menu_display_message(s8 messageID) { #ifdef VERSION_EU centeredX = get_str_x_pos_from_center_scale(160, textCopyFile[sLanguageMode], 12.0f); #endif - print_hud_lut_string_fade(HUD_LUT_DIFF, COPY_FILE_X, 35, LANGUAGE_ARRAY(textCopyFile)); + print_hud_lut_string_fade(HUD_LUT_DIFF, COPY_FILE_X, COPY_FILE_Y, LANGUAGE_ARRAY(textCopyFile)); } break; case COPY_MSG_COPY_WHERE: @@ -2133,15 +2216,26 @@ void copy_menu_update_message(void) { #if defined(VERSION_JP) #define VIEWSCORE_X1 133 #define ERASEFILE_X2 220 + #define COPY_FILE_Y1 62 + #define COPY_FILE_Y2 105 #elif defined(VERSION_US) #define VIEWSCORE_X1 128 #define ERASEFILE_X2 230 + #define COPY_FILE_Y1 62 + #define COPY_FILE_Y2 105 #elif defined(VERSION_EU) #define VIEWSCORE_X1 centeredX #define ERASEFILE_X2 centeredX #elif defined(VERSION_SH) #define VIEWSCORE_X1 133 #define ERASEFILE_X2 230 + #define COPY_FILE_Y1 62 + #define COPY_FILE_Y2 105 +#elif defined(VERSION_CN) + #define VIEWSCORE_X1 128 + #define ERASEFILE_X2 230 + #define COPY_FILE_Y1 164 + #define COPY_FILE_Y2 121 #endif /** @@ -2182,17 +2276,18 @@ void print_copy_menu_strings(void) { #endif print_generic_string(ERASEFILE_X2, 35, LANGUAGE_ARRAY(textEraseFileButton)); gSPDisplayList(gDisplayListHead++, dl_ia_text_end); + + // Print file names #ifdef VERSION_EU print_main_menu_strings(); #else - // Print file names - gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_begin); + gSPDisplayList(gDisplayListHead++, FILE_SELECT_TEXT_DL_BEGIN); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - print_menu_generic_string(89, 62, textMarioA); - print_menu_generic_string(211, 62, textMarioB); - print_menu_generic_string(89, 105, textMarioC); - print_menu_generic_string(211, 105, textMarioD); - gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_end); + FILE_SELECT_PRINT_STRING(89, COPY_FILE_Y1, textMarioA); + FILE_SELECT_PRINT_STRING(211, COPY_FILE_Y1, textMarioB); + FILE_SELECT_PRINT_STRING(89, COPY_FILE_Y2, textMarioC); + FILE_SELECT_PRINT_STRING(211, COPY_FILE_Y2, textMarioD); + gSPDisplayList(gDisplayListHead++, FILE_SELECT_TEXT_DL_END); #endif } @@ -2204,42 +2299,67 @@ void print_copy_menu_strings(void) { #endif #define MENU_ERASE_YES_MIN_X 145 #define MENU_ERASE_YES_MAX_X 164 +#elif defined(VERSION_CN) + #define CURSOR_X (x + 70) + #define MENU_ERASE_YES_MIN_X 144 + #define MENU_ERASE_YES_MAX_X 173 #else #define CURSOR_X (x + 70) #define MENU_ERASE_YES_MIN_X 140 #define MENU_ERASE_YES_MAX_X 169 #endif -#define MENU_ERASE_YES_NO_MIN_Y 191 -#define MENU_ERASE_YES_NO_MAX_Y 210 -#ifdef VERSION_SH - #define MENU_ERASE_NO_MIN_X 194 - #define MENU_ERASE_NO_MAX_X 213 -#else +#ifdef VERSION_CN + #define MENU_ERASE_YES_NO_MIN_Y 191 + #define MENU_ERASE_YES_NO_MAX_Y 210 #define MENU_ERASE_NO_MIN_X 189 #define MENU_ERASE_NO_MAX_X 218 + #define MENU_ERASE_YES_X_OFFSET 60 +#elif defined(VERSION_SH) + #define MENU_ERASE_YES_NO_MIN_Y 191 + #define MENU_ERASE_YES_NO_MAX_Y 210 + #define MENU_ERASE_NO_MIN_X 194 + #define MENU_ERASE_NO_MAX_X 213 + #define MENU_ERASE_YES_X_OFFSET 56 +#else + #define MENU_ERASE_YES_NO_MIN_Y 191 + #define MENU_ERASE_YES_NO_MAX_Y 210 + #define MENU_ERASE_NO_MIN_X 189 + #define MENU_ERASE_NO_MAX_X 218 + #define MENU_ERASE_YES_X_OFFSET 56 #endif /** * Prints the "YES NO" prompt and checks if one of the prompts are hovered to do it's functions. */ void print_erase_menu_prompt(s16 x, s16 y) { - s16 colorFade = gGlobalTimer << 12; + s16 colorTransTimer = gGlobalTimer * (1 << 12); s16 cursorX = sCursorPos[0] + CURSOR_X; s16 cursorY = sCursorPos[1] + 120.0f; + // TODO: Merge IDO/GCC if (cursorX < MENU_ERASE_YES_MAX_X && cursorX >= MENU_ERASE_YES_MIN_X && - cursorY < MENU_ERASE_YES_NO_MAX_Y && cursorY >= MENU_ERASE_YES_NO_MIN_Y) { +#ifdef VERSION_CN + (u16) (cursorY - MENU_ERASE_YES_NO_MIN_Y) < MENU_ERASE_YES_NO_MAX_Y - MENU_ERASE_YES_NO_MIN_Y +#else + cursorY < MENU_ERASE_YES_NO_MAX_Y && cursorY >= MENU_ERASE_YES_NO_MIN_Y +#endif + ) { // Fade "YES" string color but keep "NO" gray - sYesNoColor[0] = sins(colorFade) * 50.0f + 205.0f; + sYesNoColor[0] = sins(colorTransTimer) * 50.0f + 205.0f; sYesNoColor[1] = 150; sEraseYesNoHoverState = MENU_ERASE_HOVER_YES; - } else if (cursorX < MENU_ERASE_NO_MAX_X && cursorX >= MENU_ERASE_NO_MIN_X - && cursorY < MENU_ERASE_YES_NO_MAX_Y && cursorY >= MENU_ERASE_YES_NO_MIN_Y) { + } else if (cursorX < MENU_ERASE_NO_MAX_X && cursorX >= MENU_ERASE_NO_MIN_X && +#ifdef VERSION_CN + (u16) (cursorY - MENU_ERASE_YES_NO_MIN_Y) < MENU_ERASE_YES_NO_MAX_Y - MENU_ERASE_YES_NO_MIN_Y +#else + cursorY < MENU_ERASE_YES_NO_MAX_Y && cursorY >= MENU_ERASE_YES_NO_MIN_Y +#endif + ) { // Fade "NO" string color but keep "YES" gray sYesNoColor[0] = 150; - sYesNoColor[1] = sins(colorFade) * 50.0f + 205.0f; + sYesNoColor[1] = sins(colorTransTimer) * 50.0f + 205.0f; sEraseYesNoHoverState = MENU_ERASE_HOVER_NO; } else { // Don't fade both strings and keep them gray @@ -2282,7 +2402,7 @@ void print_erase_menu_prompt(s16 x, s16 y) { // Print "YES NO" strings gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); gDPSetEnvColor(gDisplayListHead++, sYesNoColor[0], sYesNoColor[0], sYesNoColor[0], sTextBaseAlpha); - print_generic_string(x + 56, y, LANGUAGE_ARRAY(textYes)); + print_generic_string(x + MENU_ERASE_YES_X_OFFSET, y, LANGUAGE_ARRAY(textYes)); gDPSetEnvColor(gDisplayListHead++, sYesNoColor[1], sYesNoColor[1], sYesNoColor[1], sTextBaseAlpha); print_generic_string(x + 98, y, LANGUAGE_ARRAY(textNo)); gSPDisplayList(gDisplayListHead++, dl_ia_text_end); @@ -2298,22 +2418,32 @@ void print_erase_menu_prompt(s16 x, s16 y) { #else #define ERASE_FILE_X 111 #endif + #define ERASE_FILE_Y 35 #define NOSAVE_DATA_X3 90 #define MARIO_ERASED_VAR 3 #define MARIO_ERASED_X 90 #define SAVE_EXISTS_X2 90 #elif defined(VERSION_US) #define ERASE_FILE_X 98 + #define ERASE_FILE_Y 35 #define NOSAVE_DATA_X3 100 #define MARIO_ERASED_VAR 6 #define MARIO_ERASED_X 100 #define SAVE_EXISTS_X2 100 #elif defined(VERSION_EU) #define ERASE_FILE_X centeredX + #define ERASE_FILE_Y 35 #define NOSAVE_DATA_X3 centeredX #define MARIO_ERASED_VAR 6 #define MARIO_ERASED_X centeredX #define SAVE_EXISTS_X2 centeredX +#elif defined(VERSION_CN) + #define ERASE_FILE_X 106 + #define ERASE_FILE_Y 25 + #define NOSAVE_DATA_X3 100 + #define MARIO_ERASED_VAR 15 + #define MARIO_ERASED_X 100 + #define SAVE_EXISTS_X2 100 #endif /** @@ -2325,11 +2455,11 @@ void erase_menu_display_message(s8 messageID) { #endif #ifndef VERSION_EU - unsigned char textEraseFile[] = { TEXT_ERASE_FILE }; - unsigned char textSure[] = { TEXT_SURE }; - unsigned char textNoSavedDataExists[] = { TEXT_NO_SAVED_DATA_EXISTS }; - unsigned char textMarioAJustErased[] = { TEXT_FILE_MARIO_A_JUST_ERASED }; - unsigned char textSavedDataExists[] = { TEXT_SAVED_DATA_EXISTS }; + u8 textEraseFile[] = { TEXT_ERASE_FILE }; + u8 textSure[] = { TEXT_SURE }; + u8 textNoSavedDataExists[] = { TEXT_NO_SAVED_DATA_EXISTS }; + u8 textMarioAJustErased[] = { TEXT_FILE_MARIO_A_JUST_ERASED }; + u8 textSavedDataExists[] = { TEXT_SAVED_DATA_EXISTS }; #endif switch (messageID) { @@ -2337,7 +2467,7 @@ void erase_menu_display_message(s8 messageID) { #ifdef VERSION_EU centeredX = get_str_x_pos_from_center_scale(160, textEraseFile[sLanguageMode], 12.0f); #endif - print_hud_lut_string_fade(HUD_LUT_DIFF, ERASE_FILE_X, 35, LANGUAGE_ARRAY(textEraseFile)); + print_hud_lut_string_fade(HUD_LUT_DIFF, ERASE_FILE_X, ERASE_FILE_Y, LANGUAGE_ARRAY(textEraseFile)); break; case ERASE_MSG_PROMPT: print_generic_string_fade(90, 190, LANGUAGE_ARRAY(textSure)); @@ -2410,9 +2540,18 @@ void erase_menu_update_message(void) { #if defined(VERSION_JP) || defined(VERSION_SH) #define VIEWSCORE_X2 133 #define COPYFILE_X2 223 + #define ERASE_FILE_Y1 62 + #define ERASE_FILE_Y2 105 +#elif defined(VERSION_CN) + #define VIEWSCORE_X2 129 + #define COPYFILE_X2 228 + #define ERASE_FILE_Y1 164 + #define ERASE_FILE_Y2 121 #else #define VIEWSCORE_X2 127 #define COPYFILE_X2 233 + #define ERASE_FILE_Y1 62 + #define ERASE_FILE_Y2 105 #endif /** @@ -2452,30 +2591,35 @@ void print_erase_menu_strings(void) { centeredX = get_str_x_pos_from_center(249, textCopyFileButton[sLanguageMode], 10.0f); print_generic_string(centeredX, 35, textCopyFileButton[sLanguageMode]); #else - print_generic_string(RETURN_X, 35, textReturn); + print_generic_string(RETURN_X_OLD, 35, textReturn); print_generic_string(VIEWSCORE_X2, 35, textViewScore); print_generic_string(COPYFILE_X2, 35, textCopyFileButton); #endif gSPDisplayList(gDisplayListHead++, dl_ia_text_end); + // Print file names #ifdef VERSION_EU print_main_menu_strings(); #else - // Print file names - gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_begin); + gSPDisplayList(gDisplayListHead++, FILE_SELECT_TEXT_DL_BEGIN); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - print_menu_generic_string(89, 62, textMarioA); - print_menu_generic_string(211, 62, textMarioB); - print_menu_generic_string(89, 105, textMarioC); - print_menu_generic_string(211, 105, textMarioD); - gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_end); + FILE_SELECT_PRINT_STRING(89, ERASE_FILE_Y1, textMarioA); + FILE_SELECT_PRINT_STRING(211, ERASE_FILE_Y1, textMarioB); + FILE_SELECT_PRINT_STRING(89, ERASE_FILE_Y2, textMarioC); + FILE_SELECT_PRINT_STRING(211, ERASE_FILE_Y2, textMarioD); + gSPDisplayList(gDisplayListHead++, FILE_SELECT_TEXT_DL_END); #endif } #if defined(VERSION_JP) || defined(VERSION_SH) #define SOUND_HUD_X 96 + #define SOUND_HUD_Y 35 #elif defined(VERSION_US) #define SOUND_HUD_X 88 + #define SOUND_HUD_Y 35 +#elif defined(VERSION_CN) + #define SOUND_HUD_X 106 + #define SOUND_HUD_Y 55 #endif /** @@ -2486,14 +2630,14 @@ void print_erase_menu_strings(void) { void print_sound_mode_menu_strings(void) { s32 mode; -#if defined(VERSION_US) || defined(VERSION_SH) +#if defined(VERSION_US) || defined(VERSION_SH) || defined(VERSION_CN) s16 textX; #elif defined(VERSION_EU) s32 textX; #endif #ifndef VERSION_EU - unsigned char textSoundSelect[] = { TEXT_SOUND_SELECT }; + u8 textSoundSelect[] = { TEXT_SOUND_SELECT }; #endif // Print "SOUND SELECT" text @@ -2504,7 +2648,7 @@ void print_sound_mode_menu_strings(void) { print_hud_lut_string(HUD_LUT_DIFF, 47, 32, textSoundSelect[sLanguageMode]); print_hud_lut_string(HUD_LUT_DIFF, 47, 101, textLanguageSelect[sLanguageMode]); #else - print_hud_lut_string(HUD_LUT_DIFF, SOUND_HUD_X, 35, textSoundSelect); + print_hud_lut_string(HUD_LUT_DIFF, SOUND_HUD_X, SOUND_HUD_Y, textSoundSelect); #endif gSPDisplayList(gDisplayListHead++, dl_rgba16_text_end); @@ -2538,7 +2682,7 @@ void print_sound_mode_menu_strings(void) { #else // Print sound mode names for (mode = 0; mode < 3; mode++) { - if (mode == sSoundMode) { + if (sSoundMode == mode) { gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); } else { gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, sTextBaseAlpha); @@ -2561,22 +2705,32 @@ void print_sound_mode_menu_strings(void) { gSPDisplayList(gDisplayListHead++, dl_ia_text_end); } -unsigned char textStarX[] = { TEXT_STAR_X }; +#ifndef VERSION_CN +u8 textStarX[] = { TEXT_STAR_X }; +#endif /** * Prints castle secret stars collected in a score menu save file. */ void print_score_file_castle_secret_stars(s8 fileIndex, s16 x, s16 y) { - unsigned char secretStarsText[20]; - // Print "[star] x" - print_menu_generic_string(x, y, textStarX); - // Print number of castle secret stars - int_to_str(save_file_get_total_star_count(fileIndex, COURSE_BONUS_STAGES - 1, COURSE_MAX - 1), - secretStarsText); -#ifdef VERSION_EU - print_menu_generic_string(x + 20, y, secretStarsText); +#ifdef VERSION_CN + u8 secretStarsText[36]; + u8 textStarX[] = { TEXT_STAR_X }; #else - print_menu_generic_string(x + 16, y, secretStarsText); + u8 secretStarsText[20]; +#endif + + // Print "[star] x" + FILE_SELECT_PRINT_STRING(x, y, textStarX); + + // Print number of castle secret stars + INT_TO_STR_DIFF(save_file_get_total_star_count(fileIndex, COURSE_BONUS_STAGES - 1, COURSE_MAX - 1), + secretStarsText); + +#ifdef VERSION_EU + FILE_SELECT_PRINT_STRING(x + 20, y, secretStarsText); +#else + FILE_SELECT_PRINT_STRING(x + 16, y, secretStarsText); #endif } @@ -2594,41 +2748,54 @@ void print_score_file_castle_secret_stars(s8 fileIndex, s16 x, s16 y) { * Prints course coins collected in a score menu save file. */ void print_score_file_course_coin_score(s8 fileIndex, s16 courseIndex, s16 x, s16 y) { - unsigned char coinScoreText[20]; +#ifdef VERSION_CN + u8 coinScoreText[36]; +#else + u8 coinScoreText[20]; +#endif + u8 stars = save_file_get_star_flags(fileIndex, courseIndex); - unsigned char textCoinX[] = { TEXT_COIN_X }; - unsigned char textStar[] = { TEXT_STAR }; + u8 textCoinX[] = { TEXT_COIN_X }; + u8 textStar[] = { TEXT_STAR }; + #if defined(VERSION_JP) || defined(VERSION_SH) #define LENGTH 5 +#elif defined(VERSION_CN) + #define LENGTH 16 #else #define LENGTH 8 #endif - unsigned char fileNames[][LENGTH] = { + u8 fileNames[][LENGTH] = { { TEXT_4DASHES }, // huh? { TEXT_SCORE_MARIO_A }, { TEXT_SCORE_MARIO_B }, { TEXT_SCORE_MARIO_C }, { TEXT_SCORE_MARIO_D }, }; #undef LENGTH + // MYSCORE if (sScoreFileCoinScoreMode == 0) { // Print "[coin] x" - print_menu_generic_string(x + 25, y, textCoinX); + FILE_SELECT_PRINT_STRING(x + 25, y, textCoinX); + // Print coin score - int_to_str(save_file_get_course_coin_score(fileIndex, courseIndex), coinScoreText); - print_menu_generic_string(x + 41, y, coinScoreText); + INT_TO_STR_DIFF(save_file_get_course_coin_score(fileIndex, courseIndex), coinScoreText); + FILE_SELECT_PRINT_STRING(x + 41, y, coinScoreText); + // If collected, print 100 coin star if (stars & (1 << 6)) { - print_menu_generic_string(x + 70, y, textStar); + FILE_SELECT_PRINT_STRING(x + 70, y, textStar); } } // HISCORE else { // Print "[coin] x" - print_menu_generic_string(x + HISCORE_COIN_ICON_X, y, textCoinX); + FILE_SELECT_PRINT_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 + HISCORE_COIN_TEXT_X, y, coinScoreText); + INT_TO_STR_DIFF((u16) save_file_get_max_coin_score(courseIndex) & 0xFFFF, coinScoreText); + FILE_SELECT_PRINT_STRING(x + HISCORE_COIN_TEXT_X, y, coinScoreText); + // Print coin highscore file - print_menu_generic_string(x + HISCORE_COIN_NAMES_X, y, + FILE_SELECT_PRINT_STRING(x + HISCORE_COIN_NAMES_X, y, fileNames[(save_file_get_max_coin_score(courseIndex) >> 16) & 0xFFFF]); } } @@ -2638,7 +2805,13 @@ 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[19]; + +#ifdef VERSION_CN + u8 starScoreText[36]; +#else + u8 starScoreText[19]; +#endif + 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 @@ -2647,15 +2820,28 @@ void print_score_file_star_score(s8 fileIndex, s16 courseIndex, s16 x, s16 y) { } // Add 1 star character for every star collected for (i = 0; i < starCount; i++) { +#ifdef VERSION_CN + starScoreText[i * 2] = 0x00; + starScoreText[i * 2 + 1] = DIALOG_CHAR_STAR_FILLED; +#else starScoreText[i] = DIALOG_CHAR_STAR_FILLED; +#endif } + // Terminating byte +#ifdef VERSION_CN + starScoreText[i * 2] = DIALOG_CHAR_TERMINATOR; + starScoreText[i * 2 + 1] = DIALOG_CHAR_TERMINATOR; +#else starScoreText[i] = DIALOG_CHAR_TERMINATOR; - print_menu_generic_string(x, y, starScoreText); +#endif + + FILE_SELECT_PRINT_STRING(x, y, starScoreText); } #if defined(VERSION_JP) || defined(VERSION_SH) #define MARIO_X 28 + #define MARIO_Y 15 #define FILE_LETTER_X 86 #ifdef VERSION_JP #define LEVEL_NUM_PAD 0 @@ -2668,8 +2854,22 @@ void print_score_file_star_score(s8 fileIndex, s16 courseIndex, s16 x, s16 y) { #define STAR_SCORE_X 152 #define MYSCORE_X 237 #define HISCORE_X 237 + #define MYSCORE_Y 24 + #define HISCORE_Y 24 +#elif defined(VERSION_CN) + #define MARIO_X 25 + #define MARIO_Y 9 + #define FILE_LETTER_X 95 + #define SECRET_STARS_PAD 6 + #define LEVEL_NAME_X 26 + #define STAR_SCORE_X 171 + #define MYSCORE_X 238 + #define HISCORE_X 231 + #define MYSCORE_Y 200 + #define HISCORE_Y 200 #else #define MARIO_X 25 + #define MARIO_Y 15 #define FILE_LETTER_X 95 #define LEVEL_NUM_PAD 3 #define SECRET_STARS_PAD 6 @@ -2682,30 +2882,52 @@ void print_score_file_star_score(s8 fileIndex, s16 courseIndex, s16 x, s16 y) { #define MYSCORE_X 238 #define HISCORE_X 231 #endif + #define MYSCORE_Y 24 + #define HISCORE_Y 24 #endif #ifdef VERSION_EU #include "game/segment7.h" #endif +#define PRINT_COURSE_NAME_CN(courseIndex, shift) \ + FILE_SELECT_PRINT_STRING(LEVEL_NAME_X, 14 + 21 * (9 - courseIndex) + shift, \ + segmented_to_virtual(levelNameTable[courseIndex - 1])); + +#define PRINT_COURSE_SCORES_CN(courseIndex, shift) \ + print_score_file_star_score(fileIndex, courseIndex - 1, STAR_SCORE_X, 14 + 21 * (9 - courseIndex) + shift); \ + print_score_file_course_coin_score(fileIndex, courseIndex - 1, 213, 14 + 21 * (9 - courseIndex) + shift); + +#define PRINT_COURSE_NAME_AND_SCORES(courseIndex, pad) \ + FILE_SELECT_PRINT_STRING(LEVEL_NAME_X + (pad * LEVEL_NUM_PAD), 23 + 12 * courseIndex, \ + segmented_to_virtual(levelNameTable[courseIndex - 1])); \ + print_score_file_star_score(fileIndex, courseIndex - 1, STAR_SCORE_X, 23 + 12 * courseIndex); \ + print_score_file_course_coin_score(fileIndex, courseIndex - 1, 213, 23 + 12 * courseIndex); + /** * Prints save file score strings that shows when a save file is chosen inside the score menu. */ void print_save_file_scores(s8 fileIndex) { #ifndef VERSION_EU - unsigned char textMario[] = { TEXT_MARIO }; + + u8 textMario[] = { TEXT_MARIO }; #ifdef VERSION_JP - unsigned char textFileLetter[] = { TEXT_ZERO }; + u8 textFileLetter[] = { TEXT_ZERO }; void **levelNameTable = segmented_to_virtual(seg2_course_name_table); #endif - unsigned char textHiScore[] = { TEXT_HI_SCORE }; - unsigned char textMyScore[] = { TEXT_MY_SCORE }; -#if defined(VERSION_US) || defined(VERSION_SH) - unsigned char textFileLetter[] = { TEXT_ZERO }; + u8 textHiScore[] = { TEXT_HI_SCORE }; + u8 textMyScore[] = { TEXT_MY_SCORE }; +#ifdef VERSION_CN + u8 textArrowL[] = { TEXT_ARROW_L }; + u8 textRArrow[] = { TEXT_R_ARROW }; +#endif +#ifndef VERSION_JP + u8 textFileLetter[] = { TEXT_ZERO }; void **levelNameTable = segmented_to_virtual(seg2_course_name_table); #endif + #else - unsigned char textFileLetter[] = { TEXT_ZERO }; + u8 textFileLetter[] = { TEXT_ZERO }; void **levelNameTable; switch (sLanguageMode) { @@ -2726,63 +2948,114 @@ void print_save_file_scores(s8 fileIndex) { // Print file name at top gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - print_hud_lut_string(HUD_LUT_DIFF, MARIO_X, 15, textMario); + print_hud_lut_string(HUD_LUT_DIFF, MARIO_X, MARIO_Y, textMario); print_hud_lut_string(HUD_LUT_GLOBAL, FILE_LETTER_X, 15, textFileLetter); // Print save file star count at top print_save_file_star_count(fileIndex, 124, 15); gSPDisplayList(gDisplayListHead++, dl_rgba16_text_end); + // Print course scores - gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_begin); + gSPDisplayList(gDisplayListHead++, FILE_SELECT_TEXT_DL_BEGIN); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); -//! Huge print list, for loops exist for a reason! -#define PRINT_COURSE_SCORES(courseIndex, pad) \ - print_menu_generic_string(LEVEL_NAME_X + (pad * LEVEL_NUM_PAD), 23 + 12 * courseIndex, \ - segmented_to_virtual(levelNameTable[courseIndex - 1])); \ - print_score_file_star_score(fileIndex, courseIndex - 1, STAR_SCORE_X, 23 + 12 * courseIndex); \ - print_score_file_course_coin_score(fileIndex, courseIndex - 1, 213, 23 + 12 * courseIndex); + //! Huge print list, for loops exist for a reason! +#ifdef VERSION_CN + if (sScorePage == 0) { + PRINT_COURSE_NAME_CN(COURSE_SSL, 0) + PRINT_COURSE_NAME_CN(COURSE_LLL, 0) + PRINT_COURSE_NAME_CN(COURSE_HMC, 0) + PRINT_COURSE_NAME_CN(COURSE_BBH, 0) + PRINT_COURSE_NAME_CN(COURSE_CCM, 0) + PRINT_COURSE_NAME_CN(COURSE_JRB, 0) + PRINT_COURSE_NAME_CN(COURSE_WF, 0) + PRINT_COURSE_NAME_CN(COURSE_BOB, 0) + PRINT_COURSE_SCORES_CN(COURSE_SSL, 0) + PRINT_COURSE_SCORES_CN(COURSE_LLL, 0) + PRINT_COURSE_SCORES_CN(COURSE_HMC, 0) + PRINT_COURSE_SCORES_CN(COURSE_BBH, 0) + PRINT_COURSE_SCORES_CN(COURSE_CCM, 0) + PRINT_COURSE_SCORES_CN(COURSE_JRB, 0) + PRINT_COURSE_SCORES_CN(COURSE_WF, 0) + PRINT_COURSE_SCORES_CN(COURSE_BOB, 0) + } else if (sScorePage == 1) { + // Print castle secret stars text + print_generic_string(LEVEL_NAME_X, 23 + 12 * 1, + segmented_to_virtual(levelNameTable[25])); + + PRINT_COURSE_NAME_CN(COURSE_RR, 168) + PRINT_COURSE_NAME_CN(COURSE_TTC, 168) + PRINT_COURSE_NAME_CN(COURSE_THI, 168) + PRINT_COURSE_NAME_CN(COURSE_TTM, 168) + PRINT_COURSE_NAME_CN(COURSE_WDW, 168) + PRINT_COURSE_NAME_CN(COURSE_SL, 168) + PRINT_COURSE_NAME_CN(COURSE_DDD, 168) + + // Print castle secret stars score + print_score_file_castle_secret_stars(fileIndex, STAR_SCORE_X, 23 + 12 * 1); + + PRINT_COURSE_SCORES_CN(COURSE_RR, 168) + PRINT_COURSE_SCORES_CN(COURSE_TTC, 168) + PRINT_COURSE_SCORES_CN(COURSE_THI, 168) + PRINT_COURSE_SCORES_CN(COURSE_TTM, 168) + PRINT_COURSE_SCORES_CN(COURSE_WDW, 168) + PRINT_COURSE_SCORES_CN(COURSE_SL, 168) + PRINT_COURSE_SCORES_CN(COURSE_DDD, 168) + } +#else // Course values are indexed, from Bob-omb Battlefield to Rainbow Ride - PRINT_COURSE_SCORES(COURSE_BOB, 1) - PRINT_COURSE_SCORES(COURSE_WF, 1) - PRINT_COURSE_SCORES(COURSE_JRB, 1) - PRINT_COURSE_SCORES(COURSE_CCM, 1) - PRINT_COURSE_SCORES(COURSE_BBH, 1) - PRINT_COURSE_SCORES(COURSE_HMC, 1) - PRINT_COURSE_SCORES(COURSE_LLL, 1) - PRINT_COURSE_SCORES(COURSE_SSL, 1) - PRINT_COURSE_SCORES(COURSE_DDD, 1) - PRINT_COURSE_SCORES(COURSE_SL, 0) - PRINT_COURSE_SCORES(COURSE_WDW, 0) - PRINT_COURSE_SCORES(COURSE_TTM, 0) - PRINT_COURSE_SCORES(COURSE_THI, 0) - PRINT_COURSE_SCORES(COURSE_TTC, 0) - PRINT_COURSE_SCORES(COURSE_RR, 0) -#undef PRINT_COURSE_SCORES + PRINT_COURSE_NAME_AND_SCORES(COURSE_BOB, 1) + PRINT_COURSE_NAME_AND_SCORES(COURSE_WF, 1) + PRINT_COURSE_NAME_AND_SCORES(COURSE_JRB, 1) + PRINT_COURSE_NAME_AND_SCORES(COURSE_CCM, 1) + PRINT_COURSE_NAME_AND_SCORES(COURSE_BBH, 1) + PRINT_COURSE_NAME_AND_SCORES(COURSE_HMC, 1) + PRINT_COURSE_NAME_AND_SCORES(COURSE_LLL, 1) + PRINT_COURSE_NAME_AND_SCORES(COURSE_SSL, 1) + PRINT_COURSE_NAME_AND_SCORES(COURSE_DDD, 1) + PRINT_COURSE_NAME_AND_SCORES(COURSE_SL, 0) + PRINT_COURSE_NAME_AND_SCORES(COURSE_WDW, 0) + PRINT_COURSE_NAME_AND_SCORES(COURSE_TTM, 0) + PRINT_COURSE_NAME_AND_SCORES(COURSE_THI, 0) + PRINT_COURSE_NAME_AND_SCORES(COURSE_TTC, 0) + PRINT_COURSE_NAME_AND_SCORES(COURSE_RR, 0) // Print castle secret stars text - print_menu_generic_string(LEVEL_NAME_X + SECRET_STARS_PAD, 23 + 12 * 16, + FILE_SELECT_PRINT_STRING(LEVEL_NAME_X + SECRET_STARS_PAD, 23 + 12 * 16, segmented_to_virtual(levelNameTable[25])); // Print castle secret stars score print_score_file_castle_secret_stars(fileIndex, STAR_SCORE_X, 23 + 12 * 16); +#endif // Print current coin score mode if (sScoreFileCoinScoreMode == 0) { - print_menu_generic_string(MYSCORE_X, 24, LANGUAGE_ARRAY(textMyScore)); + FILE_SELECT_PRINT_STRING(MYSCORE_X, MYSCORE_Y, LANGUAGE_ARRAY(textMyScore)); } else { - print_menu_generic_string(HISCORE_X, 24, LANGUAGE_ARRAY(textHiScore)); + FILE_SELECT_PRINT_STRING(HISCORE_X, HISCORE_Y, LANGUAGE_ARRAY(textHiScore)); } - gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_end); +#ifdef VERSION_CN + // Print L and R button indicators + FILE_SELECT_PRINT_STRING(30, 17, textArrowL); + FILE_SELECT_PRINT_STRING(270, 17, textRArrow); +#endif + + gSPDisplayList(gDisplayListHead++, FILE_SELECT_TEXT_DL_END); } +#undef PRINT_COURSE_NAME_CN +#undef PRINT_COURSE_SCORES_CN +#undef PRINT_COURSE_NAME_AND_SCORES + /** * Prints file select strings depending on the menu selected. * Also checks if all saves exists and defines text and main menu timers. */ static void print_file_select_strings(void) { +#ifndef VERSION_CN UNUSED u8 filler[8]; +#endif create_dl_ortho_matrix(); switch (sSelectedButtonID) { @@ -2854,7 +3127,7 @@ Gfx *geo_file_select_strings_and_menu_cursor(s32 callContext, UNUSED struct Grap */ s32 lvl_init_menu_values_and_cursor_pos(UNUSED s32 arg, UNUSED s32 unused) { #ifdef VERSION_EU - s8 fileNum; + s8 fileIndex; #endif sSelectedButtonID = MENU_BUTTON_NONE; sCurrentMenuLevel = MENU_LAYER_MAIN; @@ -2894,8 +3167,8 @@ s32 lvl_init_menu_values_and_cursor_pos(UNUSED s32 arg, UNUSED s32 unused) { #ifdef VERSION_EU sLanguageMode = eu_get_language(); - for (fileNum = 0; fileNum < 4; fileNum++) { - if (save_file_exists(fileNum) == TRUE) { + for (fileIndex = 0; fileIndex <= 3; fileIndex++) { + if (save_file_exists(fileIndex) == TRUE) { sOpenLangSettings = FALSE; break; } else { @@ -2918,3 +3191,7 @@ s32 lvl_update_obj_and_load_file_selected(UNUSED s32 arg, UNUSED s32 unused) { area_update_objects(); return sSelectedFileNum; } + +#undef FILE_SELECT_PRINT_STRING +#undef FILE_SELECT_TEXT_DL_BEGIN +#undef FILE_SELECT_TEXT_DL_END diff --git a/src/menu/intro_geo.c b/src/menu/intro_geo.c index efbbfbbb..bfa85b8d 100644 --- a/src/menu/intro_geo.c +++ b/src/menu/intro_geo.c @@ -27,7 +27,7 @@ struct GraphNodeMore { }; // intro geo bss -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) static u16 *sFramebuffers[3]; #endif static s32 sGameOverFrameCounter; @@ -82,7 +82,7 @@ Gfx *geo_intro_super_mario_64_logo(s32 state, struct GraphNode *node, UNUSED voi guScale(scaleMat, scaleX, scaleY, scaleZ); gSPMatrix(dlIter++, scaleMat, G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_PUSH); - gSPDisplayList(dlIter++, &intro_seg7_dl_0700B3A0); // draw model + gSPDisplayList(dlIter++, &intro_seg7_dl_logo); // draw model gSPPopMatrix(dlIter++, G_MTX_MODELVIEW); gSPEndDisplayList(dlIter); @@ -116,7 +116,7 @@ Gfx *geo_intro_tm_copyright(s32 state, struct GraphNode *node, UNUSED void *cont gDPSetRenderMode(dlIter++, G_RM_AA_XLU_SURF, G_RM_AA_XLU_SURF2); break; } - gSPDisplayList(dlIter++, &intro_seg7_dl_0700C6A0); // draw model + gSPDisplayList(dlIter++, &intro_seg7_dl_copyright); // draw model gSPEndDisplayList(dlIter); // Once the "Super Mario 64" logo has just about zoomed fully, fade in the "TM" and copyright text @@ -167,7 +167,7 @@ static Gfx *intro_backdrop_one_image(s32 index, s8 *backgroundTable) { guTranslate(mtx, xCoords[index], yCoords[index], 0.0f); gSPMatrix(displayListIter++, mtx, G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_PUSH); gSPDisplayList(displayListIter++, &title_screen_bg_dl_0A000118); - for (i = 0; i < 4; ++i) { + for (i = 0; i < 4; i++) { gDPLoadTextureBlock(displayListIter++, vIntroBgTable[i], G_IM_FMT_RGBA, G_IM_SIZ_16b, 80, 20, 0, G_TX_CLAMP, G_TX_CLAMP, 7, 6, G_TX_NOLOD, G_TX_NOLOD) gSPDisplayList(displayListIter++, introBackgroundDlRows[i]); @@ -204,7 +204,7 @@ Gfx *geo_intro_regular_backdrop(s32 state, struct GraphNode *node, UNUSED void * graphNode->node.flags = (graphNode->node.flags & 0xFF) | (LAYER_OPAQUE << 8); gSPDisplayList(dlIter++, &dl_proj_mtx_fullscreen); gSPDisplayList(dlIter++, &title_screen_bg_dl_0A000100); - for (i = 0; i < 12; ++i) { + for (i = 0; i < 12; i++) { gSPDisplayList(dlIter++, intro_backdrop_one_image(i, backgroundTable)); } gSPDisplayList(dlIter++, &title_screen_bg_dl_0A000190); @@ -233,8 +233,9 @@ Gfx *geo_intro_gameover_backdrop(s32 state, struct GraphNode *node, UNUSED void if (state != 1) { // reset sGameOverFrameCounter = 0; sGameOverTableIndex = -2; - for (i = 0; i < ARRAY_COUNT(gameOverBackgroundTable); ++i) + for (i = 0; i < ARRAY_COUNT(gameOverBackgroundTable); i++) { gameOverBackgroundTable[i] = INTRO_BACKGROUND_GAME_OVER; + } } else { // draw dl = alloc_display_list(16 * sizeof(*dl)); dlIter = dl; @@ -262,15 +263,16 @@ Gfx *geo_intro_gameover_backdrop(s32 state, struct GraphNode *node, UNUSED void // draw all the tiles gSPDisplayList(dlIter++, &dl_proj_mtx_fullscreen); gSPDisplayList(dlIter++, &title_screen_bg_dl_0A000100); - for (j = 0; j < ARRAY_COUNT(gameOverBackgroundTable); ++j) + for (j = 0; j < ARRAY_COUNT(gameOverBackgroundTable); j++) { gSPDisplayList(dlIter++, intro_backdrop_one_image(j, gameOverBackgroundTable)); + } gSPDisplayList(dlIter++, &title_screen_bg_dl_0A000190); gSPEndDisplayList(dlIter); } return dl; } -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) extern Gfx title_screen_bg_dl_0A0065E8[]; extern Gfx title_screen_bg_dl_0A006618[]; @@ -335,6 +337,73 @@ Gfx *intro_draw_face(u16 *image, s32 imageW, s32 imageH) { return dl; } +#ifdef VERSION_CN + +// TODO: See whether this matches other game versions too, clearly there was no actual +// substantive change in this function +u16 *intro_sample_framebuffer(s32 imageW, s32 imageH, s32 sampleW, s32 sampleH) { + u16 *fb; + u16 *image; + s32 xIndex; + s32 yIndex; + f32 size; + f32 r, g, b; + s32 iy, ix, sy, sx; + s32 xOffset, yOffset; + u16 fbr, fbg, fbb; + f32 f1, f2, f3; + + fb = sFramebuffers[sRenderingFramebuffer]; + image = alloc_display_list(imageW * imageH * sizeof(u16)); + + if (image == NULL) { + return image; + } + + for (iy = 0; iy < imageH; iy++) { + yOffset = 80; + + for (ix = 0; ix < imageW; ix++) { + xOffset = 120; + + r = 0; + g = 0; + b = 0; + + for (sy = 0; sy < sampleH; sy++) { + for (sx = 0; sx < sampleW; sx++) { + yIndex = (sampleH * iy + yOffset) + sy; + xIndex = (sampleW * ix + xOffset) + sx; + + fbr = fb[320 * yIndex + xIndex]; + fbg = fb[320 * yIndex + xIndex]; + fbb = fb[320 * yIndex + xIndex]; + + f1 = (fbr >> 0xB) & 0x1F; + f2 = (fbg >> 0x6) & 0x1F; + f3 = (fbb >> 0x1) & 0x1F; + + r += f1; + g += f2; + b += f3; + } + } + + size = sampleW * sampleH; + + fbr = ((u16) (r / size + 0.5) << 0xB) & 0xF800; + fbg = ((u16) (g / size + 0.5) << 0x6) & 0x7C0; + fbb = ((u16) (b / size + 0.5) << 0x1) & 0x3E; + + image[imageH * iy + ix] = fbr + fbg + fbb + 1; + } + } + + return image; +} + +#else + u16 *intro_sample_framebuffer(s32 imageW, s32 imageH, s32 sampleW, s32 sampleH) { u16 *fb; u16 *image; @@ -389,12 +458,16 @@ u16 *intro_sample_framebuffer(s32 imageW, s32 imageH, s32 sampleW, s32 sampleH) return image; } +#endif + Gfx *geo_intro_face_easter_egg(s32 state, struct GraphNode *node, UNUSED void *context) { - struct GraphNodeGenerated *genNode = (struct GraphNodeGenerated *)node; + struct GraphNodeGenerated *genNode; u16 *image; Gfx *dl = NULL; s32 i; + genNode = (struct GraphNodeGenerated *) node; + if (state != 1) { sFramebuffers[0] = gFramebuffer0; sFramebuffers[1] = gFramebuffer1; @@ -403,7 +476,6 @@ Gfx *geo_intro_face_easter_egg(s32 state, struct GraphNode *node, UNUSED void *c for (i = 0; i < 48; i++) { sFaceVisible[i] = 0; } - } else if (state == 1) { if (sFaceCounter == 0) { if (gPlayer1Controller->buttonPressed & Z_TRIG) { diff --git a/src/menu/intro_geo.h b/src/menu/intro_geo.h index bedafb67..9797fd0b 100644 --- a/src/menu/intro_geo.h +++ b/src/menu/intro_geo.h @@ -12,7 +12,7 @@ Gfx *geo_intro_tm_copyright(s32 sp40, struct GraphNode *sp44, UNUSED void *conte Gfx *geo_intro_regular_backdrop(s32 sp48, struct GraphNode *sp4c, UNUSED void *context); Gfx *geo_intro_gameover_backdrop(s32 sp40, struct GraphNode *sp44, UNUSED void *context); -#ifdef VERSION_SH +#if defined(VERSION_SH) || defined(VERSION_CN) Gfx *geo_intro_face_easter_egg(s32 state, struct GraphNode *node, UNUSED void *context); Gfx *geo_intro_rumble_pak_graphic(s32 state, struct GraphNode *node, UNUSED void *context); #endif diff --git a/src/menu/star_select.c b/src/menu/star_select.c index f7d1d740..68995d27 100644 --- a/src/menu/star_select.c +++ b/src/menu/star_select.c @@ -149,7 +149,8 @@ void bhv_act_selector_init(void) { for (i = 0; i < sVisibleStars; i++) { sStarSelectorModels[i] = spawn_object_abs_with_rot(gCurrentObject, 0, selectorModelIDs[i], bhvActSelectorStarType, - 75 + sVisibleStars * -75 + i * 152, 248, -300, 0, 0, 0); + (sVisibleStars - 1) * -75 + i * 152, 248, -300, 0, 0, 0); + sStarSelectorModels[i]->oStarSelectorSize = 1.0f; } @@ -176,7 +177,7 @@ void bhv_act_selector_loop(void) { starIndexCounter = sSelectableStarIndex; for (i = 0; i < sVisibleStars; i++) { // Can the star be selected (is it either already completed or the first non-completed mission) - if ((stars & (1 << i)) || i + 1 == sInitSelectedActNum) { + if ((stars & (1 << i)) || i == sInitSelectedActNum - 1) { if (starIndexCounter == 0) { // We have reached the sSelectableStarIndex-th selectable star. sSelectedActIndex = i; break; @@ -262,6 +263,7 @@ void print_act_selector_strings(void) { #else unsigned char myScore[] = { TEXT_MYSCORE }; #endif + unsigned char starNumbers[] = { TEXT_ZERO }; #ifdef VERSION_EU @@ -311,15 +313,23 @@ void print_act_selector_strings(void) { gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, 255); // Print the "MY SCORE" text if the coin score is more than 0 if (save_file_get_course_coin_score(gCurrSaveFileNum - 1, COURSE_NUM_TO_INDEX(gCurrCourseNum)) != 0) { + // TODO: Macros for all these hardcoded positions would be nice #ifdef VERSION_EU print_generic_string(95, 118, myScore[language]); +#elif defined(VERSION_CN) + print_generic_string(89, 118, myScore); #else print_generic_string(102, 118, myScore); #endif } +#ifdef VERSION_CN + lvlNameX = get_str_x_pos_from_center(160, currLevelName + 6, 16.0f); + print_generic_string(lvlNameX, 30, currLevelName + 6); +#else lvlNameX = get_str_x_pos_from_center(160, currLevelName + 3, 10.0f); print_generic_string(lvlNameX, 33, currLevelName + 3); +#endif gSPDisplayList(gDisplayListHead++, dl_ia_text_end); @@ -329,38 +339,56 @@ void print_act_selector_strings(void) { print_course_number(); #endif +#ifdef VERSION_CN + gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); +#else gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_begin); +#endif gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, 255); + // Print the name of the selected act. if (sVisibleStars != 0) { selectedActName = segmented_to_virtual(actNameTbl[COURSE_NUM_TO_INDEX(gCurrCourseNum) * 6 + sSelectedActIndex]); +#ifdef VERSION_CN + actNameX = get_str_x_pos_from_center(ACT_NAME_X, selectedActName, 16.0f); + print_generic_string(actNameX, 141, selectedActName); +#else actNameX = get_str_x_pos_from_center(ACT_NAME_X, selectedActName, 8.0f); print_menu_generic_string(actNameX, 81, selectedActName); +#endif } +#ifdef VERSION_CN + gSPDisplayList(gDisplayListHead++, dl_ia_text_end); + + gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_begin); + gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, 255); +#endif + // Print the numbers above each star. for (i = 1; i <= sVisibleStars; i++) { starNumbers[0] = i; #ifdef VERSION_EU - print_menu_generic_string(143 - sVisibleStars * 15 + i * 30, 38, starNumbers); + print_menu_generic_string(128 - (sVisibleStars - 1) * 15 + i * 30, 38, starNumbers); #else - print_menu_generic_string(139 - sVisibleStars * 17 + i * 34, 38, starNumbers); + print_menu_generic_string(122 - (sVisibleStars - 1) * 17 + i * 34, 38, starNumbers); #endif } gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_end); - } +} /** * Geo function that Print act selector strings. *!@bug: This geo function is missing the third param. Harmless in practice due to o32 convention. */ #ifdef AVOID_UB -Gfx *geo_act_selector_strings(s16 callContext, UNUSED struct GraphNode *node, UNUSED void *context) { +Gfx *geo_act_selector_strings(s16 callContext, UNUSED struct GraphNode *node, UNUSED void *context) #else -Gfx *geo_act_selector_strings(s16 callContext, UNUSED struct GraphNode *node) { +Gfx *geo_act_selector_strings(s16 callContext, UNUSED struct GraphNode *node) #endif +{ if (callContext == GEO_CONTEXT_RENDER) { print_act_selector_strings(); } @@ -402,10 +430,11 @@ s32 lvl_update_obj_and_load_act_button_actions(UNUSED s32 arg, UNUSED s32 unused #ifndef VERSION_EU if ((gPlayer3Controller->buttonPressed & A_BUTTON) || (gPlayer3Controller->buttonPressed & START_BUTTON) - || (gPlayer3Controller->buttonPressed & B_BUTTON)) { + || (gPlayer3Controller->buttonPressed & B_BUTTON)) #else - if ((gPlayer3Controller->buttonPressed & (A_BUTTON | START_BUTTON | B_BUTTON | Z_TRIG))) { + if (gPlayer3Controller->buttonPressed & (A_BUTTON | START_BUTTON | B_BUTTON | Z_TRIG)) #endif + { #ifdef VERSION_JP play_sound(SOUND_MENU_STAR_SOUND, gGlobalSoundSource); #else diff --git a/text/cn/courses.h b/text/cn/courses.h new file mode 100644 index 00000000..0494a13e --- /dev/null +++ b/text/cn/courses.h @@ -0,0 +1,80 @@ +COURSE_ACTS(COURSE_BOB, _(" 1 炸弹王国"), + _(" 山顶上的炸弹王") , _(" 喏库诺库的田径锦标赛") , _(" 空中岛屿"), + _(" 炸弹王国的8枚红色硬币") , _(" 长翅膀的马力欧") , _(" 汪汪看守的铁门")) + +COURSE_ACTS(COURSE_WF, _(" 2 嘭嘭要塞"), + _(" 疯狂的嘭嘭王") , _(" 要塞之巅") , _(" 射向蓝天"), + _(" 浮岛上的红色硬币") , _(" 空降到摇篮岛") , _(" 破壁摘星")) + +COURSE_ACTS(COURSE_JRB, _(" 3 海盗湾"), + _(" 沉船里的宝藏") , _(" 出来玩吧海鳗") , _(" 海底岩洞的财宝"), + _(" 浮船上的红色硬币") , _(" 发射到石柱平台") , _(" 穿越急流")) + +COURSE_ACTS(COURSE_CCM, _(" 4 酷冰冰雪山"), + _(" 企鹅的滑梯") , _(" 该回家了企鹅宝宝") , _(" 大企鹅的滑雪比赛"), + _(" 冰雪中的8枚红色硬币") , _(" 帮助雪人寻找脑袋") , _(" 要用踢墙跳了")) + +COURSE_ACTS(COURSE_BBH, _(" 5 大嘘嘘鬼的城堡"), + _(" 马力欧猎鬼记") , _(" 嘘嘘鬼的旋转木马") , _(" 书房密室"), + _(" 寻找8枚红色硬币") , _(" 大嘘嘘鬼的阳台") , _(" 密室里的大眼睛")) + +COURSE_ACTS(COURSE_HMC, _(" 6 迷失洞窟"), + _(" 洞穴里的海怪") , _(" 移动平台的红色硬币") , _(" 金属马力欧"), + _(" 通过毒气洞窟") , _(" 迷宫里的紧急出口") , _(" 小心落下的巨石")) + +COURSE_ACTS(COURSE_LLL, _(" 7 岩浆地狱"), + _(" 融化斗斗帮主") , _(" 打败斗斗帮") , _(" 15块拼图中的8枚红色硬币"), + _(" 灼热的滚木陷阱") , _(" 跳进火山") , _(" 火山里的电梯之旅")) + +COURSE_ACTS(COURSE_SSL, _(" 8 酷热沙漠"), + _(" 还给我星星  秃鹫") , _(" 金字塔顶的闪光") , _(" 法老的珍宝"), + _(" 立于四柱之颠") , _(" 为了8枚红色硬币自由飞翔") , _(" 金字塔之谜")) + +COURSE_ACTS(COURSE_DDD, _(" 9 恐怖船坞"), + _(" 酷霸王的潜水艇") , _(" 湍流中的宝箱") , _(" 天才的杂技演员"), + _(" 急流勇进") , _(" 鳐鱼的奖励") , _(" 帽子收藏家")) + +COURSE_ACTS(COURSE_SL, _("10 雪人王国"), + _(" 大头雪人") , _(" 寒冷的斗斗") , _(" 冰雕迷宫"), + _(" 冰冻池塘圆舞曲") , _(" 雪地滑板与红色硬币") , _(" 爱斯基摩人的小屋")) + +COURSE_ACTS(COURSE_WDW, _("11 水下遗迹"), + _(" 箭头跳板") , _(" 水城之巅") , _(" 天空和水下的秘密"), + _(" 快速电梯——抓紧时间") , _(" 小镇里的8枚红色硬币") , _(" 快速穿过小镇")) + +COURSE_ACTS(COURSE_TTM, _("12 高高山脉"), + _(" 攀登高高的山脉") , _(" 神秘的小猴呦奇的笼子") , _(" 蘑菇上的红色硬币"), + _(" 山间滑道") , _(" 惊险水帘洞") , _(" 孤独的蘑菇")) + +COURSE_ACTS(COURSE_THI, _("13 小人国大人国"), + _(" 食人花") , _(" 大人国之巅") , _(" 喏库喏库又回来了"), + _(" 小人国的五个秘密") , _(" 花之子的红色硬币") , _(" 蠕动的花之子")) + +COURSE_ACTS(COURSE_TTC, _("14 摇摆古钟"), + _(" 跳进笼子") , _(" 小洞和钟摆") , _(" 跳上指针"), + _(" 时钟的顶楼") , _(" 恰好踏在移动的木块上") , _(" 正点的红色硬币")) + +COURSE_ACTS(COURSE_RR, _("15 彩虹之旅"), + _(" 穿梭在彩虹之间的飞行船") , _(" 云中城堡") , _(" 迷宫中收集硬币"), + _(" 风中摇荡") , _(" 狡猾的三角") , _(" 在彩虹之上的某处")) + +SECRET_STAR(COURSE_BITDW, _("   黑暗世界的酷霸王")) +SECRET_STAR(COURSE_BITFS, _("   火海中的酷霸王")) +SECRET_STAR(COURSE_BITS, _("   天空之城的酷霸王")) +SECRET_STAR(COURSE_PSS, _("   公主的秘密滑梯")) +SECRET_STAR(COURSE_COTMC, _("   金属帽的瀑布石洞")) +SECRET_STAR(COURSE_TOTWC, _("   飞行帽之塔")) +SECRET_STAR(COURSE_VCUTM, _("   护城河里的隐身帽")) +SECRET_STAR(COURSE_WMOTR, _("   飞越彩虹")) +SECRET_STAR(COURSE_SA, _("   秘密水族馆")) +SECRET_STAR(COURSE_CAKE_END, _("")) + +CASTLE_SECRET_STARS(_("   城堡里的隐藏星")) + +EXTRA_TEXT(0, _(" 城堡中的隐藏星")) +EXTRA_TEXT(1, _("")) +EXTRA_TEXT(2, _("")) +EXTRA_TEXT(3, _("")) +EXTRA_TEXT(4, _("")) +EXTRA_TEXT(5, _("")) +EXTRA_TEXT(6, _("")) diff --git a/text/cn/dialogs.h b/text/cn/dialogs.h new file mode 100644 index 00000000..99e6bf59 --- /dev/null +++ b/text/cn/dialogs.h @@ -0,0 +1,2306 @@ +// Parameters: dialog enum ID, (unused), lines per box, left offset, width + +DEFINE_DIALOG(DIALOG_000, 1, 6, 30, 200, _("\ +哇!你闯入炸弹\n\ +王国的战场啦。\n\ +你可以在这个壁\n\ +画世界里找到酷\n\ +霸王偷走的\n\ +力量之星。\n\ + \n\ +你可以先去问问\n\ +炸弹兵(按[B]键\n\ +开始对话),从\n\ +他和他的伙伴那\n\ +里可以得到帮\n\ +助。\n\ + \n\ +如果需要察看路\n\ +标,面对它,按\n\ +[B]键。按[A]键或[B]\n\ +键来翻页。你还\n\ +可以站在其他人\n\ +面前,按[B]键来\n\ +和他们对话。")) + +DEFINE_DIALOG(DIALOG_001, 1, 4, 95, 200, _("\ +当心!如果你在\n\ +这里瞎逛,随时\n\ +有可能被水珠炸\n\ +弹炸伤!那些敌\n\ +对的炸弹兵非常\n\ +好战,他们总是\n\ +想方设法来攻击\n\ +你。\n\ + \n\ +自从炸弹王得到\n\ +了力量之星,这\n\ +片草原就变得战\n\ +火纷飞。你能帮\n\ +我们找回力量之\n\ +星吗?穿过这座\n\ +桥,沿着左上的\n\ +小路可以找到炸\n\ +弹王。如果你夺\n\ +回力量之星,记\n\ +得一定要回来看\n\ +看我啊。")) + +DEFINE_DIALOG(DIALOG_002, 1, 4, 95, 200, _("\ +嘿!你听着,前\n\ +面很危险,一定\n\ +要小心噢!听好\n\ +我的忠告!\n\ + \n\ +穿过前面的两座\n\ +桥以后,一定要\n\ +小心天上坠落的\n\ +水珠炸弹。\n\ + \n\ +在山顶,你会找\n\ +到炸弹王,他可\n\ +是非常强大噢,\n\ +千万不要让他\n\ +抓到你啊!\n\ + \n\ +我们是站在你一\n\ +边的炸弹兵,你\n\ +随时都可以来找\n\ +我们帮忙。")) + +DEFINE_DIALOG(DIALOG_003, 1, 5, 95, 200, _("\ +谢谢,马力欧!\n\ +现在的炸弹王只\n\ +是一个哑弹了,\n\ +哈哈!但是,真\n\ +正的战斗才刚刚\n\ +开始。\n\ + \n\ +其余的力量之星\n\ +被其他敌人拿走\n\ +了。只有夺回更\n\ +多的力量之星,\n\ +你才可以打开通\n\ +往其它新世界的\n\ +大门。我的伙伴\n\ +们正在等着你,\n\ +别忘了去找他们\n\ +啊!他们会为你\n\ +准备好大炮的。")) + +DEFINE_DIALOG(DIALOG_004, 1, 3, 95, 200, _("\ +我们是爱好和平\n\ +的炸弹兵,所以\n\ +我们不用大炮。\n\ + \n\ +我们不会介意你\n\ +从大炮中发射出\n\ +去,我们会为你\n\ +准备好这一关卡\n\ +的所有大炮。\n\ +一路顺风!")) + +DEFINE_DIALOG(DIALOG_005, 1, 4, 30, 200, _("\ +嘿,马力欧。真\n\ +的是你打败了炸\n\ +弹王吗?厉害!\n\ +你一定很强大而\n\ +且行动迅速吧?\n\ +不过,你到底有\n\ +多快呢?可以追\n\ +上我吗?我可是\n\ +大名鼎鼎的喏库\n\ +喏库!哈…哈!\n\ +你赢不了我的!\n\ +你可以来试试,\n\ +我们来打个赌,\n\ +你和我来一次赛\n\ +跑比赛,终点就\n\ +是你打败炸弹王\n\ +的那个山顶。你\n\ +看怎么样?当我\n\ +说“开始”,就\n\ +开始比赛!\n\ + \n\ +好了,预备…\n\ + \n\ +  开始!  不")) + +DEFINE_DIALOG(DIALOG_006, 1, 3, 30, 200, _("\ +嘿!!!别当我\n\ +是傻瓜。下次记\n\ +得跑完全程!等\n\ +你真的想比赛的\n\ +时候再来找我!")) + +DEFINE_DIALOG(DIALOG_007, 1, 5, 30, 200, _("\ +哈呼…哈呼…\n\ +哇!你…真是…\n\ +好快…啊!真是\n\ +个疯子!这个给\n\ +你吧,你赢了!\n\ +我愿赌服输。")) + +DEFINE_DIALOG(DIALOG_008, 1, 4, 30, 200, _("\ +千万当心那个满\n\ +嘴铁牙带着锁链\n\ +的家伙!它很危\n\ +险!你靠近它,\n\ +按[C]▲键仔细看。\n\ +吓坏了,是吗?\n\ +再看看木桩上的\n\ +那枚红色硬币!\n\ + \n\ +当你收集了八枚\n\ +这样的硬币后,\n\ +桥那边的草地上\n\ +就会出现一颗\n\ +力量之星。")) + +DEFINE_DIALOG(DIALOG_009, 1, 5, 30, 200, _("\ +哇!好久不见!\n\ +你跑得更快了?\n\ +还是你更加狡猾\n\ +了?还是那些星\n\ +星给了你力量?\n\ +上次输给你我真\n\ +不甘心。现在是\n\ +我的主场,我们\n\ +再来比比如何?\n\ +终点就是风之峡\n\ +谷。预备?\n\ + \n\ +  开始!  不")) + +DEFINE_DIALOG(DIALOG_010, 1, 4, 30, 200, _("\ +你踩了飞行帽的\n\ +开关。戴上飞行\n\ +帽,你就可以在\n\ +空中飞翔了。\n\ + \n\ +从现在开始,所\n\ +有你找到的红色\n\ +砖块里都会跳出\n\ +飞行帽。\n\ + \n\ +要保存游戏吗?\n\ + \n\ +  是        否")) + +DEFINE_DIALOG(DIALOG_011, 1, 4, 30, 200, _("\ +你踩了金属帽的\n\ +开关。金属帽会\n\ +让马力欧无敌。\n\ + \n\ +从现在开始,所\n\ +有你找到的绿色\n\ +砖块里都会跳出\n\ +金属帽。\n\ + \n\ +要保存游戏吗?\n\ + \n\ +  是        否")) + +DEFINE_DIALOG(DIALOG_012, 1, 4, 30, 200, _("\ +你踩了隐身帽的\n\ +开关。隐身帽会\n\ +让马力欧透明,\n\ +敌人将看不见马\n\ +力欧。\n\ + \n\ +从现在开始,所\n\ +有你找到的蓝色\n\ +砖块里都会跳出\n\ +隐身帽。\n\ + \n\ +要保存游戏吗?\n\ + \n\ +  是        否")) + +DEFINE_DIALOG(DIALOG_013, 1, 5, 30, 200, _("\ +你已经夺回了\n\ +100枚硬币!\n\ +马力欧从城堡中\n\ +得到了更多的力\n\ +量。\n\ + \n\ +要保存游戏吗?\n\ + \n\ +  是        否")) + +DEFINE_DIALOG(DIALOG_014, 1, 4, 30, 200, _("\ +哇!又一颗力量\n\ +之星!马力欧从\n\ +城堡中得到了更\n\ +多的力量。\n\ + \n\ +要保存游戏吗?\n\ + \n\ +  没错!   不")) + +DEFINE_DIALOG(DIALOG_015, 1, 4, 30, 200, _("\ +你可以用拳头来\n\ +打败敌人。按[A]\n\ +键跳跃,按[B]键\n\ +出拳,按[A]键再\n\ +按[B]键踢脚。如\n\ +果你要把什么东\n\ +西举起来,也是\n\ +按[B]键,如果要\n\ +把它们扔出去,\n\ +再按一次[B]键。")) + +DEFINE_DIALOG(DIALOG_016, 1, 3, 30, 200, _("\ +跳上那个闪光的\n\ +龟壳,乘着它到\n\ +任何你想去的地\n\ +方!用它还可以\n\ +压碎那些敌人!")) + +DEFINE_DIALOG(DIALOG_017, 1, 4, 30, 200, _("\ +我是这里的统治\n\ +者炸弹王。\n\ + \n\ +你怎么敢爬上我\n\ +的山?你凭什么\n\ +站在我炸弹王的\n\ +山顶?你虽然侥\n\ +幸地躲过了我的\n\ +守卫,但永远不\n\ +可能逃出我的手\n\ +掌心…\n\ + \n\ +…你永远不可能\n\ +夺走我的力量之\n\ +星。马力欧,我\n\ +现在就要和你决\n\ +斗!\n\ + \n\ +如果你要我的力\n\ +量之星,你必须\n\ +在决斗中证明你\n\ +自己。\n\ + \n\ +你可以从我身后\n\ +抱起我,并把我\n\ +摔到这皇室的草\n\ +地上吗?我想你\n\ +永远也办不到!")) + +DEFINE_DIALOG(DIALOG_018, 1, 4, 30, 200, _("\ +我好困阿…我要\n\ +睡了…我可不希\n\ +望被别人打扰。\n\ +所以,请你走路\n\ +轻一点。")) + +DEFINE_DIALOG(DIALOG_019, 1, 2, 30, 200, _("\ +嘘!在走廊里请\n\ +放轻你的脚步!")) + +DEFINE_DIALOG(DIALOG_020, 1, 6, 95, 150, _("\ +亲爱的马力欧:\n\ +请到城堡来,我\n\ +特意为你烤了一\n\ +个大蛋糕。\n\ + \n\ +      桃花公主")) + +DEFINE_DIALOG(DIALOG_021, 1, 5, 95, 200, _("\ +欢迎你啊!\n\ + \n\ +这里没人!快滚\n\ +吧!不要再回来\n\ +了!\n\ + \n\ +哇…哈哈…哈!")) + +DEFINE_DIALOG(DIALOG_022, 1, 2, 95, 200, _("\ +你需要一把钥匙\n\ +来打开这扇门。")) + +DEFINE_DIALOG(DIALOG_023, 1, 3, 95, 200, _("\ +这把钥匙不行。\n\ +也许这是地下室\n\ +的钥匙。")) + +DEFINE_DIALOG(DIALOG_024, 1, 5, 95, 200, _("\ +你需要力量之星\n\ +来打开这扇门。\n\ +打败城堡中某幅\n\ +壁画中的敌人,\n\ +就能夺回一颗力\n\ +量之心。")) + +DEFINE_DIALOG(DIALOG_025, 1, 4, 95, 200, _("\ +打开这扇门需要\n\ +3颗力量之星。\n\ +你还缺少[%]颗。")) + +DEFINE_DIALOG(DIALOG_026, 1, 4, 95, 200, _("\ +打开这扇门需要\n\ +8颗力量之星。\n\ +你还缺少[%]颗。")) + +DEFINE_DIALOG(DIALOG_027, 1, 4, 95, 200, _("\ +打开这扇门需要\n\ +30颗力量之星。\n\ +你还缺少[%]颗。")) + +DEFINE_DIALOG(DIALOG_028, 1, 4, 95, 200, _("\ +打开这扇门需要\n\ +50颗力量之星。\n\ +你还缺少[%]颗。")) + +DEFINE_DIALOG(DIALOG_029, 1, 5, 95, 200, _("\ +要打开通往\n\ +“无尽的楼梯”\n\ +的门需要70颗\n\ +力量之星。\n\ + \n\ +哈…哈…哈!")) + +DEFINE_DIALOG(DIALOG_030, 1, 6, 30, 200, _("\ + \n\ +嗨!现在是朱盖\n\ +木兄弟的现场插\n\ +播,报道马力欧\n\ +的最新进展。他\n\ +已经学会了悄悄\n\ +接近敌人的技\n\ +巧,方法如下:\n\ +马力欧为了不让\n\ +脚步发出声音,\n\ +必须走得非常缓\n\ +慢。\n\ + \n\ +再次重播以前报\n\ +道过的摄像机使\n\ +用技巧,按[C]◀键\n\ +和[C]▶键从不同角\n\ +度来看马力欧,\n\ +按[C]▼键从远处观\n\ +察马力欧。如果\n\ +摄影机不能再移\n\ +动了,我们会用\n\ +嘟嘟声警告你。\n\ +这里是朱盖木兄\n\ +弟,现场报道完\n\ +毕。")) + +DEFINE_DIALOG(DIALOG_031, 1, 5, 30, 200, _("\ +不可能!你又赢\n\ +了我?!我花了\n\ +所有的积蓄买了\n\ +这双酷霸王1号\n\ +火箭跑鞋。我想\n\ +我应该把这颗力\n\ +量之星交给胜利\n\ +者,拿去吧!\n\ +马力欧,\n\ +恭喜你了!")) + +DEFINE_DIALOG(DIALOG_032, 1, 5, 30, 200, _("\ +如果你拿到了飞\n\ +行帽,你就可以\n\ +飞行了!带上飞\n\ +行帽,来一个三\n\ +级跳,在一条直\n\ +线上连续跳三次\n\ +就可以起飞了。\n\ +如果你戴着飞行\n\ +帽,从大炮里发\n\ +射出来的话,你\n\ +可以飞得更高!\n\ +在飞行过程中,\n\ +按[C]键可以左右\n\ +环视,按[Z]键可\n\ +以降落。")) + +DEFINE_DIALOG(DIALOG_033, 1, 6, 30, 200, _("\ +你好!你通过传\n\ +送管道来到了\n\ +桃花公主的城\n\ +堡。手柄的使用\n\ +很简单:按[A]键\n\ +来跳跃,按[B]键\n\ +来进攻或者读路\n\ +牌,用摇杆来控\n\ +制马力欧的行\n\ +动。好了,向城\n\ +堡出发!")) + +DEFINE_DIALOG(DIALOG_034, 1, 6, 30, 200, _("\ +下午好!这里是\n\ +朱盖木兄弟在公\n\ +主的城堡外向您\n\ +现场报道!\n\ + \n\ +马力欧已经到达\n\ +了现场,我们将\n\ +实况转播他在城\n\ +堡找回丢失的力\n\ +量之星。\n\ + \n\ +作为转播专家,\n\ +我们将选择最佳\n\ +角度来拍摄,但\n\ +你也可以按[C]键\n\ +来控制。\n\ + \n\ +如果摄影机不能\n\ +再移动了,我们\n\ +会用嘟嘟声警告\n\ +你。你还可以停\n\ +下来,按[C]▲键来\n\ +观察周围情况。\n\ + \n\ +按[A]键继续玩,\n\ +按[R]键可以切换\n\ +摄影机的视点。\n\ +一路上还会有很\n\ +多标记来帮你复\n\ +习这些操作。\n\ + \n\ +这是朱盖木兄弟\n\ +向您现场报导!")) + +DEFINE_DIALOG(DIALOG_035, 1, 5, 30, 200, _("\ +这里一共有四个\n\ +摄影机,或者说\n\ +『[C]』键。按[C]▲键\n\ +后,可以使用摇\n\ +杆来环视四周。\n\ + \n\ +一般来说,你会\n\ +从朱盖木的摄影\n\ +机来看马力欧。\n\ +这是推荐使用的\n\ +正常视点。\n\ + \n\ +你可以按[C]▶键来\n\ +改变角度。按[R]\n\ +键,切换到马力\n\ +欧的摄影机,摄\n\ +影机紧跟在马力\n\ +欧的身后。再按\n\ +一次[R]键,切换\n\ +到朱盖木的视\n\ +点。不管用朱盖\n\ +木的视点还是马\n\ +力欧的视点,按\n\ +[C]▼键来从远处观\n\ +察马力欧。")) + +DEFINE_DIALOG(DIALOG_036, 1, 5, 30, 200, _("\ +了望台\n\ +按[C]▲键环视四\n\ +周。别遗漏任何\n\ +东西哦。\n\ + \n\ +按[R]键切换到马\n\ +力欧的视点,再\n\ +按一次[R]键切换\n\ +回朱盖木的视\n\ +点。暂停游戏,\n\ +切换到“固定视\n\ +点”模式,按[R]\n\ +键把视点固定。\n\ +去试试看吧!")) + +DEFINE_DIALOG(DIALOG_037, 1, 2, 30, 200, _("\ +我赢了!你输\n\ +了!哈哈哈哈!\n\ +你不慢,但是我\n\ +是更好的滑雪运\n\ +动员!")) + +DEFINE_DIALOG(DIALOG_038, 1, 3, 95, 200, _("\ +力量之星起作用\n\ +了,门慢慢打开\n\ +了。")) + +DEFINE_DIALOG(DIALOG_039, 1, 4, 30, 200, _("\ +炸弹王有旨:\n\ +此处禁止参观。\n\ + \n\ +我绝对不会放弃\n\ +我的力量之星,\n\ +它的光芒之下隐\n\ +藏着城堡的能\n\ +量。\n\ +它是酷霸王赏赐\n\ +给我的宝物,它\n\ +会在我的国土里\n\ +保存得很好的!\n\ +我绝对不会透露\n\ +它的位置。不\n\ +过,可能有一点\n\ +点提示:在每一\n\ +个关卡的开始,\n\ +注意力量之星的\n\ +名字。\n\ + \n\ +——炸弹王")) + +DEFINE_DIALOG(DIALOG_040, 1, 3, 30, 200, _("\ +注意!警告!\n\ +下面是冰川的裂\n\ +缝。")) + +DEFINE_DIALOG(DIALOG_041, 1, 3, 30, 200, _("\ +我赢了!你输\n\ +了!哈哈哈!\n\ + \n\ +这就是你和我喏\n\ +库喏库比赛的结\n\ +果!\n\ + \n\ +下次祝你好运!")) + +DEFINE_DIALOG(DIALOG_042, 1, 4, 30, 200, _("\ +当心!独木桥!\n\ +小心慢行!\n\ + \n\ +你可以跳起抓住\n\ +峭壁的边缘,悬\n\ +挂在那里;慢慢\n\ +地往悬崖边走,\n\ +你也能抓住峭壁\n\ +的边缘。当你想\n\ +放手,可以按[Z]\n\ +键或向马力欧身\n\ +后的方向拉摇\n\ +杆。向上推摇杆\n\ +可以使马力欧爬\n\ +上峭壁。按[A]键\n\ +则是快速爬上峭\n\ +壁。")) + +DEFINE_DIALOG(DIALOG_043, 1, 5, 30, 200, _("\ +如果你跳起来并\n\ +且按住[A]键,你\n\ +就可以挂在高处\n\ +的物体上,就像\n\ +你抓住天上的飞\n\ +鸟一样。")) + +DEFINE_DIALOG(DIALOG_044, 1, 5, 95, 200, _("\ +是谁啊?谁吵醒\n\ +我了?现在还是\n\ +白天,我要睡\n\ +觉!\n\ + \n\ +喂!既然我醒\n\ +了,就跟我一起\n\ +来一次短途飞\n\ +行,如何?按住\n\ +[A]键抓住我,松\n\ +开[A]键,跳下。\n\ +只要我还飞得\n\ +动,我会带你到\n\ +任何你想去的\n\ +地方。\n\ +好了,我飞的时\n\ +候你要抓牢,并\n\ +注意我的影子。")) + +DEFINE_DIALOG(DIALOG_045, 1, 6, 95, 200, _("\ +哈呼…我快要飞\n\ +不动了。马力\n\ +欧,你应该紧急\n\ +着陆了,按[A]键\n\ +着陆。好吧,\n\ +再见了,\n\ + \n\ +再见!")) + +DEFINE_DIALOG(DIALOG_046, 1, 5, 30, 200, _("\ +你必须掌握非常\n\ +重要的三种跳跃\n\ +技巧。\n\ + \n\ +首先,试试看三\n\ +级跳。\n\ +先快跑,然后连\n\ +续跳三次,一、\n\ +二、三!如果你\n\ +掌握了正确的时\n\ +机,你就会跳得\n\ +非常高。\n\ + \n\ +接下来是远跳。\n\ +先跑起来,按[Z]\n\ +键蹲下,然后按\n\ +[A]键起跳,你可\n\ +以跳得很远。\n\ + \n\ +如果你要做踢墙\n\ +跳,按[A]键对着\n\ +墙起跳,当你碰\n\ +到墙壁时再次起\n\ +跳,你就可以跳\n\ +得更高。\n\ + \n\ +记住了吗?三级\n\ +跳,远跳和踢墙\n\ +跳。练习、练\n\ +习、再练习!\n\ +不学会它们,你\n\ +是没有希望拿到\n\ +所有的力量之星\n\ +的。")) + +DEFINE_DIALOG(DIALOG_047, 1, 2, 95, 200, _("\ +嗨!我会为你准\n\ +备好大炮!")) + +DEFINE_DIALOG(DIALOG_048, 1, 4, 30, 200, _("\ +雪山顶\n\ +小心雪山路滑!\n\ +请先去小木屋!")) + +DEFINE_DIALOG(DIALOG_049, 1, 5, 30, 200, _("\ +还记得那个踢墙\n\ +跳的技巧吗?那\n\ +是你到达非常高\n\ +的地方必须要掌\n\ +握的技巧。\n\ +使用摇杆从一面\n\ +墙跳到另一面\n\ +墙,掌握好摇杆\n\ +的方向来获得弹\n\ +跳动力。记住!\n\ +熟能生巧啊。")) + +DEFINE_DIALOG(DIALOG_050, 1, 4, 30, 200, _("\ +当你在斜面上\n\ +时,按住[Z]键来\n\ +蹲下滑行!\n\ +或在空中时按[Z]\n\ +键来用屁股重击\n\ +地面!\n\ +如果你站立不\n\ +动,蹲下,再起\n\ +跳,你就可来一\n\ +个后空翻!\n\ +记住了吗?\n\ +还有,跑动时,\n\ +蹲下起跳可以远\n\ +跳,或是蹲下,\n\ +爬行…\n\ +哦,还是慢慢\n\ +来,别担心学不\n\ +会。")) + +DEFINE_DIALOG(DIALOG_051, 1, 6, 30, 200, _("\ +攀爬非常容易!\n\ +如果你跳起来的\n\ +时候,碰到树、\n\ +旗杆或柱子,你\n\ +会自动地抓住它\n\ +们。如果再次按\n\ +[A]键,就可以跳\n\ +下。\n\ + \n\ +当你抓住旗杆、\n\ +柱子或是树时,\n\ +可以左右拔动摇\n\ +杆来围绕它们旋\n\ +转。当你爬到顶\n\ +时,向上推摇杆\n\ +可以做一个单手\n\ +倒立。以单手倒\n\ +立姿势跳下时可\n\ +以做一个漂亮的\n\ +落地动作。")) + +DEFINE_DIALOG(DIALOG_052, 1, 5, 30, 200, _("\ +原地站立按[Z]键\n\ +蹲下,再按[A]键\n\ +可以做一个很高\n\ +的后空翻。\n\ + \n\ +如果你要做侧空\n\ +翻,你可以先跑\n\ +起来,做一个急\n\ +转弯然后起跳。\n\ +无论你是做后空\n\ +翻还是侧空翻,\n\ +你的滞空时间都\n\ +很长。")) + +DEFINE_DIALOG(DIALOG_053, 1, 5, 30, 200, _("\ +有些时候,如果\n\ +你穿过一个圆环\n\ +或发现了一个隐\n\ +藏地点,就会有\n\ +一个红色的数字\n\ +出现。\n\ +如果你能触发5\n\ +个这样的数字,\n\ +就会有一个隐藏\n\ +的力量之星出\n\ +现。")) + +DEFINE_DIALOG(DIALOG_054, 1, 5, 30, 200, _("\ +欢迎来到冰雪滑\n\ +道!准备好!把\n\ +摇杆向前推可以\n\ +加速,向后拉摇\n\ +杆来减速。")) + +DEFINE_DIALOG(DIALOG_055, 1, 4, 30, 200, _("\ +嗨!马力欧,老\n\ +兄,最近如何?\n\ +你看起来好像雪\n\ +滑得不错。我一\n\ +看就知道你速度\n\ +挺快。不过,你\n\ +知道的,我可是\n\ +世界滑雪冠军!\n\ +你说什么?来场\n\ +比赛?\n\ +预备… \n\ + \n\ +  开始!  不")) + +DEFINE_DIALOG(DIALOG_056, 1, 6, 30, 200, _("\ +啊!你破了我的\n\ +纪录!太让人难\n\ +以置信了!你真\n\ +是太棒了!你终\n\ +于证明了你是最\n\ +快的。\n\ +我没有金牌给\n\ +你,但可以给你\n\ +这颗星星。\n\ +你赢得了它!")) + +DEFINE_DIALOG(DIALOG_057, 1, 4, 30, 200, _("\ +天啊!我的孩\n\ +子!你看到我的\n\ +孩子了吗?她是\n\ +我世界上最最爱\n\ +的孩子啊。(人\n\ +家都说她长得很\n\ +像我)我怎么也\n\ +想不起来我把她\n\ +拉在什么地方\n\ +了。\n\ +让我仔细想想,\n\ +我停下来抓\n\ +鱼,找一些冰\n\ +块,我,哦!\n\ + \n\ +我还是想不起!")) + +DEFINE_DIALOG(DIALOG_058, 1, 4, 30, 200, _("\ +你找到了我最珍\n\ +爱的孩子!你究\n\ +竟到哪里去了\n\ +啊?孩子!我要\n\ +怎么感谢你才好\n\ +呢?马力欧。\n\ +哦,我有…这个\n\ +力量之星。\n\ +拿去,请接受我\n\ +永远的感激之\n\ +情。")) + +DEFINE_DIALOG(DIALOG_059, 1, 4, 30, 200, _("\ +那不是我的孩\n\ +子!她根本一点\n\ +都不像我!她的\n\ +父母肯定担心死\n\ +了!")) + +DEFINE_DIALOG(DIALOG_060, 1, 4, 30, 200, _("\ +注意!\n\ +潜水必读!\n\ + \n\ +如果你在水下潜\n\ +的时间太长,你\n\ +就会缺氧。\n\ + \n\ +这时,你可以回\n\ +到水面上换气,\n\ +或在水底找一个\n\ +气泡或硬币来呼\n\ +吸。\n\ +按[A]键游泳。按\n\ +住[A]键可以慢慢\n\ +地稳稳地游。有\n\ +节奏地按[A]键可\n\ +以加快游泳的速\n\ +度。向上推摇\n\ +杆,并且按[A]键\n\ +来潜水。\n\ + \n\ +向下拉摇杆,并\n\ +同时按[A]键可以\n\ +回到水面。\n\ + \n\ +在接近水边的水\n\ +面,向下拉摇\n\ +杆,再按[A]键可\n\ +以跳出水面。")) + +DEFINE_DIALOG(DIALOG_061, 1, 4, 30, 200, _("\ + \n\ +注意!这里的水\n\ +很冷。千万不要\n\ +在这里游泳!\n\ +不是玩笑!\n\ + \n\ +——企鹅")) + +DEFINE_DIALOG(DIALOG_062, 1, 3, 30, 200, _("\ +藏在绿色砖块里\n\ +的就是神奇的金\n\ +属帽。\n\ +戴上它,你就可\n\ +以不怕火烧,也\n\ +不用担心敌人的\n\ +攻击,甚至在水\n\ +里你都不用呼\n\ +吸。\n\ + \n\ +但唯一的缺点就\n\ +是:你不能游泳\n\ +了!")) + +DEFINE_DIALOG(DIALOG_063, 1, 5, 30, 200, _("\ +隐身帽就藏在蓝\n\ +色的砖块里。如\n\ +果你戴上它,眼\n\ +睛先生也会被你\n\ +迷惑,因为谁也\n\ +看不见你。\n\ +就连大嘘嘘鬼也\n\ +会被你骗过去。\n\ +你还可以穿过一\n\ +些秘密的墙壁。")) + +DEFINE_DIALOG(DIALOG_064, 1, 5, 30, 200, _("\ +当你戴上了从红\n\ +色砖块里得到的\n\ +飞行帽时,你就\n\ +可以通过三级跳\n\ +起飞。\n\ +用摇杆控制马力\n\ +欧的方向,向下\n\ +拉摇杆可以上\n\ +升,向上推摇杆\n\ +下降。按[Z]键着\n\ +陆。")) + +DEFINE_DIALOG(DIALOG_065, 1, 6, 30, 200, _("\ +接下来是游泳\n\ +课!\n\ +按[A]键来蛙泳,\n\ +如果你按键频率\n\ +合适,就可以游\n\ +得很快。\n\ + \n\ +按住[A]键可以打\n\ +水前进,虽然\n\ +慢,但很稳。向\n\ +上推摇杆可以潜\n\ +水,向下拉则是\n\ +回到水面上。如\n\ +果要跳出水面,\n\ +则是向下拉住摇\n\ +杆,然后按[A]键\n\ +就可以了。\n\ + \n\ +怎么样,很简单\n\ +吧!\n\ + \n\ +别忘了,马力欧\n\ +在水底是不能呼\n\ +吸的,如果能量\n\ +表的值很低的时\n\ +候,记得回到水\n\ +面上让马力欧喘\n\ +一下气。\n\ + \n\ +还有一件事情:\n\ +你不能够打开水\n\ +下的门。")) + +DEFINE_DIALOG(DIALOG_066, 1, 5, 30, 200, _("\ +马力欧,是我,\n\ +桃花公主!\n\ + \n\ +你一定要小心!\n\ +酷霸王非常残\n\ +忍!他会喷出恐\n\ +怖的火焰把你烧\n\ +成焦炭。你要绕\n\ +到他的后面,按\n\ +[B]键抓住它的尾\n\ +巴。然后旋转摇\n\ +杆,你转得越\n\ +快,你就可以把\n\ +他扔得越远。\n\ + \n\ +按[C]键环视四周。\n\ +你必须把酷霸王\n\ +扔到四个角落的\n\ +炸弹上。瞄准好\n\ +后,再按[B]键把\n\ +酷霸王扔出去。\n\ + \n\ +祝你好运,马力\n\ +欧,我们的命运\n\ +就靠你了。")) + +DEFINE_DIALOG(DIALOG_067, 1, 5, 30, 200, _("\ +你的运气真是太\n\ +好了,马力欧!\n\ +桃花公主并不在\n\ +这里。哈哈哈!\n\ +好了,来吧,看\n\ +看你能不能抓住\n\ +我的尾巴!象你\n\ +这样的懦夫不可\n\ +能把我扔出去!\n\ +决不可能!\n\ +哈哈。")) + +DEFINE_DIALOG(DIALOG_068, 1, 5, 30, 200, _("\ +这里是岩浆地\n\ +狱!\n\ +如果你不小心被\n\ +火烧到,或是掉\n\ +进了岩浆,你会\n\ +被烫得满地乱\n\ +跳。但你仍然可\n\ +以控制马力欧。\n\ +只要你保持冷\n\ +静。")) + +DEFINE_DIALOG(DIALOG_069, 1, 6, 30, 200, _("\ +有时,你会在壁\n\ +画世界的尽头撞\n\ +上一些看不见的\n\ +墙壁,如果你正\n\ +在飞行的话,就\n\ +会被反弹回来。")) + +DEFINE_DIALOG(DIALOG_070, 1, 5, 30, 200, _("\ +你可以随时从壁\n\ +画的世界返回到\n\ +城堡。让马力欧\n\ +停下来后,\n\ +按START键\n\ +暂停游戏,选择\n\ +“退出关卡”就\n\ +可以了。\n\ + \n\ +你并不需要在一\n\ +个关卡中找到所\n\ +有的力量之星再\n\ +到另一个关卡中\n\ +去。\n\ + \n\ +你可以先到其它\n\ +地方去找力量之\n\ +星,然后再回来\n\ +拿比较难获得的\n\ +力量之星,这时\n\ +你也会变得熟练\n\ +多了。\n\ + \n\ +每当你找到一颗\n\ +力量之星时,关\n\ +于下一颗星的提\n\ +示就会显示到那\n\ +一关卡的开始画\n\ +面上。\n\ + \n\ +当然,你可以去\n\ +寻找任何一颗力\n\ +量之星,并不一\n\ +定要去找提示所\n\ +指的那一颗。")) + +DEFINE_DIALOG(DIALOG_071, 1, 3, 30, 200, _("\ +前方危险!\n\ +当心奇怪的烟!\n\ +不要吸气!如果\n\ +感到眩晕,跑到\n\ +更高处去呼吸呼\n\ +吸新鲜的空气!\n\ +圆圈:躲避所\n\ +箭头:出入口")) + +DEFINE_DIALOG(DIALOG_072, 1, 5, 30, 200, _("\ +前面有大风!把\n\ +帽子戴紧!以免\n\ +被风吹走,否\n\ +则,你必须在这\n\ +座山找回你的帽\n\ +子。")) + +DEFINE_DIALOG(DIALOG_073, 1, 4, 95, 200, _("\ +啊哈,朋友,这\n\ +里有我沉没的财\n\ +宝。如果你想得\n\ +到它的话,你要\n\ +按照正确的顺序\n\ +打开箱子。是什\n\ +么顺序呢?你知\n\ +道吗?\n\ + \n\ +我是决不会说出 \n\ +来的。\n\ + \n\ +——船长")) + +DEFINE_DIALOG(DIALOG_074, 1, 5, 30, 200, _("\ +你可以抓住悬崖\n\ +或一些建筑物的\n\ +边缘,并悬挂在\n\ +上面。\n\ + \n\ +如果想跳下来,\n\ +向马力欧背对的\n\ +方向拉摇杆,或\n\ +按[Z]键。\n\ +要爬上悬崖,可\n\ +以向上推摇杆或\n\ +按[A]键,这样可\n\ +以快速地爬上悬\n\ +崖。")) + +DEFINE_DIALOG(DIALOG_075, 1, 5, 30, 200, _("\ +马力欧!!我的\n\ +城堡陷入了危\n\ +机。我知道这是\n\ +酷霸王干的,而\n\ +且我知道你是唯\n\ +一可以解救我们\n\ +的人!\n\ +城堡里的门已经\n\ +被酷霸王封起来\n\ +了,只有力量之\n\ +星的能量才能打\n\ +开它们。\n\ + \n\ +但是城堡里还有\n\ +一些秘密通道,\n\ +酷霸王还没有发\n\ +现它们。\n\ + \n\ +其中一个通道就\n\ +在这个房间里,\n\ +而且那里还有一\n\ +颗力量之星!\n\ + \n\ +马力欧,去找到\n\ +这颗隐藏的力量\n\ +之星吧,它会帮\n\ +助你的。请你一\n\ +定要救救我们,\n\ +帮我们找回所有\n\ +的力量之星,把\n\ +我们从这个恐怖\n\ +的监狱中解救出\n\ +来。")) + +DEFINE_DIALOG(DIALOG_076, 1, 6, 30, 200, _("\ +感谢力量之星的\n\ +能量,城堡又恢\n\ +复了生机。马力\n\ +欧,你一定要给\n\ +酷霸王最后一击。\n\ + \n\ +现在,让我告诉\n\ +你一些关于城堡\n\ +的秘密吧。在那\n\ +些有镜子的房间\n\ +里,仔细的去找\n\ +一些在镜子中不\n\ +反射的东西。等\n\ +你去水城的时\n\ +候,你可以来一\n\ +个超高跳,跳进\n\ +壁画当中。猜猜\n\ +看,我们会看见\n\ +什么?")) + +DEFINE_DIALOG(DIALOG_077, 1, 2, 150, 200, _("\ +你要去撞击这里\n\ +的柱子,这是法\n\ +令!")) + +DEFINE_DIALOG(DIALOG_078, 1, 5, 30, 200, _("\ +你可以按[Z]键用\n\ +力撞击地面上的\n\ +蓝色硬币砖块去\n\ +获得蓝色硬币。\n\ +一个蓝色硬币相\n\ +当于五个黄色硬\n\ +币。但是你的动\n\ +作一定要快,否\n\ +则它就会消失,\n\ +那就太可惜了。")) + +DEFINE_DIALOG(DIALOG_079, 1, 4, 30, 200, _("\ +哇哦!放我走!\n\ +嘻嘻!我只是开\n\ +个玩笑而已。难\n\ +道你没有点幽默\n\ +感吗?\n\ +但是,你听我\n\ +说,我们做个交\n\ +易吧。如果你放\n\ +我走的话,我可\n\ +以给你一个难得\n\ +的宝物。\n\ + \n\ +怎么样?接受我\n\ +的条件吗?\n\ + \n\ +  放        不放")) + +DEFINE_DIALOG(DIALOG_080, 1, 1, 30, 200, _("\ +咿嘿嘿嘿!")) + +DEFINE_DIALOG(DIALOG_081, 1, 4, 30, 200, _("\ +神秘的水位。\n\ +答案在哪里呢?\n\ +这座城市非常欢\n\ +迎那些当他们进\n\ +入时有深度的访\n\ +问者。")) + +DEFINE_DIALOG(DIALOG_082, 1, 4, 30, 200, _("\ +带好你的帽子\n\ +啊,如果你丢了\n\ +帽子,你会很容\n\ +易受到敌人的伤\n\ +害。\n\ + \n\ +如果你真的丢了\n\ +帽子的话,你要\n\ +在这个关卡中找\n\ +到它。它就在你\n\ +丢掉的地方。\n\ +哦,孩子,桃花\n\ +公主的情况看起\n\ +来不太好,她现\n\ +在还被困在城堡\n\ +的某面墙里。你\n\ +一定要帮助她\n\ +啊。你知道墙里\n\ +的世界有很多敌\n\ +人吗?真的!酷\n\ +霸王的军队也在\n\ +那里。哦,这个\n\ +给你吧,我早为\n\ +你准备好了。")) + +DEFINE_DIALOG(DIALOG_083, 1, 6, 30, 200, _("\ +这个钟有一点奇\n\ +怪啊,你跳进去\n\ +的时候,注意那\n\ +个大指针的位\n\ +置。噢,你瞧我\n\ +发现了什么!这\n\ +里!马力欧,快\n\ +来啊!")) + +DEFINE_DIALOG(DIALOG_084, 1, 3, 30, 200, _("\ +哦!放开我,你\n\ +这个家伙!我要\n\ +迟到了!已经这\n\ +么晚了!我必须\n\ +要赶快了!什\n\ +么?这个闪闪发\n\ +光的东西?是我\n\ +的!我是发现\n\ +者!收藏者!失\n\ +主!啊!晚了,\n\ +来不及了,迟到\n\ +了!哦!拿去!\n\ +那是酷霸王的礼\n\ +物!\n\ +好了,快让我走\n\ +吧!我有约会!\n\ +我不能迟到!")) + +DEFINE_DIALOG(DIALOG_085, 1, 5, 30, 200, _("\ +你在这个房子里\n\ +是不会有机会\n\ +的。如果你走出\n\ +这里一步,你就\n\ +会得到……盗墓者\n\ +…奖章 ")) + +DEFINE_DIALOG(DIALOG_086, 1, 3, 30, 200, _("\ +一直绕圈跑可以\n\ +让一些坏家伙眼\n\ +花缭乱。")) + +DEFINE_DIALOG(DIALOG_087, 1, 4, 30, 200, _("\ +不光是圣诞老人\n\ +才可以钻进烟\n\ +囱,你也可以,\n\ +请进吧。\n\ + \n\ +——小屋主人")) + +DEFINE_DIALOG(DIALOG_088, 1, 5, 30, 200, _("\ +工作电梯\n\ +如果要从这里出\n\ +去,抓住左边的\n\ +柱子,小心地滑\n\ +下去。")) + +DEFINE_DIALOG(DIALOG_089, 1, 5, 95, 200, _("\ +两条路都充满了\n\ +危险。小心啊。\n\ +如果你现在还不\n\ +会远跳,啧啧,\n\ +走右边的一条路\n\ +吧。\n\ + \n\ +右:工作电梯 \n\ +      浓雾迷宫\n\ + \n\ +左:黑洞\n\ +      地下湖\n\ + \n\ +红色圆圈:\n\ +        电梯2\n\ +        地下湖\n\ +     \n\ +箭头:你在这里")) + +DEFINE_DIALOG(DIALOG_090, 1, 6, 30, 200, _("\ +哇哈哈哈!\n\ +你终于落入我的\n\ +陷阱了!我果然\n\ +没有猜错。我警\n\ +告你,『朋友』!\n\ +当心你的脚步!")) + +DEFINE_DIALOG(DIALOG_091, 2, 2, 30, 200, _("\ +危险!\n\ +狂风!\n\ +但你可以乘风而\n\ +行。")) + +DEFINE_DIALOG(DIALOG_092, 1, 5, 30, 200, _("\ +又是你!马力\n\ +欧!你又来烦我\n\ +了!难道你没看\n\ +见我刚刚开心一\n\ +会儿吗?快点把\n\ +那些星星还给\n\ +我!我的手下们\n\ +需要它们!\n\ +哈哈哈!")) + +DEFINE_DIALOG(DIALOG_093, 1, 5, 30, 200, _("\ +马力欧!又是\n\ +你!正好,我正\n\ +想吐火烤烤什么\n\ +东西!你的星星\n\ +对我根本没有作\n\ +用!你的朋友们\n\ +都被困在墙壁里\n\ +了…\n\ +你再也看不到桃\n\ +花公主了!\n\ +哈哈哈哈!")) + +DEFINE_DIALOG(DIALOG_094, 1, 4, 30, 200, _("\ +如何顺利地跑上\n\ +斜坡呢?还记不\n\ +记得远跳?跑起\n\ +来,按[Z]键再起\n\ +跳!")) + +DEFINE_DIALOG(DIALOG_095, 1, 4, 30, 200, _("\ +你可以站在一个\n\ +标记的前面,按\n\ +[B]键来读上面的\n\ +内容。\n\ + \n\ +当你要和别人讲\n\ +话时,站在他们\n\ +面前,按[B]键。\n\ +一定要夺回这一\n\ +关卡酷霸王偷走\n\ +的力量之星。")) + +DEFINE_DIALOG(DIALOG_096, 1, 4, 30, 200, _("\ +从这里开始,路\n\ +会变得很窄。当\n\ +心点。任何人都\n\ +不可以去山顶。\n\ +如果你不想有什\n\ +么意外的话,记\n\ +得放慢你的脚\n\ +步,轻轻地走,\n\ +千万别吵醒正在\n\ +睡觉的人。")) + +DEFINE_DIALOG(DIALOG_097, 1, 5, 30, 200, _("\ +别做胆小鬼啊。\n\ +如果有人要推你\n\ +的话,用力反击\n\ +吧。这可是一对\n\ +一的较量,失败\n\ +者是不会有好下\n\ +场的。")) + +DEFINE_DIALOG(DIALOG_098, 1, 2, 95, 200, _("\ +快到这儿来… \n\ +呵…呵呵… ")) + +DEFINE_DIALOG(DIALOG_099, 1, 5, 95, 200, _("\ +哦呵呵… \n\ +你是我的了。\n\ +哼哼!\n\ +我可以安然无恙\n\ +地穿过这面墙,\n\ +你能吗?\n\ +呵呵…呵呵…… ")) + +DEFINE_DIALOG(DIALOG_100, 1, 3, 95, 200, _("\ +哈,我拦住它\n\ +啦!是我的啦!\n\ +嘿,嘿,嘿嘿!")) + +DEFINE_DIALOG(DIALOG_101, 1, 3, 95, 200, _("\ +啊欠,走…吧… \n\ +你让我透不过气\n\ +了,咳呵,我被\n\ +你害苦了!这顶\n\ +帽子?哦,好\n\ +吧,拿去吧。这\n\ +顶帽子真酷,不\n\ +过,我会还回来\n\ +的。我觉得我比\n\ +你更合适戴它。\n\ +呵呵…呵呵… ")) + +DEFINE_DIALOG(DIALOG_102, 1, 5, 30, 200, _("\ +嘘,这些嘘嘘鬼\n\ +非常非常害羞,\n\ +如果你看着它们,\n\ +它们就会消失。\n\ +但如果你转过\n\ +身,它们就会重\n\ +新出现。在它们\n\ +消失时攻击它们\n\ +是没用的,你要\n\ +悄悄地绕到它们\n\ +身后才能打到它\n\ +们。")) + +DEFINE_DIALOG(DIALOG_103, 1, 4, 95, 200, _("\ +四个塔上一定有\n\ +一个塔在发光…\n\ +在那个塔的顶\n\ +端将可以看到\n\ +灯光在闪烁。")) + +DEFINE_DIALOG(DIALOG_104, 1, 5, 30, 200, _("\ +在你面前暗色的\n\ +星星只是一个\n\ +『星星的标记』。\n\ +当你收集到所有\n\ +8枚红色硬币,\n\ +星星就在这里出\n\ +现。")) + +DEFINE_DIALOG(DIALOG_105, 1, 3, 95, 200, _("\ +准备发射!来\n\ +吧,跳进大炮!\n\ + \n\ +你可以用四门大\n\ +炮到达有星星的\n\ +空中岛屿,用摇\n\ +杆瞄准,然后按\n\ +[A]键发射。\n\ + \n\ +如果你够敏捷,\n\ +抓住小树或杆\n\ +子,你便可以登\n\ +上小岛了。")) + +DEFINE_DIALOG(DIALOG_106, 1, 2, 95, 200, _("\ +准备发射!来吧,\n\ +跳进大炮!")) + +DEFINE_DIALOG(DIALOG_107, 1, 3, 95, 200, _("\ +鬼,鬼… \n\ +不要… \n\ +…死了!\n\ +呵呵…呵呵… \n\ +你能…活着离\n\ +开这里吗?")) + +DEFINE_DIALOG(DIALOG_108, 1, 2, 95, 200, _("\ +轰!这个城堡的\n\ +恶作剧之王大嘘\n\ +嘘鬼来啦。\n\ +哈哈…哈哈… ")) + +DEFINE_DIALOG(DIALOG_109, 1, 4, 95, 200, _("\ +哦…不… \n\ +跟你说说我丧失\n\ +身体的经历吧,\n\ +我的身体已经融\n\ +化掉了!有没有\n\ +人拖你寻找脑\n\ +袋?我一定可以\n\ +得到一个新的身\n\ +体的!哦,我的\n\ +脸可能会冻成这\n\ +样!")) + +DEFINE_DIALOG(DIALOG_110, 1, 5, 95, 200, _("\ +我需要在肩上架\n\ +个好脑袋。你知\n\ +道谁需要强壮的\n\ +身体?如果你知\n\ +道的话,我就跟\n\ +你走。")) + +DEFINE_DIALOG(DIALOG_111, 1, 4, 95, 200, _("\ +太好了!多完美\n\ +的身体啊!这是\n\ +给你的礼物,我\n\ +担保它能使你觉\n\ +得更温暖。")) + +DEFINE_DIALOG(DIALOG_112, 1, 4, 30, 200, _("\ +尽量收集更多的\n\ +硬币!它们能补\n\ +充你的能量值。\n\ + \n\ +你可以检查一下\n\ +你在15个关卡\n\ +里一共收集了多\n\ +少硬币。\n\ + \n\ +你也可以触摸旋\n\ +转的心来恢复能\n\ +量。\n\ + \n\ +你越快穿过心,\n\ +就能恢复越多的\n\ +能量。")) + +DEFINE_DIALOG(DIALOG_113, 1, 6, 30, 200, _("\ +红色,绿色,蓝\n\ +色的砖块里藏有\n\ +很特殊的帽子。\n\ +踩在隐秘关卡里\n\ +的开关上就可以\n\ +激活这些藏有帽\n\ +子的砖块。")) + +DEFINE_DIALOG(DIALOG_114, 1, 5, 95, 200, _("\ +真让人气愤!我\n\ +们帮你建造房屋\n\ +和城堡,铺设道\n\ +路,你却还在我\n\ +们身上散步。你\n\ +说过一声谢谢\n\ +吗?没有!\n\ +好吧,既然你不\n\ +准备从我身上拿\n\ +开你的臭脚,那\n\ +我就要把你压\n\ +碎!\n\ +来吧,懦夫!")) + +DEFINE_DIALOG(DIALOG_115, 1, 5, 95, 200, _("\ +不,又被压碎\n\ +了!我只是一块\n\ +垫脚的石头而\n\ +已,不是沙砾。\n\ +嗯,我投降,你\n\ +赢了,拿去吧!")) + +DEFINE_DIALOG(DIALOG_116, 1, 5, 95, 200, _("\ +什…么… \n\ +你就是打败炸弹\n\ +王的小东西?你\n\ +也许能很快打败\n\ +我,但是如果你\n\ +想抓住酷霸王的\n\ +尾巴,你就必须\n\ +更快!我想我的\n\ +手下会从你这儿\n\ +得到一些教训,\n\ +马力欧,我会遵\n\ +守诺言,这是你\n\ +的星星。\n\ + \n\ +如果你想再见到\n\ +我,你可以从菜\n\ +单里选择这颗星\n\ +星。再见啦!!")) + +DEFINE_DIALOG(DIALOG_117, 1, 2, 95, 200, _("\ +谁…在…走?\n\ +谁…打破了…\n\ +封印?\n\ +谁…吵醒了…\n\ +老人?\n\ +我们不喜欢光… \n\ +哦哦哦哦… \n\ +我们不喜欢入侵\n\ +者… \n\ +战斗吧… \n\ +来吧…\n\ +来吧…!")) + +DEFINE_DIALOG(DIALOG_118, 1, 6, 95, 200, _("\ +哦…哦…哦…\n\ +怎么啦?\n\ +我们怎么像鹅卵\n\ +石一样被压碎\n\ +了?你太强大\n\ +了!你统治了古\n\ +老的金字塔。\n\ +今天… \n\ +你获得了力量之\n\ +星… \n\ +我们沉睡在… \n\ +在黑暗中… ")) + +DEFINE_DIALOG(DIALOG_119, 1, 6, 30, 200, _("\ +啊,我太粗心。\n\ +这出乎了我的意\n\ +料…但我仍然拥\n\ +有星星的力量,\n\ +拥有桃花公主。\n\ +哈哈…哈哈… \n\ +你不会再从我这\n\ +儿得到任何星\n\ +星!我跟你没\n\ +完,不过,我先\n\ +放你走,你会为\n\ +此付出代价的!")) + +DEFINE_DIALOG(DIALOG_120, 1, 4, 30, 200, _("\ +噢!我输了?星\n\ +星的力量打败了\n\ +我… \n\ +这次打个平手。\n\ +下次,我的状态\n\ +会很好的。\n\ + \n\ +如果你现在想要\n\ +见你可爱的公\n\ +主,到塔的最顶\n\ +层来吧。\n\ +我等着你!\n\ +哈哈哈哈… ")) + +DEFINE_DIALOG(DIALOG_121, 1, 5, 30, 200, _("\ +不,不可能!\n\ +你打败了我,马\n\ +力欧?!我给了\n\ +那些军队力量,\n\ +但是它们正在消\n\ +失!啊!我看到\n\ +和平正在重回世\n\ +界!我无法忍\n\ +受!哼…一切还\n\ +没有结束… \n\ +\n\ +来,我的军队!\n\ +让我们一起来看\n\ +看这场战斗的结\n\ +局!\n\ +哈哈…")) + +DEFINE_DIALOG(DIALOG_122, 1, 4, 30, 200, _("\ +黑洞\n\ +右:工作电梯 \n\ +      浓雾迷宫\n\ + \n\ +左:黑洞\n\ +      地下湖")) + +DEFINE_DIALOG(DIALOG_123, 1, 4, 30, 200, _("\ +金属洞穴\n\ +右:通向瀑布\n\ +左:金属帽开关")) + +DEFINE_DIALOG(DIALOG_124, 1, 4, 30, 200, _("\ +工作电梯\n\ +危险!\n\ +请仔细阅读使用\n\ +说明!\n\ +电梯会朝激活的\n\ +箭头方向行驶。")) + +DEFINE_DIALOG(DIALOG_125, 1, 3, 30, 200, _("\ +迷失洞窟出口\n\ +危险!已关闭。\n\ +请往回走。")) + +DEFINE_DIALOG(DIALOG_126, 2, 3, 30, 200, _("\ +上:黑洞\n\ +右:工作电梯\n\ +      迷失洞窟")) + +DEFINE_DIALOG(DIALOG_127, 3, 4, 30, 200, _("\ +地下湖泊\n\ +右:金属洞穴\n\ +左:废弃矿洞\n\ +    (关闭)\n\ + \n\ +这里住着一条温\n\ +顺的海龙王,敲\n\ +打它的后背可以\n\ +让它低下头。可\n\ +别成为它的午餐\n\ +噢!")) + +DEFINE_DIALOG(DIALOG_128, 1, 4, 95, 200, _("\ +你和我战斗必须\n\ +尊敬我!你把我\n\ +扔到圈外是违反\n\ +皇室规则的。")) + +DEFINE_DIALOG(DIALOG_129, 1, 5, 30, 200, _("\ +欢迎来到护城河\n\ +里的隐身帽关\n\ +卡!当你踏上帽\n\ +子的开关,所有\n\ +的蓝色砖块就会\n\ +变成实心。当你\n\ +戴上隐身帽时,\n\ +你会消失,并且\n\ +可以躲避敌人和\n\ +穿越许多障碍。\n\ +快去试一试吧!")) + +DEFINE_DIALOG(DIALOG_130, 1, 5, 30, 200, _("\ +欢迎来到金属帽\n\ +的瀑布石洞关\n\ +卡!一旦你踩上\n\ +金属帽开关,绿\n\ +色的砖块会变成\n\ +实心的。当你戴\n\ +上金属帽后,你\n\ +就可以在水下漫\n\ +步了!快去试一\n\ +试吧!")) + +DEFINE_DIALOG(DIALOG_131, 1, 5, 30, 200, _("\ +欢迎来到飞行帽\n\ +之塔关卡!踩上\n\ +位于彩虹塔顶的\n\ +红色开关,所有\n\ +的红色砖块将变\n\ +为实心的。\n\ + \n\ +快戴上飞行帽!\n\ +来个三级跳,按\n\ +[Z]键着陆。\n\ + \n\ +就象你驾驶飞机\n\ +一样,遥杆向下\n\ +拉时,飞机上\n\ +升;向前推时,\n\ +飞机下降。")) + +DEFINE_DIALOG(DIALOG_132, 1, 4, 30, 200, _("\ +哇哦,马力欧,\n\ +你不许耍赖哦!\n\ +不能抄近路哦!\n\ +现在,我知道你\n\ +懂道理。这次,\n\ +你被取消资格!\n\ +下次,我们再公\n\ +平竞争!")) + +DEFINE_DIALOG(DIALOG_133, 1, 6, 30, 200, _("\ +见到你真高兴!\n\ +公主…我…这么\n\ +说吧,大家都被\n\ +困在城堡的墙壁\n\ +里了。\n\ + \n\ +酷霸王偷走了城\n\ +堡的力量之星,\n\ +他正利用城堡之\n\ +星的力量创造自\n\ +己的壁画和墙壁\n\ +里的世界。\n\ + \n\ +请快去找力量之\n\ +星!一旦找到它\n\ +们,你可以借助\n\ +它们的力量打开\n\ +被酷霸王封印的\n\ +门。\n\ + \n\ +第一层有四个房\n\ +间。你可以从有\n\ +炸弹人画像的房\n\ +间开始。那是唯\n\ +一没有被他封印\n\ +的房间。当你收\n\ +集到八颗力量之\n\ +星,你就可以打\n\ +开那个有颗巨大\n\ +星星的门。公主\n\ +就在那等你呢!")) + +DEFINE_DIALOG(DIALOG_134, 1, 5, 30, 200, _("\ +力量之星的名称\n\ +也是找到它们的\n\ +提示哦。它们会\n\ +在每关开始时出\n\ +现。\n\ + \n\ +你不用按顺序收\n\ +集。如果你不去\n\ +找一些特殊的星\n\ +星,你就会找不\n\ +到一些其它的星\n\ +星、敌人或特殊\n\ +的物品。\n\ +等你收集到一些\n\ +力量之星后,你\n\ +就可以尝试其它\n\ +关卡了。\n\ +我们都要指望你\n\ +了!")) + +DEFINE_DIALOG(DIALOG_135, 1, 5, 30, 200, _("\ +我亲眼看见酷霸\n\ +王偷走了星星!\n\ + \n\ +他在每个关卡里\n\ +藏了六颗星星,\n\ +但是除非你激活\n\ +了几个特殊帽子\n\ +的开关,你才能\n\ +找到全部的星\n\ +星。\n\ + \n\ +如果你想去见见\n\ +那些被你打败的\n\ +敌人,只要选择\n\ +你从他那里得到\n\ +的星星的名字就\n\ +可以了。")) + +DEFINE_DIALOG(DIALOG_136, 1, 6, 30, 200, _("\ +哇哦!你已经获\n\ +得到那么多力量\n\ +之星啦?\n\ +加油,马力欧!\n\ +我打赌你一定马\n\ +上就可以带我们\n\ +离开这里了!\n\ + \n\ +尽管这样,你还\n\ +是要小心点。酷\n\ +霸王他们一伙人\n\ +设了许多陷阱。\n\ +听我的话:当你\n\ +要恢复能量时,\n\ +记得去收集硬\n\ +币。黄色的可以\n\ +恢复一格能量;\n\ +红色的可以恢复\n\ +两格,蓝色的可\n\ +以恢复五格哦!\n\ + \n\ +只要压碎蓝色硬\n\ +币的砖块,蓝色\n\ +硬币就会出现。\n\ + \n\ +当然,如果你从\n\ +很高的地方掉下\n\ +来,你也可以在\n\ +着陆时重击地面\n\ +来减轻伤害。")) + +DEFINE_DIALOG(DIALOG_137, 1, 6, 30, 200, _("\ +谢谢,马力欧!\n\ +因为你夺回了力\n\ +量之星,把酷霸\n\ +王从这里赶了出\n\ +去,城堡恢复了\n\ +能量。\n\ +哦,顺便问一\n\ +下,你收集硬币\n\ +了吗?在这15\n\ +个关卡里,每收\n\ +集到100枚硬\n\ +币就会出现一个\n\ +特殊的星星哦!")) + +DEFINE_DIALOG(DIALOG_138, 1, 3, 30, 200, _("\ +下面:地下湖\n\ +左面:黑洞\n\ +右面:迷失洞窟\n\ +       (已关闭)")) + +DEFINE_DIALOG(DIALOG_139, 1, 6, 30, 200, _("\ +上面:自动电梯\n\ +电梯自动启动,\n\ +到达预定关卡。\n\ +它也会自动消\n\ +失!。")) + +DEFINE_DIALOG(DIALOG_140, 1, 6, 30, 200, _("\ +电梯区域:\n\ +右边:迷失洞窟\n\ +         入口\n\ +左边:黑洞入口\n\ +         电梯 1\n\ +箭头:你在这里")) + +DEFINE_DIALOG(DIALOG_141, 1, 5, 150, 200, _("\ +你找到了1颗被\n\ +盗的力量之星!\n\ +现在你可以打开\n\ +城堡里一些被封\n\ +印的门了。\n\ +试一试二楼公主\n\ +的房间和一楼的\n\ +有嘭嘭要塞壁画\n\ +的房间。\n\ +酷霸王那伙人仍\n\ +然在不断强大之\n\ +中,所以你不能\n\ +掉以轻心。快来\n\ +救我们吧,马力\n\ +欧!继续寻找力\n\ +量之星!")) + +DEFINE_DIALOG(DIALOG_142, 1, 5, 150, 200, _("\ +你已经夺回了3\n\ +颗力量之星啦!\n\ +现在你可以打开\n\ +有3标记的大门\n\ +了。\n\ + \n\ +如果你乐意,你\n\ +可以从打开封印\n\ +的关卡回来。前\n\ +面的敌人很难\n\ +缠,所以一定小\n\ +心!")) + +DEFINE_DIALOG(DIALOG_143, 1, 6, 150, 200, _("\ +你夺回了8颗力\n\ +量之星了哦!现\n\ +在你可以打开那\n\ +个有大星星的门\n\ +了!但是酷霸王\n\ +也在那里…你听\n\ +见公主的声音了\n\ +吗?")) + +DEFINE_DIALOG(DIALOG_144, 1, 6, 150, 200, _("\ +你夺回了30颗\n\ +力量之星了哦!\n\ +现在你可以打开\n\ +那个有大星星的\n\ +门了!但在你走\n\ +之前,那些事情\n\ +做的怎么样了?\n\ + \n\ +你有没有把那两\n\ +个圆柱压下去?\n\ +你也没有把你的\n\ +帽子给丢了吧?\n\ +如果掉了,你就\n\ +不得不到秃鹫强\n\ +哥那里去把它找\n\ +回来!\n\ +他们说酷霸王已\n\ +经潜出大海,进\n\ +入地下了。你有\n\ +没有把他困住?")) + +DEFINE_DIALOG(DIALOG_145, 1, 6, 150, 200, _("\ +你夺回了50颗\n\ +力量之星啊!\n\ +现在快去三楼打\n\ +开星星之门。\n\ +酷霸王就在那里\n\ +等你。\n\ + \n\ +你找到了所有的\n\ +金属帽开关了\n\ +么?红的,绿的\n\ +和蓝的?你从彩\n\ +色砖块里得到的\n\ +帽子很有用的。\n\ +抓紧吧,快去第\n\ +三层吧。")) + +DEFINE_DIALOG(DIALOG_146, 1, 6, 150, 200, _("\ +你已经找到了\n\ +70颗力量之星\n\ +了!你揭开了无\n\ +尽楼梯的秘密,\n\ +真是多亏了你\n\ +——酷霸王就在最\n\ +上面!去吧!\n\ +去迎接你最后的\n\ +挑战吧!")) + +DEFINE_DIALOG(DIALOG_147, 1, 5, 30, 200, _("\ +你用了帽子砖块\n\ +了吗?说真的,\n\ +你应该用用哦!\n\ + \n\ +你要按下城堡隐\n\ +藏关卡的彩色的\n\ +帽子开关,才能\n\ +使它们都变成实\n\ +心的,这样你才\n\ +可以撞碎。\n\ +想去隐藏关卡\n\ +吗?重新获得一\n\ +些力量之星就行。\n\ + \n\ +帽子砖块非常有\n\ +用!红色的是飞\n\ +行帽;绿的是金\n\ +属帽;蓝的是隐\n\ +形帽。")) + +DEFINE_DIALOG(DIALOG_148, 1, 6, 30, 200, _("\ +雪人之山就在前\n\ +面了!当心啊!\n\ +不要企图用三级\n\ +跳越过冰块射手\n\ +哦。\n\ + \n\ +如果你掉进了冰\n\ +水池塘,你的能\n\ +量会迅速减少,\n\ +而且不会自动恢\n\ +复。\n\ +       -雪人")) + +DEFINE_DIALOG(DIALOG_149, 1, 3, 30, 200, _("\ +欢迎来到桃花公\n\ +主的秘密滑道!\n\ +这里有藏着一颗\n\ +连酷霸王都找不\n\ +到的星星哦!\n\ +在下滑过程中,\n\ +遥杆向前加速,\n\ +向后当然是减速\n\ +啦。如果你滑得\n\ +够快的话,你会\n\ +赢得星星哦!")) + +DEFINE_DIALOG(DIALOG_150, 1, 5, 30, 200, _("\ +哇啊啊啊!你淹\n\ +了我的房子啊!\n\ +为什么啊?看看\n\ +这里乱糟糟的!\n\ +我该怎么办啊?\n\ + \n\ +屋顶蹋了,地板\n\ +淹了…该怎么办\n\ +啊,该怎么办\n\ +啊?呜…呜… \n\ +我要疯了!!!\n\ +当我得到这星星\n\ +时,所有的事情\n\ +都开始变糟了…\n\ +这颗亮晶晶的星\n\ +星,让我感觉怪\n\ +怪的… ")) + +DEFINE_DIALOG(DIALOG_151, 1, 4, 30, 200, _("\ +我再也受不了\n\ +了!你踩在我湿\n\ +透的身上,现在\n\ +我真的要疯了!\n\ +哇啊… ")) + +DEFINE_DIALOG(DIALOG_152, 1, 3, 30, 200, _("\ +哇!叔叔!\n\ +叔叔!\n\ +好吧,我给!\n\ +拿着这颗星!\n\ +哦!\n\ +我感觉好多了,\n\ +不再需要它了。\n\ +如果在晚上,我\n\ +可以透过天花板\n\ +看见许多星星。\n\ +它们使我感到…\n\ +平静。任何时候\n\ +都欢迎你回来看\n\ +看我。")) + +DEFINE_DIALOG(DIALOG_153, 1, 4, 30, 200, _("\ +嗨!谁在那儿?\n\ +什么东西在我身\n\ +上爬啊!\n\ +难道是冰蚂蚁?\n\ +还是雪跳蚤?\n\ +不管这么多了,\n\ +无论是什么,把\n\ +我惹烦了!我想\n\ +我要把它吹走!")) + +DEFINE_DIALOG(DIALOG_154, 1, 5, 30, 200, _("\ +抓紧你的帽子!\n\ +如果丢了它,你\n\ +会很容易受伤\n\ +噢。万一不小心\n\ +丢失了帽子,一\n\ +定要马上回头去\n\ +寻找啊!\n\ +公主可还被困在\n\ +墙壁中的某处。\n\ +快,快去找啊,\n\ +马力欧!\n\ + \n\ +噢,你知道在墙\n\ +里和壁画中都隐\n\ +藏着秘密世界,\n\ +是吧?")) + +DEFINE_DIALOG(DIALOG_155, 1, 6, 30, 200, _("\ +谢谢力量之星的\n\ +能量,城堡里又\n\ +出现了生机。\n\ +快,马力欧,是\n\ +时候教训酷霸王\n\ +了!\n\ + \n\ +这里,让我告诉\n\ +你一些关于城堡\n\ +的事吧。在那个\n\ +有镜子的房间,\n\ +一定要仔细注意\n\ +没有被镜子反射\n\ +到的物品。还有\n\ +当你要去水城的\n\ +时候,你可以高\n\ +高跃起进入壁\n\ +画。")) + +DEFINE_DIALOG(DIALOG_156, 1, 5, 30, 200, _("\ +那个钟里的世界\n\ +太奇怪了,注意\n\ +那个大指针的位\n\ +置。")) + +DEFINE_DIALOG(DIALOG_157, 1, 5, 30, 200, _("\ +当心!千万不要\n\ +被流沙吞没了。\n\ + \n\ +如果你陷入沙\n\ +中,就不能起跳\n\ +了。流沙没过你\n\ +的头,你就会被\n\ +闷死。\n\ + \n\ +黑暗地区可是一\n\ +个无底的深渊!")) + +DEFINE_DIALOG(DIALOG_158, 1, 6, 30, 200, _("\ +1 如果你做连\n\ +续的跳跃,而且\n\ +按键时间合适的\n\ +话,你会越跳越\n\ +高。如果你正在\n\ +快跑时做连续跳\n\ +跃,而且按键时\n\ +间合适的话,你\n\ +就可以做一个三\n\ +级跳远了。\n\ + \n\ +2 先往墙壁上\n\ +跳,在碰到墙壁\n\ +时,再次起跳,\n\ +你就可以来一个\n\ +踢墙跳,用它可\n\ +以反弹到更高的\n\ +地方。")) + +DEFINE_DIALOG(DIALOG_159, 1, 6, 30, 200, _("\ +如果你先站立不\n\ +动,按[Z]键下\n\ +蹲,然后起跳,\n\ +就可来一个后空\n\ +翻。要来一个远\n\ +跳,先跑起来,\n\ +按下[Z]键,再起\n\ +跳。")) + +DEFINE_DIALOG(DIALOG_160, 1, 4, 30, 200, _("\ +要使用身体滑行\n\ +攻击,在快跑中\n\ +按下[B]键。要想\n\ +在滑行中站住,\n\ +按[A]或者[B]键。")) + +DEFINE_DIALOG(DIALOG_161, 1, 4, 30, 200, _("\ + \n\ +马力欧!!!\n\ +那真的是你吗?\n\ +从上一次冒险到\n\ +现在,我们都没\n\ +有见过面啊!他\n\ +们告诉我,如果\n\ +我等在这里就有\n\ +可能见到你,不\n\ +过,我真的准备\n\ +要放弃了!\n\ + \n\ +天啊?你真的击\n\ +败了酷霸王吗?\n\ +而且你夺回了所\n\ +有的力量之星,\n\ +救出了公主?\n\ + \n\ +我就知道你一定\n\ +能行的!\n\ + \n\ +现在我要告诉你\n\ +一个非常特别的\n\ +消息。\n\ + \n\ +十分感谢你玩\n\ +神游马力欧!虽\n\ +然游戏结束了,\n\ +但是欢乐还没有\n\ +结束。下面是我\n\ +们为你准备的大\n\ +礼物,希望你能\n\ +够喜欢!\n\ + \n\ + \n\ +神游马力欧小组")) + +DEFINE_DIALOG(DIALOG_162, 1, 4, 30, 200, _("\ +不,不,不!怎\n\ +么又是你!你有\n\ +没有看见,我现\n\ +在真的很忙?\n\ + \n\ +我真的没有时间\n\ +跟你争论什么关\n\ +于星星的事。\n\ + \n\ +这个,拿去吧,\n\ +我现在要马上走\n\ +了。让我走吧!")) + +DEFINE_DIALOG(DIALOG_163, 1, 5, 30, 200, _("\ + \n\ +不…!你这次真\n\ +的把我给打败\n\ +了,马力欧!我\n\ +真的不能容忍我\n\ +竟然输给你了。\n\ + \n\ +我的部队真是群\n\ +废物!他们已经\n\ +交出了所有的力\n\ +量之星!什么?\n\ +有120颗?\n\ + \n\ +真是不可思议,\n\ +啊!有一些我也\n\ +无法找到??!\n\ +!!!\n\ + \n\ +现在,我看到世\n\ +界终于重归和平\n\ +了…噢!我好恨\n\ +和平啊!我不想\n\ +看到这个,我要\n\ +离开这儿!\n\ + \n\ +你等着,我会回\n\ +来的。到那时,\n\ +要让你的摇杆冒\n\ +烟!\n\ + \n\ +哇哈哈哈哈!")) + +DEFINE_DIALOG(DIALOG_164, 1, 4, 30, 200, _("\ +马力欧!你怎么\n\ +了?我已经很久\n\ +没有上滑道了,\n\ +都快不成样子\n\ +了。\n\ + \n\ +我一直在期待和\n\ +一位滑雪老手来\n\ +进行一场精彩的\n\ +比赛。\n\ + \n\ +你想和我比吗?\n\ + \n\ +预备…\n\ + \n\ +  开始!  不")) + +DEFINE_DIALOG(DIALOG_165, 1, 5, 30, 200, _("\ +我对那些由于绕\n\ +着柱子跑而昏倒\n\ +的人决不承担任\n\ +何责任。")) + +DEFINE_DIALOG(DIALOG_166, 1, 4, 30, 200, _("\ +我外出训练去\n\ +了,会很快回来\n\ +的。\n\ + \n\ +你以后再来吧。\n\ + \n\ +——喏库喏库")) + +DEFINE_DIALOG(DIALOG_167, 1, 4, 30, 200, _("\ +公主的城堡就在\n\ +前面。\n\ + \n\ +按[A]键跳跃,按\n\ +[Z]键蹲下,按[B]\n\ +键出拳、读标记\n\ +或者抓起东西。\n\ +再按[B]键扔掉你\n\ +刚刚抓起的东\n\ +西。")) + +DEFINE_DIALOG(DIALOG_168, 1, 5, 30, 200, _("\ +嗨!撞掉它!这\n\ +已经是你第二次\n\ +抓住我了。现\n\ +在,你是在找它\n\ +吧,马力欧!")) + +DEFINE_DIALOG(DIALOG_169, 1, 4, 30, 200, _("\ +不准进来!\n\ +就是说你!\n\ +哇哈哈哈!\n\ + \n\ +任何私自进洞的\n\ +人,一定会遇到\n\ +灾难的。\n\ + \n\ +——船长")) diff --git a/text/de/dialogs.h b/text/de/dialogs.h index fba15c16..a6c9f0cc 100644 --- a/text/de/dialogs.h +++ b/text/de/dialogs.h @@ -330,11 +330,11 @@ unachtsam, wenn Du Dich\n\ leise, also langsam,\n\ bewegst.\n\ Die Kameraposition kannst\n\ -Du durch [C]> und [C]<\n\ +Du durch [C]▶ und [C]◀\n\ verändern, um einen\n\ Überblick zu erhalten.\n\ Das Weitwinkelobjektiv\n\ -wird mit [C]| eingesetzt.\n\ +wird mit [C]▼ eingesetzt.\n\ Details der Umgebung\n\ werden so sichtbar!\n\ Ein Warnton erklingt,\n\ @@ -417,7 +417,7 @@ zum Hauptfilm!")) DEFINE_DIALOG(DIALOG_035, 1, 5, 30, 200, _("\ Die [C]-Knöpfe dienen der\n\ Steuerung der Kamera.\n\ -Benutze den ^-Knopf, um\n\ +Benutze den ▲-Knopf, um\n\ die Kamera mit dem\n\ Analog-Stick zu bewegen.\n\ Normalerweise sorgt ein\n\ @@ -431,7 +431,7 @@ Drückst Du die [R]-Taste,\n\ wechselst Du zwischen\n\ Lakitus und Marios\n\ Sicht hin und her. Drücke\n\ -|, um den Zoom oder\n\ +▼, um den Zoom oder\n\ das Weitwinkelobjektiv zu\n\ aktivieren. Dies ist in\n\ allen Perspektiven möglich.\n\ @@ -443,7 +443,7 @@ dem Bildschirm befindet.")) DEFINE_DIALOG(DIALOG_036, 1, 5, 30, 200, _("\ AUSSICHTSPLATTFORM\n\ -Drücke ^ und genieße die\n\ +Drücke ▲ und genieße die\n\ Aussicht. Vielleicht\n\ entdeckst Du Geheimnisse\n\ Deiner Umgebung.\n\ diff --git a/text/debug_text.inc.c b/text/debug_text.inc.c new file mode 100644 index 00000000..25b922e3 --- /dev/null +++ b/text/debug_text.inc.c @@ -0,0 +1,36 @@ +// == debug table == + +#ifndef VERSION_EU + +// (this wasn't translated for US, and was removed in EU) + +static const u8 Debug0[] = { + _("STAGE SELECT\n" + " つづける?\n" + " 1 マウンテン\n" + " 2 ファイアーバブル\n" + " 3 スノースライダー\n" + " 4 ウォーターランド\n" + "   クッパ1ごう\n" + " もどる") +}; + +static const u8 Debug1[] = { + _("PAUSE    \n" + " つづける?\n" + " やめる ?") +}; + +static const struct DialogEntry debug_text_entry_0 = { + 1, 8, 30, 200, Debug0 +}; + +static const struct DialogEntry debug_text_entry_1 = { + 1, 3, 100, 150, Debug1 +}; + +const struct DialogEntry *const seg2_debug_text_table[] = { + &debug_text_entry_0, &debug_text_entry_1, NULL, +}; + +#endif diff --git a/text/define_text.inc.c b/text/define_text.inc.c index d33031f6..a7925f17 100644 --- a/text/define_text.inc.c +++ b/text/define_text.inc.c @@ -1,41 +1,3 @@ -// == debug table == - -#ifndef VERSION_EU - -// (this wasn't translated for US, and was removed in EU) - -static const u8 Debug0[] = { - _("STAGE SELECT\n" - " つづける?\n" - " 1 マウンテン\n" - " 2 ファイアーバブル\n" - " 3 スノースライダー\n" - " 4 ウォーターランド\n" - "   クッパ1ごう\n" - " もどる") -}; - -static const u8 Debug1[] = { - _("PAUSE    \n" - " つづける?\n" - " やめる ?") -}; - -static const struct DialogEntry debug_text_entry_0 = { - 1, 8, 30, 200, Debug0 -}; - -static const struct DialogEntry debug_text_entry_1 = { - 1, 3, 100, 150, Debug1 -}; - -const struct DialogEntry *const seg2_debug_text_table[] = { - &debug_text_entry_0, &debug_text_entry_1, NULL, -}; - -#endif - - // == dialog == // (defines en_dialog_table etc.) diff --git a/text/fr/dialogs.h b/text/fr/dialogs.h index 26e8c1fb..26588b4c 100644 --- a/text/fr/dialogs.h +++ b/text/fr/dialogs.h @@ -159,7 +159,7 @@ DEFINE_DIALOG(DIALOG_008, 1, 5, 30, 200, _("\ ATTENTION AU CHOMP\n\ ENCHAINE!!!\n\ Danger! Approchez-vous\n\ -et appuyez sur [C]^ pour\n\ +et appuyez sur [C]▲ pour\n\ jeter un oeil.\n\ Impressionnant, non?\n\ Avez-vous remarqué la\n\ @@ -373,8 +373,8 @@ pour ne pas faire de bruit\n\ et ainsi surprendre vos\n\ ennemis.\n\ Vous pouvez déplacer ma\n\ -caméra avec [C]> et [C]<.\n\ -Appuyez sur [C]| pour voir\n\ +caméra avec [C]▶ et [C]◀.\n\ +Appuyez sur [C]▼ pour voir\n\ de loin.\n\ Lorsque ma caméra ne\n\ peut plus se déplacer,\n\ @@ -439,7 +439,7 @@ la caméra, un signal\n\ sonore retentira.\n\ Pour jeter un oeil autour\n\ de Mario, arrêtez-vous\n\ -et appuyez sur [C]^.\n\ +et appuyez sur [C]▲.\n\ Appuyez sur le bouton [A]\n\ pour revenir au jeu.\n\ \n\ @@ -456,7 +456,7 @@ meilleures images...")) DEFINE_DIALOG(DIALOG_035, 1, 6, 30, 200, _("\ Il existe quatre boutons\n\ -[C]. En appuyant sur [C]^ et\n\ +[C]. En appuyant sur [C]▲ et\n\ en bougeant le stick\n\ multidirectionnel, vous\n\ pourrez jeter un oeil aux\n\ @@ -469,14 +469,14 @@ sur [R] et ainsi utiliser\n\ la 『caméra-Mario』.\n\ Appuyez sur [R] à nouveau\n\ pour utiliser la caméra de\n\ -Lakitu. Appuyez sur [C]|\n\ +Lakitu. Appuyez sur [C]▼\n\ pour voir Mario de loin,\n\ quelque soit le mode de\n\ vue que vous utilisez.")) DEFINE_DIALOG(DIALOG_036, 1, 4, 30, 200, _("\ --PANORAMA--\n\ -Appuyez sur [C]^ pour jeter\n\ +Appuyez sur [C]▲ pour jeter\n\ un coup d'oeil. Profitez\n\ de la vue!\n\ Appuyez sur [R] pour\n\ diff --git a/text/us/dialogs.h b/text/us/dialogs.h index 34a18b20..8ec520b8 100644 --- a/text/us/dialogs.h +++ b/text/us/dialogs.h @@ -140,7 +140,7 @@ it, fair and square!")) DEFINE_DIALOG(DIALOG_008, 1, 4, 30, 200, _("\ BEWARE OF CHAIN CHOMP\n\ Extreme Danger!\n\ -Get close and press [C]^\n\ +Get close and press [C]▲\n\ for a better look.\n\ Scary, huh?\n\ See the Red Coin on top\n\ @@ -352,8 +352,8 @@ order to walk quietly.\n\ And wrapping up filming\n\ techniques reported on\n\ earlier, you can take a\n\ -look around using [C]> and\n\ -[C]<. Press [C]| to view the\n\ +look around using [C]▶ and\n\ +[C]◀. Press [C]▼ to view the\n\ action from a distance.\n\ When you can't move the\n\ camera any farther, the\n\ @@ -424,7 +424,7 @@ If we can't adjust the\n\ view any further, we'll\n\ buzz. To take a look at\n\ the surroundings, stop\n\ -and press [C]^.\n\ +and press [C]▲.\n\ \n\ Press [A] to resume play.\n\ Switch camera modes with\n\ @@ -438,7 +438,7 @@ Lakitu Bros.")) DEFINE_DIALOG(DIALOG_035, 1, 5, 30, 200, _("\ There are four camera, or\n\ -『[C],』 Buttons. Press [C]^\n\ +『[C],』 Buttons. Press [C]▲\n\ to look around using the\n\ Control Stick.\n\ \n\ @@ -448,19 +448,19 @@ It is the camera\n\ recommended for normal\n\ play.\n\ You can change angles by\n\ -pressing [C]>. If you press\n\ +pressing [C]▶. If you press\n\ [R], the view switches to\n\ Mario's camera, which\n\ is directly behind him.\n\ Press [R] again to return\n\ to Lakitu's camera. Press\n\ -[C]| to see Mario from\n\ +[C]▼ to see Mario from\n\ afar, using either\n\ Lakitu's or Mario's view.")) DEFINE_DIALOG(DIALOG_036, 1, 5, 30, 200, _("\ OBSERVATION PLATFORM\n\ -Press [C]^ to take a look\n\ +Press [C]▲ to take a look\n\ around. Don't miss\n\ anything!\n\ \n\ diff --git a/tools/.gitignore b/tools/.gitignore index 7be0668f..1abd8943 100644 --- a/tools/.gitignore +++ b/tools/.gitignore @@ -2,10 +2,6 @@ /aiff_extract_codebook /armips /extract_data_for_mio -/mio0 -/n64cksum -/n64graphics -/n64graphics_ci /patch_elf_32bit /skyconv /tabledesign diff --git a/tools/Makefile b/tools/Makefile index 92a39168..f3f9496f 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -5,9 +5,9 @@ HOST_ENV := $(patsubst MINGW%,MinGW,$(HOST_ENV)) CC := gcc CXX := g++ -CFLAGS := -I . -Wall -Wextra -Wno-unused-parameter -pedantic -O2 -s +CFLAGS := -I . -I sm64tools -Wall -Wextra -Wno-unused-parameter -pedantic -O2 -s LDFLAGS := -lm -ALL_PROGRAMS := armips n64graphics n64graphics_ci mio0 n64cksum textconv patch_elf_32bit aifc_decode aiff_extract_codebook vadpcm_enc tabledesign extract_data_for_mio skyconv +ALL_PROGRAMS := armips textconv patch_elf_32bit aifc_decode aiff_extract_codebook vadpcm_enc tabledesign extract_data_for_mio skyconv LIBAUDIOFILE := audiofile/libaudiofile.a # Only build armips from tools if it is not found on the system @@ -19,17 +19,6 @@ endif default: all -n64graphics_SOURCES := n64graphics.c utils.c -n64graphics_CFLAGS := -DN64GRAPHICS_STANDALONE - -n64graphics_ci_SOURCES := n64graphics_ci_dir/n64graphics_ci.c n64graphics_ci_dir/exoquant/exoquant.c n64graphics_ci_dir/utils.c - -mio0_SOURCES := libmio0.c -mio0_CFLAGS := -DMIO0_STANDALONE - -n64cksum_SOURCES := n64cksum.c utils.c -n64cksum_CFLAGS := -DN64CKSUM_STANDALONE - textconv_SOURCES := textconv.c utf8.c hashtable.c patch_elf_32bit_SOURCES := patch_elf_32bit.c @@ -48,7 +37,7 @@ vadpcm_enc_CFLAGS := -Wno-unused-result -Wno-uninitialized -Wno-sign-compare -W extract_data_for_mio_SOURCES := extract_data_for_mio.c -skyconv_SOURCES := skyconv.c n64graphics.c utils.c +skyconv_SOURCES := skyconv.c sm64tools/n64graphics.c sm64tools/utils.c armips: CC := $(CXX) armips_SOURCES := armips.cpp @@ -60,24 +49,25 @@ endif all-except-recomp: $(LIBAUDIOFILE) $(BUILD_PROGRAMS) -all: all-except-recomp ido5.3_recomp +all: all-except-recomp ido-static-recomp clean: $(RM) $(ALL_PROGRAMS) $(MAKE) -C audiofile clean - $(MAKE) -C ido5.3_recomp clean + $(MAKE) -C ido-static-recomp clean define COMPILE $(1): $($1_SOURCES) $$(CC) $(CFLAGS) $($1_CFLAGS) $$^ -o $$@ $($1_LDFLAGS) $(LDFLAGS) endef -ido5.3_recomp: - $(MAKE) -C ido5.3_recomp +ido-static-recomp: + @$(MAKE) -C ido-static-recomp setup + @$(MAKE) -C ido-static-recomp $(foreach p,$(BUILD_PROGRAMS),$(eval $(call COMPILE,$(p)))) $(LIBAUDIOFILE): @$(MAKE) -C audiofile -.PHONY: all all-except-recomp clean default ido5.3_recomp +.PHONY: all all-except-recomp clean default ido-static-recomp diff --git a/tools/asm-processor/.gitignore b/tools/asm-processor/.gitignore new file mode 100644 index 00000000..cc5bba4b --- /dev/null +++ b/tools/asm-processor/.gitignore @@ -0,0 +1,2 @@ +*.o +*.py[cod] diff --git a/tools/asm-processor/LICENSE b/tools/asm-processor/LICENSE new file mode 100644 index 00000000..cf1ab25d --- /dev/null +++ b/tools/asm-processor/LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/tools/asm-processor/README.md b/tools/asm-processor/README.md new file mode 100644 index 00000000..009147c0 --- /dev/null +++ b/tools/asm-processor/README.md @@ -0,0 +1,112 @@ +# asm-processor + +Pre-process .c files and post-process .o files to enable embedding MIPS assembly into IDO-compiled C. + +## Usage + +Let's say you have a file compiled with `-g` on the IDO compiler, that looks like this: +```c +float func4(void) { + "func4"; + return 0.2f; +} +``` + +This script enables replacing it by: +```asm +GLOBAL_ASM( +.rdata +.word 0x66756e63 # func +.word 0x34000000 # 4\0\0\0 + +.late_rodata +glabel rv +.word 0x3e4ccccd # 0.2f + +.text +glabel func4 +lui $at, %hi(rv) +jr $ra +lwc1 $f0, %lo(rv)($at) +jr $ra +nop +jr $ra +nop +) +``` + +To compile the file, run `python3 build.py $CC -- $AS $ASFLAGS -- $CFLAGS -o out.o in.c`, where $CC points to an IDO binary (5.3/7.1 and recomp/qemu all supported), $AS is e.g. `mips-linux-gnu-as`, $ASFLAGS e.g. `-march=vr4300 -mabi=32` and $CFLAGS e.g. `-Wab,-r4300_mul -non_shared -G 0 -Xcpluscomm -g`. build.py may be customized as needed. + +In addition to an .o file, build.py also generates a .d file with Makefile dependencies for .s files referenced by the input .c file. +This functionality may be removed if not needed. + +Reading assembly from file is also supported, by either `GLOBAL_ASM("file.s")` or `#pragma GLOBAL_ASM("file.s")`. + +### What is supported? + +`.text`, `.data`, `.bss` and `.rodata` sections, `.word`/`.incbin`, `.ascii`/`.asciz`, and `-g`, `-g3`, `-O1`, `-O2`, `-framepointer` and `-mips1`/`-mips2` flags to the IDO compiler. + +### What is not supported? + +* complicated assembly (.ifdef, macro declarations/calls other than `glabel`, pseudo-instructions that expand to several real instructions) +* non-IDO compilers +* `-O3` (due to function reordering) + +C `#ifdef`s only work outside of `GLOBAL_ASM` calls, but is otherwise able to replace `.ifdef`. + +### What's up with "late rodata"? + +The IDO compiler emits rodata in two passes: first array/string contents, then large literals/switch jump tables. + +Data declared within `.rdata`/`.section .rodata` will end up in the first half, and `.late_rodata`/`.section .late_rodata` in the second half. + +### How does it work? + +It's a bit of a hack! +The basic idea is replace `GLOBAL_ASM` blocks with dummy C functions/global vars of the same sections sizes as the assembly. +Then the C file gets compiled, and the dummy contents overwritten with the injected assembly. + +To accomplish this, asm-processor has logic for guessing the size of assembly contents +(which assumes the assembly isn't too complicated, e.g. no macros), +and for emitting C code of exact sizes for a bunch of different IDO compiler flags. + +The assembler code is padded with nops to line it up with its correct position in the C; +this allows C and asm ELF files to be merged easily without having to fix up e.g. symbol addresses. + +The most difficult part is `late_rodata`, which is hard to create programmatically. +asm-processor does that by emitting code that uses dummy float literals/double literals/jump tables, +assembles the late_rodata at another location of the .rodata section, then overwrites the dummy rodata. +This does require some movement of symbols and relocations, and quite a bit of care in what code to +emit and how to preserve .double alignment. + +It's worth noting some alternative ways in which asm-processor would have been implemented: +- One idea to get rid of the C/asm size estimations is to emit arbitrary code, and then move code, +symbols and relocations to the correct place after the sizes are known. +Given the machinery for `late_rodata` this wouldn't have been too difficult, and it would have the upside of improved portability. +There is a big downside, however: using dummy code of incorrect size throws off alignment and can introduce unintended padding. +Fixing this would require running multiple passes of asm-processor, with one compile per `ASM_GLOBAL`. +- Another idea is to run the compiler with -S to emit assembly, modify the emitted assembly, then run the assembler +(which in IDO's case may perform additional instruction reordering etc.). +This option has not been investigated in much detail, and would perhaps be superior to the current implementation. +It does have a few unknowns to it, e.g. instruction encoding differences between GNU `as` and IDO's assembler, +how to avoid reordering the injected assembly, and how .rodata/.late_rodata are implemented. + +### Testing + +There are a few tests to ensure you don't break anything when hacking on asm-processor: `./run-tests.sh` should exit without output if they pass, or else output a diff from previous to new version. + +Tests need the environment variable `MIPS_CC` set to point to the IDO 7.1 compiler, with Pascal support enabled. + +For example if asm-processor is cloned in the same directory as [ido static recomp](https://github.com/decompals/ido-static-recomp) and the working directory is asm-processor, tests can be run using: + +```sh +MIPS_CC=../ido-static-recomp/build/7.1/out/cc ./run-tests.sh +``` + +Or using [qemu-irix](https://github.com/zeldaret/oot/releases/tag/0.1q) (don't forget `chmod u+x qemu-irix`) to emulate IDO: + +```sh +MIPS_CC='./qemu-irix -silent -L ../ido-static-recomp/ido/7.1/ ../ido-static-recomp/ido/7.1/usr/bin/cc' ./run-tests.sh +``` + +To skip running Pascal tests, remove the `tests/*.p` glob from `run-tests.sh`. diff --git a/tools/asm-processor/add-test.sh b/tools/asm-processor/add-test.sh new file mode 100644 index 00000000..708548e5 --- /dev/null +++ b/tools/asm-processor/add-test.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +for A in "$@"; do + OBJDUMPFLAGS="-srt" + ./compile-test.sh "$A" && mips-linux-gnu-objdump $OBJDUMPFLAGS "${A%.*}.o" > "${A%.*}.objdump" +done diff --git a/tools/asm_processor/asm-processor.py b/tools/asm-processor/asm_processor.py similarity index 63% rename from tools/asm_processor/asm-processor.py rename to tools/asm-processor/asm_processor.py index ea18c384..ff53a272 100644 --- a/tools/asm_processor/asm-processor.py +++ b/tools/asm-processor/asm_processor.py @@ -81,6 +81,21 @@ R_MIPS_26 = 4 R_MIPS_HI16 = 5 R_MIPS_LO16 = 6 +MIPS_DEBUG_ST_STATIC = 2 +MIPS_DEBUG_ST_STATIC_PROC = 14 + + +class ElfFormat: + def __init__(self, is_big_endian): + self.is_big_endian = is_big_endian + self.struct_char = ">" if is_big_endian else "<" + + def pack(self, fmt, *args): + return struct.pack(self.struct_char + fmt, *args) + + def unpack(self, fmt, data): + return struct.unpack(self.struct_char + fmt, data) + class ElfHeader: """ @@ -104,9 +119,9 @@ class ElfHeader: def __init__(self, data): self.e_ident = data[:EI_NIDENT] - self.e_type, self.e_machine, self.e_version, self.e_entry, self.e_phoff, self.e_shoff, self.e_flags, self.e_ehsize, self.e_phentsize, self.e_phnum, self.e_shentsize, self.e_shnum, self.e_shstrndx = struct.unpack('>HHIIIIIHHHHHH', data[EI_NIDENT:]) assert self.e_ident[EI_CLASS] == 1 # 32-bit - assert self.e_ident[EI_DATA] == 2 # big-endian + self.fmt = ElfFormat(is_big_endian=(self.e_ident[EI_DATA] == 2)) + self.e_type, self.e_machine, self.e_version, self.e_entry, self.e_phoff, self.e_shoff, self.e_flags, self.e_ehsize, self.e_phentsize, self.e_phnum, self.e_shentsize, self.e_shnum, self.e_shstrndx = self.fmt.unpack('HHIIIIIHHHHHH', data[EI_NIDENT:]) assert self.e_type == 1 # relocatable assert self.e_machine == 8 # MIPS I Architecture assert self.e_phoff == 0 # no program header @@ -114,7 +129,7 @@ class ElfHeader: assert self.e_shstrndx != SHN_UNDEF def to_bin(self): - return self.e_ident + struct.pack('>HHIIIIIHHHHHH', self.e_type, + return self.e_ident + self.fmt.pack('HHIIIIIHHHHHH', self.e_type, self.e_machine, self.e_version, self.e_entry, self.e_phoff, self.e_shoff, self.e_flags, self.e_ehsize, self.e_phentsize, self.e_phnum, self.e_shentsize, self.e_shnum, self.e_shstrndx) @@ -132,35 +147,42 @@ class Symbol: } Elf32_Sym; """ - def __init__(self, data, strtab): - self.st_name, self.st_value, self.st_size, st_info, self.st_other, self.st_shndx = struct.unpack('>IIIBBH', data) + def __init__(self, fmt, data, strtab, name=None): + self.fmt = fmt + self.st_name, self.st_value, self.st_size, st_info, self.st_other, self.st_shndx = fmt.unpack('IIIBBH', data) assert self.st_shndx != SHN_XINDEX, "too many sections (SHN_XINDEX not supported)" self.bind = st_info >> 4 self.type = st_info & 15 - self.name = strtab.lookup_str(self.st_name) + self.name = name if name is not None else strtab.lookup_str(self.st_name) self.visibility = self.st_other & 3 + @staticmethod + def from_parts(fmt, st_name, st_value, st_size, st_info, st_other, st_shndx, strtab, name): + header = fmt.pack('IIIBBH', st_name, st_value, st_size, st_info, st_other, st_shndx) + return Symbol(fmt, header, strtab, name) + def to_bin(self): st_info = (self.bind << 4) | self.type - return struct.pack('>IIIBBH', self.st_name, self.st_value, self.st_size, st_info, self.st_other, self.st_shndx) + return self.fmt.pack('IIIBBH', self.st_name, self.st_value, self.st_size, st_info, self.st_other, self.st_shndx) class Relocation: - def __init__(self, data, sh_type): + def __init__(self, fmt, data, sh_type): + self.fmt = fmt self.sh_type = sh_type if sh_type == SHT_REL: - self.r_offset, self.r_info = struct.unpack('>II', data) + self.r_offset, self.r_info = fmt.unpack('II', data) else: - self.r_offset, self.r_info, self.r_addend = struct.unpack('>III', data) + self.r_offset, self.r_info, self.r_addend = fmt.unpack('III', data) self.sym_index = self.r_info >> 8 self.rel_type = self.r_info & 0xff def to_bin(self): self.r_info = (self.sym_index << 8) | self.rel_type if self.sh_type == SHT_REL: - return struct.pack('>II', self.r_offset, self.r_info) + return self.fmt.pack('II', self.r_offset, self.r_info) else: - return struct.pack('>III', self.r_offset, self.r_info, self.r_addend) + return self.fmt.pack('III', self.r_offset, self.r_info, self.r_addend) class Section: @@ -179,8 +201,9 @@ class Section: } Elf32_Shdr; """ - def __init__(self, header, data, index): - self.sh_name, self.sh_type, self.sh_flags, self.sh_addr, self.sh_offset, self.sh_size, self.sh_link, self.sh_info, self.sh_addralign, self.sh_entsize = struct.unpack('>IIIIIIIIII', header) + def __init__(self, fmt, header, data, index): + self.fmt = fmt + self.sh_name, self.sh_type, self.sh_flags, self.sh_addr, self.sh_offset, self.sh_size, self.sh_link, self.sh_info, self.sh_addralign, self.sh_entsize = fmt.unpack('IIIIIIIIII', header) assert not self.sh_flags & SHF_LINK_ORDER if self.sh_entsize != 0: assert self.sh_size % self.sh_entsize == 0 @@ -192,9 +215,9 @@ class Section: self.relocated_by = [] @staticmethod - def from_parts(sh_name, sh_type, sh_flags, sh_link, sh_info, sh_addralign, sh_entsize, data, index): - header = struct.pack('>IIIIIIIIII', sh_name, sh_type, sh_flags, 0, 0, len(data), sh_link, sh_info, sh_addralign, sh_entsize) - return Section(header, data, index) + def from_parts(fmt, sh_name, sh_type, sh_flags, sh_link, sh_info, sh_addralign, sh_entsize, data, index): + header = fmt.pack('IIIIIIIIII', sh_name, sh_type, sh_flags, 0, 0, len(data), sh_link, sh_info, sh_addralign, sh_entsize) + return Section(fmt, header, data, index) def lookup_str(self, index): assert self.sh_type == SHT_STRTAB @@ -214,7 +237,7 @@ class Section: def header_to_bin(self): if self.sh_type != SHT_NOBITS: self.sh_size = len(self.data) - return struct.pack('>IIIIIIIIII', self.sh_name, self.sh_type, self.sh_flags, self.sh_addr, self.sh_offset, self.sh_size, self.sh_link, self.sh_info, self.sh_addralign, self.sh_entsize) + return self.fmt.pack('IIIIIIIIII', self.sh_name, self.sh_type, self.sh_flags, self.sh_addr, self.sh_offset, self.sh_size, self.sh_link, self.sh_info, self.sh_addralign, self.sh_entsize) def late_init(self, sections): if self.sh_type == SHT_SYMTAB: @@ -243,14 +266,14 @@ class Section: self.strtab = sections[self.sh_link] entries = [] for i in range(0, self.sh_size, self.sh_entsize): - entries.append(Symbol(self.data[i:i+self.sh_entsize], self.strtab)) + entries.append(Symbol(self.fmt, self.data[i:i+self.sh_entsize], self.strtab)) self.symbol_entries = entries def init_relocs(self): assert self.is_rel() entries = [] for i in range(0, self.sh_size, self.sh_entsize): - entries.append(Relocation(self.data[i:i+self.sh_entsize], self.sh_type)) + entries.append(Relocation(self.fmt, self.data[i:i+self.sh_entsize], self.sh_type)) self.relocations = entries def local_symbols(self): @@ -261,6 +284,43 @@ class Section: assert self.sh_type == SHT_SYMTAB return self.symbol_entries[self.sh_info:] + def relocate_mdebug(self, original_offset): + assert self.sh_type == SHT_MIPS_DEBUG + new_data = bytearray(self.data) + shift_by = self.sh_offset - original_offset + + # Update the file-relative offsets in the Symbolic HDRR + hdrr_magic, hdrr_vstamp, hdrr_ilineMax, hdrr_cbLine, \ + hdrr_cbLineOffset, hdrr_idnMax, hdrr_cbDnOffset, hdrr_ipdMax, \ + hdrr_cbPdOffset, hdrr_isymMax, hdrr_cbSymOffset, hdrr_ioptMax, \ + hdrr_cbOptOffset, hdrr_iauxMax, hdrr_cbAuxOffset, hdrr_issMax, \ + hdrr_cbSsOffset, hdrr_issExtMax, hdrr_cbSsExtOffset, hdrr_ifdMax, \ + hdrr_cbFdOffset, hdrr_crfd, hdrr_cbRfdOffset, hdrr_iextMax, \ + hdrr_cbExtOffset = self.fmt.unpack("HHIIIIIIIIIIIIIIIIIIIIIII", self.data[0:0x60]) + + assert hdrr_magic == 0x7009, "Invalid magic value for .mdebug symbolic header" + + hdrr_cbLineOffset += shift_by + hdrr_cbDnOffset += shift_by + hdrr_cbPdOffset += shift_by + hdrr_cbSymOffset += shift_by + hdrr_cbOptOffset += shift_by + hdrr_cbAuxOffset += shift_by + hdrr_cbSsOffset += shift_by + hdrr_cbSsExtOffset += shift_by + hdrr_cbFdOffset += shift_by + hdrr_cbRfdOffset += shift_by + hdrr_cbExtOffset += shift_by + + new_data[0:0x60] = self.fmt.pack("HHIIIIIIIIIIIIIIIIIIIIIII", hdrr_magic, hdrr_vstamp, hdrr_ilineMax, hdrr_cbLine, \ + hdrr_cbLineOffset, hdrr_idnMax, hdrr_cbDnOffset, hdrr_ipdMax, \ + hdrr_cbPdOffset, hdrr_isymMax, hdrr_cbSymOffset, hdrr_ioptMax, \ + hdrr_cbOptOffset, hdrr_iauxMax, hdrr_cbAuxOffset, hdrr_issMax, \ + hdrr_cbSsOffset, hdrr_issExtMax, hdrr_cbSsExtOffset, hdrr_ifdMax, \ + hdrr_cbFdOffset, hdrr_crfd, hdrr_cbRfdOffset, hdrr_iextMax, \ + hdrr_cbExtOffset) + + self.data = bytes(new_data) class ElfFile: def __init__(self, data): @@ -268,15 +328,16 @@ class ElfFile: assert data[:4] == b'\x7fELF', "not an ELF file" self.elf_header = ElfHeader(data[0:52]) + self.fmt = self.elf_header.fmt offset, size = self.elf_header.e_shoff, self.elf_header.e_shentsize - null_section = Section(data[offset:offset + size], data, 0) + null_section = Section(self.fmt, data[offset:offset + size], data, 0) num_sections = self.elf_header.e_shnum or null_section.sh_size self.sections = [null_section] for i in range(1, num_sections): ind = offset + i * size - self.sections.append(Section(data[ind:ind + size], data, i)) + self.sections.append(Section(self.fmt, data[ind:ind + size], data, i)) symtab = None for s in self.sections: @@ -300,7 +361,7 @@ class ElfFile: def add_section(self, name, sh_type, sh_flags, sh_link, sh_info, sh_addralign, sh_entsize, data): shstr = self.sections[self.elf_header.e_shstrndx] sh_name = shstr.add_str(name) - s = Section.from_parts(sh_name=sh_name, sh_type=sh_type, + s = Section.from_parts(self.fmt, sh_name=sh_name, sh_type=sh_type, sh_flags=sh_flags, sh_link=sh_link, sh_info=sh_info, sh_addralign=sh_addralign, sh_entsize=sh_entsize, data=data, index=len(self.sections)) @@ -309,7 +370,7 @@ class ElfFile: s.late_init(self.sections) return s - def drop_irrelevant_sections(self): + def drop_mdebug_gptab(self): # We can only drop sections at the end, since otherwise section # references might be wrong. Luckily, these sections typically are. while self.sections[-1].sh_type in [SHT_MIPS_DEBUG, SHT_MIPS_GPTAB]: @@ -332,7 +393,11 @@ class ElfFile: for s in self.sections: if s.sh_type != SHT_NOBITS and s.sh_type != SHT_NULL: pad_out(s.sh_addralign) + old_offset = s.sh_offset s.sh_offset = outidx + if s.sh_type == SHT_MIPS_DEBUG and s.sh_offset != old_offset: + # The .mdebug section has moved, relocate offsets + s.relocate_mdebug(old_offset) write_out(s.data) pad_out(4) @@ -372,14 +437,18 @@ class Failure(Exception): class GlobalState: - def __init__(self, min_instr_count, skip_instr_count, use_jtbl_for_rodata): + def __init__(self, min_instr_count, skip_instr_count, use_jtbl_for_rodata, prelude_if_late_rodata, mips1, pascal): # A value that hopefully never appears as a 32-bit rodata constant (or we # miscompile late rodata). Increases by 1 in each step. self.late_rodata_hex = 0xE0123456 + self.valuectr = 0 self.namectr = 0 self.min_instr_count = min_instr_count self.skip_instr_count = skip_instr_count self.use_jtbl_for_rodata = use_jtbl_for_rodata + self.prelude_if_late_rodata = prelude_if_late_rodata + self.mips1 = mips1 + self.pascal = pascal def next_late_rodata_hex(self): dummy_bytes = struct.pack('>I', self.late_rodata_hex) @@ -393,6 +462,36 @@ class GlobalState: self.namectr += 1 return '_asmpp_{}{}'.format(cat, self.namectr) + def func_prologue(self, name): + if self.pascal: + return " ".join([ + "procedure {}();".format(name), + "type", + " pi = ^integer;", + " pf = ^single;", + " pd = ^double;", + "var", + " vi: pi;", + " vf: pf;", + " vd: pd;", + "begin", + " vi := vi;", + " vf := vf;", + " vd := vd;", + ]) + else: + return 'void {}(void) {{'.format(name) + + def func_epilogue(self): + if self.pascal: + return "end;" + else: + return "}" + + def pascal_assignment(self, tp, val): + self.valuectr += 1 + address = (8 * self.valuectr) & 0x7FFF + return 'v{} := p{}({}); v{}^ := {};'.format(tp, tp, address, tp, val) Function = namedtuple('Function', ['text_glabels', 'asm_conts', 'late_rodata_dummy_bytes', 'jtbl_rodata_size', 'late_rodata_asm_conts', 'fn_desc', 'data']) @@ -426,6 +525,7 @@ class GlobalAsmBlock: def count_quoted_size(self, line, z, real_line, output_enc): line = line.encode(output_enc).decode('latin1') in_quote = False + has_comma = True num_parts = 0 ret = 0 i = 0 @@ -436,10 +536,15 @@ class GlobalAsmBlock: if not in_quote: if c == '"': in_quote = True + if z and not has_comma: + self.fail(".asciiz with glued strings is not supported due to GNU as version diffs") num_parts += 1 + elif c == ',': + has_comma = True else: if c == '"': in_quote = False + has_comma = False continue ret += 1 if c != '\\': @@ -504,7 +609,7 @@ class GlobalAsmBlock: self.text_glabels.append(line.split()[1]) if not line: pass # empty line - elif line.startswith('glabel ') or (' ' not in line and line.endswith(':')): + elif line.startswith('glabel ') or line.startswith('dlabel ') or line.startswith('endlabel ') or (' ' not in line and line.endswith(':')): pass # label elif line.startswith('.section') or line in ['.text', '.data', '.rdata', '.rodata', '.bss', '.late_rodata']: # section change @@ -524,7 +629,7 @@ class GlobalAsmBlock: changed_section = True elif line.startswith('.incbin'): self.add_sized(int(line.split(',')[-1].strip(), 0), real_line) - elif line.startswith('.word') or line.startswith('.float'): + elif line.startswith('.word') or line.startswith('.gpword') or line.startswith('.float'): self.align4() self.add_sized(4 * len(line.split(',')), real_line) elif line.startswith('.double'): @@ -600,12 +705,19 @@ class GlobalAsmBlock: size = self.fn_section_sizes['.late_rodata'] // 4 skip_next = False needs_double = (self.late_rodata_alignment != 0) + extra_mips1_nop = False + if state.pascal: + jtbl_size = 9 if state.mips1 else 8 + jtbl_min_rodata_size = 2 + else: + jtbl_size = 11 if state.mips1 else 9 + jtbl_min_rodata_size = 5 for i in range(size): if skip_next: skip_next = False continue - # Jump tables give 9 instructions for >= 5 words of rodata, and should be - # emitted when: + # Jump tables give 9 instructions (11 with -mips1) for >= 5 words of rodata, + # and should be emitted when: # - -O2 or -O2 -g3 are used, which give the right codegen # - we have emitted our first .float/.double (to ensure that we find the # created rodata in the binary) @@ -616,11 +728,18 @@ class GlobalAsmBlock: # - we have at least 10 more instructions to go in this function (otherwise our # function size computation will be wrong since the delay slot goes unused) if (not needs_double and state.use_jtbl_for_rodata and i >= 1 and - size - i >= 5 and num_instr - len(late_rodata_fn_output) >= 10): - cases = " ".join("case {}:".format(case) for case in range(size - i)) - late_rodata_fn_output.append("switch (*(volatile int*)0) { " + cases + " ; }") - late_rodata_fn_output.extend([""] * 8) + size - i >= jtbl_min_rodata_size and + num_instr - len(late_rodata_fn_output) >= jtbl_size + 1): + if state.pascal: + cases = " ".join("{}: ;".format(case) for case in range(size - i)) + line = "case 0 of " + cases + " otherwise end;" + else: + cases = " ".join("case {}:".format(case) for case in range(size - i)) + line = "switch (*(volatile int*)0) { " + cases + " ; }" + late_rodata_fn_output.append(line) + late_rodata_fn_output.extend([""] * (jtbl_size - 1)) jtbl_rodata_size = (size - i) * 4 + extra_mips1_nop = i != 2 break dummy_bytes = state.next_late_rodata_hex() late_rodata_dummy_bytes.append(dummy_bytes) @@ -628,20 +747,36 @@ class GlobalAsmBlock: dummy_bytes2 = state.next_late_rodata_hex() late_rodata_dummy_bytes.append(dummy_bytes2) fval, = struct.unpack('>d', dummy_bytes + dummy_bytes2) - late_rodata_fn_output.append('*(volatile double*)0 = {};'.format(fval)) + if state.pascal: + line = state.pascal_assignment('d', fval) + else: + line = '*(volatile double*)0 = {};'.format(fval) + late_rodata_fn_output.append(line) skip_next = True - needs_double = True + needs_double = False + if state.mips1: + # mips1 does not have ldc1/sdc1 + late_rodata_fn_output.append('') + late_rodata_fn_output.append('') + extra_mips1_nop = False else: fval, = struct.unpack('>f', dummy_bytes) - late_rodata_fn_output.append('*(volatile float*)0 = {}f;'.format(fval)) + if state.pascal: + line = state.pascal_assignment('f', fval) + else: + line = '*(volatile float*)0 = {}f;'.format(fval) + late_rodata_fn_output.append(line) + extra_mips1_nop = True late_rodata_fn_output.append('') late_rodata_fn_output.append('') + if state.mips1 and extra_mips1_nop: + late_rodata_fn_output.append('') text_name = None if self.fn_section_sizes['.text'] > 0 or late_rodata_fn_output: text_name = state.make_name('func') - src[0] = 'void {}(void) {{'.format(text_name) - src[self.num_lines] = '}' + src[0] = state.func_prologue(text_name) + src[self.num_lines] = state.func_epilogue() instr_count = self.fn_section_sizes['.text'] // 4 if instr_count < state.min_instr_count: self.fail("too short .text block") @@ -649,6 +784,7 @@ class GlobalAsmBlock: tot_skipped = 0 fn_emitted = 0 fn_skipped = 0 + skipping = True rodata_stack = late_rodata_fn_output[::-1] for (line, count) in self.fn_ins_inds: for _ in range(count): @@ -657,16 +793,28 @@ class GlobalAsmBlock: # Don't let functions become too large. When a function reaches 284 # instructions, and -O2 -framepointer flags are passed, the IRIX # compiler decides it is a great idea to start optimizing more. + # Also, Pascal cannot handle too large functions before it runs out + # of unique statements to write. fn_emitted = 0 fn_skipped = 0 - src[line] += ' }} void {}(void) {{ '.format(state.make_name('large_func')) - if fn_skipped < state.skip_instr_count: + skipping = True + src[line] += (' ' + state.func_epilogue() + ' ' + + state.func_prologue(state.make_name('large_func')) + ' ') + if ( + skipping and + fn_skipped < state.skip_instr_count + + (state.prelude_if_late_rodata if rodata_stack else 0) + ): fn_skipped += 1 tot_skipped += 1 - elif rodata_stack: - src[line] += rodata_stack.pop() else: - src[line] += '*(volatile int*)0 = 0;' + skipping = False + if rodata_stack: + src[line] += rodata_stack.pop() + elif state.pascal: + src[line] += state.pascal_assignment('i', '0') + else: + src[line] += '*(volatile int*)0 = 0;' tot_emitted += 1 fn_emitted += 1 if rodata_stack: @@ -680,16 +828,24 @@ class GlobalAsmBlock: rodata_name = None if self.fn_section_sizes['.rodata'] > 0: + if state.pascal: + self.fail(".rodata isn't supported with Pascal for now") rodata_name = state.make_name('rodata') src[self.num_lines] += ' const char {}[{}] = {{1}};'.format(rodata_name, self.fn_section_sizes['.rodata']) data_name = None if self.fn_section_sizes['.data'] > 0: data_name = state.make_name('data') - src[self.num_lines] += ' char {}[{}] = {{1}};'.format(data_name, self.fn_section_sizes['.data']) + if state.pascal: + line = ' var {}: packed array[1..{}] of char := [otherwise: 0];'.format(data_name, self.fn_section_sizes['.data']) + else: + line = ' char {}[{}] = {{1}};'.format(data_name, self.fn_section_sizes['.data']) + src[self.num_lines] += line bss_name = None if self.fn_section_sizes['.bss'] > 0: + if state.pascal: + self.fail(".bss isn't supported with Pascal") bss_name = state.make_name('bss') src[self.num_lines] += ' char {}[{}];'.format(bss_name, self.fn_section_sizes['.bss']) @@ -714,42 +870,64 @@ float_regexpr = re.compile(r"[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?f") def repl_float_hex(m): return str(struct.unpack(">I", struct.pack(">f", float(m.group(0).strip().rstrip("f"))))[0]) -def parse_source(f, opt, framepointer, input_enc, output_enc, print_source=None): - if opt in ['O2', 'O1']: - if framepointer: +Opts = namedtuple('Opts', ['opt', 'framepointer', 'mips1', 'kpic', 'pascal', 'input_enc', 'output_enc']) + +def parse_source(f, opts, out_dependencies, print_source=None): + if opts.opt in ['O1', 'O2']: + if opts.framepointer: min_instr_count = 6 skip_instr_count = 5 else: min_instr_count = 2 skip_instr_count = 1 - elif opt == 'g': - if framepointer: + elif opts.opt == 'O0': + if opts.framepointer: + min_instr_count = 8 + skip_instr_count = 8 + else: + min_instr_count = 4 + skip_instr_count = 4 + elif opts.opt == 'g': + if opts.framepointer: min_instr_count = 7 skip_instr_count = 7 else: min_instr_count = 4 skip_instr_count = 4 - else: - if opt != 'g3': - raise Failure("must pass one of -g, -O1, -O2, -O2 -g3") - if framepointer: + elif opts.opt == 'g3': + if opts.framepointer: min_instr_count = 4 skip_instr_count = 4 else: min_instr_count = 2 skip_instr_count = 2 + else: + raise Failure("must pass one of -g, -O0, -O1, -O2, -O2 -g3") + prelude_if_late_rodata = 0 + if opts.kpic: + # Without optimizations, the PIC prelude always takes up 3 instructions. + # With optimizations, the prelude is optimized out if there's no late rodata. + if opts.opt in ('g3', 'O2'): + prelude_if_late_rodata = 3 + else: + min_instr_count += 3 + skip_instr_count += 3 use_jtbl_for_rodata = False - if opt in ['O2', 'g3'] and not framepointer: + if opts.opt in ['O2', 'g3'] and not opts.framepointer and not opts.kpic: use_jtbl_for_rodata = True - state = GlobalState(min_instr_count, skip_instr_count, use_jtbl_for_rodata) + state = GlobalState(min_instr_count, skip_instr_count, use_jtbl_for_rodata, prelude_if_late_rodata, opts.mips1, opts.pascal) + output_enc = opts.output_enc global_asm = None asm_functions = [] - output_lines = [] + output_lines = [ + '#line 1 "' + f.name + '"' + ] is_cutscene_data = False + is_early_include = False for line_no, raw_line in enumerate(f, 1): raw_line = raw_line.rstrip() @@ -769,61 +947,78 @@ def parse_source(f, opt, framepointer, input_enc, output_enc, print_source=None) global_asm = None else: global_asm.process_line(raw_line, output_enc) + elif line in ['GLOBAL_ASM(', '#pragma GLOBAL_ASM(']: + global_asm = GlobalAsmBlock("GLOBAL_ASM block at line " + str(line_no)) + start_index = len(output_lines) + elif ((line.startswith('GLOBAL_ASM("') or line.startswith('#pragma GLOBAL_ASM("')) + and line.endswith('")')): + fname = line[line.index('(') + 2 : -2] + out_dependencies.append(fname) + global_asm = GlobalAsmBlock(fname) + with open(fname, encoding=opts.input_enc) as f: + for line2 in f: + global_asm.process_line(line2.rstrip(), output_enc) + src, fn = global_asm.finish(state) + output_lines[-1] = ''.join(src) + asm_functions.append(fn) + global_asm = None + elif line == '#pragma asmproc recurse': + # C includes qualified as + # #pragma asmproc recurse + # #include "file.c" + # will be processed recursively when encountered + is_early_include = True + elif is_early_include: + # Previous line was a #pragma asmproc recurse + is_early_include = False + if not line.startswith("#include "): + raise Failure("#pragma asmproc recurse must be followed by an #include ") + fpath = os.path.dirname(f.name) + fname = os.path.join(fpath, line[line.index(' ') + 2 : -1]) + out_dependencies.append(fname) + include_src = StringIO() + with open(fname, encoding=opts.input_enc) as include_file: + parse_source(include_file, opts, out_dependencies, include_src) + include_src.write('#line ' + str(line_no + 1) + ' "' + f.name + '"') + output_lines[-1] = include_src.getvalue() + include_src.close() else: - if line in ['GLOBAL_ASM(', '#pragma GLOBAL_ASM(']: - global_asm = GlobalAsmBlock("GLOBAL_ASM block at line " + str(line_no)) - start_index = len(output_lines) - elif ((line.startswith('GLOBAL_ASM("') or line.startswith('#pragma GLOBAL_ASM("')) - and line.endswith('")')): - fname = line[line.index('(') + 2 : -2] - global_asm = GlobalAsmBlock(fname) - with open(fname, encoding=input_enc) as f: - for line2 in f: - global_asm.process_line(line2.rstrip(), output_enc) - src, fn = global_asm.finish(state) - output_lines[-1] = ''.join(src) - asm_functions.append(fn) - global_asm = None - elif line.startswith('#include "') and line.endswith('" EARLY'): - # C includes qualified with EARLY (i.e. #include "file.c" EARLY) will be - # processed recursively when encountered - fpath = os.path.dirname(f.name) - fname = line[line.index(' ') + 2 : -7] - include_src = StringIO() - with open(fpath + os.path.sep + fname, encoding=input_enc) as include_file: - parse_source(include_file, opt, framepointer, input_enc, output_enc, include_src) - output_lines[-1] = include_src.getvalue() - include_src.write('#line ' + str(line_no) + '\n') - include_src.close() - else: - # This is a hack to replace all floating-point numbers in an array of a particular type - # (in this case CutsceneData) with their corresponding IEEE-754 hexadecimal representation - if cutscene_data_regexpr.search(line) is not None: - is_cutscene_data = True - elif line.endswith("};"): - is_cutscene_data = False - if is_cutscene_data: - raw_line = re.sub(float_regexpr, repl_float_hex, raw_line) - output_lines[-1] = raw_line + # This is a hack to replace all floating-point numbers in an array of a particular type + # (in this case CutsceneData) with their corresponding IEEE-754 hexadecimal representation + if cutscene_data_regexpr.search(line) is not None: + is_cutscene_data = True + elif line.endswith("};"): + is_cutscene_data = False + if is_cutscene_data: + raw_line = re.sub(float_regexpr, repl_float_hex, raw_line) + output_lines[-1] = raw_line if print_source: if isinstance(print_source, StringIO): for line in output_lines: print_source.write(line + '\n') else: + newline_encoded = "\n".encode(output_enc) for line in output_lines: - print_source.write(line.encode(output_enc) + b'\n') + try: + line_encoded = line.encode(output_enc) + except UnicodeEncodeError: + print("Failed to encode a line to", output_enc) + print("The line:", line) + print("The line, utf-8-encoded:", line.encode("utf-8")) + raise + print_source.write(line_encoded) + print_source.write(newline_encoded) print_source.flush() - if print_source != sys.stdout.buffer: - print_source.close() return asm_functions -def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc): +def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, drop_mdebug_gptab, convert_statics): SECTIONS = ['.data', '.text', '.rodata', '.bss'] with open(objfile_name, 'rb') as f: objfile = ElfFile(f.read()) + fmt = objfile.fmt prev_locs = { '.text': 0, @@ -848,6 +1043,7 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc): # simplicity we pad with nops/.space so that addresses match exactly, so we # don't have to fix up relocations/symbol references. all_text_glabels = set() + func_sizes = {} for function in functions: ifdefed = False for sectype, (temp_name, size) in function.data.items(): @@ -861,6 +1057,11 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc): loc = loc[1] prev_loc = prev_locs[sectype] if loc < prev_loc: + # If the dummy C generates too little asm, and we have two + # consecutive GLOBAL_ASM blocks, we detect that error here. + # On the other hand, if it generates too much, we don't have + # a good way of discovering that error: it's indistinguishable + # from a static symbol occurring after the GLOBAL_ASM block. raise Failure("Wrongly computed size for section {} (diff {}). This is an asm-processor bug!".format(sectype, prev_loc- loc)) if loc != prev_loc: asm.append('.section ' + sectype) @@ -870,6 +1071,8 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc): else: asm.append('.space {}'.format(loc - prev_loc)) to_copy[sectype].append((loc, size, temp_name, function.fn_desc)) + if function.text_glabels: + func_sizes[function.text_glabels[0]] = size prev_locs[sectype] = loc + size if not ifdefed: all_text_glabels.update(function.text_glabels) @@ -890,7 +1093,10 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc): if any(late_rodata_asm): late_rodata_source_name_start = '_asmpp_late_rodata_start' late_rodata_source_name_end = '_asmpp_late_rodata_end' - asm.append('.rdata') + asm.append('.section .late_rodata') + # Put some padding at the start to avoid conflating symbols with + # references to the whole section. + asm.append('.word 0, 0') asm.append('glabel {}'.format(late_rodata_source_name_start)) for conts in late_rodata_asm: asm.extend(conts) @@ -912,16 +1118,21 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc): with open(o_name, 'rb') as f: asm_objfile = ElfFile(f.read()) - # Remove some clutter from objdump output - objfile.drop_irrelevant_sections() + # Remove clutter from objdump output for tests, and make the tests + # portable by avoiding absolute paths. Outside of tests .mdebug is + # useful for showing source together with asm, though. + mdebug_section = objfile.find_section('.mdebug') + if drop_mdebug_gptab: + objfile.drop_mdebug_gptab() # Unify reginfo sections target_reginfo = objfile.find_section('.reginfo') - source_reginfo_data = list(asm_objfile.find_section('.reginfo').data) - data = list(target_reginfo.data) - for i in range(20): - data[i] |= source_reginfo_data[i] - target_reginfo.data = bytes(data) + if target_reginfo is not None: + source_reginfo_data = list(asm_objfile.find_section('.reginfo').data) + data = list(target_reginfo.data) + for i in range(20): + data[i] |= source_reginfo_data[i] + target_reginfo.data = bytes(data) # Move over section contents modified_text_positions = set() @@ -958,7 +1169,7 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc): # of another way of doing it. moved_late_rodata = {} if any(all_late_rodata_dummy_bytes) or any(all_jtbl_rodata_size): - source = asm_objfile.find_section('.rodata') + source = asm_objfile.find_section('.late_rodata') target = objfile.find_section('.rodata') source_pos = asm_objfile.symtab.find_symbol_in_section(late_rodata_source_name_start, source) source_end = asm_objfile.symtab.find_symbol_in_section(late_rodata_source_name_end, source) @@ -967,6 +1178,8 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc): new_data = list(target.data) for dummy_bytes_list, jtbl_rodata_size in zip(all_late_rodata_dummy_bytes, all_jtbl_rodata_size): for index, dummy_bytes in enumerate(dummy_bytes_list): + if not fmt.is_big_endian: + dummy_bytes = dummy_bytes[::-1] pos = target.data.index(dummy_bytes, last_rodata_pos) # This check is nice, but makes time complexity worse for large files: if SLOW_CHECKS and target.data.find(dummy_bytes, pos + 4) != -1: @@ -1002,7 +1215,7 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc): # Find relocated symbols relocated_symbols = set() - for sectype in SECTIONS: + for sectype in SECTIONS + ['.late_rodata']: for obj in [asm_objfile, objfile]: sec = obj.find_section(sectype) if sec is None: @@ -1012,42 +1225,133 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc): relocated_symbols.add(obj.symtab.symbol_entries[rel.sym_index]) # Move over symbols, deleting the temporary function labels. - # Sometimes this naive procedure results in duplicate symbols, or UNDEF - # symbols that are also defined the same .o file. Hopefully that's fine. - # Skip over local symbols that aren't used relocated against, to avoid - # conflicts. - new_local_syms = [s for s in objfile.symtab.local_symbols() if not is_temp_name(s.name)] - new_global_syms = [s for s in objfile.symtab.global_symbols() if not is_temp_name(s.name)] + # Skip over new local symbols that aren't relocated against, to + # avoid conflicts. + empty_symbol = objfile.symtab.symbol_entries[0] + new_syms = [s for s in objfile.symtab.symbol_entries[1:] if not is_temp_name(s.name)] + for i, s in enumerate(asm_objfile.symtab.symbol_entries): is_local = (i < asm_objfile.symtab.sh_info) if is_local and s not in relocated_symbols: continue if is_temp_name(s.name): + assert s not in relocated_symbols continue if s.st_shndx not in [SHN_UNDEF, SHN_ABS]: section_name = asm_objfile.sections[s.st_shndx].name - if section_name not in SECTIONS: - raise Failure("generated assembly .o must only have symbols for .text, .data, .rodata, ABS and UNDEF, but found " + section_name) - s.st_shndx = objfile.find_section(section_name).index + target_section_name = section_name + if section_name == ".late_rodata": + target_section_name = ".rodata" + elif section_name not in SECTIONS: + raise Failure("generated assembly .o must only have symbols for .text, .data, .rodata, .late_rodata, ABS and UNDEF, but found " + section_name) + objfile_section = objfile.find_section(target_section_name) + if objfile_section is None: + raise Failure("generated assembly .o has section that real objfile lacks: " + target_section_name) + s.st_shndx = objfile_section.index # glabel's aren't marked as functions, making objdump output confusing. Fix that. if s.name in all_text_glabels: s.type = STT_FUNC - if objfile.sections[s.st_shndx].name == '.rodata' and s.st_value in moved_late_rodata: + if s.name in func_sizes: + s.st_size = func_sizes[s.name] + if section_name == '.late_rodata': + if s.st_value == 0: + # This must be a symbol corresponding to the whole .late_rodata + # section, being referred to from a relocation. + # Moving local symbols is tricky, because it requires fixing up + # lo16/hi16 relocation references to .late_rodata+. + # Just disallow it for now. + raise Failure("local symbols in .late_rodata are not allowed") s.st_value = moved_late_rodata[s.st_value] s.st_name += strtab_adj - if is_local: - new_local_syms.append(s) + new_syms.append(s) + make_statics_global = convert_statics in ("global", "global-with-filename") + + # Add static symbols from .mdebug, so they can be referred to from GLOBAL_ASM + if mdebug_section and convert_statics != "no": + strtab_index = len(objfile.symtab.strtab.data) + new_strtab_data = [] + ifd_max, cb_fd_offset = fmt.unpack('II', mdebug_section.data[18*4 : 20*4]) + cb_sym_offset, = fmt.unpack('I', mdebug_section.data[9*4 : 10*4]) + cb_ss_offset, = fmt.unpack('I', mdebug_section.data[15*4 : 16*4]) + for i in range(ifd_max): + offset = cb_fd_offset + 18*4*i + iss_base, _, isym_base, csym = fmt.unpack('IIII', objfile.data[offset + 2*4 : offset + 6*4]) + for j in range(csym): + offset2 = cb_sym_offset + 12 * (isym_base + j) + iss, value, st_sc_index = fmt.unpack('III', objfile.data[offset2 : offset2 + 12]) + st = (st_sc_index >> 26) + sc = (st_sc_index >> 21) & 0x1f + if st in [MIPS_DEBUG_ST_STATIC, MIPS_DEBUG_ST_STATIC_PROC]: + symbol_name_offset = cb_ss_offset + iss_base + iss + symbol_name_offset_end = objfile.data.find(b'\0', symbol_name_offset) + assert symbol_name_offset_end != -1 + symbol_name = objfile.data[symbol_name_offset : symbol_name_offset_end + 1] + emitted_symbol_name = symbol_name + if convert_statics == "global-with-filename": + # Change the emitted symbol name to include the filename, + # but don't let that affect deduplication logic. + emitted_symbol_name = objfile_name.encode("utf-8") + b":" + symbol_name + section_name = {1: '.text', 2: '.data', 3: '.bss', 15: '.rodata'}[sc] + section = objfile.find_section(section_name) + symtype = STT_FUNC if sc == 1 else STT_OBJECT + binding = STB_GLOBAL if make_statics_global else STB_LOCAL + sym = Symbol.from_parts( + fmt, + st_name=strtab_index, + st_value=value, + st_size=0, + st_info=(binding << 4 | symtype), + st_other=STV_DEFAULT, + st_shndx=section.index, + strtab=objfile.symtab.strtab, + name=symbol_name[:-1].decode('latin1')) + strtab_index += len(emitted_symbol_name) + new_strtab_data.append(emitted_symbol_name) + new_syms.append(sym) + objfile.symtab.strtab.data += b''.join(new_strtab_data) + + # Get rid of duplicate symbols, favoring ones that are not UNDEF. + # Skip this for unnamed local symbols though. + new_syms.sort(key=lambda s: 0 if s.st_shndx != SHN_UNDEF else 1) + old_syms = [] + newer_syms = [] + name_to_sym = {} + for s in new_syms: + if s.name == "_gp_disp": + s.type = STT_OBJECT + if s.bind == STB_LOCAL and s.st_shndx == SHN_UNDEF: + raise Failure("local symbol \"" + s.name + "\" is undefined") + if not s.name: + if s.bind != STB_LOCAL: + raise Failure("global symbol with no name") + newer_syms.append(s) else: - new_global_syms.append(s) - new_syms = new_local_syms + new_global_syms + existing = name_to_sym.get(s.name) + if not existing: + name_to_sym[s.name] = s + newer_syms.append(s) + elif s.st_shndx != SHN_UNDEF: + raise Failure("symbol \"" + s.name + "\" defined twice") + else: + s.replace_by = existing + old_syms.append(s) + new_syms = newer_syms + + # Put local symbols in front, with the initial dummy entry first, and + # _gp_disp at the end if it exists. + new_syms.insert(0, empty_symbol) + new_syms.sort(key=lambda s: (s.bind != STB_LOCAL, s.name == "_gp_disp")) + num_local_syms = sum(1 for s in new_syms if s.bind == STB_LOCAL) + for i, s in enumerate(new_syms): s.new_index = i + for s in old_syms: + s.new_index = s.replace_by.new_index objfile.symtab.data = b''.join(s.to_bin() for s in new_syms) - objfile.symtab.sh_info = len(new_local_syms) + objfile.symtab.sh_info = num_local_syms - # Move over relocations + # Fix up relocation symbol references for sectype in SECTIONS: - source = asm_objfile.find_section(sectype) target = objfile.find_section(sectype) if target is not None: @@ -1059,34 +1363,38 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc): sectype == '.rodata' and rel.r_offset in jtbl_rodata_positions): # don't include relocations for late_rodata dummy code continue - # hopefully we don't have relocations for local or - # temporary symbols, so new_index exists rel.sym_index = objfile.symtab.symbol_entries[rel.sym_index].new_index nrels.append(rel) reltab.relocations = nrels reltab.data = b''.join(rel.to_bin() for rel in nrels) - if not source: + # Move over relocations + for sectype in SECTIONS + ['.late_rodata']: + source = asm_objfile.find_section(sectype) + if source is None or not source.data: continue - target_reltab = objfile.find_section('.rel' + sectype) - target_reltaba = objfile.find_section('.rela' + sectype) + target_sectype = '.rodata' if sectype == '.late_rodata' else sectype + target = objfile.find_section(target_sectype) + assert target is not None, target_sectype + target_reltab = objfile.find_section('.rel' + target_sectype) + target_reltaba = objfile.find_section('.rela' + target_sectype) for reltab in source.relocated_by: for rel in reltab.relocations: rel.sym_index = asm_objfile.symtab.symbol_entries[rel.sym_index].new_index - if sectype == '.rodata' and rel.r_offset in moved_late_rodata: + if sectype == '.late_rodata': rel.r_offset = moved_late_rodata[rel.r_offset] new_data = b''.join(rel.to_bin() for rel in reltab.relocations) if reltab.sh_type == SHT_REL: if not target_reltab: - target_reltab = objfile.add_section('.rel' + sectype, + target_reltab = objfile.add_section('.rel' + target_sectype, sh_type=SHT_REL, sh_flags=0, sh_link=objfile.symtab.index, sh_info=target.index, sh_addralign=4, sh_entsize=8, data=b'') target_reltab.data += new_data else: if not target_reltaba: - target_reltaba = objfile.add_section('.rela' + sectype, + target_reltaba = objfile.add_section('.rela' + target_sectype, sh_type=SHT_RELA, sh_flags=0, sh_link=objfile.symtab.index, sh_info=target.index, sh_addralign=4, sh_entsize=12, data=b'') @@ -1107,37 +1415,51 @@ def run_wrapped(argv, outfile, functions): parser.add_argument('--post-process', dest='objfile', help="path to .o file to post-process") parser.add_argument('--assembler', dest='assembler', help="assembler command (e.g. \"mips-linux-gnu-as -march=vr4300 -mabi=32\")") parser.add_argument('--asm-prelude', dest='asm_prelude', help="path to a file containing a prelude to the assembly file (with .set and .macro directives, e.g.)") - parser.add_argument('--input-enc', default='latin1', help="Input encoding (default: latin1)") - parser.add_argument('--output-enc', default='latin1', help="Output encoding (default: latin1)") + parser.add_argument('--input-enc', default='latin1', help="input encoding (default: %(default)s)") + parser.add_argument('--output-enc', default='latin1', help="output encoding (default: %(default)s)") + parser.add_argument('--drop-mdebug-gptab', dest='drop_mdebug_gptab', action='store_true', help="drop mdebug and gptab sections") + parser.add_argument('--convert-statics', dest='convert_statics', choices=["no", "local", "global", "global-with-filename"], default="local", help="change static symbol visibility (default: %(default)s)") + parser.add_argument('--force', dest='force', action='store_true', help="force processing of files without GLOBAL_ASM blocks") parser.add_argument('-framepointer', dest='framepointer', action='store_true') + parser.add_argument('-mips1', dest='mips1', action='store_true') parser.add_argument('-g3', dest='g3', action='store_true') + parser.add_argument('-KPIC', dest='kpic', action='store_true') group = parser.add_mutually_exclusive_group(required=True) + group.add_argument('-O0', dest='opt', action='store_const', const='O0') group.add_argument('-O1', dest='opt', action='store_const', const='O1') group.add_argument('-O2', dest='opt', action='store_const', const='O2') group.add_argument('-g', dest='opt', action='store_const', const='g') args = parser.parse_args(argv) opt = args.opt + pascal = any(args.filename.endswith(ext) for ext in (".p", ".pas", ".pp")) if args.g3: if opt != 'O2': raise Failure("-g3 is only supported together with -O2") opt = 'g3' + if args.mips1 and (opt not in ('O1', 'O2') or args.framepointer): + raise Failure("-mips1 is only supported together with -O1 or -O2") + if pascal and opt not in ('O1', 'O2', 'g3'): + raise Failure("Pascal is only supported together with -O1, -O2 or -O2 -g3") + opts = Opts(opt, args.framepointer, args.mips1, args.kpic, pascal, args.input_enc, args.output_enc) if args.objfile is None: with open(args.filename, encoding=args.input_enc) as f: - return parse_source(f, opt=opt, framepointer=args.framepointer, input_enc=args.input_enc, output_enc=args.output_enc, print_source=outfile) + deps = [] + functions = parse_source(f, opts, out_dependencies=deps, print_source=outfile) + return functions, deps else: if args.assembler is None: raise Failure("must pass assembler command") if functions is None: with open(args.filename, encoding=args.input_enc) as f: - functions = parse_source(f, opt=opt, framepointer=args.framepointer, input_enc=args.input_enc, output_enc=args.output_enc) - if not functions: + functions = parse_source(f, opts, out_dependencies=[]) + if not functions and not args.force: return asm_prelude = b'' if args.asm_prelude: with open(args.asm_prelude, 'rb') as f: asm_prelude = f.read() - fixup_objfile(args.objfile, functions, asm_prelude, args.assembler, args.output_enc) + fixup_objfile(args.objfile, functions, asm_prelude, args.assembler, args.output_enc, args.drop_mdebug_gptab, args.convert_statics) def run(argv, outfile=sys.stdout.buffer, functions=None): try: diff --git a/tools/asm-processor/build.py b/tools/asm-processor/build.py new file mode 100644 index 00000000..efbaade4 --- /dev/null +++ b/tools/asm-processor/build.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python3 +import sys +from pathlib import Path +import shlex +import subprocess +import tempfile +import uuid +import asm_processor + +# Boolean for debugging purposes +# Preprocessed files are temporary, set to True to keep a copy +keep_preprocessed_files = False + +dir_path = Path(__file__).resolve().parent +asm_prelude_path = dir_path / "prelude.inc" + +all_args = sys.argv[1:] +sep0 = next(index for index, arg in enumerate(all_args) if not arg.startswith("-")) +sep1 = all_args.index("--") +sep2 = all_args.index("--", sep1 + 1) + +asmproc_flags = all_args[:sep0] +compiler = all_args[sep0:sep1] + +assembler_args = all_args[sep1 + 1 : sep2] +assembler_sh = " ".join(shlex.quote(x) for x in assembler_args) + + +compile_args = all_args[sep2 + 1 :] + +in_file = Path(compile_args[-1]) +del compile_args[-1] + +out_ind = compile_args.index("-o") +out_file = Path(compile_args[out_ind + 1]) +del compile_args[out_ind + 1] +del compile_args[out_ind] + + +in_dir = in_file.resolve().parent +opt_flags = [ + x for x in compile_args if x in {"-g3", "-g", "-O0", "-O1", "-O2", "-framepointer", "-KPIC"} +] +if "-mips2" not in compile_args: + opt_flags.append("-mips1") + +asmproc_flags += opt_flags + [str(in_file)] + +# Drop .mdebug and .gptab sections from resulting binaries. This makes +# resulting .o files much smaller and speeds up builds, but loses line +# number debug data. +# asmproc_flags += ["--drop-mdebug-gptab"] + +# Convert encoding before compiling. +# asmproc_flags += ["--input-enc", "utf-8", "--output-enc", "euc-jp"] + +with tempfile.TemporaryDirectory(prefix="asm_processor") as tmpdirname: + tmpdir_path = Path(tmpdirname) + preprocessed_filename = "preprocessed_" + uuid.uuid4().hex + in_file.suffix + preprocessed_path = tmpdir_path / preprocessed_filename + + with preprocessed_path.open("wb") as f: + functions, deps = asm_processor.run(asmproc_flags, outfile=f) + + if keep_preprocessed_files: + import shutil + + keep_output_dir = Path("./asm_processor_preprocessed") + keep_output_dir.mkdir(parents=True, exist_ok=True) + + shutil.copy( + preprocessed_path, + keep_output_dir / (in_file.stem + "_" + preprocessed_filename), + ) + + compile_cmdline = ( + compiler + + compile_args + + ["-I", str(in_dir), "-o", str(out_file), str(preprocessed_path)] + ) + + try: + subprocess.check_call(compile_cmdline) + except subprocess.CalledProcessError as e: + print("Failed to compile file " + str(in_file) + ". Command line:") + print() + print(" ".join(shlex.quote(x) for x in compile_cmdline)) + print() + sys.exit(55) + + asm_processor.run( + asmproc_flags + + [ + "--post-process", + str(out_file), + "--assembler", + assembler_sh, + "--asm-prelude", + str(asm_prelude_path), + ], + functions=functions, + ) + + deps_file = out_file.with_suffix(".asmproc.d") + if deps: + with deps_file.open("w") as f: + f.write(str(out_file) + ": " + " \\\n ".join(deps) + "\n") + for dep in deps: + f.write("\n" + dep + ":\n") + else: + try: + deps_file.unlink() + except OSError: + pass diff --git a/tools/asm-processor/compile-test.sh b/tools/asm-processor/compile-test.sh new file mode 100644 index 00000000..65516629 --- /dev/null +++ b/tools/asm-processor/compile-test.sh @@ -0,0 +1,26 @@ +#!/bin/bash +set -o pipefail +INPUT="$1" +OUTPUT="${INPUT%.*}.o" + +rm -f "$OUTPUT" + +CC="$MIPS_CC" # ido 7.1 via recomp or qemu-irix +AS="mips-linux-gnu-as" +ASFLAGS="-march=vr4300 -mabi=32" +OPTFLAGS=$(grep 'COMPILE-FLAGS: ' $INPUT | sed 's#^.*COMPILE-FLAGS: ##' | sed 's#}$##') +ASMPFLAGS=$(grep 'ASMP-FLAGS: ' $INPUT | sed 's#^.*ASMP-FLAGS: ##' | sed 's#}$##') +ISET=$(grep 'COMPILE-ISET: ' $INPUT | sed 's#^.*COMPILE-ISET: ##' | sed 's#}$##') +if [[ -z "$OPTFLAGS" ]]; then + OPTFLAGS="-g" +fi +CFLAGS="-Wab,-r4300_mul -G 0 -Xcpluscomm -fullwarn -wlint -woff 819,820,852,821 -signed -c" +if [[ -z "$ISET" ]]; then + CFLAGS="$CFLAGS -mips2" +fi +if [[ "$OPTFLAGS" != *-KPIC* ]]; then + CFLAGS="$CFLAGS -non_shared" +fi + +set -e +python3 build.py --drop-mdebug-gptab $ASMPFLAGS $CC -- $AS $ASFLAGS -- $CFLAGS $OPTFLAGS $ISET -o "$OUTPUT" "$INPUT" diff --git a/tools/asm-processor/prelude.inc b/tools/asm-processor/prelude.inc new file mode 100644 index 00000000..3e58ff14 --- /dev/null +++ b/tools/asm-processor/prelude.inc @@ -0,0 +1,43 @@ +.set noat +.set noreorder +.set gp=64 +.macro glabel label + .global \label + \label: +.endm + + +# Float register aliases (o32 ABI, odd ones are rarely used) + +.set $fv0, $f0 +.set $fv0f, $f1 +.set $fv1, $f2 +.set $fv1f, $f3 +.set $ft0, $f4 +.set $ft0f, $f5 +.set $ft1, $f6 +.set $ft1f, $f7 +.set $ft2, $f8 +.set $ft2f, $f9 +.set $ft3, $f10 +.set $ft3f, $f11 +.set $fa0, $f12 +.set $fa0f, $f13 +.set $fa1, $f14 +.set $fa1f, $f15 +.set $ft4, $f16 +.set $ft4f, $f17 +.set $ft5, $f18 +.set $ft5f, $f19 +.set $fs0, $f20 +.set $fs0f, $f21 +.set $fs1, $f22 +.set $fs1f, $f23 +.set $fs2, $f24 +.set $fs2f, $f25 +.set $fs3, $f26 +.set $fs3f, $f27 +.set $fs4, $f28 +.set $fs4f, $f29 +.set $fs5, $f30 +.set $fs5f, $f31 diff --git a/tools/asm-processor/run-tests.sh b/tools/asm-processor/run-tests.sh new file mode 100644 index 00000000..5cae0a74 --- /dev/null +++ b/tools/asm-processor/run-tests.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +for A in tests/*.c tests/*.p; do + OBJDUMPFLAGS=-srt + echo $A + ./compile-test.sh "$A" && mips-linux-gnu-objdump $OBJDUMPFLAGS "${A%.*}.o" | diff - "${A%.*}.objdump" || echo FAIL "$A" +done diff --git a/tools/asm-processor/tests/ascii.c b/tools/asm-processor/tests/ascii.c new file mode 100644 index 00000000..bb27d252 --- /dev/null +++ b/tools/asm-processor/tests/ascii.c @@ -0,0 +1,19 @@ +void foo(void) { "abcdef"; } + +GLOBAL_ASM( +.rdata + .ascii "AB" + .ascii "CD", "EF" + .ascii "GH\n\n\n\0\11\222\3333\44444\x1234567\n\nIJK" +) + +void bar(void) { "hello"; } + +GLOBAL_ASM( +.rdata + .asciiz "12" + .asciiz "34", "56" + .asciiz "78\n\n\n\0\11\222\3333\44444\x1234567\n\n9A" +) + +void baz(void) { "ghijkl"; } diff --git a/tools/asm-processor/tests/ascii.objdump b/tools/asm-processor/tests/ascii.objdump new file mode 100644 index 00000000..bf42638a --- /dev/null +++ b/tools/asm-processor/tests/ascii.objdump @@ -0,0 +1,29 @@ + +tests/ascii.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 00000030 .text +00000000 l d .rodata 00000050 .rodata +00000000 g F .text 00000010 foo +00000010 g F .text 00000010 bar +00000020 g F .text 00000010 baz + + +Contents of section .text: + 0000 03e00008 00000000 03e00008 00000000 ................ + 0010 03e00008 00000000 03e00008 00000000 ................ + 0020 03e00008 00000000 03e00008 00000000 ................ +Contents of section .rodata: + 0000 61626364 65660000 41424344 45464748 abcdef..ABCDEFGH + 0010 0a0a0a00 0992db33 24343467 0a0a494a .......3$44g..IJ + 0020 4b000000 68656c6c 6f000000 31320033 K...hello...12.3 + 0030 34003536 0037380a 0a0a0009 92db3324 4.56.78.......3$ + 0040 3434670a 0a394100 6768696a 6b6c0000 44g..9A.ghijkl.. +Contents of section .options: + 0000 01200000 00000000 80000000 00000000 . .............. + 0010 00000000 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 80000000 00000000 00000000 00000000 ................ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/comments.c b/tools/asm-processor/tests/comments.c new file mode 100644 index 00000000..4c936699 --- /dev/null +++ b/tools/asm-processor/tests/comments.c @@ -0,0 +1,6 @@ +const char before[] = "^"; +GLOBAL_ASM( +.rdata +.asciz "aaaa /* bbbb */ # cccc", /**//**//**//**/ /*/ "xxxx" /*/ /* dddd " eeee */ "# ffff" # gggg "hhhh" /* iiii */ +) +const char after[] = "$"; diff --git a/tools/asm-processor/tests/comments.objdump b/tools/asm-processor/tests/comments.objdump new file mode 100644 index 00000000..246df209 --- /dev/null +++ b/tools/asm-processor/tests/comments.objdump @@ -0,0 +1,21 @@ + +tests/comments.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .rodata 00000030 .rodata +00000000 g O .rodata 00000002 before +00000024 g O .rodata 00000002 after + + +Contents of section .rodata: + 0000 5e000000 61616161 202f2a20 62626262 ^...aaaa /* bbbb + 0010 202a2f20 23206363 63630023 20666666 */ # cccc.# fff + 0020 66000000 24000000 00000000 00000000 f...$........... +Contents of section .options: + 0000 01200000 00000000 00000000 00000000 . .............. + 0010 00000000 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 00000000 00000000 00000000 00000000 ................ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/force.c b/tools/asm-processor/tests/force.c new file mode 100644 index 00000000..03b630c1 --- /dev/null +++ b/tools/asm-processor/tests/force.c @@ -0,0 +1,17 @@ +// COMPILE-FLAGS: -O2 +// ASMP-FLAGS: --convert-statics=global-with-filename --force +static int xtext(int a, int b, int c); +const int rodata1[] = {1}; +static const int rodata2[] = {2}; +int data1[] = {3}; +static int data2[] = {4}; +int bss1; +static int bss2; + +static int xtext(int a, int b, int c) { + return 1; +} + +void baz(void) { + xtext(bss2, rodata2[0], data2[0]); +} diff --git a/tools/asm-processor/tests/force.objdump b/tools/asm-processor/tests/force.objdump new file mode 100644 index 00000000..7ef70247 --- /dev/null +++ b/tools/asm-processor/tests/force.objdump @@ -0,0 +1,47 @@ + +tests/force.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 00000050 .text +00000000 l d .rodata 00000010 .rodata +00000000 l d .data 00000010 .data +00000000 l d .bss 00000010 .bss +00000000 g O .rodata 00000004 rodata1 +00000000 g O .data 00000004 data1 +00000000 g O .bss 00000004 bss1 +00000014 g F .text 00000034 baz +00000004 g O .rodata 00000000 tests/force.o:rodata2 +00000004 g O .data 00000000 tests/force.o:data2 +00000004 g O .bss 00000000 tests/force.o:bss2 +00000000 g F .text 00000000 tests/force.o:xtext + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +0000001c R_MIPS_HI16 .bss +00000034 R_MIPS_LO16 .bss +00000020 R_MIPS_HI16 .rodata +0000002c R_MIPS_LO16 .rodata +00000024 R_MIPS_HI16 .data +00000028 R_MIPS_LO16 .data +00000030 R_MIPS_26 .text + + +Contents of section .text: + 0000 afa40000 afa50004 afa60008 03e00008 ................ + 0010 24020001 27bdffe8 afbf0014 3c040000 $...'.......<... + 0020 3c050000 3c060000 8cc60004 8ca50004 <...<........... + 0030 0c000000 8c840004 8fbf0014 27bd0018 ............'... + 0040 03e00008 00000000 00000000 00000000 ................ +Contents of section .rodata: + 0000 00000001 00000002 00000000 00000000 ................ +Contents of section .data: + 0000 00000003 00000004 00000000 00000000 ................ +Contents of section .options: + 0000 01200000 00000000 a0000074 00000000 . .........t.... + 0010 00000000 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 a0000074 00000000 00000000 00000000 ...t............ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/kpic-o1.c b/tools/asm-processor/tests/kpic-o1.c new file mode 100644 index 00000000..4d3346d2 --- /dev/null +++ b/tools/asm-processor/tests/kpic-o1.c @@ -0,0 +1,93 @@ +// COMPILE-FLAGS: -O1 -KPIC +GLOBAL_ASM( +glabel foo +addiu $a0, $a0, 1 +addiu $a0, $a0, 2 +addiu $a0, $a0, 3 +addiu $a0, $a0, 4 +addiu $a0, $a0, 5 +addiu $a0, $a0, 6 +addiu $a0, $a0, 7 +addiu $a0, $a0, 8 +addiu $a0, $a0, 9 +addiu $a0, $a0, 10 +addiu $a0, $a0, 11 +addiu $a0, $a0, 12 +) +GLOBAL_ASM( +.late_rodata +.float 1 +.text +glabel float_fn +addiu $a0, $a0, 13 +addiu $a0, $a0, 14 +addiu $a0, $a0, 15 +addiu $a0, $a0, 16 +addiu $a0, $a0, 17 +addiu $a0, $a0, 18 +addiu $a0, $a0, 19 +addiu $a0, $a0, 20 +addiu $a0, $a0, 21 +addiu $a0, $a0, 22 +addiu $a0, $a0, 23 +addiu $a0, $a0, 24 +addiu $a0, $a0, 25 +addiu $a0, $a0, 26 +addiu $a0, $a0, 27 +addiu $a0, $a0, 28 +addiu $a0, $a0, 29 +addiu $a0, $a0, 30 +) +GLOBAL_ASM( +.late_rodata +.late_rodata_alignment 4 +.float 2 +.double 1 +.double 2 +.double 3 +.double 4 +.double 5 +.double 6 +.double 7 +.double 8 +.text +glabel doubles +addiu $a0, $a0, 31 +addiu $a0, $a0, 32 +addiu $a0, $a0, 33 +addiu $a0, $a0, 34 +addiu $a0, $a0, 35 +addiu $a0, $a0, 36 +addiu $a0, $a0, 37 +addiu $a0, $a0, 38 +addiu $a0, $a0, 39 +addiu $a0, $a0, 40 +addiu $a0, $a0, 41 +addiu $a0, $a0, 42 +addiu $a0, $a0, 43 +addiu $a0, $a0, 44 +addiu $a0, $a0, 45 +addiu $a0, $a0, 46 +addiu $a0, $a0, 47 +addiu $a0, $a0, 48 +addiu $a0, $a0, 49 +addiu $a0, $a0, 50 +addiu $a0, $a0, 51 +addiu $a0, $a0, 52 +addiu $a0, $a0, 53 +addiu $a0, $a0, 54 +addiu $a0, $a0, 55 +addiu $a0, $a0, 56 +addiu $a0, $a0, 57 +addiu $a0, $a0, 58 +addiu $a0, $a0, 59 +addiu $a0, $a0, 60 +addiu $a0, $a0, 61 +addiu $a0, $a0, 62 +addiu $a0, $a0, 63 +addiu $a0, $a0, 64 +addiu $a0, $a0, 65 +addiu $a0, $a0, 66 +addiu $a0, $a0, 67 +addiu $a0, $a0, 68 +) diff --git a/tools/asm-processor/tests/kpic-o1.objdump b/tools/asm-processor/tests/kpic-o1.objdump new file mode 100644 index 00000000..6e336753 --- /dev/null +++ b/tools/asm-processor/tests/kpic-o1.objdump @@ -0,0 +1,46 @@ + +tests/kpic-o1.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 00000110 .text +00000000 l d .rodata 00000050 .rodata +00000000 g F .text 00000030 foo +00000030 g F .text 00000048 float_fn +00000078 g F .text 00000098 doubles +00000000 O *UND* 00000000 _gp_disp + + +RELOCATION RECORDS FOR [.text]: (none) + +Contents of section .text: + 0000 24840001 24840002 24840003 24840004 $...$...$...$... + 0010 24840005 24840006 24840007 24840008 $...$...$...$... + 0020 24840009 2484000a 2484000b 2484000c $...$...$...$... + 0030 2484000d 2484000e 2484000f 24840010 $...$...$...$... + 0040 24840011 24840012 24840013 24840014 $...$...$...$... + 0050 24840015 24840016 24840017 24840018 $...$...$...$... + 0060 24840019 2484001a 2484001b 2484001c $...$...$...$... + 0070 2484001d 2484001e 2484001f 24840020 $...$...$...$.. + 0080 24840021 24840022 24840023 24840024 $..!$.."$..#$..$ + 0090 24840025 24840026 24840027 24840028 $..%$..&$..'$..( + 00a0 24840029 2484002a 2484002b 2484002c $..)$..*$..+$.., + 00b0 2484002d 2484002e 2484002f 24840030 $..-$...$../$..0 + 00c0 24840031 24840032 24840033 24840034 $..1$..2$..3$..4 + 00d0 24840035 24840036 24840037 24840038 $..5$..6$..7$..8 + 00e0 24840039 2484003a 2484003b 2484003c $..9$..:$..;$..< + 00f0 2484003d 2484003e 2484003f 24840040 $..=$..>$..?$..@ + 0100 24840041 24840042 24840043 24840044 $..A$..B$..C$..D +Contents of section .rodata: + 0000 3f800000 40000000 3ff00000 00000000 ?...@...?....... + 0010 40000000 00000000 40080000 00000000 @.......@....... + 0020 40100000 00000000 40140000 00000000 @.......@....... + 0030 40180000 00000000 401c0000 00000000 @.......@....... + 0040 40200000 00000000 00000000 00000000 @ .............. +Contents of section .options: + 0000 01200000 00000000 92000002 00000000 . .............. + 0010 000f0ff0 00000000 00000000 00000000 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 92000012 00000000 000f0ff0 00000000 ................ + 0010 00000000 00000000 ........ diff --git a/tools/asm-processor/tests/kpic-o2.c b/tools/asm-processor/tests/kpic-o2.c new file mode 100644 index 00000000..f037341c --- /dev/null +++ b/tools/asm-processor/tests/kpic-o2.c @@ -0,0 +1,92 @@ +// COMPILE-FLAGS: -O2 -KPIC +GLOBAL_ASM( +glabel foo +addiu $a0, $a0, 1 +addiu $a0, $a0, 2 +addiu $a0, $a0, 3 +addiu $a0, $a0, 4 +addiu $a0, $a0, 5 +addiu $a0, $a0, 6 +addiu $a0, $a0, 7 +addiu $a0, $a0, 8 +addiu $a0, $a0, 9 +addiu $a0, $a0, 10 +addiu $a0, $a0, 11 +addiu $a0, $a0, 12 +) +GLOBAL_ASM( +.late_rodata +.float 1 +.text +glabel float_fn +addiu $a0, $a0, 13 +addiu $a0, $a0, 14 +addiu $a0, $a0, 15 +addiu $a0, $a0, 16 +addiu $a0, $a0, 17 +addiu $a0, $a0, 18 +addiu $a0, $a0, 19 +addiu $a0, $a0, 20 +addiu $a0, $a0, 21 +addiu $a0, $a0, 22 +addiu $a0, $a0, 23 +addiu $a0, $a0, 24 +addiu $a0, $a0, 25 +addiu $a0, $a0, 26 +addiu $a0, $a0, 27 +addiu $a0, $a0, 28 +addiu $a0, $a0, 29 +addiu $a0, $a0, 30 +) +GLOBAL_ASM( +.late_rodata +.float 2 +.double 1 +.double 2 +.double 3 +.double 4 +.double 5 +.double 6 +.double 7 +.double 8 +.text +glabel doubles +addiu $a0, $a0, 31 +addiu $a0, $a0, 32 +addiu $a0, $a0, 33 +addiu $a0, $a0, 34 +addiu $a0, $a0, 35 +addiu $a0, $a0, 36 +addiu $a0, $a0, 37 +addiu $a0, $a0, 38 +addiu $a0, $a0, 39 +addiu $a0, $a0, 40 +addiu $a0, $a0, 41 +addiu $a0, $a0, 42 +addiu $a0, $a0, 43 +addiu $a0, $a0, 44 +addiu $a0, $a0, 45 +addiu $a0, $a0, 46 +addiu $a0, $a0, 47 +addiu $a0, $a0, 48 +addiu $a0, $a0, 49 +addiu $a0, $a0, 50 +addiu $a0, $a0, 51 +addiu $a0, $a0, 52 +addiu $a0, $a0, 53 +addiu $a0, $a0, 54 +addiu $a0, $a0, 55 +addiu $a0, $a0, 56 +addiu $a0, $a0, 57 +addiu $a0, $a0, 58 +addiu $a0, $a0, 59 +addiu $a0, $a0, 60 +addiu $a0, $a0, 61 +addiu $a0, $a0, 62 +addiu $a0, $a0, 63 +addiu $a0, $a0, 64 +addiu $a0, $a0, 65 +addiu $a0, $a0, 66 +addiu $a0, $a0, 67 +addiu $a0, $a0, 68 +) diff --git a/tools/asm-processor/tests/kpic-o2.objdump b/tools/asm-processor/tests/kpic-o2.objdump new file mode 100644 index 00000000..abf87aeb --- /dev/null +++ b/tools/asm-processor/tests/kpic-o2.objdump @@ -0,0 +1,46 @@ + +tests/kpic-o2.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 00000110 .text +00000000 l d .rodata 00000050 .rodata +00000000 g F .text 00000030 foo +00000030 g F .text 00000048 float_fn +00000078 g F .text 00000098 doubles +00000000 O *UND* 00000000 _gp_disp + + +RELOCATION RECORDS FOR [.text]: (none) + +Contents of section .text: + 0000 24840001 24840002 24840003 24840004 $...$...$...$... + 0010 24840005 24840006 24840007 24840008 $...$...$...$... + 0020 24840009 2484000a 2484000b 2484000c $...$...$...$... + 0030 2484000d 2484000e 2484000f 24840010 $...$...$...$... + 0040 24840011 24840012 24840013 24840014 $...$...$...$... + 0050 24840015 24840016 24840017 24840018 $...$...$...$... + 0060 24840019 2484001a 2484001b 2484001c $...$...$...$... + 0070 2484001d 2484001e 2484001f 24840020 $...$...$...$.. + 0080 24840021 24840022 24840023 24840024 $..!$.."$..#$..$ + 0090 24840025 24840026 24840027 24840028 $..%$..&$..'$..( + 00a0 24840029 2484002a 2484002b 2484002c $..)$..*$..+$.., + 00b0 2484002d 2484002e 2484002f 24840030 $..-$...$../$..0 + 00c0 24840031 24840032 24840033 24840034 $..1$..2$..3$..4 + 00d0 24840035 24840036 24840037 24840038 $..5$..6$..7$..8 + 00e0 24840039 2484003a 2484003b 2484003c $..9$..:$..;$..< + 00f0 2484003d 2484003e 2484003f 24840040 $..=$..>$..?$..@ + 0100 24840041 24840042 24840043 24840044 $..A$..B$..C$..D +Contents of section .rodata: + 0000 3f800000 40000000 3ff00000 00000000 ?...@...?....... + 0010 40000000 00000000 40080000 00000000 @.......@....... + 0020 40100000 00000000 40140000 00000000 @.......@....... + 0030 40180000 00000000 401c0000 00000000 @.......@....... + 0040 40200000 00000000 00000000 00000000 @ .............. +Contents of section .options: + 0000 01200000 00000000 92000002 00000000 . .............. + 0010 000f0ff0 00000000 00000000 00000000 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 92000012 00000000 000f0ff0 00000000 ................ + 0010 00000000 00000000 ........ diff --git a/tools/asm-processor/tests/label-sameline.c b/tools/asm-processor/tests/label-sameline.c new file mode 100644 index 00000000..a35b43d8 --- /dev/null +++ b/tools/asm-processor/tests/label-sameline.c @@ -0,0 +1,7 @@ +GLOBAL_ASM( +.rdata +.word 0x12345678 +glabel blah +.word blah2 + /*a*/ blah2: /*b*/ .word blah /*c*/ +) diff --git a/tools/asm-processor/tests/label-sameline.objdump b/tools/asm-processor/tests/label-sameline.objdump new file mode 100644 index 00000000..1f1aacff --- /dev/null +++ b/tools/asm-processor/tests/label-sameline.objdump @@ -0,0 +1,25 @@ + +tests/label-sameline.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .rodata 00000010 .rodata +00000000 l d .rodata 00000000 +00000004 g .rodata 00000000 blah + + +RELOCATION RECORDS FOR [.rodata]: +OFFSET TYPE VALUE +00000004 R_MIPS_32 +00000008 R_MIPS_32 blah + + +Contents of section .rodata: + 0000 12345678 00000008 00000000 00000000 .4Vx............ +Contents of section .options: + 0000 01200000 00000000 00000000 00000000 . .............. + 0010 00000000 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 00000000 00000000 00000000 00000000 ................ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/large.c b/tools/asm-processor/tests/large.c new file mode 100644 index 00000000..4ffb4ac1 --- /dev/null +++ b/tools/asm-processor/tests/large.c @@ -0,0 +1,164 @@ + +GLOBAL_ASM( +glabel test + +addiu $sp, $sp, -24 + sw $zero, 4($sp) +lw $t6, 4($sp) +addu $t7, $a0, $t6 +sb $zero, ($t7) +lw $t8, 4($sp) +addiu $t9, $t8, 1 +slt $at, $t9, $a1 + sw $t9, 4($sp) + nop +jr $ra + addiu $sp, $sp, 24 +addiu $sp, $sp, -24 + sw $zero, 4($sp) +lw $t6, 4($sp) +addu $t7, $a0, $t6 +sb $zero, ($t7) +lw $t8, 4($sp) +addiu $t9, $t8, 1 +slt $at, $t9, $a1 + sw $t9, 4($sp) + nop +jr $ra + addiu $sp, $sp, 24 +addiu $sp, $sp, -24 + sw $zero, 4($sp) +lw $t6, 4($sp) +addu $t7, $a0, $t6 +sb $zero, ($t7) +lw $t8, 4($sp) +addiu $t9, $t8, 1 +slt $at, $t9, $a1 + sw $t9, 4($sp) + nop +jr $ra + addiu $sp, $sp, 24 +addiu $sp, $sp, -24 + sw $zero, 4($sp) +lw $t6, 4($sp) +addu $t7, $a0, $t6 +sb $zero, ($t7) +lw $t8, 4($sp) +addiu $t9, $t8, 1 +slt $at, $t9, $a1 + sw $t9, 4($sp) + nop +jr $ra + addiu $sp, $sp, 24 +addiu $sp, $sp, -24 + sw $zero, 4($sp) +lw $t6, 4($sp) +addu $t7, $a0, $t6 +sb $zero, ($t7) +lw $t8, 4($sp) +addiu $t9, $t8, 1 +slt $at, $t9, $a1 + sw $t9, 4($sp) + nop +jr $ra + addiu $sp, $sp, 24 +addiu $sp, $sp, -24 + sw $zero, 4($sp) +lw $t6, 4($sp) +addu $t7, $a0, $t6 +sb $zero, ($t7) +lw $t8, 4($sp) +addiu $t9, $t8, 1 +slt $at, $t9, $a1 + sw $t9, 4($sp) + nop +jr $ra + addiu $sp, $sp, 24 +addiu $sp, $sp, -24 + sw $zero, 4($sp) +lw $t6, 4($sp) +addu $t7, $a0, $t6 +sb $zero, ($t7) +lw $t8, 4($sp) +addiu $t9, $t8, 1 +slt $at, $t9, $a1 + sw $t9, 4($sp) + nop +jr $ra + addiu $sp, $sp, 24 +addiu $sp, $sp, -24 + sw $zero, 4($sp) +lw $t6, 4($sp) +addu $t7, $a0, $t6 +sb $zero, ($t7) +lw $t8, 4($sp) +addiu $t9, $t8, 1 +slt $at, $t9, $a1 + sw $t9, 4($sp) + nop +jr $ra + addiu $sp, $sp, 24 +addiu $sp, $sp, -24 + sw $zero, 4($sp) +lw $t6, 4($sp) +addu $t7, $a0, $t6 +sb $zero, ($t7) +lw $t8, 4($sp) +addiu $t9, $t8, 1 +slt $at, $t9, $a1 + sw $t9, 4($sp) + nop +jr $ra + addiu $sp, $sp, 24 +addiu $sp, $sp, -24 + sw $zero, 4($sp) +lw $t6, 4($sp) +addu $t7, $a0, $t6 +sb $zero, ($t7) +lw $t8, 4($sp) +addiu $t9, $t8, 1 +slt $at, $t9, $a1 + sw $t9, 4($sp) + nop +jr $ra + addiu $sp, $sp, 24 +addiu $sp, $sp, -24 + sw $zero, 4($sp) +lw $t6, 4($sp) +addu $t7, $a0, $t6 +sb $zero, ($t7) +lw $t8, 4($sp) +addiu $t9, $t8, 1 +slt $at, $t9, $a1 + sw $t9, 4($sp) + nop +jr $ra + addiu $sp, $sp, 24 +addiu $sp, $sp, -24 + sw $zero, 4($sp) +lw $t6, 4($sp) +addu $t7, $a0, $t6 +sb $zero, ($t7) +lw $t8, 4($sp) +addiu $t9, $t8, 1 +slt $at, $t9, $a1 + sw $t9, 4($sp) + nop +jr $ra + addiu $sp, $sp, 24 +addiu $sp, $sp, -24 + sw $zero, 4($sp) +lw $t6, 4($sp) +addu $t7, $a0, $t6 +sb $zero, ($t7) +lw $t8, 4($sp) +addiu $t9, $t8, 1 +slt $at, $t9, $a1 + sw $t9, 4($sp) + nop +jr $ra + addiu $sp, $sp, 24 + +) + +void foo(void) {} diff --git a/tools/asm-processor/tests/large.objdump b/tools/asm-processor/tests/large.objdump new file mode 100644 index 00000000..17409a7a --- /dev/null +++ b/tools/asm-processor/tests/large.objdump @@ -0,0 +1,58 @@ + +tests/large.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 00000280 .text +00000270 g F .text 00000010 foo +00000000 g F .text 00000270 test + + +Contents of section .text: + 0000 27bdffe8 afa00004 8fae0004 008e7821 '.............x! + 0010 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 0020 afb90004 00000000 03e00008 27bd0018 ............'... + 0030 27bdffe8 afa00004 8fae0004 008e7821 '.............x! + 0040 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 0050 afb90004 00000000 03e00008 27bd0018 ............'... + 0060 27bdffe8 afa00004 8fae0004 008e7821 '.............x! + 0070 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 0080 afb90004 00000000 03e00008 27bd0018 ............'... + 0090 27bdffe8 afa00004 8fae0004 008e7821 '.............x! + 00a0 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 00b0 afb90004 00000000 03e00008 27bd0018 ............'... + 00c0 27bdffe8 afa00004 8fae0004 008e7821 '.............x! + 00d0 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 00e0 afb90004 00000000 03e00008 27bd0018 ............'... + 00f0 27bdffe8 afa00004 8fae0004 008e7821 '.............x! + 0100 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 0110 afb90004 00000000 03e00008 27bd0018 ............'... + 0120 27bdffe8 afa00004 8fae0004 008e7821 '.............x! + 0130 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 0140 afb90004 00000000 03e00008 27bd0018 ............'... + 0150 27bdffe8 afa00004 8fae0004 008e7821 '.............x! + 0160 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 0170 afb90004 00000000 03e00008 27bd0018 ............'... + 0180 27bdffe8 afa00004 8fae0004 008e7821 '.............x! + 0190 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 01a0 afb90004 00000000 03e00008 27bd0018 ............'... + 01b0 27bdffe8 afa00004 8fae0004 008e7821 '.............x! + 01c0 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 01d0 afb90004 00000000 03e00008 27bd0018 ............'... + 01e0 27bdffe8 afa00004 8fae0004 008e7821 '.............x! + 01f0 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 0200 afb90004 00000000 03e00008 27bd0018 ............'... + 0210 27bdffe8 afa00004 8fae0004 008e7821 '.............x! + 0220 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 0230 afb90004 00000000 03e00008 27bd0018 ............'... + 0240 27bdffe8 afa00004 8fae0004 008e7821 '.............x! + 0250 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 0260 afb90004 00000000 03e00008 27bd0018 ............'... + 0270 03e00008 00000000 03e00008 00000000 ................ +Contents of section .options: + 0000 01200000 00000000 80000000 00000000 . .............. + 0010 00000000 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 a300c032 00000000 00000000 00000000 ...2............ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/late_rodata_align.c b/tools/asm-processor/tests/late_rodata_align.c new file mode 100644 index 00000000..7367c792 --- /dev/null +++ b/tools/asm-processor/tests/late_rodata_align.c @@ -0,0 +1,80 @@ +GLOBAL_ASM( +.late_rodata + .float 4.1 + .float 4.2 + .float 4.3 + .float 4.4 +.text +glabel a + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop +) + +float foo(void) { "foo"; return 1.1f; } + +GLOBAL_ASM( +.late_rodata +.late_rodata_alignment 4 + .float 5.1 + .float 5.2 + .float 5.3 + .float 5.4 +.text +glabel b + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop +) + +float bar(void) { "bar"; return 1.2f; } + +GLOBAL_ASM( +.late_rodata +.late_rodata_alignment 8 + .float 6.1 + .float 6.2 + .float 6.3 + .float 6.4 + .float 6.5 +.text +glabel c + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop +) + diff --git a/tools/asm-processor/tests/late_rodata_align.objdump b/tools/asm-processor/tests/late_rodata_align.objdump new file mode 100644 index 00000000..87c05e86 --- /dev/null +++ b/tools/asm-processor/tests/late_rodata_align.objdump @@ -0,0 +1,51 @@ + +tests/late_rodata_align.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 000000f0 .text +00000000 l d .rodata 00000050 .rodata +00000040 g F .text 0000001c foo +00000090 g F .text 0000001c bar +00000000 g F .text 00000040 a +0000005c g F .text 00000034 b +000000ac g F .text 00000038 c + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +00000040 R_MIPS_HI16 .rodata +00000048 R_MIPS_LO16 .rodata +00000090 R_MIPS_HI16 .rodata +00000098 R_MIPS_LO16 .rodata + + +Contents of section .text: + 0000 00000000 00000000 00000000 00000000 ................ + 0010 00000000 00000000 00000000 00000000 ................ + 0020 00000000 00000000 00000000 00000000 ................ + 0030 00000000 00000000 00000000 00000000 ................ + 0040 3c010000 03e00008 c4200018 03e00008 <........ ...... + 0050 00000000 03e00008 00000000 00000000 ................ + 0060 00000000 00000000 00000000 00000000 ................ + 0070 00000000 00000000 00000000 00000000 ................ + 0080 00000000 00000000 00000000 00000000 ................ + 0090 3c010000 03e00008 c420002c 03e00008 <........ .,.... + 00a0 00000000 03e00008 00000000 00000000 ................ + 00b0 00000000 00000000 00000000 00000000 ................ + 00c0 00000000 00000000 00000000 00000000 ................ + 00d0 00000000 00000000 00000000 00000000 ................ + 00e0 00000000 00000000 00000000 00000000 ................ +Contents of section .rodata: + 0000 666f6f00 62617200 40833333 40866666 foo.bar.@.33@.ff + 0010 4089999a 408ccccd 3f8ccccd 40a33333 @...@...?...@.33 + 0020 40a66666 40a9999a 40accccd 3f99999a @.ff@...@...?... + 0030 40c33333 40c66666 40c9999a 40cccccd @.33@.ff@...@... + 0040 40d00000 00000000 00000000 00000000 @............... +Contents of section .options: + 0000 01200000 00000000 80000002 00000000 . .............. + 0010 000005f1 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 80000002 00000000 000005f1 00000000 ................ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/late_rodata_doubles.c b/tools/asm-processor/tests/late_rodata_doubles.c new file mode 100644 index 00000000..0a27b414 --- /dev/null +++ b/tools/asm-processor/tests/late_rodata_doubles.c @@ -0,0 +1,83 @@ +GLOBAL_ASM( +.late_rodata + .float 4.1 +.text +glabel a + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop +) + +float foo(void) { + return 4.15f; +} + +GLOBAL_ASM( +.late_rodata + .float 4.2 + .word 0 + .double 4.3 +.text +glabel b + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop +) + +float bar(void) { + return 4.4f; +} + +GLOBAL_ASM( +.late_rodata + .float 4.55 + .double 4.6 +.text +glabel c + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop +) + +float baz(void) { + return 4.6f; +} diff --git a/tools/asm-processor/tests/late_rodata_doubles.objdump b/tools/asm-processor/tests/late_rodata_doubles.objdump new file mode 100644 index 00000000..84d7e67f --- /dev/null +++ b/tools/asm-processor/tests/late_rodata_doubles.objdump @@ -0,0 +1,55 @@ + +tests/late_rodata_doubles.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 00000120 .text +00000000 l d .rodata 00000030 .rodata +00000040 g F .text 0000001c foo +0000009c g F .text 0000001c bar +000000f8 g F .text 0000001c baz +00000000 g F .text 00000040 a +0000005c g F .text 00000040 b +000000b8 g F .text 00000040 c + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +00000040 R_MIPS_HI16 .rodata +00000048 R_MIPS_LO16 .rodata +0000009c R_MIPS_HI16 .rodata +000000a4 R_MIPS_LO16 .rodata +000000f8 R_MIPS_HI16 .rodata +00000100 R_MIPS_LO16 .rodata + + +Contents of section .text: + 0000 00000000 00000000 00000000 00000000 ................ + 0010 00000000 00000000 00000000 00000000 ................ + 0020 00000000 00000000 00000000 00000000 ................ + 0030 00000000 00000000 00000000 00000000 ................ + 0040 3c010000 03e00008 c4200004 03e00008 <........ ...... + 0050 00000000 03e00008 00000000 00000000 ................ + 0060 00000000 00000000 00000000 00000000 ................ + 0070 00000000 00000000 00000000 00000000 ................ + 0080 00000000 00000000 00000000 00000000 ................ + 0090 00000000 00000000 00000000 3c010000 ............<... + 00a0 03e00008 c4200018 03e00008 00000000 ..... .......... + 00b0 03e00008 00000000 00000000 00000000 ................ + 00c0 00000000 00000000 00000000 00000000 ................ + 00d0 00000000 00000000 00000000 00000000 ................ + 00e0 00000000 00000000 00000000 00000000 ................ + 00f0 00000000 00000000 3c010000 03e00008 ........<....... + 0100 c4200028 03e00008 00000000 03e00008 . .(............ + 0110 00000000 00000000 00000000 00000000 ................ +Contents of section .rodata: + 0000 40833333 4084cccd 40866666 00000000 @.33@...@.ff.... + 0010 40113333 33333333 408ccccd 4091999a @.333333@...@... + 0020 40126666 66666666 40933333 00000000 @.ffffff@.33.... +Contents of section .options: + 0000 01200000 00000000 80000002 00000000 . .............. + 0010 000000f1 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 80000002 00000000 000000f1 00000000 ................ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/late_rodata_doubles_mips1.c b/tools/asm-processor/tests/late_rodata_doubles_mips1.c new file mode 100644 index 00000000..b97261f6 --- /dev/null +++ b/tools/asm-processor/tests/late_rodata_doubles_mips1.c @@ -0,0 +1,86 @@ +// COMPILE-FLAGS: -O2 +// COMPILE-ISET: -mips1 +// exact copy of late_rodata_doubles.c except for the -mips1 -O2 additions +GLOBAL_ASM( +.late_rodata + .float 4.1 +.text +glabel a + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop +) + +float foo(void) { + return 4.15f; +} + +GLOBAL_ASM( +.late_rodata + .float 4.2 + .word 0 + .double 4.3 +.text +glabel b + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop +) + +float bar(void) { + return 4.4f; +} + +GLOBAL_ASM( +.late_rodata + .float 4.55 + .double 4.6 +.text +glabel c + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop +) + +float baz(void) { + return 4.6f; +} diff --git a/tools/asm-processor/tests/late_rodata_doubles_mips1.objdump b/tools/asm-processor/tests/late_rodata_doubles_mips1.objdump new file mode 100644 index 00000000..8fac85f4 --- /dev/null +++ b/tools/asm-processor/tests/late_rodata_doubles_mips1.objdump @@ -0,0 +1,52 @@ + +tests/late_rodata_doubles_mips1.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 000000f0 .text +00000000 l d .rodata 00000030 .rodata +00000040 g F .text 00000010 foo +00000090 g F .text 00000010 bar +000000e0 g F .text 00000010 baz +00000000 g F .text 00000040 a +00000050 g F .text 00000040 b +000000a0 g F .text 00000040 c + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +00000040 R_MIPS_HI16 .rodata +00000044 R_MIPS_LO16 .rodata +00000090 R_MIPS_HI16 .rodata +00000094 R_MIPS_LO16 .rodata +000000e0 R_MIPS_HI16 .rodata +000000e4 R_MIPS_LO16 .rodata + + +Contents of section .text: + 0000 00000000 00000000 00000000 00000000 ................ + 0010 00000000 00000000 00000000 00000000 ................ + 0020 00000000 00000000 00000000 00000000 ................ + 0030 00000000 00000000 00000000 00000000 ................ + 0040 3c010000 c4200004 03e00008 00000000 <.... .......... + 0050 00000000 00000000 00000000 00000000 ................ + 0060 00000000 00000000 00000000 00000000 ................ + 0070 00000000 00000000 00000000 00000000 ................ + 0080 00000000 00000000 00000000 00000000 ................ + 0090 3c010000 c4200018 03e00008 00000000 <.... .......... + 00a0 00000000 00000000 00000000 00000000 ................ + 00b0 00000000 00000000 00000000 00000000 ................ + 00c0 00000000 00000000 00000000 00000000 ................ + 00d0 00000000 00000000 00000000 00000000 ................ + 00e0 3c010000 c4200028 03e00008 00000000 <.... .(........ +Contents of section .rodata: + 0000 40833333 4084cccd 40866666 00000000 @.33@...@.ff.... + 0010 40113333 33333333 408ccccd 4091999a @.333333@...@... + 0020 40126666 66666666 40933333 00000000 @.ffffff@.33.... +Contents of section .options: + 0000 01200000 00000000 80000002 00000000 . .............. + 0010 000c0011 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 80000002 00000000 000c0011 00000000 ................ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/late_rodata_jtbl.c b/tools/asm-processor/tests/late_rodata_jtbl.c new file mode 100644 index 00000000..3c2a5bba --- /dev/null +++ b/tools/asm-processor/tests/late_rodata_jtbl.c @@ -0,0 +1,153 @@ +// COMPILE-FLAGS: -O2 +GLOBAL_ASM( +.late_rodata +.double 1 +.double 2 +.double 3 +.double 4 +.double 5 +.double 6 +.double 7 +.double 8 +.text +glabel doubles1 +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +) + +float a(void) { return 1.1f; } + +GLOBAL_ASM( +.late_rodata +.float 1 +.double 2 +.double 3 +.double 4 +.double 5 +.double 6 +.double 7 +.double 8 +.double 9 +.float 10 +.text +glabel doubles2 +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +) + +GLOBAL_ASM( +glabel a2 +move $a0, $a0 +nop +nop +nop +jr $ra +move $a0, $a0 +) + +GLOBAL_ASM( +.late_rodata + +glabel jtbl +.word case0, case1, case2, case3, case4, case5, case6, case7, case8, case9, case10 +.word case11, case12, case13, case14, case15, case16, case17, case18, case19, case20 +.word case21, case22, case23, case24, case25, case26 + +.text +glabel foo +sltiu $at, $a0, 0xa +beqz $at, .L756E659B + sll $t7, $a0, 2 +lui $at, %hi(jtbl) +addu $at, $at, $t7 +lw $t7, %lo(jtbl)($at) +jr $t7 + nop +case0: addiu $a0, $a0, 1 +case1: addiu $a0, $a0, 1 +case2: addiu $a0, $a0, 1 +case3: addiu $a0, $a0, 1 +case4: addiu $a0, $a0, 1 +case5: addiu $a0, $a0, 1 +case6: addiu $a0, $a0, 1 +case7: addiu $a0, $a0, 1 +case8: addiu $a0, $a0, 1 +case9: addiu $a0, $a0, 1 +case10: addiu $a0, $a0, 1 +case11: addiu $a0, $a0, 1 +case12: addiu $a0, $a0, 1 +case13: addiu $a0, $a0, 1 +case14: addiu $a0, $a0, 1 +case15: addiu $a0, $a0, 1 +case16: addiu $a0, $a0, 1 +case17: addiu $a0, $a0, 1 +case18: addiu $a0, $a0, 1 +case19: addiu $a0, $a0, 1 +case20: addiu $a0, $a0, 1 +case21: addiu $a0, $a0, 1 +case22: addiu $a0, $a0, 1 +case23: addiu $a0, $a0, 1 +case24: addiu $a0, $a0, 1 +case25: addiu $a0, $a0, 1 +case26: +jr $ra + addiu $v0, $a0, 1 + +.L756E659B: +addiu $v0, $zero, 2 +jr $ra + nop +) + +GLOBAL_ASM( +glabel b2 +move $a0, $a0 +nop +nop +jr $ra +move $a0, $a0 +) + +float b(void) { return 1.2f; } diff --git a/tools/asm-processor/tests/late_rodata_jtbl.objdump b/tools/asm-processor/tests/late_rodata_jtbl.objdump new file mode 100644 index 00000000..44bb6e84 --- /dev/null +++ b/tools/asm-processor/tests/late_rodata_jtbl.objdump @@ -0,0 +1,110 @@ + +tests/late_rodata_jtbl.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 000001a0 .text +00000000 l d .rodata 00000100 .rodata +00000000 l d .text 00000000 +0000005c g F .text 0000000c a +0000018c g F .text 0000000c b +00000000 g F .text 0000005c doubles1 +00000068 g F .text 0000005c doubles2 +000000c4 g F .text 00000018 a2 +000000dc g F .text 0000009c foo +0000008c g .rodata 00000000 jtbl +00000178 g F .text 00000014 b2 + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +0000005c R_MIPS_HI16 .rodata +00000064 R_MIPS_LO16 .rodata +0000018c R_MIPS_HI16 .rodata +00000194 R_MIPS_LO16 .rodata +000000e8 R_MIPS_HI16 jtbl +000000f0 R_MIPS_LO16 jtbl + + +RELOCATION RECORDS FOR [.rodata]: +OFFSET TYPE VALUE +0000008c R_MIPS_32 +00000090 R_MIPS_32 +00000094 R_MIPS_32 +00000098 R_MIPS_32 +0000009c R_MIPS_32 +000000a0 R_MIPS_32 +000000a4 R_MIPS_32 +000000a8 R_MIPS_32 +000000ac R_MIPS_32 +000000b0 R_MIPS_32 +000000b4 R_MIPS_32 +000000b8 R_MIPS_32 +000000bc R_MIPS_32 +000000c0 R_MIPS_32 +000000c4 R_MIPS_32 +000000c8 R_MIPS_32 +000000cc R_MIPS_32 +000000d0 R_MIPS_32 +000000d4 R_MIPS_32 +000000d8 R_MIPS_32 +000000dc R_MIPS_32 +000000e0 R_MIPS_32 +000000e4 R_MIPS_32 +000000e8 R_MIPS_32 +000000ec R_MIPS_32 +000000f0 R_MIPS_32 +000000f4 R_MIPS_32 + + +Contents of section .text: + 0000 00000000 00000000 00000000 00000000 ................ + 0010 00000000 00000000 00000000 00000000 ................ + 0020 00000000 00000000 00000000 00000000 ................ + 0030 00000000 00000000 00000000 00000000 ................ + 0040 00000000 00000000 00000000 00000000 ................ + 0050 00000000 00000000 00000000 3c010000 ............<... + 0060 03e00008 c4200040 00000000 00000000 ..... .@........ + 0070 00000000 00000000 00000000 00000000 ................ + 0080 00000000 00000000 00000000 00000000 ................ + 0090 00000000 00000000 00000000 00000000 ................ + 00a0 00000000 00000000 00000000 00000000 ................ + 00b0 00000000 00000000 00000000 00000000 ................ + 00c0 00000000 00802025 00000000 00000000 ...... %........ + 00d0 00000000 03e00008 00802025 2c81000a .......... %,... + 00e0 10200022 00047880 3c010000 002f0821 . ."..x.<..../.! + 00f0 8c2f0000 01e00008 00000000 24840001 ./..........$... + 0100 24840001 24840001 24840001 24840001 $...$...$...$... + 0110 24840001 24840001 24840001 24840001 $...$...$...$... + 0120 24840001 24840001 24840001 24840001 $...$...$...$... + 0130 24840001 24840001 24840001 24840001 $...$...$...$... + 0140 24840001 24840001 24840001 24840001 $...$...$...$... + 0150 24840001 24840001 24840001 24840001 $...$...$...$... + 0160 24840001 03e00008 24820001 24020002 $.......$...$... + 0170 03e00008 00000000 00802025 00000000 .......... %.... + 0180 00000000 03e00008 00802025 3c010000 .......... %<... + 0190 03e00008 c42000f8 00000000 00000000 ..... .......... +Contents of section .rodata: + 0000 3ff00000 00000000 40000000 00000000 ?.......@....... + 0010 40080000 00000000 40100000 00000000 @.......@....... + 0020 40140000 00000000 40180000 00000000 @.......@....... + 0030 401c0000 00000000 40200000 00000000 @.......@ ...... + 0040 3f8ccccd 3f800000 40000000 00000000 ?...?...@....... + 0050 40080000 00000000 40100000 00000000 @.......@....... + 0060 40140000 00000000 40180000 00000000 @.......@....... + 0070 401c0000 00000000 40200000 00000000 @.......@ ...... + 0080 40220000 00000000 41200000 000000fc @"......A ...... + 0090 00000100 00000104 00000108 0000010c ................ + 00a0 00000110 00000114 00000118 0000011c ................ + 00b0 00000120 00000124 00000128 0000012c ... ...$...(..., + 00c0 00000130 00000134 00000138 0000013c ...0...4...8...< + 00d0 00000140 00000144 00000148 0000014c ...@...D...H...L + 00e0 00000150 00000154 00000158 0000015c ...P...T...X...\ + 00f0 00000160 00000164 3f99999a 00000000 ...`...d?....... +Contents of section .options: + 0000 01200000 00000000 80004002 00000000 . ........@..... + 0010 000000f1 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 8000c016 00000000 000000f1 00000000 ................ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/late_rodata_jtbl_mips1.c b/tools/asm-processor/tests/late_rodata_jtbl_mips1.c new file mode 100644 index 00000000..505f4c1d --- /dev/null +++ b/tools/asm-processor/tests/late_rodata_jtbl_mips1.c @@ -0,0 +1,155 @@ +// COMPILE-FLAGS: -O2 +// COMPILE-ISET: -mips1 +// exact copy of late_rodata_jtbl.c except for the -mips1 addition +GLOBAL_ASM( +.late_rodata +.double 1 +.double 2 +.double 3 +.double 4 +.double 5 +.double 6 +.double 7 +.double 8 +.text +glabel doubles1 +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +) + +float a(void) { return 1.1f; } + +GLOBAL_ASM( +.late_rodata +.float 1 +.double 2 +.double 3 +.double 4 +.double 5 +.double 6 +.double 7 +.double 8 +.double 9 +.float 10 +.text +glabel doubles2 +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +) + +GLOBAL_ASM( +glabel a2 +move $a0, $a0 +nop +nop +nop +jr $ra +move $a0, $a0 +) + +GLOBAL_ASM( +.late_rodata + +glabel jtbl +.word case0, case1, case2, case3, case4, case5, case6, case7, case8, case9, case10 +.word case11, case12, case13, case14, case15, case16, case17, case18, case19, case20 +.word case21, case22, case23, case24, case25, case26 + +.text +glabel foo +sltiu $at, $a0, 0xa +beqz $at, .L756E659B + sll $t7, $a0, 2 +lui $at, %hi(jtbl) +addu $at, $at, $t7 +lw $t7, %lo(jtbl)($at) +jr $t7 + nop +case0: addiu $a0, $a0, 1 +case1: addiu $a0, $a0, 1 +case2: addiu $a0, $a0, 1 +case3: addiu $a0, $a0, 1 +case4: addiu $a0, $a0, 1 +case5: addiu $a0, $a0, 1 +case6: addiu $a0, $a0, 1 +case7: addiu $a0, $a0, 1 +case8: addiu $a0, $a0, 1 +case9: addiu $a0, $a0, 1 +case10: addiu $a0, $a0, 1 +case11: addiu $a0, $a0, 1 +case12: addiu $a0, $a0, 1 +case13: addiu $a0, $a0, 1 +case14: addiu $a0, $a0, 1 +case15: addiu $a0, $a0, 1 +case16: addiu $a0, $a0, 1 +case17: addiu $a0, $a0, 1 +case18: addiu $a0, $a0, 1 +case19: addiu $a0, $a0, 1 +case20: addiu $a0, $a0, 1 +case21: addiu $a0, $a0, 1 +case22: addiu $a0, $a0, 1 +case23: addiu $a0, $a0, 1 +case24: addiu $a0, $a0, 1 +case25: addiu $a0, $a0, 1 +case26: +jr $ra + addiu $v0, $a0, 1 + +.L756E659B: +addiu $v0, $zero, 2 +jr $ra + nop +) + +GLOBAL_ASM( +glabel b2 +move $a0, $a0 +nop +nop +jr $ra +move $a0, $a0 +) + +float b(void) { return 1.2f; } diff --git a/tools/asm-processor/tests/late_rodata_jtbl_mips1.objdump b/tools/asm-processor/tests/late_rodata_jtbl_mips1.objdump new file mode 100644 index 00000000..d37c8bb9 --- /dev/null +++ b/tools/asm-processor/tests/late_rodata_jtbl_mips1.objdump @@ -0,0 +1,110 @@ + +tests/late_rodata_jtbl_mips1.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 000001a0 .text +00000000 l d .rodata 00000100 .rodata +00000000 l d .text 00000000 +0000005c g F .text 00000010 a +00000190 g F .text 00000010 b +00000000 g F .text 0000005c doubles1 +0000006c g F .text 0000005c doubles2 +000000c8 g F .text 00000018 a2 +000000e0 g F .text 0000009c foo +0000008c g .rodata 00000000 jtbl +0000017c g F .text 00000014 b2 + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +0000005c R_MIPS_HI16 .rodata +00000060 R_MIPS_LO16 .rodata +00000190 R_MIPS_HI16 .rodata +00000194 R_MIPS_LO16 .rodata +000000ec R_MIPS_HI16 jtbl +000000f4 R_MIPS_LO16 jtbl + + +RELOCATION RECORDS FOR [.rodata]: +OFFSET TYPE VALUE +0000008c R_MIPS_32 +00000090 R_MIPS_32 +00000094 R_MIPS_32 +00000098 R_MIPS_32 +0000009c R_MIPS_32 +000000a0 R_MIPS_32 +000000a4 R_MIPS_32 +000000a8 R_MIPS_32 +000000ac R_MIPS_32 +000000b0 R_MIPS_32 +000000b4 R_MIPS_32 +000000b8 R_MIPS_32 +000000bc R_MIPS_32 +000000c0 R_MIPS_32 +000000c4 R_MIPS_32 +000000c8 R_MIPS_32 +000000cc R_MIPS_32 +000000d0 R_MIPS_32 +000000d4 R_MIPS_32 +000000d8 R_MIPS_32 +000000dc R_MIPS_32 +000000e0 R_MIPS_32 +000000e4 R_MIPS_32 +000000e8 R_MIPS_32 +000000ec R_MIPS_32 +000000f0 R_MIPS_32 +000000f4 R_MIPS_32 + + +Contents of section .text: + 0000 00000000 00000000 00000000 00000000 ................ + 0010 00000000 00000000 00000000 00000000 ................ + 0020 00000000 00000000 00000000 00000000 ................ + 0030 00000000 00000000 00000000 00000000 ................ + 0040 00000000 00000000 00000000 00000000 ................ + 0050 00000000 00000000 00000000 3c010000 ............<... + 0060 c4200040 03e00008 00000000 00000000 . .@............ + 0070 00000000 00000000 00000000 00000000 ................ + 0080 00000000 00000000 00000000 00000000 ................ + 0090 00000000 00000000 00000000 00000000 ................ + 00a0 00000000 00000000 00000000 00000000 ................ + 00b0 00000000 00000000 00000000 00000000 ................ + 00c0 00000000 00000000 00802025 00000000 .......... %.... + 00d0 00000000 00000000 03e00008 00802025 .............. % + 00e0 2c81000a 10200022 00047880 3c010000 ,.... ."..x.<... + 00f0 002f0821 8c2f0000 01e00008 00000000 ./.!./.......... + 0100 24840001 24840001 24840001 24840001 $...$...$...$... + 0110 24840001 24840001 24840001 24840001 $...$...$...$... + 0120 24840001 24840001 24840001 24840001 $...$...$...$... + 0130 24840001 24840001 24840001 24840001 $...$...$...$... + 0140 24840001 24840001 24840001 24840001 $...$...$...$... + 0150 24840001 24840001 24840001 24840001 $...$...$...$... + 0160 24840001 24840001 03e00008 24820001 $...$.......$... + 0170 24020002 03e00008 00000000 00802025 $............. % + 0180 00000000 00000000 03e00008 00802025 .............. % + 0190 3c010000 c42000f8 03e00008 00000000 <.... .......... +Contents of section .rodata: + 0000 3ff00000 00000000 40000000 00000000 ?.......@....... + 0010 40080000 00000000 40100000 00000000 @.......@....... + 0020 40140000 00000000 40180000 00000000 @.......@....... + 0030 401c0000 00000000 40200000 00000000 @.......@ ...... + 0040 3f8ccccd 3f800000 40000000 00000000 ?...?...@....... + 0050 40080000 00000000 40100000 00000000 @.......@....... + 0060 40140000 00000000 40180000 00000000 @.......@....... + 0070 401c0000 00000000 40200000 00000000 @.......@ ...... + 0080 40220000 00000000 41200000 00000100 @"......A ...... + 0090 00000104 00000108 0000010c 00000110 ................ + 00a0 00000114 00000118 0000011c 00000120 ............... + 00b0 00000124 00000128 0000012c 00000130 ...$...(...,...0 + 00c0 00000134 00000138 0000013c 00000140 ...4...8...<...@ + 00d0 00000144 00000148 0000014c 00000150 ...D...H...L...P + 00e0 00000154 00000158 0000015c 00000160 ...T...X...\...` + 00f0 00000164 00000168 3f99999a 00000000 ...d...h?....... +Contents of section .options: + 0000 01200000 00000000 80004002 00000000 . ........@..... + 0010 000000f1 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 8000c016 00000000 000000f1 00000000 ................ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/late_rodata_misaligned_doubles.c b/tools/asm-processor/tests/late_rodata_misaligned_doubles.c new file mode 100644 index 00000000..a453dbdd --- /dev/null +++ b/tools/asm-processor/tests/late_rodata_misaligned_doubles.c @@ -0,0 +1,77 @@ +GLOBAL_ASM( +.late_rodata + .float 4.01 + .word 0 + .double 4.02 +.text +glabel a + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop +) + +double foo(void) { return 4.03; } + +GLOBAL_ASM( +.late_rodata + .float 4.04 + .double 4.05 +.text +glabel b + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop +) + +double bar(void) { return 4.06; } +float baz(void) { return 4.07f; } + +GLOBAL_ASM( +.late_rodata + .double 4.08 +.text +glabel c + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop +) + diff --git a/tools/asm-processor/tests/late_rodata_misaligned_doubles.objdump b/tools/asm-processor/tests/late_rodata_misaligned_doubles.objdump new file mode 100644 index 00000000..cdba84de --- /dev/null +++ b/tools/asm-processor/tests/late_rodata_misaligned_doubles.objdump @@ -0,0 +1,56 @@ + +tests/late_rodata_misaligned_doubles.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 00000120 .text +00000000 l d .rodata 00000040 .rodata +00000040 g F .text 0000001c foo +0000009c g F .text 0000001c bar +000000b8 g F .text 0000001c baz +00000000 g F .text 00000040 a +0000005c g F .text 00000040 b +000000d4 g F .text 00000040 c + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +00000040 R_MIPS_HI16 .rodata +00000048 R_MIPS_LO16 .rodata +0000009c R_MIPS_HI16 .rodata +000000a4 R_MIPS_LO16 .rodata +000000b8 R_MIPS_HI16 .rodata +000000c0 R_MIPS_LO16 .rodata + + +Contents of section .text: + 0000 00000000 00000000 00000000 00000000 ................ + 0010 00000000 00000000 00000000 00000000 ................ + 0020 00000000 00000000 00000000 00000000 ................ + 0030 00000000 00000000 00000000 00000000 ................ + 0040 3c010000 03e00008 d4200010 03e00008 <........ ...... + 0050 00000000 03e00008 00000000 00000000 ................ + 0060 00000000 00000000 00000000 00000000 ................ + 0070 00000000 00000000 00000000 00000000 ................ + 0080 00000000 00000000 00000000 00000000 ................ + 0090 00000000 00000000 00000000 3c010000 ............<... + 00a0 03e00008 d4200028 03e00008 00000000 ..... .(........ + 00b0 03e00008 00000000 3c010000 03e00008 ........<....... + 00c0 c4200030 03e00008 00000000 03e00008 . .0............ + 00d0 00000000 00000000 00000000 00000000 ................ + 00e0 00000000 00000000 00000000 00000000 ................ + 00f0 00000000 00000000 00000000 00000000 ................ + 0100 00000000 00000000 00000000 00000000 ................ + 0110 00000000 00000000 00000000 00000000 ................ +Contents of section .rodata: + 0000 408051ec 00000000 4010147a e147ae14 @.Q.....@..z.G.. + 0010 40101eb8 51eb851f 00000000 408147ae @...Q.......@.G. + 0020 40103333 33333333 40103d70 a3d70a3d @.333333@.=p...= + 0030 40823d71 00000000 401051eb 851eb852 @.=q....@.Q....R +Contents of section .options: + 0000 01200000 00000000 80000002 00000000 . .............. + 0010 000000f3 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 80000002 00000000 000000f3 00000000 ................ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/line-continuation-separate-file.s b/tools/asm-processor/tests/line-continuation-separate-file.s new file mode 100644 index 00000000..e1301804 --- /dev/null +++ b/tools/asm-processor/tests/line-continuation-separate-file.s @@ -0,0 +1,4 @@ +.rdata + label: .asciiz "1\n\ +2", \ + "34", "56" diff --git a/tools/asm-processor/tests/line-continuation.asmproc.d b/tools/asm-processor/tests/line-continuation.asmproc.d new file mode 100644 index 00000000..687dd1ae --- /dev/null +++ b/tools/asm-processor/tests/line-continuation.asmproc.d @@ -0,0 +1,3 @@ +tests/line-continuation.o: tests/line-continuation-separate-file.s + +tests/line-continuation-separate-file.s: diff --git a/tools/asm-processor/tests/line-continuation.c b/tools/asm-processor/tests/line-continuation.c new file mode 100644 index 00000000..d5ab0937 --- /dev/null +++ b/tools/asm-processor/tests/line-continuation.c @@ -0,0 +1,22 @@ +void foo(void) { "abcdef"; } + +GLOBAL_ASM( +.rdata + .ascii "AB" \ + "CD", "EF" + .ascii "GH\n\n\n\0\11\222\3333\44444\x1234567\n\nIJK" +) + +void bar(void) { "hello"; } + +GLOBAL_ASM( +.rdata + .asciiz "1\ +2" + .asciiz "34", "56" + .asciiz "78\n\n\n\0\11\222\3333\44444\x1234567\n\n9A" +) + +void baz(void) { "ghijkl"; } + +GLOBAL_ASM("tests/line-continuation-separate-file.s") diff --git a/tools/asm-processor/tests/line-continuation.objdump b/tools/asm-processor/tests/line-continuation.objdump new file mode 100644 index 00000000..038766fd --- /dev/null +++ b/tools/asm-processor/tests/line-continuation.objdump @@ -0,0 +1,30 @@ + +tests/line-continuation.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 00000030 .text +00000000 l d .rodata 00000060 .rodata +00000000 g F .text 00000010 foo +00000010 g F .text 00000010 bar +00000020 g F .text 00000010 baz + + +Contents of section .text: + 0000 03e00008 00000000 03e00008 00000000 ................ + 0010 03e00008 00000000 03e00008 00000000 ................ + 0020 03e00008 00000000 03e00008 00000000 ................ +Contents of section .rodata: + 0000 61626364 65660000 41424344 45464748 abcdef..ABCDEFGH + 0010 0a0a0a00 0992db33 24343467 0a0a494a .......3$44g..IJ + 0020 4b000000 68656c6c 6f000000 31320033 K...hello...12.3 + 0030 34003536 0037380a 0a0a0009 92db3324 4.56.78.......3$ + 0040 3434670a 0a394100 6768696a 6b6c0000 44g..9A.ghijkl.. + 0050 310a3200 33340035 36000000 00000000 1.2.34.56....... +Contents of section .options: + 0000 01200000 00000000 80000000 00000000 . .............. + 0010 00000000 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 80000000 00000000 00000000 00000000 ................ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/o0.c b/tools/asm-processor/tests/o0.c new file mode 100644 index 00000000..6f8e5e41 --- /dev/null +++ b/tools/asm-processor/tests/o0.c @@ -0,0 +1,28 @@ +// COMPILE-FLAGS: -O0 + +int a(void) { return 1; } +GLOBAL_ASM( +glabel foo +addiu $a0, $a0, 1 +addiu $a0, $a0, 2 +addiu $a0, $a0, 3 +jr $ra +addiu $a0, $a0, 4 +) +float b(void) { return 1.2f; } +GLOBAL_ASM( +.late_rodata +glabel float1 +.float 12.34 + +.text +glabel bar +addiu $a0, $a0, 5 +addiu $a0, $a0, 6 +addiu $a0, $a0, 7 +addiu $a0, $a0, 8 +lui $v0, %hi(float1 + 1) +jr $ra +addiu $v0, $v0, %lo(float1 + 1) +) +float c(void) { return 1.3f; } diff --git a/tools/asm-processor/tests/o0.objdump b/tools/asm-processor/tests/o0.objdump new file mode 100644 index 00000000..f94ec7a0 --- /dev/null +++ b/tools/asm-processor/tests/o0.objdump @@ -0,0 +1,44 @@ + +tests/o0.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 00000090 .text +00000000 l d .rodata 00000010 .rodata +00000000 g F .text 0000001c a +00000030 g F .text 00000020 b +0000006c g F .text 00000020 c +0000001c g F .text 00000014 foo +00000050 g F .text 0000001c bar +00000004 g .rodata 00000000 float1 + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +00000030 R_MIPS_HI16 .rodata +00000034 R_MIPS_LO16 .rodata +0000006c R_MIPS_HI16 .rodata +00000070 R_MIPS_LO16 .rodata +00000060 R_MIPS_HI16 float1 +00000068 R_MIPS_LO16 float1 + + +Contents of section .text: + 0000 24020001 03e00008 00000000 03e00008 $............... + 0010 00000000 03e00008 00000000 24840001 ............$... + 0020 24840002 24840003 03e00008 24840004 $...$.......$... + 0030 3c010000 c4200000 03e00008 00000000 <.... .......... + 0040 03e00008 00000000 03e00008 00000000 ................ + 0050 24840005 24840006 24840007 24840008 $...$...$...$... + 0060 3c020000 03e00008 24420001 3c010000 <.......$B..<... + 0070 c4200008 03e00008 00000000 03e00008 . .............. + 0080 00000000 03e00008 00000000 00000000 ................ +Contents of section .rodata: + 0000 3f99999a 414570a4 3fa66666 00000000 ?...AEp.?.ff.... +Contents of section .options: + 0000 01200000 00000000 80000006 00000000 . .............. + 0010 00000011 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 80000016 00000000 00000011 00000000 ................ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/o2.c b/tools/asm-processor/tests/o2.c new file mode 100644 index 00000000..144a604e --- /dev/null +++ b/tools/asm-processor/tests/o2.c @@ -0,0 +1,26 @@ +// COMPILE-FLAGS: -O2 + +int a(void) { return 1; } +GLOBAL_ASM( +glabel foo +addiu $a0, $a0, 1 +addiu $a0, $a0, 2 +addiu $a0, $a0, 3 +jr $ra +addiu $a0, $a0, 4 +) +float b(void) { return 1.2f; } +GLOBAL_ASM( +.late_rodata +glabel float1 +.float 12.34 + +.text +glabel bar +addiu $a0, $a0, 5 +addiu $a0, $a0, 6 +lui $v0, %hi(float1 + 1) +jr $ra +addiu $v0, $v0, %lo(float1 + 1) +) +float c(void) { return 1.3f; } diff --git a/tools/asm-processor/tests/o2.objdump b/tools/asm-processor/tests/o2.objdump new file mode 100644 index 00000000..61e3fb0e --- /dev/null +++ b/tools/asm-processor/tests/o2.objdump @@ -0,0 +1,40 @@ + +tests/o2.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 00000050 .text +00000000 l d .rodata 00000010 .rodata +00000000 g F .text 00000008 a +0000001c g F .text 0000000c b +0000003c g F .text 0000000c c +00000008 g F .text 00000014 foo +00000028 g F .text 00000014 bar +00000004 g .rodata 00000000 float1 + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +0000001c R_MIPS_HI16 .rodata +00000024 R_MIPS_LO16 .rodata +0000003c R_MIPS_HI16 .rodata +00000044 R_MIPS_LO16 .rodata +00000030 R_MIPS_HI16 float1 +00000038 R_MIPS_LO16 float1 + + +Contents of section .text: + 0000 03e00008 24020001 24840001 24840002 ....$...$...$... + 0010 24840003 03e00008 24840004 3c010000 $.......$...<... + 0020 03e00008 c4200000 24840005 24840006 ..... ..$...$... + 0030 3c020000 03e00008 24420001 3c010000 <.......$B..<... + 0040 03e00008 c4200008 00000000 00000000 ..... .......... +Contents of section .rodata: + 0000 3f99999a 414570a4 3fa66666 00000000 ?...AEp.?.ff.... +Contents of section .options: + 0000 01200000 00000000 80000006 00000000 . .............. + 0010 00000011 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 80000016 00000000 00000011 00000000 ................ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/pascal.objdump b/tools/asm-processor/tests/pascal.objdump new file mode 100644 index 00000000..cb3740f0 --- /dev/null +++ b/tools/asm-processor/tests/pascal.objdump @@ -0,0 +1,137 @@ + +tests/pascal.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 000000e0 .text +00000000 l d .rodata 00000030 .rodata +00000000 l d .data 00000010 .data +00000000 l d .bss 00000010 .bss +00000000 l O .bss 00000000 $dat +00000000 g F .text 0000000c foo +000000d0 g F .text 0000000c bar +0000000c g F .text 00000004 test +00000048 g F .text 00000004 test2 +0000008c g F .text 00000044 test3 +00000000 *UND* 00000000 get +00000000 *UND* 00000000 put +00000000 *UND* 00000000 pascal_close +00000000 *UND* 00000000 fflush +00000000 *UND* 00000000 filesize +00000000 *UND* 00000000 curpos +00000000 *UND* 00000000 seek +00000000 *UND* 00000000 eof +00000000 *UND* 00000000 eoln +00000000 *UND* 00000000 page +00000000 *UND* 00000000 reset +00000000 *UND* 00000000 rewrite +00000000 *UND* 00000000 cos +00000000 *UND* 00000000 exp +00000000 *UND* 00000000 sqrt +00000000 *UND* 00000000 log +00000000 *UND* 00000000 atan +00000000 *UND* 00000000 sin +00000000 *UND* 00000000 __random_float +00000000 *UND* 00000000 clock +00000000 *UND* 00000000 exit +00000000 *UND* 00000000 __date +00000000 *UND* 00000000 __time +00000000 *UND* 00000000 get_arg +00000000 *UND* 00000000 new +00000000 *UND* 00000000 dispose +00000000 *UND* 00000000 initfile +00000000 *UND* 00000000 peek_char +00000000 *UND* 00000000 next_char +00000000 *UND* 00000000 readln +00000000 *UND* 00000000 read_int64 +00000000 *UND* 00000000 read_card64 +00000000 *UND* 00000000 read_integer +00000000 *UND* 00000000 read_cardinal +00000000 *UND* 00000000 read_integer_range +00000000 *UND* 00000000 read_real +00000000 *UND* 00000000 read_double +00000000 *UND* 00000000 read_extended +00000000 *UND* 00000000 read_string +00000000 *UND* 00000000 read_enum +00000000 *UND* 00000000 read_char +00000000 *UND* 00000000 read_char_range +00000000 *UND* 00000000 read_boolean +00000000 *UND* 00000000 read_set +00000000 *UND* 00000000 writeln +00000000 *UND* 00000000 write_int64 +00000000 *UND* 00000000 write_card64 +00000000 *UND* 00000000 write_integer +00000000 *UND* 00000000 write_cardinal +00000000 *UND* 00000000 write_boolean +00000000 *UND* 00000000 write_char +00000000 *UND* 00000000 write_real +00000000 *UND* 00000000 write_double +00000000 *UND* 00000000 write_extended +00000000 *UND* 00000000 write_string +00000000 *UND* 00000000 write_enum +00000000 *UND* 00000000 write_set +00000000 *UND* 00000000 caseerror +00000000 *UND* 00000000 __pc_nloc_goto +00000000 *UND* 00000000 memcpy +00000000 *UND* 00000000 __in_range +00000000 *UND* 00000000 __ll_mul +00000000 *UND* 00000000 __ll_div +00000000 *UND* 00000000 __ull_div +00000000 *UND* 00000000 __ll_mod +00000000 *UND* 00000000 __ll_rem +00000000 *UND* 00000000 __ull_rem +00000000 *UND* 00000000 __ll_lshift +00000000 *UND* 00000000 __ll_rshift +00000000 *UND* 00000000 __ll_to_f +00000000 *UND* 00000000 __ull_to_f +00000000 *UND* 00000000 __ll_to_d +00000000 *UND* 00000000 __ull_to_d +00000000 *UND* 00000000 __f_ll_ll +00000000 *UND* 00000000 __f_to_ull +00000000 *UND* 00000000 __d_to_ll +00000000 *UND* 00000000 __d_to_ull +00000000 *UND* 00000000 round64 +00000000 *UND* 00000000 trunc64 +00000000 *UND* 00000000 max64 +00000000 *UND* 00000000 min64 +00000000 *UND* 00000000 abs64 +00000000 *UND* 00000000 odd64 +00000000 *UND* 00000000 trapNaN +00000000 *UND* 00000008 input +00000000 *UND* 00000008 output +00000000 *UND* 00000008 err +00000000 *UND* 00000008 __Argc + + +RELOCATION RECORDS FOR [.text]: (none) + +RELOCATION RECORDS FOR [.rodata]: (none) + +Contents of section .text: + 0000 00041080 03e00008 00441023 27bdffe8 .........D.#'... + 0010 18a00009 afa00004 8fae0004 008e7821 ..............x! + 0020 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 0030 1420fff9 afb90004 10000001 00000000 . .............. + 0040 03e00008 27bd0018 00000000 00000000 ....'........... + 0050 00000000 00000000 00000000 00000000 ................ + 0060 00000000 00000000 00000000 00000000 ................ + 0070 00000000 00000000 00000000 00000000 ................ + 0080 00000000 00000000 00000000 00000000 ................ + 0090 00000000 00000000 00000000 00000000 ................ + 00a0 00000000 00000000 00000000 00000000 ................ + 00b0 00000000 00000000 00000000 00000000 ................ + 00c0 00000000 00000000 00000000 00000000 ................ + 00d0 00041080 03e00008 00441023 00000000 .........D.#.... +Contents of section .rodata: + 0000 00123123 00456456 00789789 00000001 ..1#.EdV.x...... + 0010 3ff19999 9999999a 00000002 00000003 ?............... + 0020 4000cccc cccccccd 00000000 00000000 @............... +Contents of section .data: + 0000 00002323 00003434 00000000 00000000 ..##..44........ +Contents of section .options: + 0000 01200000 00000000 80004016 00000000 . ........@..... + 0010 000000f0 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 a300c036 00000000 000000f0 00000000 ...6............ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/pascal.p b/tools/asm-processor/tests/pascal.p new file mode 100644 index 00000000..0886126a --- /dev/null +++ b/tools/asm-processor/tests/pascal.p @@ -0,0 +1,95 @@ +{ COMPILE-FLAGS: -O2 } + +function foo(x: integer): integer; +begin + foo := x * 3 +end; + +GLOBAL_ASM( +.section .data +.word 0x2323 + +.late_rodata +.word 0x123123 +.word 0x456456 +.word 0x789789 +.text +glabel test +/* 000090 00400090 27BDFFF8 */ addiu $sp, $sp, -24 +/* 000094 00400094 18A00009 */ blez $a1, .L004000BC +/* 000098 00400098 AFA00004 */ sw $zero, 4($sp) +.L0040009C: +/* 00009C 0040009C 8FAE0004 */ lw $t6, 4($sp) +/* 0000A0 004000A0 008E7821 */ addu $t7, $a0, $t6 +/* 0000A4 004000A4 A1E00000 */ sb $zero, ($t7) +/* 0000A8 004000A8 8FB80004 */ lw $t8, 4($sp) +/* 0000AC 004000AC 27190001 */ addiu $t9, $t8, 1 +/* 0000B0 004000B0 0325082A */ slt $at, $t9, $a1 +/* 0000B4 004000B4 1420FFF9 */ bnez $at, .L0040009C +/* 0000B8 004000B8 AFB90004 */ sw $t9, 4($sp) +.L004000BC: +/* 0000BC 004000BC 10000001 */ b .L004000C4 +/* 0000C0 004000C0 00000000 */ nop +.L004000C4: +/* 0000C4 004000C4 03E00008 */ jr $ra +/* 0000C8 004000C8 27BD0008 */ addiu $sp, $sp, 24 +) + +GLOBAL_ASM( +.section .data +.word 0x3434 + +.late_rodata +.word 0x1 +.double 1.1 +.word 0x2, 0x3 +.text +glabel test2 +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +) + +GLOBAL_ASM( +.late_rodata +.double 2.1 +.text +glabel test3 +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +) + +function bar(x: integer): integer; +begin + return x * 3 +end; + diff --git a/tools/asm-processor/tests/static-global.c b/tools/asm-processor/tests/static-global.c new file mode 100644 index 00000000..a7f61690 --- /dev/null +++ b/tools/asm-processor/tests/static-global.c @@ -0,0 +1,33 @@ +// COMPILE-FLAGS: -O2 +// ASMP-FLAGS: --convert-statics=global +static int xtext(int a, int b, int c); +const int rodata1[] = {1}; +static const int rodata2[] = {2}; +int data1[] = {3}; +static int data2[] = {4}; +int bss1; +static int bss2; + +GLOBAL_ASM( +glabel bar +lui $a0, %hi(rodata2) +lw $a0, %lo(rodata2)($a0) +lui $a1, %hi(data2) +lw $a1, %lo(data2)($a0) +lui $a2, %hi(bss2) +lw $a2, %lo(bss2)($a0) +jal xtext +nop +jr $ra +nop +nop +nop +) + +static int xtext(int a, int b, int c) { + return 1; +} + +void baz(void) { + xtext(bss2, rodata2[0], data2[0]); +} diff --git a/tools/asm-processor/tests/static-global.objdump b/tools/asm-processor/tests/static-global.objdump new file mode 100644 index 00000000..a519e4f4 --- /dev/null +++ b/tools/asm-processor/tests/static-global.objdump @@ -0,0 +1,58 @@ + +tests/static-global.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 00000080 .text +00000000 l d .rodata 00000010 .rodata +00000000 l d .data 00000010 .data +00000000 l d .bss 00000010 .bss +00000000 g O .rodata 00000004 rodata1 +00000000 g O .data 00000004 data1 +00000000 g O .bss 00000004 bss1 +00000044 g F .text 00000034 baz +00000000 g F .text 00000030 bar +00000004 g O .rodata 00000000 rodata2 +00000004 g O .data 00000000 data2 +00000004 g O .bss 00000000 bss2 +00000030 g F .text 00000000 xtext + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +0000004c R_MIPS_HI16 .bss +00000064 R_MIPS_LO16 .bss +00000050 R_MIPS_HI16 .rodata +0000005c R_MIPS_LO16 .rodata +00000054 R_MIPS_HI16 .data +00000058 R_MIPS_LO16 .data +00000060 R_MIPS_26 .text +00000000 R_MIPS_HI16 rodata2 +00000004 R_MIPS_LO16 rodata2 +00000008 R_MIPS_HI16 data2 +0000000c R_MIPS_LO16 data2 +00000010 R_MIPS_HI16 bss2 +00000014 R_MIPS_LO16 bss2 +00000018 R_MIPS_26 xtext + + +Contents of section .text: + 0000 3c040000 8c840000 3c050000 8c850000 <.......<....... + 0010 3c060000 8c860000 0c000000 00000000 <............... + 0020 03e00008 00000000 00000000 00000000 ................ + 0030 afa40000 afa50004 afa60008 03e00008 ................ + 0040 24020001 27bdffe8 afbf0014 3c040000 $...'.......<... + 0050 3c050000 3c060000 8cc60004 8ca50004 <...<........... + 0060 0c00000c 8c840004 8fbf0014 27bd0018 ............'... + 0070 03e00008 00000000 00000000 00000000 ................ +Contents of section .rodata: + 0000 00000001 00000002 00000000 00000000 ................ +Contents of section .data: + 0000 00000003 00000004 00000000 00000000 ................ +Contents of section .options: + 0000 01200000 00000000 a0000074 00000000 . .........t.... + 0010 00000000 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 a0000074 00000000 00000000 00000000 ...t............ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/static.c b/tools/asm-processor/tests/static.c new file mode 100644 index 00000000..c265021e --- /dev/null +++ b/tools/asm-processor/tests/static.c @@ -0,0 +1,32 @@ +// COMPILE-FLAGS: -O2 +static int xtext(int a, int b, int c); +const int rodata1[] = {1}; +static const int rodata2[] = {2}; +int data1[] = {3}; +static int data2[] = {4}; +int bss1; +static int bss2; + +GLOBAL_ASM( +glabel bar +lui $a0, %hi(rodata2) +lw $a0, %lo(rodata2)($a0) +lui $a1, %hi(data2) +lw $a1, %lo(data2)($a0) +lui $a2, %hi(bss2) +lw $a2, %lo(bss2)($a0) +jal xtext +nop +jr $ra +nop +nop +nop +) + +static int xtext(int a, int b, int c) { + return 1; +} + +void baz(void) { + xtext(bss2, rodata2[0], data2[0]); +} diff --git a/tools/asm-processor/tests/static.objdump b/tools/asm-processor/tests/static.objdump new file mode 100644 index 00000000..dd62c94c --- /dev/null +++ b/tools/asm-processor/tests/static.objdump @@ -0,0 +1,58 @@ + +tests/static.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 00000080 .text +00000000 l d .rodata 00000010 .rodata +00000000 l d .data 00000010 .data +00000000 l d .bss 00000010 .bss +00000004 l O .rodata 00000000 rodata2 +00000004 l O .data 00000000 data2 +00000004 l O .bss 00000000 bss2 +00000030 l F .text 00000000 xtext +00000000 g O .rodata 00000004 rodata1 +00000000 g O .data 00000004 data1 +00000000 g O .bss 00000004 bss1 +00000044 g F .text 00000034 baz +00000000 g F .text 00000030 bar + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +0000004c R_MIPS_HI16 .bss +00000064 R_MIPS_LO16 .bss +00000050 R_MIPS_HI16 .rodata +0000005c R_MIPS_LO16 .rodata +00000054 R_MIPS_HI16 .data +00000058 R_MIPS_LO16 .data +00000060 R_MIPS_26 .text +00000000 R_MIPS_HI16 rodata2 +00000004 R_MIPS_LO16 rodata2 +00000008 R_MIPS_HI16 data2 +0000000c R_MIPS_LO16 data2 +00000010 R_MIPS_HI16 bss2 +00000014 R_MIPS_LO16 bss2 +00000018 R_MIPS_26 xtext + + +Contents of section .text: + 0000 3c040000 8c840000 3c050000 8c850000 <.......<....... + 0010 3c060000 8c860000 0c000000 00000000 <............... + 0020 03e00008 00000000 00000000 00000000 ................ + 0030 afa40000 afa50004 afa60008 03e00008 ................ + 0040 24020001 27bdffe8 afbf0014 3c040000 $...'.......<... + 0050 3c050000 3c060000 8cc60004 8ca50004 <...<........... + 0060 0c00000c 8c840004 8fbf0014 27bd0018 ............'... + 0070 03e00008 00000000 00000000 00000000 ................ +Contents of section .rodata: + 0000 00000001 00000002 00000000 00000000 ................ +Contents of section .data: + 0000 00000003 00000004 00000000 00000000 ................ +Contents of section .options: + 0000 01200000 00000000 a0000074 00000000 . .........t.... + 0010 00000000 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 a0000074 00000000 00000000 00000000 ...t............ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/test1.c b/tools/asm-processor/tests/test1.c new file mode 100644 index 00000000..475555a7 --- /dev/null +++ b/tools/asm-processor/tests/test1.c @@ -0,0 +1,71 @@ + +GLOBAL_ASM( +.rdata +.word 0x1212 +) + +GLOBAL_ASM( +.late_rodata +.word 0x123123 +.text +glabel test +/* 000090 00400090 27BDFFF8 */ addiu $sp, $sp, -24 +/* 000094 00400094 18A00009 */ blez $a1, .L004000BC +/* 000098 00400098 AFA00004 */ sw $zero, 4($sp) +.L0040009C: +/* 00009C 0040009C 8FAE0004 */ lw $t6, 4($sp) +/* 0000A0 004000A0 008E7821 */ addu $t7, $a0, $t6 +/* 0000A4 004000A4 A1E00000 */ sb $zero, ($t7) +/* 0000A8 004000A8 8FB80004 */ lw $t8, 4($sp) +/* 0000AC 004000AC 27190001 */ addiu $t9, $t8, 1 +/* 0000B0 004000B0 0325082A */ slt $at, $t9, $a1 +/* 0000B4 004000B4 1420FFF9 */ bnez $at, .L0040009C +/* 0000B8 004000B8 AFB90004 */ sw $t9, 4($sp) +.L004000BC: +/* 0000BC 004000BC 10000001 */ b .L004000C4 +/* 0000C0 004000C0 00000000 */ nop +.L004000C4: +/* 0000C4 004000C4 03E00008 */ jr $ra +/* 0000C8 004000C8 27BD0008 */ addiu $sp, $sp, 24 +) + +char bss1[3]; +GLOBAL_ASM( +.bss +bss2: +.space 3 +) +char bss3[3]; +char bss4[3]; +const int rodata1[2] = {1}; +extern int some_rodata; + +unsigned g(float, int); +unsigned f(void) { + return g(1.1f, some_rodata); +} + +GLOBAL_ASM( +.rdata +glabel some_rodata +.word 0x1313 +.text +.late_rodata +.word 0x321321 +.text +glabel g +/* 0000C0 004000C0 27BDFFE8 */ addiu $sp, $sp, -0x18 +/* 0000C4 004000C4 AFBF0014 */ sw $ra, 0x14($sp) +/* 0000C8 004000C8 240E0004 */ addiu $t6, $zero, 4 +/* 0000CC 004000CC 3C010041 */ lui $at, %hi(D_410100) +/* 0000D0 004000D0 AC2E0100 */ sw $t6, %lo(D_410100)($at) +/* 0000D4 004000D4 0C10002C */ jal func_004000B0 +/* 0000D8 004000D8 00000000 */ nop +/* 0000DC 004000DC 10000001 */ b .L004000E4 +/* 0000E0 004000E0 00000000 */ nop +.L004000E4: +/* 0000E4 004000E4 8FBF0014 */ lw $ra, 0x14($sp) +/* 0000E8 004000E8 27BD0018 */ addiu $sp, $sp, 0x18 +/* 0000EC 004000EC 03E00008 */ jr $ra +/* 0000F0 004000F0 00000000 */ nop +) diff --git a/tools/asm-processor/tests/test1.objdump b/tools/asm-processor/tests/test1.objdump new file mode 100644 index 00000000..b97ae46e --- /dev/null +++ b/tools/asm-processor/tests/test1.objdump @@ -0,0 +1,54 @@ + +tests/test1.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 000000b0 .text +00000000 l d .rodata 00000020 .rodata +00000000 l d .bss 00000010 .bss +00000000 g O .bss 00000003 bss1 +00000008 g O .bss 00000003 bss3 +0000000c g O .bss 00000003 bss4 +00000004 g O .rodata 00000008 rodata1 +0000003c g F .text 0000003c f +00000000 g F .text 0000003c test +0000000c g .rodata 00000000 some_rodata +00000078 g F .text 00000004 g +00000000 *UND* 00000000 D_410100 +00000000 *UND* 00000000 func_004000B0 + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +00000044 R_MIPS_HI16 .rodata +00000054 R_MIPS_LO16 .rodata +00000048 R_MIPS_HI16 some_rodata +0000004c R_MIPS_LO16 some_rodata +00000050 R_MIPS_26 g +00000084 R_MIPS_HI16 D_410100 +00000088 R_MIPS_LO16 D_410100 +0000008c R_MIPS_26 func_004000B0 + + +Contents of section .text: + 0000 27bdffe8 18a00009 afa00004 8fae0004 '............... + 0010 008e7821 a1e00000 8fb80004 27190001 ..x!........'... + 0020 0325082a 1420fff9 afb90004 10000001 .%.*. .......... + 0030 00000000 03e00008 27bd0018 27bdffe8 ........'...'... + 0040 afbf0014 3c010000 3c050000 8ca50000 ....<...<....... + 0050 0c000000 c42c0014 10000003 00000000 .....,.......... + 0060 10000001 00000000 8fbf0014 27bd0018 ............'... + 0070 03e00008 00000000 27bdffe8 afbf0014 ........'....... + 0080 240e0004 3c010000 ac2e0000 0c000000 $...<........... + 0090 00000000 10000001 00000000 8fbf0014 ................ + 00a0 27bd0018 03e00008 00000000 00000000 '............... +Contents of section .rodata: + 0000 00001212 00000001 00000000 00001313 ................ + 0010 00123123 3f8ccccd 00321321 00000000 ..1#?....2.!.... +Contents of section .options: + 0000 01200000 00000000 a0000022 00000000 . .........".... + 0010 00001010 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 a300c032 00000000 00001010 00000000 ...2............ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/test2.c b/tools/asm-processor/tests/test2.c new file mode 100644 index 00000000..15969feb --- /dev/null +++ b/tools/asm-processor/tests/test2.c @@ -0,0 +1,69 @@ +const char buf1[1] = {1}; +float func1(void) { + "func1"; + return 0.1f; +} +const char buf2[1] = {2}; +void func2(void) { + *(volatile float*)0 = -3.5792360305786133f; + *(volatile float*)0 = -3.5792362689971924f; + // "func2"; + // return 0.2f; +} +const char buf3[1] = {3}; +int func3(int x) { + switch(x) { + case 0: + return 1; + case 1: + return 2; + case 2: + return 3; + case 3: + return 4; + case 4: + return 5; + case 5: + return 4; + case 6: + return 4; + case 7: + return 4; + default: + return 3; + } +} + +#if 1 +GLOBAL_ASM( +.rdata +.word 0x66756e63 # func +.word 0x34000000 # 4\0\0\0 +.word jumptarget + 4 + +.late_rodata +glabel rv +.word 0x3e4ccccd # 0.2f +.word jumptarget + 8 + +.text +glabel func4 +lui $at, %hi(rv) +glabel jumptarget +jr $ra +lwc1 $f0, %lo(rv)($at) +jr $ra +nop +jr $ra +nop +jr $ra +nop +jr $ra +nop +) +#else +float func4(void) { + "func4"; + return 0.2f; +} +#endif diff --git a/tools/asm-processor/tests/test2.objdump b/tools/asm-processor/tests/test2.objdump new file mode 100644 index 00000000..276ed9f1 --- /dev/null +++ b/tools/asm-processor/tests/test2.objdump @@ -0,0 +1,76 @@ + +tests/test2.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 000000f0 .text +00000000 l d .rodata 00000060 .rodata +00000000 g O .rodata 00000001 buf1 +00000000 g F .text 0000001c func1 +0000000c g O .rodata 00000001 buf2 +0000001c g F .text 00000028 func2 +00000010 g O .rodata 00000001 buf3 +00000044 g F .text 0000007c func3 +000000c4 g F .text 00000000 jumptarget +000000c0 g F .text 0000000c func4 +0000004c g .rodata 00000000 rv + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +00000000 R_MIPS_HI16 .rodata +00000008 R_MIPS_LO16 .rodata +0000001c R_MIPS_HI16 .rodata +00000020 R_MIPS_LO16 .rodata +00000028 R_MIPS_HI16 .rodata +0000002c R_MIPS_LO16 .rodata +00000054 R_MIPS_HI16 .rodata +0000005c R_MIPS_LO16 .rodata +000000c0 R_MIPS_HI16 rv +000000c8 R_MIPS_LO16 rv + + +RELOCATION RECORDS FOR [.rodata]: +OFFSET TYPE VALUE +0000002c R_MIPS_32 .text +00000030 R_MIPS_32 .text +00000034 R_MIPS_32 .text +00000038 R_MIPS_32 .text +0000003c R_MIPS_32 .text +00000040 R_MIPS_32 .text +00000044 R_MIPS_32 .text +00000048 R_MIPS_32 .text +0000001c R_MIPS_32 jumptarget +00000050 R_MIPS_32 jumptarget + + +Contents of section .text: + 0000 3c010000 03e00008 c4200020 03e00008 <........ . .... + 0010 00000000 03e00008 00000000 3c010000 ............<... + 0020 c4240024 e4040000 3c010000 c4260028 .$.$....<....&.( + 0030 e4060000 03e00008 00000000 03e00008 ................ + 0040 00000000 2c810008 10200017 00000000 ....,.... ...... + 0050 00047080 3c010000 002e0821 8c2e002c ..p.<......!..., + 0060 01c00008 00000000 03e00008 24020001 ............$... + 0070 03e00008 24020002 03e00008 24020003 ....$.......$... + 0080 03e00008 24020004 03e00008 24020005 ....$.......$... + 0090 03e00008 24020004 03e00008 24020004 ....$.......$... + 00a0 03e00008 24020004 03e00008 24020003 ....$.......$... + 00b0 03e00008 00000000 03e00008 00000000 ................ + 00c0 3c010000 03e00008 c4200000 03e00008 <........ ...... + 00d0 00000000 03e00008 00000000 03e00008 ................ + 00e0 00000000 03e00008 00000000 00000000 ................ +Contents of section .rodata: + 0000 01000000 66756e63 31000000 02000000 ....func1....... + 0010 03000000 66756e63 34000000 00000004 ....func4....... + 0020 3dcccccd c0651234 c0651235 00000068 =....e.4.e.5...h + 0030 00000070 00000078 00000080 00000088 ...p...x........ + 0040 00000090 00000098 000000a0 3e4ccccd ............>L.. + 0050 00000008 00000000 00000000 00000000 ................ +Contents of section .options: + 0000 01200000 00000000 80004016 00000000 . ........@..... + 0010 00000051 00000000 00000000 00007ff0 ...Q............ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 80004016 00000000 00000051 00000000 ..@........Q.... + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/test3.c b/tools/asm-processor/tests/test3.c new file mode 100644 index 00000000..d74bb4cb --- /dev/null +++ b/tools/asm-processor/tests/test3.c @@ -0,0 +1,70 @@ + +GLOBAL_ASM( +.rdata +.word 321321 +.text +glabel test +/* 000090 00400090 27BDFFF8 */ addiu $sp, $sp, -24 +/* 000094 00400094 18A00009 */ blez $a1, .L004000BC +/* 000098 00400098 AFA00004 */ sw $zero, 4($sp) +.L0040009C: +/* 00009C 0040009C 8FAE0004 */ lw $t6, 4($sp) +/* 0000A0 004000A0 008E7821 */ addu $t7, $a0, $t6 +/* 0000A4 004000A4 A1E00000 */ sb $zero, ($t7) +/* 0000A8 004000A8 8FB80004 */ lw $t8, 4($sp) +/* 0000AC 004000AC 27190001 */ addiu $t9, $t8, 1 +/* 0000B0 004000B0 0325082A */ slt $at, $t9, $a1 +/* 0000B4 004000B4 1420FFF9 */ bnez $at, .L0040009C +/* 0000B8 004000B8 AFB90004 */ sw $t9, 4($sp) +.L004000BC: +/* 0000BC 004000BC 10000001 */ b .L004000C4 +/* 0000C0 004000C0 00000000 */ nop +.L004000C4: +/* 0000C4 004000C4 03E00008 */ jr $ra +/* 0000C8 004000C8 27BD0008 */ addiu $sp, $sp, 24 +) + +// static -> no symbols +// bss +char globalBuf[4]; +const char constBuf[4]; + +// data +char globalBufInit[4] = {1}; + +// rodata +const char constBufInit[4] = {1}; +const char constBufInit2[1] = {2}; +const char constBufInit3[1] = {3}; + +unsigned g(void); +unsigned f(void) { + // aligns to 4 or 8 byte boundary (char -> 4, double -> 8) + double x = 5.1; + float y = 5.2f; + float z = 5.3f; + "Hello "; + "World"; + return g(); +} + +GLOBAL_ASM( +.rdata +.word 123123 +.text +glabel g +/* 0000C0 004000C0 27BDFFE8 */ addiu $sp, $sp, -0x18 +/* 0000C4 004000C4 AFBF0014 */ sw $ra, 0x14($sp) +/* 0000C8 004000C8 240E0004 */ addiu $t6, $zero, 4 +/* 0000CC 004000CC 3C010041 */ lui $at, %hi(D_410100) +/* 0000D0 004000D0 AC2E0100 */ sw $t6, %lo(D_410100)($at) +/* 0000D4 004000D4 0C10002C */ jal func_004000B0 +/* 0000D8 004000D8 00000000 */ nop +/* 0000DC 004000DC 10000001 */ b .L004000E4 +/* 0000E0 004000E0 00000000 */ nop +.L004000E4: +/* 0000E4 004000E4 8FBF0014 */ lw $ra, 0x14($sp) +/* 0000E8 004000E8 27BD0018 */ addiu $sp, $sp, 0x18 +/* 0000EC 004000EC 03E00008 */ jr $ra +/* 0000F0 004000F0 00000000 */ nop +) diff --git a/tools/asm-processor/tests/test3.objdump b/tools/asm-processor/tests/test3.objdump new file mode 100644 index 00000000..bfa7f6e3 --- /dev/null +++ b/tools/asm-processor/tests/test3.objdump @@ -0,0 +1,64 @@ + +tests/test3.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 000000d0 .text +00000000 l d .rodata 00000040 .rodata +00000000 l d .data 00000010 .data +00000000 l d .bss 00000010 .bss +00000000 g O .bss 00000004 globalBuf +00000004 g O .bss 00000004 constBuf +00000000 g O .data 00000004 globalBufInit +00000004 g O .rodata 00000004 constBufInit +00000008 g O .rodata 00000001 constBufInit2 +0000000c g O .rodata 00000001 constBufInit3 +0000003c g F .text 00000054 f +00000000 g F .text 00000004 test +00000090 g F .text 00000004 g +00000000 *UND* 00000000 D_410100 +00000000 *UND* 00000000 func_004000B0 + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +00000044 R_MIPS_HI16 .rodata +00000048 R_MIPS_LO16 .rodata +00000050 R_MIPS_HI16 .rodata +00000054 R_MIPS_LO16 .rodata +0000005c R_MIPS_HI16 .rodata +00000060 R_MIPS_LO16 .rodata +00000068 R_MIPS_26 g +0000009c R_MIPS_HI16 D_410100 +000000a0 R_MIPS_LO16 D_410100 +000000a4 R_MIPS_26 func_004000B0 + + +Contents of section .text: + 0000 27bdffe8 18a00009 afa00004 8fae0004 '............... + 0010 008e7821 a1e00000 8fb80004 27190001 ..x!........'... + 0020 0325082a 1420fff9 afb90004 10000001 .%.*. .......... + 0030 00000000 03e00008 27bd0018 27bdffd8 ........'...'... + 0040 afbf0014 3c010000 d4240028 f7a40020 ....<....$.(... + 0050 3c010000 c4260030 e7a6001c 3c010000 <....&.0....<... + 0060 c4280034 e7a80018 0c000000 00000000 .(.4............ + 0070 10000003 00000000 10000001 00000000 ................ + 0080 8fbf0014 27bd0028 03e00008 00000000 ....'..(........ + 0090 27bdffe8 afbf0014 240e0004 3c010000 '.......$...<... + 00a0 ac2e0000 0c000000 00000000 10000001 ................ + 00b0 00000000 8fbf0014 27bd0018 03e00008 ........'....... + 00c0 00000000 00000000 00000000 00000000 ................ +Contents of section .rodata: + 0000 0004e729 01000000 02000000 03000000 ...)............ + 0010 48656c6c 6f202000 576f726c 64000000 Hello .World... + 0020 0001e0f3 00000000 40146666 66666666 ........@.ffffff + 0030 40a66666 40a9999a 00000000 00000000 @.ff@........... +Contents of section .data: + 0000 01000000 00000000 00000000 00000000 ................ +Contents of section .options: + 0000 01200000 00000000 a0000002 00000000 . .............. + 0010 00000170 00000000 00000000 00007ff0 ...p............ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 a300c032 00000000 00000170 00000000 ...2.......p.... + 0010 00000000 00007ff0 ........ diff --git a/tools/asm_processor/build.py b/tools/asm_processor/build.py deleted file mode 100644 index 228dcb03..00000000 --- a/tools/asm_processor/build.py +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env python3 -import sys -import os -import shlex -import subprocess -import tempfile - -dir_path = os.path.dirname(os.path.realpath(__file__)) -asm_processor = ['python3', os.path.join(dir_path, "asm-processor.py")] -prelude = os.path.join(dir_path, "prelude.inc") - -all_args = sys.argv[1:] -sep1 = all_args.index('--') -sep2 = all_args.index('--', sep1+1) - -compiler = all_args[:sep1] - -assembler = all_args[sep1+1:sep2] -assembler_sh = ' '.join(shlex.quote(x) for x in assembler) - -compile_args = all_args[sep2+1:] -in_file = compile_args[-1] -out_ind = compile_args.index('-o') -out_file = compile_args[out_ind + 1] -del compile_args[-1] -del compile_args[out_ind + 1] -del compile_args[out_ind] - -in_dir = os.path.split(os.path.realpath(in_file))[0] -opt_flags = [x for x in compile_args if x in ['-g', '-O2', '-O1', '-framepointer']] - -preprocessed_file = tempfile.NamedTemporaryFile(prefix='preprocessed', suffix='.c') - -subprocess.check_call(asm_processor + opt_flags + [in_file], stdout=preprocessed_file) -subprocess.check_call(compiler + compile_args + ['-I', in_dir, '-o', out_file, preprocessed_file.name]) -subprocess.check_call(asm_processor + opt_flags + [in_file, '--post-process', out_file, '--assembler', assembler_sh, '--asm-prelude', prelude]) diff --git a/tools/asm_processor/prelude.inc b/tools/asm_processor/prelude.inc deleted file mode 100644 index 0c111a2a..00000000 --- a/tools/asm_processor/prelude.inc +++ /dev/null @@ -1,5 +0,0 @@ -.set noat -.set noreorder -.set gp=64 -.include "macros.inc" - diff --git a/tools/assemble_sound.py b/tools/assemble_sound.py index f4a81d26..46406b16 100755 --- a/tools/assemble_sound.py +++ b/tools/assemble_sound.py @@ -944,7 +944,7 @@ def main(): args.append(a) defines_set = {d.split("=")[0] for d in defines} - is_shindou = "VERSION_SH" in defines_set + is_shindou = ("VERSION_SH" in defines_set or "VERSION_CN" in defines_set) if sequences_out_file is not None and not need_help: write_sequences( diff --git a/tools/create_patch.sh b/tools/create_patch.sh index ea75d9cc..689f11dd 100755 --- a/tools/create_patch.sh +++ b/tools/create_patch.sh @@ -21,5 +21,5 @@ fi git add . # Generate the patch. git diff -p --staged > "$1" -# Undo the 'git add'. +# Undo the 'git add'. git reset diff --git a/tools/gen_asset_list.cpp b/tools/gen_asset_list.cpp index 050bd118..d0d1b5de 100644 --- a/tools/gen_asset_list.cpp +++ b/tools/gen_asset_list.cpp @@ -23,7 +23,7 @@ using namespace std; const char* OUTPUT_FILE = "assets.json"; const size_t CHUNK_SIZE = 16; -const vector LANGS = {"jp", "us", "eu", "sh"}; +const vector LANGS = {"jp", "us", "eu", "sh", "cn"}; typedef uint8_t u8; typedef uint64_t u64; diff --git a/tools/ido-static-recomp/.clang-format b/tools/ido-static-recomp/.clang-format new file mode 100644 index 00000000..c7b900f0 --- /dev/null +++ b/tools/ido-static-recomp/.clang-format @@ -0,0 +1,23 @@ +IndentWidth: 4 +Language: Cpp +UseTab: Never +ColumnLimit: 120 +PointerAlignment: Left +BreakBeforeBraces: Attach +SpaceAfterCStyleCast: false +Cpp11BracedListStyle: false +IndentCaseLabels: true +BinPackArguments: true +BinPackParameters: true +AlignAfterOpenBracket: Align +AlignOperands: true +BreakBeforeTernaryOperators: true +BreakBeforeBinaryOperators: None +AllowShortBlocksOnASingleLine: true +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: false +AlignEscapedNewlines: Left +AlignTrailingComments: true +SortIncludes: false diff --git a/tools/ido-static-recomp/.gitignore b/tools/ido-static-recomp/.gitignore new file mode 100644 index 00000000..e36efc8d --- /dev/null +++ b/tools/ido-static-recomp/.gitignore @@ -0,0 +1,10 @@ +.idea/ +build/ +.vscode/ + +qemu-irix + +ctx.c.m2c +*.s + +.DS_Store diff --git a/tools/ido-static-recomp/DOCS.md b/tools/ido-static-recomp/DOCS.md new file mode 100644 index 00000000..1953751c --- /dev/null +++ b/tools/ido-static-recomp/DOCS.md @@ -0,0 +1,19 @@ +# Custom Functionality + +## Redirection +IDO recomp currently has two forms of path redirection, both involving the `/usr` folder. + +### `/usr/lib` +In order for users to not having to worry about installing the binaries in particular locations in `/usr/lib`, recomp automatically redirects `/usr/lib/` paths. This is done by determining the location of `cc` and redirecting to the same directory. This does mean all the binaries and `err.english.cc` are expected to be a part of a single flattened directory. + +It is also possible to override the auto redirect by using the environment variable `USR_LIB` with the desired redirection path. This can be used if the binaries are not in a flattened directory with `cc` or if on Linux and are unable to read `/proc/self/exe`. + +Wrapper functions implementing this redirection: +* `init_file` +* `wrapper_execvp` + +### /usr/include +The other form of redirection is completely optional and is done by setting the environment variable `USR_INCLUDE` to the desired redirection path. This will than redirect all opened files files there. This is done so that the `mdebug` section file paths will still use `/usr/include` path, but the files themselves can be located elsewhere for greater flexibility. + +Wrapper functions implementing this redirection: +* `wrapper_open` diff --git a/tools/ido-static-recomp/Makefile b/tools/ido-static-recomp/Makefile new file mode 100644 index 00000000..69a50d16 --- /dev/null +++ b/tools/ido-static-recomp/Makefile @@ -0,0 +1,231 @@ +# Build options can be changed by modifying the makefile or by building with 'make SETTING=value'. +# It is also possible to override the settings in Defaults in a file called .make_options as 'SETTING=value'. + +-include .make_options + +#### Defaults #### + +# if WERROR is 1, pass -Werror to CC, so warnings would be treated as errors +WERROR ?= 0 +# if RELEASE is 1 strip binaries as well as enable optimizations +RELEASE ?= 1 +# On Mac, set this to `universal` to build universal (x86+ARM) binaries +TARGET ?= native +# Set to 1 to build with sanitization enabled +# N.B. cannot be used for `make setup` at the moment due to recomp.cpp not respecting it +ASAN ?= 0 + +# IDO 5.3 only for Super Mario 64 +IDO_VERSION := IDO53 +IDO_TC := cc acpp as0 as1 cfe copt ugen ujoin uld umerge uopt usplit + + +# -- determine the host environment and target +# | Host | Targets | +# |-------|-------------------| +# | macOS | native, universal | +# | linux | native | +# | win | native | + +UNAME_S := $(shell uname -s) +UNAME_P := $(shell uname -p) + +MAKE := make +ifeq ($(OS),Windows_NT) + DETECTED_OS := windows +else ifeq ($(UNAME_S),Linux) + DETECTED_OS := linux +else ifeq ($(UNAME_S),Darwin) + DETECTED_OS := macos + MAKE := gmake + CPPFLAGS += -xc++ +else + $(error Unsupported host OS for Makefile) +endif + +RABBITIZER := tools/rabbitizer +RABBITIZER_LIB := $(RABBITIZER)/build/librabbitizerpp.a + +CC := gcc +CXX := g++ +STRIP := strip + +CSTD ?= -std=c11 +CFLAGS ?= -MMD -fno-strict-aliasing -I. +CXXSTD ?= -std=c++17 +CXXFLAGS ?= -MMD +WARNINGS ?= -Wall -Wextra +LDFLAGS ?= -lm +RECOMP_FLAGS ?= + +ifneq ($(WERROR),0) + WARNINGS += -Werror +endif + +ifeq ($(RELEASE),1) + OPTFLAGS ?= -Os +else + OPTFLAGS ?= -Og -g3 + STRIP := @: +endif + +ifneq ($(ASAN),0) + CFLAGS += -fsanitize=address -fsanitize=pointer-compare -fsanitize=pointer-subtract -fsanitize=undefined -fno-sanitize-recover=all + CXXFLAGS += -fsanitize=address -fsanitize=pointer-compare -fsanitize=pointer-subtract -fsanitize=undefined -fno-sanitize-recover=all +endif + + +ifeq ($(DETECTED_OS),windows) + CXXFLAGS += -static +endif + +# -- Build Directories +# designed to work with Make 3.81 (macOS/last GPL-2 version) +# https://ismail.badawi.io/blog/automatic-directory-creation-in-make/ +BUILD_BASE ?= build +BUILD_DIR := $(BUILD_BASE) +BUILT_BIN := $(BUILD_DIR)/out + + +# -- Location of original IDO binaries in SM64 repo +IRIX_USR_DIR ?= ../ido5.3_compiler/usr + +# -- Location of the irix tool chain error messages +ERR_STRS := $(BUILT_BIN)/err.english.cc + +RECOMP_ELF := $(BUILD_BASE)/recomp.elf +LIBC_IMPL_O := libc_impl.o + +TARGET_BINARIES := $(foreach binary,$(IDO_TC),$(BUILT_BIN)/$(binary)) +O_FILES := $(foreach binary,$(IDO_TC),$(BUILD_DIR)/$(binary).o) +C_FILES := $(O_FILES:.o=.c) + +# Automatic dependency files +DEP_FILES := $(O_FILES:.o=.d) + +# create build directories +$(shell mkdir -p $(BUILT_BIN)) + +# per-file flags +# 5.3 ugen relies on UB stack reads +# to emulate, pass the conservative flag to `recomp` +$(BUILD_BASE)/ugen.c: RECOMP_FLAGS := --conservative + +$(RECOMP_ELF): CXXFLAGS += -I$(RABBITIZER)/include -I$(RABBITIZER)/cplusplus/include +$(RECOMP_ELF): LDFLAGS += -L$(RABBITIZER)/build -lrabbitizerpp + +ifneq ($(DETECTED_OS),windows) +# For traceback +$(RECOMP_ELF): LDFLAGS += -ldl +endif +ifeq ($(DETECTED_OS),linux) +# For traceback +$(RECOMP_ELF): LDFLAGS += -Wl,-export-dynamic +endif + +# Too many warnings, disable everything for now... +$(RECOMP_ELF): WARNINGS += -Wpedantic -Wno-shadow -Wno-unused-variable -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-implicit-fallthrough +%/$(LIBC_IMPL_O): CFLAGS += -D$(IDO_VERSION) +# TODO: fix warnings +%/$(LIBC_IMPL_O): WARNINGS += -Wno-unused-parameter -Wno-unused-variable -Wno-unused-but-set-variable -Wno-sign-compare -Wno-deprecated-declarations + +#### Main Targets ### + +all: $(TARGET_BINARIES) $(ERR_STRS) + +setup: + $(MAKE) -C $(RABBITIZER) static CC=$(CC) CXX=$(CXX) DEBUG=$(DEBUG) + $(MAKE) $(RECOMP_ELF) + +clean: + $(RM) -r $(BUILD_DIR) + +distclean: + $(RM) -r $(BUILD_BASE) + $(MAKE) -C $(RABBITIZER) distclean + +c_files: $(C_FILES) + + +.PHONY: all clean distclean setup +.DEFAULT_GOAL := all +# Prevent removing intermediate files +.SECONDARY: + + +#### Various Recipes #### + +$(BUILD_BASE)/%.elf: %.cpp + $(CXX) $(CXXSTD) $(OPTFLAGS) $(CXXFLAGS) $(WARNINGS) -o $@ $^ $(LDFLAGS) + + +$(BUILD_DIR)/%.c: $(IRIX_USR_DIR)/lib/% + $(RECOMP_ELF) $(RECOMP_FLAGS) $< > $@ || ($(RM) -f $@ && false) + +# cc and strip are special and are stored in the `bin` folder instead of the `lib` one +$(BUILD_DIR)/%.c: $(IRIX_USR_DIR)/bin/% + $(RECOMP_ELF) $(RECOMP_FLAGS) $< > $@ || ($(RM) -f $@ && false) + + +$(BUILT_BIN)/%.cc: $(IRIX_USR_DIR)/lib/%.cc + cp $^ $@ + + +ifeq ($(TARGET),universal) +MACOS_FAT_TARGETS ?= arm64-apple-macos11 x86_64-apple-macos10.14 + +FAT_FOLDERS := $(foreach target,$(MACOS_FAT_TARGETS),$(BUILD_DIR)/$(target)) + +# create build directories +$(shell mkdir -p $(FAT_FOLDERS)) + +# TODO: simplify +FAT_BINARIES := $(foreach binary,$(IDO_TC),$(BUILT_BIN)/arm64-apple-macos11/$(binary)) \ + $(foreach binary,$(IDO_TC),$(BUILT_BIN)/x86_64-apple-macos10.14/$(binary)) + +$(BUILT_BIN)/%: $(BUILD_DIR)/arm64-apple-macos11/% $(BUILD_DIR)/x86_64-apple-macos10.14/% | $(ERR_STRS) + lipo -create -output $@ $^ + + +$(BUILD_DIR)/arm64-apple-macos11/%: $(BUILD_DIR)/arm64-apple-macos11/%.o $(BUILD_DIR)/arm64-apple-macos11/$(LIBC_IMPL_O) | $(ERR_STRS) + $(CC) $(CSTD) $(OPTFLAGS) $(CFLAGS) -target arm64-apple-macos11 -o $@ $^ $(LDFLAGS) + $(STRIP) $@ + +$(BUILD_DIR)/x86_64-apple-macos10.14/%: $(BUILD_DIR)/x86_64-apple-macos10.14/%.o $(BUILD_DIR)/x86_64-apple-macos10.14/$(LIBC_IMPL_O) | $(ERR_STRS) + $(CC) $(CSTD) $(OPTFLAGS) $(CFLAGS) -target x86_64-apple-macos10.14 -o $@ $^ $(LDFLAGS) + $(STRIP) $@ + +$(BUILD_DIR)/arm64-apple-macos11/%.o: $(BUILD_DIR)/%.c + $(CC) -c $(CSTD) $(OPTFLAGS) $(CFLAGS) -target arm64-apple-macos11 -o $@ $< + +$(BUILD_DIR)/x86_64-apple-macos10.14/%.o: $(BUILD_DIR)/%.c + $(CC) -c $(CSTD) $(OPTFLAGS) $(CFLAGS) -target x86_64-apple-macos10.14 -o $@ $< + + +$(BUILD_DIR)/arm64-apple-macos11/$(LIBC_IMPL_O): libc_impl.c + $(CC) -c $(CSTD) $(OPTFLAGS) $(CFLAGS) $(WARNINGS) -target arm64-apple-macos11 -o $@ $< + +$(BUILD_DIR)/x86_64-apple-macos10.14/$(LIBC_IMPL_O): libc_impl.c + $(CC) -c $(CSTD) $(OPTFLAGS) $(CFLAGS) $(WARNINGS) -target x86_64-apple-macos10.14 -o $@ $< + +else +$(BUILT_BIN)/%: $(BUILD_DIR)/%.o $(BUILD_DIR)/$(LIBC_IMPL_O) | $(ERR_STRS) + $(CC) $(CSTD) $(OPTFLAGS) $(CFLAGS) -o $@ $^ $(LDFLAGS) + $(STRIP) $@ + +$(BUILD_DIR)/%.o: $(BUILD_DIR)/%.c + $(CC) -c $(CSTD) $(OPTFLAGS) $(CFLAGS) -o $@ $< + + +$(BUILD_DIR)/$(LIBC_IMPL_O): libc_impl.c + $(CC) -c $(CSTD) $(OPTFLAGS) $(CFLAGS) $(WARNINGS) -o $@ $< +endif + +# Remove built-in rules, to improve performance +MAKEFLAGS += --no-builtin-rules + +-include $(DEP_FILES) + +# --- Debugging +# run `make print-VARIABLE` to debug that variable +print-% : ; $(info $* is a $(flavor $*) variable set to [$($*)]) @true diff --git a/tools/ido-static-recomp/README.md b/tools/ido-static-recomp/README.md new file mode 100644 index 00000000..83ae760f --- /dev/null +++ b/tools/ido-static-recomp/README.md @@ -0,0 +1,66 @@ +# Static Recompilation of IRIX Programs + +Convert selected IRIX C toolchain programs into modern Linux or macOS programs + +## Supported Programs + +* IDO 5.3 + * cc, acpp, as0, as1, cfe, copt, ugen, ujoin, uld, umerge, uopt, usplit, ld, strip, upas +* IDO 7.1 + * cc, acpp, as0, as1, cfe, ugen, ujoin, uld, umerge, uopt, usplit, upas + +## Dependencies + +### Linux (Debian / Ubuntu) + +```bash +sudo apt-get install build-essential +``` + +### macOS + +[Install homebrew](https://brew.sh/) and then: + +```bash +brew install make +``` + +## Building + +First build the recomp binary itself + +```bash +make setup +``` + +```bash +make VERSION=5.3 +make VERSION=7.1 +``` + +The build artifacts are located in `build/{7.1|5.3}/out`. Add `-j{thread num}` for multithreaded building. + +By default, debug builds are created with less optimizations, debug flags, and unstripped binaries. +Add `RELEASE=1` to build release builds with optimizations and stripped binaries. + +### Creating Universal ARM/x86_64 macOS Builds + +By default, make build script create native binaries on macOS. This was done to minimize the time to build the recompiled suite. +In order to create "fat," universal ARM and x86_64, pass `TARGET=universal` to `gmake`. + +### Manual Building + +Example for compiling `as1` in a Linux environment: + +```bash +make -C tools/rabbitizer +g++ -Itools/rabbitizer/include -Itools/rabbitizer/cplusplus/include recomp.cpp -o recomp.elf -g -Ltools/rabbitizer/build -lrabbitizerpp +./recomp.elf ido/7.1/usr/lib/as1 > as1_c.c +gcc libc_impl.c as1_c.c -o as1 -g -fno-strict-aliasing -lm -DIDO71 +``` + +Use the same approach for `cc`, `cfe`, `uopt`, `ugen`, `as1` (and `copt` if you need that). + +Use `-DIDO53` instead of `-DIDO71` if the program you are trying to recompile was compiled with IDO 5.3 rather than IDO 7.1. + +To compile `ugen` for IDO 5.3, add `--conservative` when invoking `./recomp.elf`. This mimics UB present in `ugen53`. That program reads uninitialized stack memory and its result depends on that stack memory. diff --git a/tools/ido5.3_recomp/elf.h b/tools/ido-static-recomp/elf.h similarity index 100% rename from tools/ido5.3_recomp/elf.h rename to tools/ido-static-recomp/elf.h diff --git a/tools/ido5.3_recomp/header.h b/tools/ido-static-recomp/header.h similarity index 91% rename from tools/ido5.3_recomp/header.h rename to tools/ido-static-recomp/header.h index b4cd0d31..0a72f1ab 100644 --- a/tools/ido5.3_recomp/header.h +++ b/tools/ido-static-recomp/header.h @@ -13,12 +13,6 @@ #define RM_RP 2 #define RM_RM 3 -union FloatReg { - float f[2]; - uint32_t w[2]; - double d; -}; - #define cvt_w_d(f) \ ((fcsr & RM_RZ) ? ((isnan(f) || f <= -2147483649.0 || f >= 2147483648.0) ? (fcsr |= 0x40, 2147483647) : (int)f) : (assert(0), 0)) diff --git a/tools/ido5.3_recomp/helpers.h b/tools/ido-static-recomp/helpers.h similarity index 79% rename from tools/ido5.3_recomp/helpers.h rename to tools/ido-static-recomp/helpers.h index b2bd2351..9e031e0f 100644 --- a/tools/ido5.3_recomp/helpers.h +++ b/tools/ido-static-recomp/helpers.h @@ -3,6 +3,8 @@ #include +#define MEM_F64(a) (double_from_memory(mem, a)) +#define MEM_F32(a) (*(float *)(mem + a)) #define MEM_U32(a) (*(uint32_t *)(mem + a)) #define MEM_S32(a) (*(int32_t *)(mem + a)) #define MEM_U16(a) (*(uint16_t *)(mem + ((a) ^ 2))) diff --git a/tools/ido5.3_recomp/libc_impl.c b/tools/ido-static-recomp/libc_impl.c similarity index 60% rename from tools/ido5.3_recomp/libc_impl.c rename to tools/ido-static-recomp/libc_impl.c index af4ca713..a6a11b96 100644 --- a/tools/ido5.3_recomp/libc_impl.c +++ b/tools/ido-static-recomp/libc_impl.c @@ -16,8 +16,10 @@ #ifdef __CYGWIN__ #include #endif + #ifdef __APPLE__ - #include +#include +#include #endif #include @@ -33,17 +35,19 @@ #include "libc_impl.h" #include "helpers.h" +#include "header.h" #define MIN(a, b) ((a) < (b) ? (a) : (b)) #define MAX(a, b) ((a) > (b) ? (a) : (b)) -#define STRING(param) size_t param##_len = wrapper_strlen(mem, param##_addr); \ - char param[param##_len + 1]; \ - for (size_t i = 0; i <= param##_len; i++) { \ - param[i] = MEM_S8(param##_addr + i); \ +#define STRING(param) \ + size_t param##_len = wrapper_strlen(mem, param##_addr); \ + char param[param##_len + 1]; \ + for (size_t i = 0; i <= param##_len; i++) { \ + param[i] = MEM_S8(param##_addr + i); \ } -#if !defined(IDO53) && !defined(IDO71) +#if !defined(IDO53) && !defined(IDO71) && !defined(IDO72) #define IDO71 #endif @@ -68,12 +72,21 @@ #define LIBC_SIZE 0x3000 #endif +#ifdef IDO72 +// IDO 7.2 +#define IOB_ADDR 0x0fb49454 +#define ERRNO_ADDR 0x0fb49290 +#define CTYPE_ADDR 0x0fb46db0 +#define LIBC_ADDR 0x0fb46000 +#define LIBC_SIZE 0x4000 +#endif + #define STDIN_ADDR IOB_ADDR #define STDOUT_ADDR (IOB_ADDR + 0x10) #define STDERR_ADDR (IOB_ADDR + 0x20) -#define STDIN ((struct FILE_irix *)&MEM_U32(STDIN_ADDR)) -#define STDOUT ((struct FILE_irix *)&MEM_U32(STDOUT_ADDR)) -#define STDERR ((struct FILE_irix *)&MEM_U32(STDERR_ADDR)) +#define STDIN ((struct FILE_irix*)&MEM_U32(STDIN_ADDR)) +#define STDOUT ((struct FILE_irix*)&MEM_U32(STDOUT_ADDR)) +#define STDERR ((struct FILE_irix*)&MEM_U32(STDERR_ADDR)) #define MALLOC_BINS_ADDR custom_libc_data_addr #define STRTOK_DATA_ADDR (MALLOC_BINS_ADDR + (30 - 3) * 4) @@ -89,9 +102,9 @@ #define IOEOF 0020 /* EOF reached on read */ #define IOERR 0040 /* I/O error from system */ -#define IOREAD 0001 /* currently reading */ -#define IOWRT 0002 /* currently writing */ -#define IORW 0200 /* opened for reading and writing */ +#define IOREAD 0001 /* currently reading */ +#define IOWRT 0002 /* currently writing */ +#define IORW 0200 /* opened for reading and writing */ #define IOMYBUF 0010 /* stdio malloc()'d buffer */ #define STDIO_BUFSIZE 16384 @@ -110,10 +123,13 @@ struct FILE_irix { uint8_t _flag; }; +typedef uint64_t (*fptr_trampoline)(uint8_t* mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, uint32_t a3, + uint32_t fp_dest); + static struct { struct { - uint64_t (*trampoline)(uint8_t *mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t fp_dest); - uint8_t *mem; + fptr_trampoline trampoline; + uint8_t* mem; uint32_t fp_dest; } handlers[65]; volatile uint32_t recursion_level; @@ -132,102 +148,123 @@ static uint32_t custom_libc_data_addr; #define _B 0100 /* Blank */ #define _X 0200 /* heXadecimal digit */ -static char ctype[] = { 0, - -/* 0 1 2 3 4 5 6 7 */ - -/* 0*/ _C, _C, _C, _C, _C, _C, _C, _C, -/* 10*/ _C, _S|_C, _S|_C, _S|_C, _S|_C, _S|_C, _C, _C, -/* 20*/ _C, _C, _C, _C, _C, _C, _C, _C, -/* 30*/ _C, _C, _C, _C, _C, _C, _C, _C, -/* 40*/ _S|_B, _P, _P, _P, _P, _P, _P, _P, -/* 50*/ _P, _P, _P, _P, _P, _P, _P, _P, -/* 60*/ _N|_X, _N|_X, _N|_X, _N|_X, _N|_X, _N|_X, _N|_X, _N|_X, -/* 70*/ _N|_X, _N|_X, _P, _P, _P, _P, _P, _P, -/*100*/ _P, _U|_X, _U|_X, _U|_X, _U|_X, _U|_X, _U|_X, _U, -/*110*/ _U, _U, _U, _U, _U, _U, _U, _U, -/*120*/ _U, _U, _U, _U, _U, _U, _U, _U, -/*130*/ _U, _U, _U, _P, _P, _P, _P, _P, -/*140*/ _P, _L|_X, _L|_X, _L|_X, _L|_X, _L|_X, _L|_X, _L, -/*150*/ _L, _L, _L, _L, _L, _L, _L, _L, -/*160*/ _L, _L, _L, _L, _L, _L, _L, _L, -/*170*/ _L, _L, _L, _P, _P, _P, _P, _C, -/*200*/ 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0 +static char ctype[] = { + 0, + // clang-format off +/* 00 01 02 03 04 05 06 07 */ +/* 0 */ _C, _C, _C, _C, _C, _C, _C, _C, +/* 010 */ _C, _S|_C, _S|_C, _S|_C, _S|_C, _S|_C, _C, _C, +/* 020 */ _C, _C, _C, _C, _C, _C, _C, _C, +/* 030 */ _C, _C, _C, _C, _C, _C, _C, _C, +/* 040 */ _S|_B, _P, _P, _P, _P, _P, _P, _P, +/* 050 */ _P, _P, _P, _P, _P, _P, _P, _P, +/* 060 */ _N|_X, _N|_X, _N|_X, _N|_X, _N|_X, _N|_X, _N|_X, _N|_X, +/* 070 */ _N|_X, _N|_X, _P, _P, _P, _P, _P, _P, +/* 0100 */ _P, _U|_X, _U|_X, _U|_X, _U|_X, _U|_X, _U|_X, _U, +/* 0110 */ _U, _U, _U, _U, _U, _U, _U, _U, +/* 0120 */ _U, _U, _U, _U, _U, _U, _U, _U, +/* 0130 */ _U, _U, _U, _P, _P, _P, _P, _P, +/* 0140 */ _P, _L|_X, _L|_X, _L|_X, _L|_X, _L|_X, _L|_X, _L, +/* 0150 */ _L, _L, _L, _L, _L, _L, _L, _L, +/* 0160 */ _L, _L, _L, _L, _L, _L, _L, _L, +/* 0170 */ _L, _L, _L, _P, _P, _P, _P, _C, +/* 0200 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0210 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0220 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0230 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0240 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0250 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0260 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0270 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0300 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0310 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0320 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0330 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0340 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0350 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0360 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0370 */ 0, 0, 0, 0, 0, 0, 0, 0, + // clang-format on }; -#define REDIRECT_USR_LIB -#ifdef REDIRECT_USR_LIB -static char bin_dir[PATH_MAX + 1]; -#endif +static char usr_lib_redirect[PATH_MAX + 1]; +static char usr_include_redirect[PATH_MAX + 1]; + static int g_file_max = 3; -#if defined(__CYGWIN__) || defined(__APPLE__) + +/* Compilation Target/Emulation Host Page Size Determination */ +#if defined(__CYGWIN__) || (defined(__linux__) && defined(__aarch64__)) +#define RUNTIME_PAGESIZE +/* ARM64 linux can have page sizes of 4kb, 16kb, or 64kb */ +/* Set in main before running the translated code */ static size_t g_Pagesize; + +#define TRUNC_PAGE(x) ((x) & ~(g_Pagesize - 1)) +#define ROUND_PAGE(x) (TRUNC_PAGE((x) + (g_Pagesize - 1))) + +#elif defined(__APPLE__) +/* https://developer.apple.com/documentation/apple-silicon/addressing-architectural-differences-in-your-macos-code */ +#define TRUNC_PAGE(x) (trunc_page((x))) +#define ROUND_PAGE(x) (round_page((x))) + +#else +/* A fixed 4KB page size for x64 linux (is there anything else?) */ +#define TRUNC_PAGE(x) ((x) & ~(0x1000 - 1)) +#define ROUND_PAGE(x) (TRUNC_PAGE((x) + (0x1000 - 1))) +#endif /* PageSize Macros */ + +static uint8_t* memory_map(size_t length) { +#ifdef __CYGWIN__ + uint8_t* mem = mmap(0, length, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0); +#else + uint8_t* mem = mmap(0, length, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); #endif -static uint8_t *memory_map(size_t length) -{ -#if defined(__CYGWIN__) || defined(__APPLE__) - uint8_t *mem = mmap(0, length, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0); - g_Pagesize = sysconf(_SC_PAGESIZE); - assert(((uintptr_t)mem & (g_Pagesize-1)) == 0); -#else - uint8_t *mem = mmap(0, length, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); -#endif + assert(TRUNC_PAGE((uintptr_t)mem) == (uintptr_t)mem && + "Page size too small, try increasing `page_size` in recomp.cpp"); if (mem == MAP_FAILED) { - perror("mmap"); + perror("mmap (memory_map)"); exit(1); } return mem; } -static void memory_allocate(uint8_t *mem, uint32_t start, uint32_t end) -{ +static void memory_allocate(uint8_t* mem, uint32_t start, uint32_t end) { assert(start >= MEM_REGION_START); assert(end <= MEM_REGION_START + MEM_REGION_SIZE); -#if defined(__CYGWIN__) || defined(__APPLE__) - uintptr_t _start = ((uintptr_t)mem + start) & ~(g_Pagesize-1); - uintptr_t _end = ((uintptr_t)mem + end + (g_Pagesize-1)) & ~(g_Pagesize-1); + // `start` will be passed to mmap, + // so it has to be host aligned in order to keep the guest's pages valid + assert(start == TRUNC_PAGE(start) && "Page size too small, try increasing `page_size` in recomp.cpp"); +#ifdef __CYGWIN__ + uintptr_t _start = TRUNC_PAGE((uintptr_t)mem + start); + uintptr_t _end = ROUND_PAGE((uintptr_t)mem + end); - if(mprotect((void*)_start, _end - _start, PROT_READ | PROT_WRITE) < 0) { - perror("mprotect"); + if (mprotect((void*)_start, _end - _start, PROT_READ | PROT_WRITE) < 0) { + perror("mprotect (memory_allocate)"); exit(1); } #else - if (mmap(mem + start, end - start, PROT_READ | PROT_WRITE, MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) == MAP_FAILED) { - perror("mmap"); + void* addr = (void*)TRUNC_PAGE((uintptr_t)mem + start); + size_t len = end - start; + + if (mmap(addr, len, PROT_READ | PROT_WRITE, MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) == MAP_FAILED) { + perror("mmap (memory_allocate)"); exit(1); } -#endif +#endif /* __CYGWIN__ */ } -static void memory_unmap(uint8_t *mem, size_t length) -{ +static void memory_unmap(uint8_t* mem, size_t length) { if (munmap(mem, length)) { perror("munmap"); exit(1); } } - -static void free_all_file_bufs(uint8_t *mem) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(IOB_ADDR); +static void free_all_file_bufs(uint8_t* mem) { + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(IOB_ADDR); for (int i = 0; i < g_file_max; i++) { if (f[i]._flag & IOMYBUF) { wrapper_free(mem, f[i]._base_addr); @@ -235,10 +272,32 @@ static void free_all_file_bufs(uint8_t *mem) { } } -static void find_bin_dir(void) { -#ifdef REDIRECT_USR_LIB +void get_env_var(char* out, char* name) { + char* env = getenv(name); + + if (env == NULL) { // No environment variable found, so just return empty string + out[0] = '\0'; + return; + } + + if (snprintf(out, PATH_MAX, "%s", env) >= PATH_MAX) { + fprintf(stderr, "Error: Environment variable %s is too large\n", name); + exit(1); + } + +} + +static void init_usr_lib_redirect(void) { + char path[PATH_MAX + 1] = { 0 }; + + get_env_var(path, "USR_LIB"); + + if (path[0] != '\0') { + strcpy(usr_lib_redirect, path); + return; + } + // gets the current executable's path - char path[PATH_MAX + 1] = {0}; #ifdef __CYGWIN__ uint32_t size = GetModuleFileName(NULL, path, PATH_MAX); if (size == 0 || size == PATH_MAX) { @@ -256,34 +315,82 @@ static void find_bin_dir(void) { } #endif - strcpy(bin_dir, dirname(path)); -#endif + strcpy(usr_lib_redirect, dirname(path)); } -int main(int argc, char *argv[]) { - int ret; +static void init_usr_include_redirect(void) { + char path[PATH_MAX + 1] = {0}; - find_bin_dir(); + get_env_var(path, "USR_INCLUDE"); - uint8_t *mem = memory_map(MEM_REGION_SIZE); - mem -= MEM_REGION_START; - int run(uint8_t *mem, int argc, char *argv[]); - ret = run(mem, argc, argv); + strcpy(usr_include_redirect, path); +} + +static void init_redirect_paths(void) { + init_usr_lib_redirect(); + init_usr_include_redirect(); +} + +/** + * Redirects `path` by replacing the initial segment `from` by `to`. The result is placed in `out`. + * If `path` does not have `from` as its initial segment, or there is no `to`, the original path is used. + * If an error occurs, an error message will be printed, and the program exited. +*/ +void redirect_path(char* out, const char* path, const char* from, const char* to) { + int from_len = strlen(from); + + if(!strncmp(path, from, from_len) && (to[0] != '\0')) { + char redirected_path[PATH_MAX + 1] = {0}; + int n; + + n = snprintf(redirected_path, sizeof(redirected_path), "%s%s", to, path + from_len); + + if (n >= 0 && n < sizeof(redirected_path)) { + strcpy(out, redirected_path); + } else { + fprintf(stderr, "Error: Unable to redirect %s->%s for %s\n", from, to, path); + exit(1); + } + } else { + strcpy(out, path); + } +} + +void final_cleanup(uint8_t* mem) { wrapper_fflush(mem, 0); free_all_file_bufs(mem); mem += MEM_REGION_START; memory_unmap(mem, MEM_REGION_SIZE); +} + +int main(int argc, char* argv[]) { + int ret; + + init_redirect_paths(); +#ifdef RUNTIME_PAGESIZE + g_Pagesize = sysconf(_SC_PAGESIZE); +#endif /* RUNTIME_PAGESIZE */ + + uint8_t* mem = memory_map(MEM_REGION_SIZE); + mem -= MEM_REGION_START; + int run(uint8_t * mem, int argc, char* argv[]); + ret = run(mem, argc, argv); + final_cleanup(mem); return ret; } -void mmap_initial_data_range(uint8_t *mem, uint32_t start, uint32_t end) { +void mmap_initial_data_range(uint8_t* mem, uint32_t start, uint32_t end) { custom_libc_data_addr = end; +#ifdef __APPLE__ + end += vm_page_size; +#else end += 4096; +#endif /* __APPLE__ */ memory_allocate(mem, start, end); cur_sbrk = end; } -void setup_libc_data(uint8_t *mem) { +void setup_libc_data(uint8_t* mem) { memory_allocate(mem, LIBC_ADDR, (LIBC_ADDR + LIBC_SIZE)); for (size_t i = 0; i < sizeof(ctype); i++) { MEM_S8(CTYPE_ADDR + i) = ctype[i]; @@ -296,7 +403,7 @@ void setup_libc_data(uint8_t *mem) { STDERR->_file = 2; } -static uint32_t strcpy1(uint8_t *mem, uint32_t dest_addr, const char *str) { +static uint32_t strcpy1(uint8_t* mem, uint32_t dest_addr, const char* str) { for (;;) { char c = *str; ++str; @@ -308,7 +415,7 @@ static uint32_t strcpy1(uint8_t *mem, uint32_t dest_addr, const char *str) { } } -static uint32_t strcpy2(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr) { +static uint32_t strcpy2(uint8_t* mem, uint32_t dest_addr, uint32_t src_addr) { for (;;) { char c = MEM_S8(src_addr); ++src_addr; @@ -320,48 +427,14 @@ static uint32_t strcpy2(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr) { } } -uint32_t wrapper_sbrk(uint8_t *mem, int increment) { +uint32_t wrapper_sbrk(uint8_t* mem, int increment) { uint32_t old = cur_sbrk; - memory_allocate(mem, old, (old + increment)); - cur_sbrk += increment; + size_t alignedInc = ROUND_PAGE(old + increment) - old; + memory_allocate(mem, old, old + alignedInc); + cur_sbrk += alignedInc; return old; } -#if 0 -uint32_t wrapper_malloc(uint8_t *mem, uint32_t size) { - uint32_t orig_size = size; - size += 8; - size = (size + 0xfff) & ~0xfff; - uint32_t ret = wrapper_sbrk(mem, size); - MEM_U32(ret) = orig_size; - return ret + 8; -} - -uint32_t wrapper_calloc(uint8_t *mem, uint32_t num, uint32_t size) { - uint64_t new_size = (uint64_t)num * size; - assert(new_size == (uint32_t)new_size); - uint32_t ret = wrapper_malloc(mem, new_size); - return wrapper_memset(mem, ret, 0, new_size); -} - -uint32_t wrapper_realloc(uint8_t *mem, uint32_t data_addr, uint32_t size) { - if (data_addr == 0) { - return wrapper_malloc(mem, size); - } - uint32_t orig_size = MEM_U32(data_addr - 8); - if (size < orig_size || orig_size < 4088 && size < 4088) { - MEM_U32(data_addr - 8) = size; - return data_addr; - } - uint32_t new_addr = wrapper_malloc(mem, size); - return wrapper_memcpy(mem, new_addr, data_addr, MIN(size, orig_size)); -} - -void wrapper_free(uint8_t *mem, uint32_t data_addr) { - // NOP -} -#else - /* Simple bin-based malloc algorithm @@ -404,7 +477,7 @@ size_t mem_allocated; size_t max_mem_used; size_t num_sbrks; size_t num_allocs; -uint32_t wrapper_malloc(uint8_t *mem, uint32_t size) { +uint32_t wrapper_malloc(uint8_t* mem, uint32_t size) { int bin = -1; for (int i = 3; i < 30; i++) { if (size <= (1 << i)) { @@ -425,10 +498,10 @@ uint32_t wrapper_malloc(uint8_t *mem, uint32_t size) { uint32_t sbrk_request = 0x10000; if (8 + item_size > sbrk_request) { sbrk_request = 8 + item_size; - sbrk_request = (sbrk_request + 0xfff) & ~0xfff; + sbrk_request = ROUND_PAGE(sbrk_request); } uint32_t left_over = sbrk_request % (8 + item_size); - sbrk_request -= left_over & ~0xfff; + sbrk_request -= left_over & ~(4096 - 1); mem_allocated += sbrk_request; ++num_sbrks; node_ptr = wrapper_sbrk(mem, sbrk_request); @@ -450,14 +523,14 @@ uint32_t wrapper_malloc(uint8_t *mem, uint32_t size) { return node_ptr + 8; } -uint32_t wrapper_calloc(uint8_t *mem, uint32_t num, uint32_t size) { +uint32_t wrapper_calloc(uint8_t* mem, uint32_t num, uint32_t size) { uint64_t new_size = (uint64_t)num * size; assert(new_size == (uint32_t)new_size); uint32_t ret = wrapper_malloc(mem, new_size); return wrapper_memset(mem, ret, 0, new_size); } -uint32_t wrapper_realloc(uint8_t *mem, uint32_t data_addr, uint32_t size) { +uint32_t wrapper_realloc(uint8_t* mem, uint32_t data_addr, uint32_t size) { if (data_addr == 0) { return wrapper_malloc(mem, size); } else { @@ -480,10 +553,18 @@ uint32_t wrapper_realloc(uint8_t *mem, uint32_t data_addr, uint32_t size) { } } -void wrapper_free(uint8_t *mem, uint32_t data_addr) { +void wrapper_free(uint8_t* mem, uint32_t data_addr) { + if (data_addr == 0) { + return; + } uint32_t node_ptr = data_addr - 8; int bin = MEM_U32(node_ptr); uint32_t size = MEM_U32(node_ptr + 4); + if (size == 0) { + // Double free. IDO 5.3 strip relies on this. + fprintf(stderr, "warning: double free: 0x%x\n", data_addr); + return; + } uint32_t list_ptr = MALLOC_BINS_ADDR + (bin - 3) * 4; assert(bin >= 3 && bin < 30); assert(size <= (1 << bin)); @@ -492,10 +573,9 @@ void wrapper_free(uint8_t *mem, uint32_t data_addr) { MEM_U32(list_ptr) = node_ptr; mem_used -= size; } -#endif -int wrapper_fscanf(uint8_t *mem, uint32_t fp_addr, uint32_t format_addr, uint32_t sp) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); +int wrapper_fscanf(uint8_t* mem, uint32_t fp_addr, uint32_t format_addr, uint32_t sp) { + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); STRING(format) // for debug int ret = 0; @@ -517,12 +597,11 @@ int wrapper_fscanf(uint8_t *mem, uint32_t fp_addr, uint32_t format_addr, uint32_ return ret; } if (!isspace(ch)) { - //wrapper_ungetc(mem, ch, fp_addr); break; } } bool l = false; - continue_format: + continue_format: switch (c) { case 'l': assert(!l && "ll not implemented in fscanf"); @@ -530,8 +609,7 @@ int wrapper_fscanf(uint8_t *mem, uint32_t fp_addr, uint32_t format_addr, uint32_ c = MEM_S8(format_addr); ++format_addr; goto continue_format; - case 'd': - { + case 'd': { int64_t num = 0; int sign = 1; bool found_first = false; @@ -572,7 +650,7 @@ int wrapper_fscanf(uint8_t *mem, uint32_t fp_addr, uint32_t format_addr, uint32_ } else if (c == '\0') { break; } else { - percent: + percent: ch = wrapper_fgetc(mem, fp_addr); if (ch == -1) { break; @@ -586,7 +664,7 @@ int wrapper_fscanf(uint8_t *mem, uint32_t fp_addr, uint32_t format_addr, uint32_ return ret; } -int wrapper_printf(uint8_t *mem, uint32_t format_addr, uint32_t sp) { +int wrapper_printf(uint8_t* mem, uint32_t format_addr, uint32_t sp) { STRING(format) if (!strcmp(format, " child died due to signal %d.\n")) { printf(format, MEM_U32(sp + 4)); @@ -596,7 +674,7 @@ int wrapper_printf(uint8_t *mem, uint32_t format_addr, uint32_t sp) { return 0; } -int wrapper_sprintf(uint8_t *mem, uint32_t str_addr, uint32_t format_addr, uint32_t sp) { +int wrapper_sprintf(uint8_t* mem, uint32_t str_addr, uint32_t format_addr, uint32_t sp) { STRING(format) // for debug char temp[32]; @@ -636,8 +714,11 @@ int wrapper_sprintf(uint8_t *mem, uint32_t str_addr, uint32_t format_addr, uint3 ++pos; uint32_t zeros = 0; bool zero_prefix = false; - continue_format: + continue_format: switch (c) { + case '\0': + goto finish_str; + case '0': do { c = MEM_S8(format_addr + pos); @@ -726,39 +807,50 @@ int wrapper_sprintf(uint8_t *mem, uint32_t str_addr, uint32_t format_addr, uint3 } } +finish_str: MEM_S8(str_addr) = '\0'; - STRING(orig_str) // for debug - //printf("result: '%s' '%s'\n", format, orig_str); return ret; } -int wrapper_fprintf(uint8_t *mem, uint32_t fp_addr, uint32_t format_addr, uint32_t sp) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); +int wrapper_fprintf(uint8_t* mem, uint32_t fp_addr, uint32_t format_addr, uint32_t sp) { + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); STRING(format) sp += 8; - /*if (!strcmp(format, "%s")) { - uint32_t s_addr = MEM_U32(sp); - STRING(s) - if (fp_addr == STDERR_ADDR) { - fprintf(stderr, "%s", s); - fflush(stderr); - return 1; - } + + // Special-case this one format string. This seems to be the only one that uses `%f` or width specifiers. + if (!strcmp(format, "%.2fu %.2fs %u:%04.1f %.0f%%\n") && fp_addr == STDERR_ADDR) { + double arg0 = MEM_F64(sp + 0); + double arg1 = MEM_F64(sp + 8); + uint32_t arg2 = MEM_U32(sp + 16); + double arg3 = MEM_F64(sp + 24); + double arg4 = MEM_F64(sp + 32); + fprintf(stderr, format, arg0, arg1, arg2, arg3, arg4); + fflush(stderr); + return 1; } - if (!strcmp(format, "%s: %s: ")) { - uint32_t s1_addr = MEM_U32(sp), s2_addr = MEM_U32(sp + 4); - STRING(s1) - STRING(s2) - if (fp_addr == STDERR_ADDR) { - fprintf(stderr, "%s: %s: ", s1, s2); - fflush(stderr); - return 1; + if (strcmp(format, "%s phase time: %.2fu %.2fs %u:%04.1f %.0f%%\n") == 0 && fp_addr == STDERR_ADDR) { + if (wrapper_fputs(mem, MEM_U32(sp), fp_addr) == -1) { + return 0; } - }*/ + sp += 4; + // align + sp += 4; + + double arg0 = MEM_F64(sp + 0); + double arg1 = MEM_F64(sp + 8); + uint32_t arg2 = MEM_U32(sp + 16); + double arg3 = MEM_F64(sp + 24); + double arg4 = MEM_F64(sp + 32); + fprintf(stderr, " phase time: %.2fu %.2fs %u:%04.1f %.0f%%\n", arg0, arg1, arg2, arg3, arg4); + fflush(stderr); + return 1; + } int ret = 0; for (;;) { + int width = 1; uint32_t pos = format_addr; char ch = MEM_S8(pos); + while (ch != '%' && ch != '\0') { ++pos; ch = MEM_S8(pos); @@ -773,32 +865,28 @@ int wrapper_fprintf(uint8_t *mem, uint32_t fp_addr, uint32_t format_addr, uint32 } ++pos; ch = MEM_S8(pos); + if (ch >= '1' && ch <= '9') { + ++pos; + width = ch - '0'; + ch = MEM_S8(pos); + } + switch (ch) { case 'd': - { - char buf[32]; - sprintf(buf, "%d", MEM_U32(sp)); - strcpy1(mem, INTBUF_ADDR, buf); - if (wrapper_fputs(mem, INTBUF_ADDR, fp_addr) == -1) { - return ret; - } - sp += 4; - ++ret; - break; - } - case 's': - { - if (wrapper_fputs(mem, MEM_U32(sp), fp_addr) == -1) { - return ret; - } - sp += 4; - ++ret; - break; - } + case 'x': + case 'X': case 'c': - { + case 'u': { char buf[32]; - sprintf(buf, "%c", MEM_U32(sp)); + + char formatSpecifier[0x100] = { 0 }; + + formatSpecifier[0] = '%'; + formatSpecifier[1] = width + '0'; + formatSpecifier[2] = ch; + + sprintf(buf, formatSpecifier, MEM_U32(sp)); + strcpy1(mem, INTBUF_ADDR, buf); if (wrapper_fputs(mem, INTBUF_ADDR, fp_addr) == -1) { return ret; @@ -807,6 +895,14 @@ int wrapper_fprintf(uint8_t *mem, uint32_t fp_addr, uint32_t format_addr, uint32 ++ret; break; } + case 's': { + if (wrapper_fputs(mem, MEM_U32(sp), fp_addr) == -1) { + return ret; + } + sp += 4; + ++ret; + break; + } default: fprintf(stderr, "missing format: '%s'\n", format); assert(0 && "non-implemented fprintf format"); @@ -816,12 +912,12 @@ int wrapper_fprintf(uint8_t *mem, uint32_t fp_addr, uint32_t format_addr, uint32 return ret; } -int wrapper__doprnt(uint8_t *mem, uint32_t format_addr, uint32_t params_addr, uint32_t fp_addr) { +int wrapper__doprnt(uint8_t* mem, uint32_t format_addr, uint32_t params_addr, uint32_t fp_addr) { assert(0 && "_doprnt not implemented"); return 0; } -uint32_t wrapper_strlen(uint8_t *mem, uint32_t str_addr) { +uint32_t wrapper_strlen(uint8_t* mem, uint32_t str_addr) { uint32_t len = 0; while (MEM_S8(str_addr) != '\0') { ++str_addr; @@ -830,8 +926,12 @@ uint32_t wrapper_strlen(uint8_t *mem, uint32_t str_addr) { return len; } -int wrapper_open(uint8_t *mem, uint32_t pathname_addr, int flags, int mode) { +int wrapper_open(uint8_t* mem, uint32_t pathname_addr, int flags, int mode) { STRING(pathname) + + char rpathname[PATH_MAX + 1]; + redirect_path(rpathname, pathname, "/usr/include", usr_include_redirect); + int f = flags & O_ACCMODE; if (flags & 0x100) { f |= O_CREAT; @@ -848,12 +948,13 @@ int wrapper_open(uint8_t *mem, uint32_t pathname_addr, int flags, int mode) { if (flags & 0x08) { f |= O_APPEND; } - int fd = open(pathname, f, mode); + + int fd = open(rpathname, f, mode); MEM_U32(ERRNO_ADDR) = errno; return fd; } -int wrapper_creat(uint8_t *mem, uint32_t pathname_addr, int mode) { +int wrapper_creat(uint8_t* mem, uint32_t pathname_addr, int mode) { STRING(pathname) int ret = creat(pathname, mode); if (ret < 0) { @@ -862,7 +963,7 @@ int wrapper_creat(uint8_t *mem, uint32_t pathname_addr, int mode) { return ret; } -int wrapper_access(uint8_t *mem, uint32_t pathname_addr, int mode) { +int wrapper_access(uint8_t* mem, uint32_t pathname_addr, int mode) { STRING(pathname) int ret = access(pathname, mode); if (ret != 0) { @@ -871,7 +972,7 @@ int wrapper_access(uint8_t *mem, uint32_t pathname_addr, int mode) { return ret; } -int wrapper_rename(uint8_t *mem, uint32_t oldpath_addr, uint32_t newpath_addr) { +int wrapper_rename(uint8_t* mem, uint32_t oldpath_addr, uint32_t newpath_addr) { STRING(oldpath) STRING(newpath) int ret = rename(oldpath, newpath); @@ -881,9 +982,9 @@ int wrapper_rename(uint8_t *mem, uint32_t oldpath_addr, uint32_t newpath_addr) { return ret; } -int wrapper_utime(uint8_t *mem, uint32_t filename_addr, uint32_t times_addr) { +int wrapper_utime(uint8_t* mem, uint32_t filename_addr, uint32_t times_addr) { STRING(filename) - struct utimbuf buf = {0, 0}; + struct utimbuf buf = { 0, 0 }; int ret = utime(filename, times_addr == 0 ? NULL : &buf); if (ret == 0) { if (times_addr != 0) { @@ -896,7 +997,7 @@ int wrapper_utime(uint8_t *mem, uint32_t filename_addr, uint32_t times_addr) { return ret; } -int wrapper_flock(uint8_t *mem, int fd, int operation) { +int wrapper_flock(uint8_t* mem, int fd, int operation) { int ret = flock(fd, operation); if (ret != 0) { MEM_U32(ERRNO_ADDR) = errno; @@ -904,7 +1005,7 @@ int wrapper_flock(uint8_t *mem, int fd, int operation) { return ret; } -int wrapper_chmod(uint8_t *mem, uint32_t path_addr, uint32_t mode) { +int wrapper_chmod(uint8_t* mem, uint32_t path_addr, uint32_t mode) { STRING(path) int ret = chmod(path, mode); if (ret < 0) { @@ -917,11 +1018,11 @@ int wrapper_umask(int mode) { return umask(mode); } -uint32_t wrapper_ecvt(uint8_t *mem, double number, int ndigits, uint32_t decpt_addr, uint32_t sign_addr) { +uint32_t wrapper_ecvt(uint8_t* mem, double number, int ndigits, uint32_t decpt_addr, uint32_t sign_addr) { assert(0); } -uint32_t wrapper_fcvt(uint8_t *mem, double number, int ndigits, uint32_t decpt_addr, uint32_t sign_addr) { +uint32_t wrapper_fcvt(uint8_t* mem, double number, int ndigits, uint32_t decpt_addr, uint32_t sign_addr) { assert(0); } @@ -933,23 +1034,23 @@ float wrapper_sqrtf(float v) { return sqrtf(v); } -int wrapper_atoi(uint8_t *mem, uint32_t nptr_addr) { +int wrapper_atoi(uint8_t* mem, uint32_t nptr_addr) { STRING(nptr) return atoi(nptr); } -int wrapper_atol(uint8_t *mem, uint32_t nptr_addr) { +int wrapper_atol(uint8_t* mem, uint32_t nptr_addr) { return wrapper_atoi(mem, nptr_addr); } -double wrapper_atof(uint8_t *mem, uint32_t nptr_addr) { +double wrapper_atof(uint8_t* mem, uint32_t nptr_addr) { STRING(nptr); return atof(nptr); } -int wrapper_strtol(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr, int base) { +int wrapper_strtol(uint8_t* mem, uint32_t nptr_addr, uint32_t endptr_addr, int base) { STRING(nptr) - char *endptr = NULL; + char* endptr = NULL; int64_t res = strtoll(nptr, endptr_addr != 0 ? &endptr : NULL, base); if (res > INT_MAX) { MEM_U32(ERRNO_ADDR) = ERANGE; @@ -965,9 +1066,9 @@ int wrapper_strtol(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr, int b return res; } -uint32_t wrapper_strtoul(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr, int base) { +uint32_t wrapper_strtoul(uint8_t* mem, uint32_t nptr_addr, uint32_t endptr_addr, int base) { STRING(nptr) - char *endptr = NULL; + char* endptr = NULL; uint64_t res = strtoull(nptr, endptr_addr != 0 ? &endptr : NULL, base); if (res > INT_MAX) { MEM_U32(ERRNO_ADDR) = ERANGE; @@ -979,9 +1080,37 @@ uint32_t wrapper_strtoul(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr, return res; } -double wrapper_strtod(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr) { +int64_t wrapper_strtoll(uint8_t* mem, uint32_t nptr_addr, uint32_t endptr_addr, int base) { STRING(nptr) - char *endptr = NULL; + char* endptr = NULL; + errno = 0; + int64_t res = strtoll(nptr, endptr_addr != 0 ? &endptr : NULL, base); + if (errno != 0) { + MEM_U32(ERRNO_ADDR) = errno; + } + if (endptr != NULL) { + MEM_U32(endptr_addr) = nptr_addr + (uint32_t)(endptr - nptr); + } + return res; +} + +uint64_t wrapper_strtoull(uint8_t* mem, uint32_t nptr_addr, uint32_t endptr_addr, int base) { + STRING(nptr) + char* endptr = NULL; + errno = 0; + uint64_t res = strtoull(nptr, endptr_addr != 0 ? &endptr : NULL, base); + if (errno != 0) { + MEM_U32(ERRNO_ADDR) = errno; + } + if (endptr != NULL) { + MEM_U32(endptr_addr) = nptr_addr + (uint32_t)(endptr - nptr); + } + return res; +} + +double wrapper_strtod(uint8_t* mem, uint32_t nptr_addr, uint32_t endptr_addr) { + STRING(nptr) + char* endptr = NULL; errno = 0; double res = strtod(nptr, endptr_addr != 0 ? &endptr : NULL); if (errno != 0) { @@ -993,7 +1122,7 @@ double wrapper_strtod(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr) { return res; } -uint32_t wrapper_strchr(uint8_t *mem, uint32_t str_addr, int c) { +uint32_t wrapper_strchr(uint8_t* mem, uint32_t str_addr, int c) { c = c & 0xff; for (;;) { unsigned char ch = MEM_U8(str_addr); @@ -1007,7 +1136,7 @@ uint32_t wrapper_strchr(uint8_t *mem, uint32_t str_addr, int c) { } } -uint32_t wrapper_strrchr(uint8_t *mem, uint32_t str_addr, int c) { +uint32_t wrapper_strrchr(uint8_t* mem, uint32_t str_addr, int c) { c = c & 0xff; uint32_t ret = 0; for (;;) { @@ -1022,7 +1151,7 @@ uint32_t wrapper_strrchr(uint8_t *mem, uint32_t str_addr, int c) { } } -uint32_t wrapper_strcspn(uint8_t *mem, uint32_t str_addr, uint32_t invalid_addr) { +uint32_t wrapper_strcspn(uint8_t* mem, uint32_t str_addr, uint32_t invalid_addr) { STRING(invalid) uint32_t n = strlen(invalid); uint32_t pos = 0; @@ -1039,7 +1168,7 @@ uint32_t wrapper_strcspn(uint8_t *mem, uint32_t str_addr, uint32_t invalid_addr) return pos; } -uint32_t wrapper_strpbrk(uint8_t *mem, uint32_t str_addr, uint32_t accept_addr) { +uint32_t wrapper_strpbrk(uint8_t* mem, uint32_t str_addr, uint32_t accept_addr) { STRING(accept) uint32_t n = strlen(accept); char c; @@ -1054,7 +1183,7 @@ uint32_t wrapper_strpbrk(uint8_t *mem, uint32_t str_addr, uint32_t accept_addr) return 0; } -static void stat_common(uint8_t *mem, uint32_t buf_addr, struct stat *statbuf) { +static void stat_common(uint8_t* mem, uint32_t buf_addr, struct stat* statbuf) { struct irix_stat { int st_dev; int pad1[3]; @@ -1089,17 +1218,17 @@ static void stat_common(uint8_t *mem, uint32_t buf_addr, struct stat *statbuf) { s.st_ctim.tv_sec = statbuf->st_ctimespec.tv_sec; s.st_ctim.tv_nsec = statbuf->st_ctimespec.tv_nsec; #else - s.st_atim.tv_sec = statbuf->st_atim.tv_sec; - s.st_atim.tv_nsec = statbuf->st_atim.tv_nsec; - s.st_mtim.tv_sec = statbuf->st_mtim.tv_sec; - s.st_mtim.tv_nsec = statbuf->st_mtim.tv_nsec; - s.st_ctim.tv_sec = statbuf->st_ctim.tv_sec; - s.st_ctim.tv_nsec = statbuf->st_ctim.tv_nsec; + s.st_atim.tv_sec = statbuf->st_atim.tv_sec; + s.st_atim.tv_nsec = statbuf->st_atim.tv_nsec; + s.st_mtim.tv_sec = statbuf->st_mtim.tv_sec; + s.st_mtim.tv_nsec = statbuf->st_mtim.tv_nsec; + s.st_ctim.tv_sec = statbuf->st_ctim.tv_sec; + s.st_ctim.tv_nsec = statbuf->st_ctim.tv_nsec; #endif memcpy(&MEM_U32(buf_addr), &s, sizeof(s)); } -int wrapper_fstat(uint8_t *mem, int fildes, uint32_t buf_addr) { +int wrapper_fstat(uint8_t* mem, int fildes, uint32_t buf_addr) { struct stat statbuf; if (fstat(fildes, &statbuf) < 0) { MEM_U32(ERRNO_ADDR) = errno; @@ -1110,7 +1239,7 @@ int wrapper_fstat(uint8_t *mem, int fildes, uint32_t buf_addr) { } } -int wrapper_stat(uint8_t *mem, uint32_t pathname_addr, uint32_t buf_addr) { +int wrapper_stat(uint8_t* mem, uint32_t pathname_addr, uint32_t buf_addr) { STRING(pathname) struct stat statbuf; if (stat(pathname, &statbuf) < 0) { @@ -1122,7 +1251,7 @@ int wrapper_stat(uint8_t *mem, uint32_t pathname_addr, uint32_t buf_addr) { } } -int wrapper_ftruncate(uint8_t *mem, int fd, int length) { +int wrapper_ftruncate(uint8_t* mem, int fd, int length) { int ret = ftruncate(fd, length); if (ret != 0) { MEM_U32(ERRNO_ADDR) = errno; @@ -1130,25 +1259,52 @@ int wrapper_ftruncate(uint8_t *mem, int fd, int length) { return ret; } -void wrapper_bcopy(uint8_t *mem, uint32_t src_addr, uint32_t dst_addr, uint32_t len) { - wrapper_memcpy(mem, dst_addr, src_addr, len); +int wrapper_truncate(uint8_t* mem, uint32_t pathname_addr, int length) { + STRING(pathname) + int ret = truncate(pathname, length); + if (ret != 0) { + MEM_U32(ERRNO_ADDR) = errno; + } + return ret; } -uint32_t wrapper_memcpy(uint8_t *mem, uint32_t dst_addr, uint32_t src_addr, uint32_t len) { - uint32_t saved = dst_addr; +void wrapper_bcopy(uint8_t* mem, uint32_t src_addr, uint32_t dst_addr, uint32_t len) { if (dst_addr % 4 == 0 && src_addr % 4 == 0 && len % 4 == 0) { - memcpy(&MEM_U32(dst_addr), &MEM_U32(src_addr), len); + // Use memmove to copy regions that are 4-byte aligned. + // This prevents the byte-swapped mem from causing issues when copying normally. + // Memmove handles overlapping copies correctly, so overlap does not need to be checked. + memmove(&MEM_U32(dst_addr), &MEM_U32(src_addr), len); + } else if (dst_addr > src_addr) { + // Perform a reverse byte-swapped copy when the destination is ahead of the source. + // This prevents overwriting the source contents before they're read. + dst_addr += len - 1; + src_addr += len - 1; + while (len--) { + MEM_U8(dst_addr) = MEM_U8(src_addr); + --dst_addr; + --src_addr; + } } else { + // Otherwise, perform a normal byte-swapped copy. while (len--) { MEM_U8(dst_addr) = MEM_U8(src_addr); ++dst_addr; ++src_addr; } } - return saved; } -uint32_t wrapper_memccpy(uint8_t *mem, uint32_t dst_addr, uint32_t src_addr, int c, uint32_t len) { +/** + * IRIX's memcpy seems to allow overlapping destination and source pointers, while the C standard dictates + * both pointer should not overlap, (UB otherwise). + * Because of this, we only use host bcopy since it can handle overlapping regions + */ +uint32_t wrapper_memcpy(uint8_t* mem, uint32_t dst_addr, uint32_t src_addr, uint32_t len) { + wrapper_bcopy(mem, src_addr, dst_addr, len); + return dst_addr; +} + +uint32_t wrapper_memccpy(uint8_t* mem, uint32_t dst_addr, uint32_t src_addr, int c, uint32_t len) { while (len--) { uint8_t ch = MEM_U8(src_addr); MEM_U8(dst_addr) = ch; @@ -1161,8 +1317,8 @@ uint32_t wrapper_memccpy(uint8_t *mem, uint32_t dst_addr, uint32_t src_addr, int return 0; } -int wrapper_read(uint8_t *mem, int fd, uint32_t buf_addr, uint32_t nbytes) { - uint8_t *buf = (uint8_t *)malloc(nbytes); +int wrapper_read(uint8_t* mem, int fd, uint32_t buf_addr, uint32_t nbytes) { + uint8_t* buf = (uint8_t*)malloc(nbytes); ssize_t ret = read(fd, buf, nbytes); if (ret < 0) { MEM_U32(ERRNO_ADDR) = errno; @@ -1175,8 +1331,8 @@ int wrapper_read(uint8_t *mem, int fd, uint32_t buf_addr, uint32_t nbytes) { return (int)ret; } -int wrapper_write(uint8_t *mem, int fd, uint32_t buf_addr, uint32_t nbytes) { - uint8_t *buf = (uint8_t *)malloc(nbytes); +int wrapper_write(uint8_t* mem, int fd, uint32_t buf_addr, uint32_t nbytes) { + uint8_t* buf = (uint8_t*)malloc(nbytes); for (size_t i = 0; i < nbytes; i++) { buf[i] = MEM_U8(buf_addr + i); } @@ -1188,7 +1344,7 @@ int wrapper_write(uint8_t *mem, int fd, uint32_t buf_addr, uint32_t nbytes) { return (int)ret; } -static uint32_t init_file(uint8_t *mem, int fd, int i, const char *path, const char *mode) { +static uint32_t init_file(uint8_t* mem, int fd, int i, const char* path, const char* mode) { int flags = O_RDONLY; if (strcmp(mode, "r") == 0 || strcmp(mode, "rb") == 0) { flags = O_RDONLY; @@ -1204,23 +1360,17 @@ static uint32_t init_file(uint8_t *mem, int fd, int i, const char *path, const c flags = O_RDWR | O_CREAT | O_APPEND; } if (fd == -1) { + char rpathname[PATH_MAX + 1]; + redirect_path(rpathname, path, "/usr/lib", usr_lib_redirect); + + fd = open(rpathname, flags, 0666); -#ifdef REDIRECT_USR_LIB - char fixed_path[PATH_MAX + 1]; - if (!strcmp(path, "/usr/lib/err.english.cc") && bin_dir[0] != '\0') { - int n = snprintf(fixed_path, sizeof(fixed_path), "%s/err.english.cc", bin_dir); - if (n >= 0 && n < sizeof(fixed_path)) { - path = fixed_path; - } - } -#endif - fd = open(path, flags, 0666); if (fd < 0) { MEM_U32(ERRNO_ADDR) = errno; return 0; } } - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(IOB_ADDR); + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(IOB_ADDR); uint32_t ret = 0; if (i == -1) { for (i = 3; i < NFILE; i++) { @@ -1243,22 +1393,25 @@ static uint32_t init_file(uint8_t *mem, int fd, int i, const char *path, const c return ret; } -uint32_t wrapper_fopen(uint8_t *mem, uint32_t path_addr, uint32_t mode_addr) { +uint32_t wrapper_fopen(uint8_t* mem, uint32_t path_addr, uint32_t mode_addr) { + assert(path_addr != 0); + assert(mode_addr != 0); + STRING(path) STRING(mode) return init_file(mem, -1, -1, path, mode); } -uint32_t wrapper_freopen(uint8_t *mem, uint32_t path_addr, uint32_t mode_addr, uint32_t fp_addr) { +uint32_t wrapper_freopen(uint8_t* mem, uint32_t path_addr, uint32_t mode_addr, uint32_t fp_addr) { STRING(path) STRING(mode) - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); wrapper_fclose(mem, fp_addr); - return init_file(mem, -1, f - (struct FILE_irix *)&MEM_U32(IOB_ADDR), path, mode); + return init_file(mem, -1, f - (struct FILE_irix*)&MEM_U32(IOB_ADDR), path, mode); } -int wrapper_fclose(uint8_t *mem, uint32_t fp_addr) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); +int wrapper_fclose(uint8_t* mem, uint32_t fp_addr) { + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); wrapper_fflush(mem, fp_addr); if (f->_flag & IOMYBUF) { wrapper_free(mem, f->_base_addr); @@ -1268,8 +1421,8 @@ int wrapper_fclose(uint8_t *mem, uint32_t fp_addr) { return 0; } -static int flush_all(uint8_t *mem) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(IOB_ADDR); +static int flush_all(uint8_t* mem) { + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(IOB_ADDR); int ret = 0; for (int i = 0; i < g_file_max; i++) { if (f[i]._flag & IOWRT) { @@ -1279,12 +1432,12 @@ static int flush_all(uint8_t *mem) { return ret; } -int wrapper_fflush(uint8_t *mem, uint32_t fp_addr) { +int wrapper_fflush(uint8_t* mem, uint32_t fp_addr) { if (fp_addr == 0) { // Flush all return flush_all(mem); } - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); if (f->_flag & IOWRT) { int p = 0; int to_flush = f->_ptr_addr - f->_base_addr; @@ -1304,8 +1457,16 @@ int wrapper_fflush(uint8_t *mem, uint32_t fp_addr) { return 0; } -int wrapper_ftell(uint8_t *mem, uint32_t fp_addr) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); +int wrapper_fchown(uint8_t* mem, int fd, int owner, int group) { + int ret = fchown(fd, owner, group); + if (ret != 0) { + MEM_U32(ERRNO_ADDR) = errno; + } + return ret; +} + +int wrapper_ftell(uint8_t* mem, uint32_t fp_addr) { + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); int adjust; if (f->_cnt < 0) { f->_cnt = 0; @@ -1327,14 +1488,14 @@ int wrapper_ftell(uint8_t *mem, uint32_t fp_addr) { return res; } -void wrapper_rewind(uint8_t *mem, uint32_t fp_addr) { +void wrapper_rewind(uint8_t* mem, uint32_t fp_addr) { (void)wrapper_fseek(mem, fp_addr, 0, SEEK_SET); - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); f->_flag &= ~IOERR; } -int wrapper_fseek(uint8_t *mem, uint32_t fp_addr, int offset, int origin) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); +int wrapper_fseek(uint8_t* mem, uint32_t fp_addr, int offset, int origin) { + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); int c, p; f->_flag &= ~IOEOF; if (f->_flag & IOREAD) { @@ -1374,7 +1535,7 @@ int wrapper_fseek(uint8_t *mem, uint32_t fp_addr, int offset, int origin) { return 0; } -int wrapper_lseek(uint8_t *mem, int fd, int offset, int whence) { +int wrapper_lseek(uint8_t* mem, int fd, int offset, int whence) { int ret = (int)lseek(fd, offset, whence); if (ret == -1) { MEM_U32(ERRNO_ADDR) = errno; @@ -1382,7 +1543,7 @@ int wrapper_lseek(uint8_t *mem, int fd, int offset, int whence) { return ret; } -int wrapper_dup(uint8_t *mem, int fd) { +int wrapper_dup(uint8_t* mem, int fd) { fd = dup(fd); if (fd < 0) { MEM_U32(ERRNO_ADDR) = errno; @@ -1390,7 +1551,7 @@ int wrapper_dup(uint8_t *mem, int fd) { return fd; } -int wrapper_dup2(uint8_t *mem, int oldfd, int newfd) { +int wrapper_dup2(uint8_t* mem, int oldfd, int newfd) { int fd = dup2(oldfd, newfd); if (fd < 0) { MEM_U32(ERRNO_ADDR) = errno; @@ -1398,7 +1559,7 @@ int wrapper_dup2(uint8_t *mem, int oldfd, int newfd) { return fd; } -int wrapper_pipe(uint8_t *mem, uint32_t pipefd_addr) { +int wrapper_pipe(uint8_t* mem, uint32_t pipefd_addr) { int pipefd[2]; int ret = pipe(pipefd); if (ret == 0) { @@ -1410,17 +1571,17 @@ int wrapper_pipe(uint8_t *mem, uint32_t pipefd_addr) { return ret; } -void wrapper_perror(uint8_t *mem, uint32_t str_addr) { +void wrapper_perror(uint8_t* mem, uint32_t str_addr) { STRING(str) perror(str); } -int wrapper_fdopen(uint8_t *mem, int fd, uint32_t mode_addr) { +int wrapper_fdopen(uint8_t* mem, int fd, uint32_t mode_addr) { STRING(mode) return init_file(mem, fd, -1, NULL, mode); } -uint32_t wrapper_memset(uint8_t *mem, uint32_t dest_addr, int byte, uint32_t n) { +uint32_t wrapper_memset(uint8_t* mem, uint32_t dest_addr, int byte, uint32_t n) { uint32_t saved = dest_addr; if (dest_addr % 4 == 0 && n % 4 == 0) { memset(&MEM_U32(dest_addr), byte, n); @@ -1433,7 +1594,7 @@ uint32_t wrapper_memset(uint8_t *mem, uint32_t dest_addr, int byte, uint32_t n) return saved; } -int wrapper_bcmp(uint8_t *mem, uint32_t s1_addr, uint32_t s2_addr, uint32_t n) { +int wrapper_bcmp(uint8_t* mem, uint32_t s1_addr, uint32_t s2_addr, uint32_t n) { while (n--) { if (MEM_U8(s1_addr) != MEM_U8(s2_addr)) { return 1; @@ -1444,7 +1605,7 @@ int wrapper_bcmp(uint8_t *mem, uint32_t s1_addr, uint32_t s2_addr, uint32_t n) { return 0; } -int wrapper_memcmp(uint8_t *mem, uint32_t s1_addr, uint32_t s2_addr, uint32_t n) { +int wrapper_memcmp(uint8_t* mem, uint32_t s1_addr, uint32_t s2_addr, uint32_t n) { while (n--) { unsigned char c1 = MEM_U8(s1_addr); unsigned char c2 = MEM_U8(s2_addr); @@ -1464,7 +1625,7 @@ int wrapper_getpid(void) { return getpid(); } -int wrapper_getpgrp(uint8_t *mem) { +int wrapper_getpgrp(uint8_t* mem) { int ret = getpgrp(); if (ret == -1) { MEM_U32(ERRNO_ADDR) = errno; @@ -1472,7 +1633,7 @@ int wrapper_getpgrp(uint8_t *mem) { return ret; } -int wrapper_remove(uint8_t *mem, uint32_t path_addr) { +int wrapper_remove(uint8_t* mem, uint32_t path_addr) { STRING(path) int ret = remove(path); if (ret < 0) { @@ -1481,7 +1642,7 @@ int wrapper_remove(uint8_t *mem, uint32_t path_addr) { return ret; } -int wrapper_unlink(uint8_t *mem, uint32_t path_addr) { +int wrapper_unlink(uint8_t* mem, uint32_t path_addr) { if (path_addr == 0) { fprintf(stderr, "Warning: unlink with NULL as arguement\n"); MEM_U32(ERRNO_ADDR) = EFAULT; @@ -1495,7 +1656,7 @@ int wrapper_unlink(uint8_t *mem, uint32_t path_addr) { return ret; } -int wrapper_close(uint8_t *mem, int fd) { +int wrapper_close(uint8_t* mem, int fd) { int ret = close(fd); if (ret < 0) { MEM_U32(ERRNO_ADDR) = errno; @@ -1503,7 +1664,7 @@ int wrapper_close(uint8_t *mem, int fd) { return ret; } -int wrapper_strcmp(uint8_t *mem, uint32_t s1_addr, uint32_t s2_addr) { +int wrapper_strcmp(uint8_t* mem, uint32_t s1_addr, uint32_t s2_addr) { for (;;) { char c1 = MEM_S8(s1_addr); char c2 = MEM_S8(s2_addr); @@ -1518,7 +1679,7 @@ int wrapper_strcmp(uint8_t *mem, uint32_t s1_addr, uint32_t s2_addr) { } } -int wrapper_strncmp(uint8_t *mem, uint32_t s1_addr, uint32_t s2_addr, uint32_t n) { +int wrapper_strncmp(uint8_t* mem, uint32_t s1_addr, uint32_t s2_addr, uint32_t n) { if (n == 0) { return 0; } @@ -1536,7 +1697,7 @@ int wrapper_strncmp(uint8_t *mem, uint32_t s1_addr, uint32_t s2_addr, uint32_t n } } -uint32_t wrapper_strcpy(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr) { +uint32_t wrapper_strcpy(uint8_t* mem, uint32_t dest_addr, uint32_t src_addr) { uint32_t saved = dest_addr; for (;;) { char c = MEM_S8(src_addr); @@ -1549,7 +1710,7 @@ uint32_t wrapper_strcpy(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr) { } } -uint32_t wrapper_strncpy(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr, uint32_t n) { +uint32_t wrapper_strncpy(uint8_t* mem, uint32_t dest_addr, uint32_t src_addr, uint32_t n) { uint32_t i; for (i = 0; i < n && MEM_S8(src_addr) != '\0'; i++) { MEM_S8(dest_addr + i) = MEM_S8(src_addr + i); @@ -1560,7 +1721,7 @@ uint32_t wrapper_strncpy(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr, ui return dest_addr; } -uint32_t wrapper_strcat(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr) { +uint32_t wrapper_strcat(uint8_t* mem, uint32_t dest_addr, uint32_t src_addr) { uint32_t saved = dest_addr; while (MEM_S8(dest_addr) != '\0') { ++dest_addr; @@ -1574,7 +1735,7 @@ uint32_t wrapper_strcat(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr) { return saved; } -uint32_t wrapper_strncat(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr, uint32_t n) { +uint32_t wrapper_strncat(uint8_t* mem, uint32_t dest_addr, uint32_t src_addr, uint32_t n) { uint32_t saved = dest_addr; while (MEM_S8(dest_addr) != '\0') { ++dest_addr; @@ -1588,7 +1749,7 @@ uint32_t wrapper_strncat(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr, ui return saved; } -uint32_t wrapper_strtok(uint8_t *mem, uint32_t str_addr, uint32_t delimiters_addr) { +uint32_t wrapper_strtok(uint8_t* mem, uint32_t str_addr, uint32_t delimiters_addr) { if (str_addr == 0) { str_addr = MEM_U32(STRTOK_DATA_ADDR); } @@ -1599,8 +1760,7 @@ uint32_t wrapper_strtok(uint8_t *mem, uint32_t str_addr, uint32_t delimiters_add uint32_t p; for (p = str_addr; MEM_S8(p) != '\0'; p++) { uint32_t q; - for (q = delimiters_addr; MEM_S8(q) != '\0' && MEM_S8(q) != MEM_S8(p); q++) { - } + for (q = delimiters_addr; MEM_S8(q) != '\0' && MEM_S8(q) != MEM_S8(p); q++) {} if (MEM_S8(q) == '\0') { break; } @@ -1611,8 +1771,7 @@ uint32_t wrapper_strtok(uint8_t *mem, uint32_t str_addr, uint32_t delimiters_add uint32_t ret = p; for (;;) { uint32_t q; - for (q = delimiters_addr; MEM_S8(q) != '\0' && MEM_S8(q) != MEM_S8(p); q++) { - } + for (q = delimiters_addr; MEM_S8(q) != '\0' && MEM_S8(q) != MEM_S8(p); q++) {} if (MEM_S8(q) != '\0') { MEM_S8(p) = '\0'; MEM_U32(STRTOK_DATA_ADDR) = ++p; @@ -1627,7 +1786,7 @@ uint32_t wrapper_strtok(uint8_t *mem, uint32_t str_addr, uint32_t delimiters_add } } -uint32_t wrapper_strstr(uint8_t *mem, uint32_t str1_addr, uint32_t str2_addr) { +uint32_t wrapper_strstr(uint8_t* mem, uint32_t str1_addr, uint32_t str2_addr) { for (;;) { if (MEM_S8(str1_addr) == '\0') { return 0; @@ -1650,7 +1809,7 @@ uint32_t wrapper_strstr(uint8_t *mem, uint32_t str1_addr, uint32_t str2_addr) { } } -uint32_t wrapper_strdup(uint8_t *mem, uint32_t str_addr) { +uint32_t wrapper_strdup(uint8_t* mem, uint32_t str_addr) { uint32_t len = wrapper_strlen(mem, str_addr) + 1; uint32_t ret = wrapper_malloc(mem, len); if (ret == 0) { @@ -1668,8 +1827,8 @@ int wrapper_tolower(int c) { return tolower(c); } -int wrapper_gethostname(uint8_t *mem, uint32_t name_addr, uint32_t len) { - char buf[256] = {0}; +int wrapper_gethostname(uint8_t* mem, uint32_t name_addr, uint32_t len) { + char buf[256] = { 0 }; if (len > 256) { len = 256; } @@ -1684,7 +1843,7 @@ int wrapper_gethostname(uint8_t *mem, uint32_t name_addr, uint32_t len) { return ret; } -int wrapper_isatty(uint8_t *mem, int fd) { +int wrapper_isatty(uint8_t* mem, int fd) { int ret = isatty(fd); if (ret == 0) { MEM_U32(ERRNO_ADDR) = errno; @@ -1692,13 +1851,13 @@ int wrapper_isatty(uint8_t *mem, int fd) { return ret; } -uint32_t wrapper_strftime(uint8_t *mem, uint32_t ptr_addr, uint32_t maxsize, uint32_t format_addr, uint32_t timeptr_addr) { - //assert(0 && "strftime not implemented"); +uint32_t wrapper_strftime(uint8_t* mem, uint32_t ptr_addr, uint32_t maxsize, uint32_t format_addr, + uint32_t timeptr_addr) { MEM_S8(ptr_addr) = 0; return 0; } -int wrapper_times(uint8_t *mem, uint32_t buffer_addr) { +int wrapper_times(uint8_t* mem, uint32_t buffer_addr) { struct tms_irix { int tms_utime; int tms_stime; @@ -1714,6 +1873,10 @@ int wrapper_times(uint8_t *mem, uint32_t buffer_addr) { r.tms_stime = t.tms_stime; r.tms_cutime = t.tms_cutime; r.tms_cstime = t.tms_cstime; + MEM_U32(buffer_addr + 0x0) = t.tms_utime; + MEM_U32(buffer_addr + 0x4) = t.tms_stime; + MEM_U32(buffer_addr + 0x8) = t.tms_cutime; + MEM_U32(buffer_addr + 0xC) = t.tms_cstime; } return (int)ret; } @@ -1722,9 +1885,9 @@ int wrapper_clock(void) { return (int)clock(); } -uint32_t wrapper_ctime(uint8_t *mem, uint32_t timep_addr) { +uint32_t wrapper_ctime(uint8_t* mem, uint32_t timep_addr) { time_t t = MEM_S32(timep_addr); - char *res = ctime(&t); + char* res = ctime(&t); size_t len = strlen(res) + 1; uint32_t ret_addr = wrapper_malloc(mem, len); uint32_t pos = ret_addr; @@ -1734,11 +1897,9 @@ uint32_t wrapper_ctime(uint8_t *mem, uint32_t timep_addr) { ++res; } return ret_addr; - //assert(0 && "ctime not implemented"); - //return 0; } -uint32_t wrapper_localtime(uint8_t *mem, uint32_t timep_addr) { +uint32_t wrapper_localtime(uint8_t* mem, uint32_t timep_addr) { time_t t = MEM_S32(timep_addr); struct irix_tm { int tm_sec; @@ -1752,8 +1913,8 @@ uint32_t wrapper_localtime(uint8_t *mem, uint32_t timep_addr) { int tm_isdst; }; uint32_t ret = wrapper_malloc(mem, sizeof(struct irix_tm)); - struct irix_tm *r = (struct irix_tm *)&MEM_U32(ret); - struct tm *l = localtime(&t); + struct irix_tm* r = (struct irix_tm*)&MEM_U32(ret); + struct tm* l = localtime(&t); r->tm_sec = l->tm_sec; r->tm_min = l->tm_min; r->tm_hour = l->tm_hour; @@ -1766,14 +1927,21 @@ uint32_t wrapper_localtime(uint8_t *mem, uint32_t timep_addr) { return ret; } -int wrapper_setvbuf(uint8_t *mem, uint32_t fp_addr, uint32_t buf_addr, int mode, uint32_t size) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); +int wrapper_setvbuf(uint8_t* mem, uint32_t fp_addr, uint32_t buf_addr, int mode, uint32_t size) { + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); wrapper_fflush(mem, fp_addr); if ((f->_flag & IOMYBUF) && f->_base_addr != 0) { wrapper_free(mem, f->_base_addr); } size &= ~0xf; f->_flag &= ~IOMYBUF; + + if (buf_addr == 0) { + assert(size > 0); + buf_addr = wrapper_malloc(mem, size); + f->_flag |= IOMYBUF; + } + f->_base_addr = buf_addr; f->_ptr_addr = buf_addr; f->_cnt = 0; @@ -1781,16 +1949,16 @@ int wrapper_setvbuf(uint8_t *mem, uint32_t fp_addr, uint32_t buf_addr, int mode, return 0; } -int wrapper___semgetc(uint8_t *mem, uint32_t fp_addr) { +int wrapper___semgetc(uint8_t* mem, uint32_t fp_addr) { assert(0); } -int wrapper___semputc(uint8_t *mem, int c, uint32_t fp_addr) { +int wrapper___semputc(uint8_t* mem, int c, uint32_t fp_addr) { assert(0); } -int wrapper_fgetc(uint8_t *mem, uint32_t fp_addr) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); +int wrapper_fgetc(uint8_t* mem, uint32_t fp_addr) { + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); if (--f->_cnt < 0) { return wrapper___filbuf(mem, fp_addr); } else { @@ -1800,7 +1968,7 @@ int wrapper_fgetc(uint8_t *mem, uint32_t fp_addr) { } } -int wrapper_fgets(uint8_t *mem, uint32_t str_addr, int count, uint32_t fp_addr) { +int wrapper_fgets(uint8_t* mem, uint32_t str_addr, int count, uint32_t fp_addr) { bool modified = false; uint32_t saved = str_addr; for (count--; count > 0; count--) { @@ -1820,16 +1988,16 @@ int wrapper_fgets(uint8_t *mem, uint32_t str_addr, int count, uint32_t fp_addr) return saved; } -static void file_assign_buffer(uint8_t *mem, struct FILE_irix *f) { +static void file_assign_buffer(uint8_t* mem, struct FILE_irix* f) { f->_base_addr = wrapper_malloc(mem, STDIO_BUFSIZE); f->_ptr_addr = f->_base_addr; f->_flag |= IOMYBUF; f->_cnt = 0; - bufendtab[f - (struct FILE_irix *)&MEM_U32(IOB_ADDR)] = STDIO_BUFSIZE; + bufendtab[f - (struct FILE_irix*)&MEM_U32(IOB_ADDR)] = STDIO_BUFSIZE; } -int wrapper___filbuf(uint8_t *mem, uint32_t fp_addr) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); +int wrapper___filbuf(uint8_t* mem, uint32_t fp_addr) { + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); if (!(f->_flag & IOREAD)) { if (f->_flag & IORW) { f->_flag |= IOREAD; @@ -1858,14 +2026,14 @@ int wrapper___filbuf(uint8_t *mem, uint32_t fp_addr) { return ret; } -int wrapper___flsbuf(uint8_t *mem, int ch, uint32_t fp_addr) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); +int wrapper___flsbuf(uint8_t* mem, int ch, uint32_t fp_addr) { + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); if (wrapper_fflush(mem, fp_addr) != 0) { return -1; } if (f->_base_addr == 0) { file_assign_buffer(mem, f); - f->_cnt = bufendtab[f - (struct FILE_irix *)&MEM_U32(IOB_ADDR)]; + f->_cnt = bufendtab[f - (struct FILE_irix*)&MEM_U32(IOB_ADDR)]; } MEM_U8(f->_ptr_addr) = ch; ++f->_ptr_addr; @@ -1879,8 +2047,8 @@ int wrapper___flsbuf(uint8_t *mem, int ch, uint32_t fp_addr) { return ch; } -int wrapper_ungetc(uint8_t *mem, int ch, uint32_t fp_addr) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); +int wrapper_ungetc(uint8_t* mem, int ch, uint32_t fp_addr) { + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); if (ch == -1 || f->_ptr_addr == f->_base_addr) { return -1; } @@ -1891,7 +2059,7 @@ int wrapper_ungetc(uint8_t *mem, int ch, uint32_t fp_addr) { return ch; } -uint32_t wrapper_gets(uint8_t *mem, uint32_t str_addr) { +uint32_t wrapper_gets(uint8_t* mem, uint32_t str_addr) { uint32_t p, str0 = str_addr; int n; @@ -1924,8 +2092,8 @@ uint32_t wrapper_gets(uint8_t *mem, uint32_t str_addr) { return str0; } -uint32_t wrapper_fread(uint8_t *mem, uint32_t data_addr, uint32_t size, uint32_t count, uint32_t fp_addr) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); +uint32_t wrapper_fread(uint8_t* mem, uint32_t data_addr, uint32_t size, uint32_t count, uint32_t fp_addr) { + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); int nleft = count * size; int n; for (;;) { @@ -1946,11 +2114,11 @@ uint32_t wrapper_fread(uint8_t *mem, uint32_t data_addr, uint32_t size, uint32_t } } -uint32_t wrapper_fwrite(uint8_t *mem, uint32_t data_addr, uint32_t size, uint32_t count, uint32_t fp_addr) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); +uint32_t wrapper_fwrite(uint8_t* mem, uint32_t data_addr, uint32_t size, uint32_t count, uint32_t fp_addr) { + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); if (size > 0 && count > 0 && f->_base_addr == 0) { file_assign_buffer(mem, f); - f->_cnt = bufendtab[f - (struct FILE_irix *)&MEM_U32(IOB_ADDR)]; + f->_cnt = bufendtab[f - (struct FILE_irix*)&MEM_U32(IOB_ADDR)]; f->_flag |= IOWRT; } uint32_t num_written = 0; @@ -1980,18 +2148,20 @@ uint32_t wrapper_fwrite(uint8_t *mem, uint32_t data_addr, uint32_t size, uint32_ return num_written; } -int wrapper_fputs(uint8_t *mem, uint32_t str_addr, uint32_t fp_addr) { +int wrapper_fputs(uint8_t* mem, uint32_t str_addr, uint32_t fp_addr) { + assert(str_addr != 0); + uint32_t len = wrapper_strlen(mem, str_addr); uint32_t ret = wrapper_fwrite(mem, str_addr, 1, len, fp_addr); return ret == 0 && len != 0 ? -1 : 0; } -int wrapper_puts(uint8_t *mem, uint32_t str_addr) { +int wrapper_puts(uint8_t* mem, uint32_t str_addr) { int ret = wrapper_fputs(mem, str_addr, STDOUT_ADDR); if (ret != 0) { return ret; } - struct FILE_irix *f = STDOUT; + struct FILE_irix* f = STDOUT; if (--f->_cnt < 0) { if (wrapper___flsbuf(mem, '\n', STDOUT_ADDR) != '\n') { return -1; @@ -2003,7 +2173,7 @@ int wrapper_puts(uint8_t *mem, uint32_t str_addr) { return 0; } -uint32_t wrapper_getcwd(uint8_t *mem, uint32_t buf_addr, uint32_t size) { +uint32_t wrapper_getcwd(uint8_t* mem, uint32_t buf_addr, uint32_t size) { char buf[size]; if (getcwd(buf, size) == NULL) { MEM_U32(ERRNO_ADDR) = errno; @@ -2017,7 +2187,7 @@ uint32_t wrapper_getcwd(uint8_t *mem, uint32_t buf_addr, uint32_t size) { } } -int wrapper_time(uint8_t *mem, uint32_t tloc_addr) { +int wrapper_time(uint8_t* mem, uint32_t tloc_addr) { time_t ret = time(NULL); if (ret == (time_t)-1) { MEM_U32(ERRNO_ADDR) = errno; @@ -2027,7 +2197,7 @@ int wrapper_time(uint8_t *mem, uint32_t tloc_addr) { return ret; } -void wrapper_bzero(uint8_t *mem, uint32_t str_addr, uint32_t n) { +void wrapper_bzero(uint8_t* mem, uint32_t str_addr, uint32_t n) { while (n--) { MEM_U8(str_addr) = 0; ++str_addr; @@ -2040,7 +2210,7 @@ int wrapper_fp_class_d(double d) { double d; } bits; bits.d = d; - uint32_t a2 = bits.w[1]; + uint32_t a2 = bits.w[1]; uint32_t a1 = a2 >> 20; uint32_t a0 = a1; a2 &= 0xfffff; @@ -2067,7 +2237,7 @@ double wrapper_ldexp(double d, int i) { return ldexp(d, i); } -int64_t wrapper___ll_mul(int64_t a0, int64_t a1) { +uint64_t wrapper___ll_mul(uint64_t a0, uint64_t a1) { return a0 * a1; } @@ -2079,12 +2249,12 @@ int64_t wrapper___ll_rem(uint64_t a0, int64_t a1) { return a0 % a1; } -int64_t wrapper___ll_lshift(int64_t a0, uint64_t shift) { - return a0 << (shift & 0x3f); +uint64_t wrapper___ll_lshift(uint64_t a0, uint64_t shift) { + return a0 << (shift & 0x3F); } int64_t wrapper___ll_rshift(int64_t a0, uint64_t shift) { - return a0 >> (shift & 0x3f); + return a0 >> (shift & 0x3F); } uint64_t wrapper___ull_div(uint64_t a0, uint64_t a1) { @@ -2131,42 +2301,43 @@ double wrapper___ll_to_d(int64_t v) { return v; } -void wrapper_abort(uint8_t *mem) { +void wrapper_abort(uint8_t* mem) { abort(); } -void wrapper_exit(uint8_t *mem, int status) { +void wrapper_exit(uint8_t* mem, int status) { + final_cleanup(mem); exit(status); } -void wrapper__exit(uint8_t *mem, int status) { +void wrapper__exit(uint8_t* mem, int status) { assert(0 && "_exit not implemented"); // exit() is already overridden } -void wrapper__cleanup(uint8_t *mem) { +void wrapper__cleanup(uint8_t* mem) { } -uint32_t wrapper__rld_new_interface(uint8_t *mem, uint32_t operation, uint32_t sp) { +uint32_t wrapper__rld_new_interface(uint8_t* mem, uint32_t operation, uint32_t sp) { assert(0 && "_rld_new_interface not implemented"); return 0; } -void wrapper__exithandle(uint8_t *mem) { +void wrapper__exithandle(uint8_t* mem) { assert(0 && "_exithandle not implemented"); } -int wrapper__prctl(uint8_t *mem, int operation, uint32_t sp) { +int wrapper__prctl(uint8_t* mem, int operation, uint32_t sp) { assert(0 && "_prctl not implemented"); return 0; } -double wrapper__atod(uint8_t *mem, uint32_t buffer_addr, int ndigits, int dexp) { +double wrapper__atod(uint8_t* mem, uint32_t buffer_addr, int ndigits, int dexp) { // ftp://atoum.hst.nerim.net/irix/src/irix-6.5.5-src/6.5.5/m/irix/lib/libc/src/math/atod.c assert(0 && "_atod not implemented"); return 0.0; } -int wrapper_pathconf(uint8_t *mem, uint32_t path_addr, int name) { +int wrapper_pathconf(uint8_t* mem, uint32_t path_addr, int name) { STRING(path) if (name == 5) { errno = 0; @@ -2180,81 +2351,106 @@ int wrapper_pathconf(uint8_t *mem, uint32_t path_addr, int name) { return 0; } -uint32_t wrapper_getenv(uint8_t *mem, uint32_t name_addr) { - // Return null for everything, for now - return 0; +uint32_t wrapper_getenv(uint8_t* mem, uint32_t name_addr) { + STRING(name); + const char* value = getenv(name); + if (value == NULL) { + return 0; + } + size_t value_size = strlen(value) + 1; + uint32_t buf_addr = wrapper_malloc(mem, value_size); + strcpy1(mem, buf_addr, value); + return buf_addr; } -uint32_t wrapper_gettxt(uint8_t *mem, uint32_t msgid_addr, uint32_t default_str_addr) { +uint32_t wrapper_gettxt(uint8_t* mem, uint32_t msgid_addr, uint32_t default_str_addr) { // Return default for now return default_str_addr; } -uint32_t wrapper_setlocale(uint8_t *mem, int category, uint32_t locale_addr) { +uint32_t wrapper_setlocale(uint8_t* mem, int category, uint32_t locale_addr) { assert(locale_addr != 0); STRING(locale) assert(category == 6); // LC_ALL - char *ret = setlocale(LC_ALL, locale); + char* ret = setlocale(LC_ALL, locale); // Let's hope the caller doesn't use the return value return 0; } -uint32_t wrapper_mmap(uint8_t *mem, uint32_t addr, uint32_t length, int prot, int flags, int fd, int offset) { +uint32_t wrapper_mmap(uint8_t* mem, uint32_t addr, uint32_t length, int prot, int flags, int fd, int offset) { + if (addr == 0 && prot == (prot & 3) && flags == 2) { + // Read/write, map private. Just make a copy. + uint8_t* ptr = mmap(0, length, PROT_READ, MAP_PRIVATE, fd, offset); + if (ptr == MAP_FAILED) { + MEM_U32(ERRNO_ADDR) = errno; + return -1; + } + uint32_t out = wrapper_malloc(mem, length); + for (uint32_t i = 0; i < length; i++) { + MEM_S8(out + i) = ptr[i]; + } + munmap(ptr, length); + return out; + } assert(0 && "mmap not implemented"); return 0; } -int wrapper_munmap(uint8_t *mem, uint32_t addr, uint32_t length) { - assert(0 && "munmap not implemented"); +int wrapper_munmap(uint8_t* mem, uint32_t addr, uint32_t length) { return 0; } -int wrapper_mprotect(uint8_t *mem, uint32_t addr, uint32_t length, int prot) { +int wrapper_mprotect(uint8_t* mem, uint32_t addr, uint32_t length, int prot) { assert(0 && "mprotect not implemented"); return 0; } -int wrapper_sysconf(uint8_t *mem, int name) { +int wrapper_sysconf(uint8_t* mem, int name) { assert(0 && "sysconf not implemented"); return 0; } -int wrapper_getpagesize(uint8_t *mem) { +int wrapper_getpagesize(uint8_t* mem) { return 4096; } -int wrapper_strerror(uint8_t *mem, int errnum) { +int wrapper_strerror(uint8_t* mem, int errnum) { errno = errnum; perror("strerror"); assert(0 && "strerror not implemented"); return 0; } -int wrapper_ioctl(uint8_t *mem, int fd, uint32_t request, uint32_t sp) { +int wrapper_ioctl(uint8_t* mem, int fd, uint32_t request, uint32_t sp) { assert(0 && "ioctl not implemented"); return 0; } -int wrapper_fcntl(uint8_t *mem, int fd, int cmd, uint32_t sp) { +int wrapper_fcntl(uint8_t* mem, int fd, int cmd, uint32_t sp) { assert(0 && "fcntl not implemented"); return 0; } static void signal_handler(int signum) { uint32_t level = signal_context.recursion_level++; - uint8_t *mem = signal_context.handlers[signum].mem; + uint8_t* mem = signal_context.handlers[signum].mem; uint32_t fp_dest = signal_context.handlers[signum].fp_dest; uint32_t sp = SIGNAL_HANDLER_STACK_START - 16 - level * 0x1000; signal_context.handlers[signum].trampoline(mem, sp, signum, 0, 0, 0, fp_dest); signal_context.recursion_level--; } -uint32_t wrapper_signal(uint8_t *mem, int signum, uint64_t (*trampoline)(uint8_t *mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t fp_dest), uint32_t handler_addr, uint32_t sp) { - //assert(0 && "signal not implemented"); +uint32_t wrapper_signal(uint8_t* mem, int signum, + uint64_t (*trampoline)(uint8_t* mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, + uint32_t a3, uint32_t fp_dest), + uint32_t handler_addr, uint32_t sp) { return 0; } -uint32_t wrapper_sigset(uint8_t *mem, int signum, uint64_t (*trampoline)(uint8_t *mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t fp_dest), uint32_t disp_addr, uint32_t sp) { +uint32_t wrapper_sigset(uint8_t* mem, int signum, + uint64_t (*trampoline)(uint8_t* mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, + uint32_t a3, uint32_t fp_dest), + uint32_t disp_addr, uint32_t sp) { void (*handler)(int) = signal_handler; if ((int)disp_addr >= -1 && (int)disp_addr <= 1) { @@ -2284,21 +2480,19 @@ uint32_t wrapper_sigset(uint8_t *mem, int signum, uint64_t (*trampoline)(uint8_t return (uint32_t)(uintptr_t)sigset(signum, handler); // for now only support SIG_DFL etc. as return value } -int wrapper_get_fpc_csr(uint8_t *mem) { - //assert(0 && "get_fpc_csr not implemented"); +int wrapper_get_fpc_csr(uint8_t* mem) { return 0; } -int wrapper_set_fpc_csr(uint8_t *mem, int csr) { - //assert(0 && "set_fpc_csr not implemented"); +int wrapper_set_fpc_csr(uint8_t* mem, int csr) { return 0; } -int wrapper_setjmp(uint8_t *mem, uint32_t addr) { +int wrapper_setjmp(uint8_t* mem, uint32_t addr) { return 0; } -void wrapper_longjmp(uint8_t *mem, uint32_t addr, int status) { +void wrapper_longjmp(uint8_t* mem, uint32_t addr, int status) { assert(0 && "longjmp not implemented"); } @@ -2342,7 +2536,7 @@ uint32_t wrapper_mktemp(uint8_t *mem, uint32_t template_addr) { return template_addr; } -int wrapper_mkstemp(uint8_t *mem, uint32_t name_addr) { +int wrapper_mkstemp(uint8_t* mem, uint32_t name_addr) { STRING(name) int fd = mkstemp(name); if (fd < 0) { @@ -2353,9 +2547,21 @@ int wrapper_mkstemp(uint8_t *mem, uint32_t name_addr) { return fd; } -uint32_t wrapper_tmpfile(uint8_t *mem) { +uint32_t wrapper_tmpfile(uint8_t* mem) { // create and fopen a temporary file that is removed when the program exits - char name[] = "/tmp/copt_temp_XXXXXX"; + const char* tmpdir = getenv("TMPDIR"); + if (tmpdir == NULL) { + tmpdir = "/tmp"; + } + + char name[PATH_MAX + 1] = { 0 }; + int n = snprintf(name, sizeof(name), "%s/copt_temp_XXXXXX", tmpdir); + if (n < 0 || n >= sizeof(name)) { + // This isn't the best errno code, but it is one that can be returned by tmpfile + MEM_U32(ERRNO_ADDR) = EACCES; + return 0; + } + int fd = mkstemp(name); if (fd < 0) { MEM_U32(ERRNO_ADDR) = errno; @@ -2373,14 +2579,14 @@ uint32_t wrapper_tmpfile(uint8_t *mem) { return ret; } -int wrapper_wait(uint8_t *mem, uint32_t wstatus_addr) { +int wrapper_wait(uint8_t* mem, uint32_t wstatus_addr) { int wstatus; pid_t ret = wait(&wstatus); MEM_S32(wstatus_addr) = wstatus; return ret; } -int wrapper_kill(uint8_t *mem, int pid, int sig) { +int wrapper_kill(uint8_t* mem, int pid, int sig) { int ret = kill(pid, sig); if (ret != 0) { MEM_U32(ERRNO_ADDR) = errno; @@ -2388,23 +2594,23 @@ int wrapper_kill(uint8_t *mem, int pid, int sig) { return ret; } -int wrapper_execlp(uint8_t *mem, uint32_t file_addr, uint32_t sp) { +int wrapper_execlp(uint8_t* mem, uint32_t file_addr, uint32_t sp) { uint32_t argv_addr = sp + 4; return wrapper_execvp(mem, file_addr, argv_addr); } -int wrapper_execv(uint8_t *mem, uint32_t pathname_addr, uint32_t argv_addr) { +int wrapper_execv(uint8_t* mem, uint32_t pathname_addr, uint32_t argv_addr) { STRING(pathname) uint32_t argc = 0; while (MEM_U32(argv_addr + argc * 4) != 0) { ++argc; } - char *argv[argc + 1]; + char* argv[argc + 1]; for (uint32_t i = 0; i < argc; i++) { uint32_t str_addr = MEM_U32(argv_addr + i * 4); uint32_t len = wrapper_strlen(mem, str_addr) + 1; - argv[i] = (char *)malloc(len); - char *pos = argv[i]; + argv[i] = (char*)malloc(len); + char* pos = argv[i]; while (len--) { *pos++ = MEM_S8(str_addr); ++str_addr; @@ -2419,18 +2625,18 @@ int wrapper_execv(uint8_t *mem, uint32_t pathname_addr, uint32_t argv_addr) { return -1; } -int wrapper_execvp(uint8_t *mem, uint32_t file_addr, uint32_t argv_addr) { +int wrapper_execvp(uint8_t* mem, uint32_t file_addr, uint32_t argv_addr) { STRING(file) uint32_t argc = 0; while (MEM_U32(argv_addr + argc * 4) != 0) { ++argc; } - char *argv[argc + 1]; + char* argv[argc + 1]; for (uint32_t i = 0; i < argc; i++) { uint32_t str_addr = MEM_U32(argv_addr + i * 4); uint32_t len = wrapper_strlen(mem, str_addr) + 1; - argv[i] = (char *)malloc(len); - char *pos = argv[i]; + argv[i] = (char*)malloc(len); + char* pos = argv[i]; while (len--) { *pos++ = MEM_S8(str_addr); ++str_addr; @@ -2438,25 +2644,10 @@ int wrapper_execvp(uint8_t *mem, uint32_t file_addr, uint32_t argv_addr) { } argv[argc] = NULL; -#ifdef REDIRECT_USR_LIB - if (!strncmp(file, "/usr/lib/", 9) && bin_dir[0] != '\0') { - char fixed_path[PATH_MAX + 1]; -#ifdef __CYGWIN__ - int n = snprintf(fixed_path, sizeof(fixed_path), "%s/%s.exe", bin_dir, file + 9); -#else - int n = snprintf(fixed_path, sizeof(fixed_path), "%s/%s", bin_dir, file + 9); -#endif - if (n > 0 && n < sizeof(fixed_path)) { - execvp(fixed_path, argv); - } else { - execvp(file, argv); - } - } else { - execvp(file, argv); - } -#else - execvp(file, argv); -#endif + char rfile[PATH_MAX + 1]; + redirect_path(rfile, file, "/usr/lib", usr_lib_redirect); + + execvp(rfile, argv); MEM_U32(ERRNO_ADDR) = errno; for (uint32_t i = 0; i < argc; i++) { @@ -2465,7 +2656,7 @@ int wrapper_execvp(uint8_t *mem, uint32_t file_addr, uint32_t argv_addr) { return -1; } -int wrapper_fork(uint8_t *mem) { +int wrapper_fork(uint8_t* mem) { int ret = fork(); if (ret == -1) { MEM_U32(ERRNO_ADDR) = errno; @@ -2473,19 +2664,16 @@ int wrapper_fork(uint8_t *mem) { return ret; } -int wrapper_system(uint8_t *mem, uint32_t command_addr) { +int wrapper_system(uint8_t* mem, uint32_t command_addr) { STRING(command) return system(command); // no errno } -static int name_compare(uint8_t *mem, uint32_t a_addr, uint32_t b_addr) { - //printf("pc=0x00438180\n"); +static int name_compare(uint8_t* mem, uint32_t a_addr, uint32_t b_addr) { return wrapper_strcmp(mem, MEM_U32(a_addr), MEM_U32(b_addr)); } -static uint32_t tsearch_tfind(uint8_t *mem, uint32_t key_addr, uint32_t rootp_addr, uint32_t compar_addr, bool insert) { - //assert(compar_addr == 0x438180); // name_compare in as1 - +static uint32_t tsearch_tfind(uint8_t* mem, uint32_t key_addr, uint32_t rootp_addr, uint32_t compar_addr, bool insert) { if (rootp_addr == 0) { return 0; } @@ -2510,34 +2698,274 @@ static uint32_t tsearch_tfind(uint8_t *mem, uint32_t key_addr, uint32_t rootp_ad return 0; } -uint32_t wrapper_tsearch(uint8_t *mem, uint32_t key_addr, uint32_t rootp_addr, uint32_t compar_addr) { +uint32_t wrapper_tsearch(uint8_t* mem, uint32_t key_addr, uint32_t rootp_addr, uint32_t compar_addr) { return tsearch_tfind(mem, key_addr, rootp_addr, compar_addr, true); } -uint32_t wrapper_tfind(uint8_t *mem, uint32_t key_addr, uint32_t rootp_addr, uint32_t compar_addr) { +uint32_t wrapper_tfind(uint8_t* mem, uint32_t key_addr, uint32_t rootp_addr, uint32_t compar_addr) { return tsearch_tfind(mem, key_addr, rootp_addr, compar_addr, false); } -uint32_t wrapper_qsort(uint8_t *mem, uint32_t base_addr, uint32_t num, uint32_t size, uint64_t (*trampoline)(uint8_t *mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t fp_dest), uint32_t compare_addr, uint32_t sp) { - assert(0 && "qsort not implemented"); +// qsort implementation from SGI libc, originally derived from +// https://people.ece.ubc.ca/~eddieh/glu_dox/d7/da4/qsort_8c_source.html (public domain) + +#define CMP(x, y) (int32_t)(trampoline(mem, sp, (x), (y), 0, 0, compare_addr) >> 32) + +static void qst(uint8_t* mem, uint32_t start, uint32_t end, fptr_trampoline trampoline, uint32_t compare_addr, + uint32_t sp, uint32_t size, uint32_t minSortSize, uint32_t medianOfThreeThreshold); + +uint32_t wrapper_qsort(uint8_t* mem, uint32_t base_addr, uint32_t count, uint32_t size, fptr_trampoline trampoline, + uint32_t compare_addr, uint32_t sp) { + uint32_t end; + uint32_t it; + uint32_t prevIt; + uint32_t byteIt; + uint32_t hi; + uint32_t insPos; + uint32_t cur; + uint32_t smallest; + uint8_t temp; + + if (count < 2) { + return 0; + } + + end = base_addr + (count * size); + + if (count >= 4) { + // run a rough quicksort + qst(mem, base_addr, end, trampoline, compare_addr, sp, size, size * 4, size * 6); + // the smallest element will be one of the first 4 + hi = base_addr + size * 4; + } else { + hi = end; + } + + // Find the smallest element and swap it to the front + smallest = base_addr; + for (it = base_addr + size; it < hi; it += size) { + if (CMP(smallest, it) > 0) { + smallest = it; + } + } + + if (smallest != base_addr) { + for (it = base_addr; it < base_addr + size; smallest++, it++) { + temp = MEM_U8(smallest); + MEM_U8(smallest) = MEM_U8(it); + MEM_U8(it) = temp; + } + } + + // Do insertion sort on the rest of the elements + for (cur = base_addr + size; cur < end; cur += size) { + + // Find where cur should go + insPos = cur - size; + while (CMP(insPos, cur) > 0) { + if (base_addr == insPos) { + // This isn't logically possible, because we've put the smallest element first. + // But it can happen if the comparator function is faulty, and it's best not to + // write out of bounds in that situation. + break; + } + insPos -= size; + } + insPos += size; + + if (insPos == cur) { + continue; + } + + for (byteIt = cur + size; --byteIt >= cur;) { + temp = MEM_U8(byteIt); + prevIt = byteIt; + for (it = byteIt - size; it >= insPos; it -= size) { + MEM_U8(prevIt) = MEM_U8(it); + prevIt = it; + } + MEM_U8(prevIt) = temp; + } + } + return 0; } -uint32_t wrapper_regcmp(uint8_t *mem, uint32_t string1_addr, uint32_t sp) { +static void qst(uint8_t* mem, uint32_t start, uint32_t end, fptr_trampoline trampoline, uint32_t compare_addr, + uint32_t sp, uint32_t size, uint32_t minSortSize, uint32_t medianOfThreeThreshold) { + uint32_t sizeAfterPivot; + uint32_t sizeBeforePivot; + uint32_t totalSize; + int32_t i; + uint32_t afterPivot; + uint32_t last; + uint32_t newPartitionFirst; + uint32_t median; + uint32_t partitionFirst; + uint32_t partitionLast; + uint32_t pivot; + uint32_t swapWith; + uint8_t temp; + + totalSize = end - start; + do { + last = end - size; + pivot = partitionFirst = (((totalSize / size) >> 1) * size) + start; + if (totalSize >= medianOfThreeThreshold) { + // compute median of three + median = CMP(start, pivot) > 0 ? start : pivot; + if (CMP(median, last) > 0) { + median = median == start ? pivot : start; + median = CMP(median, last) < 0 ? last : median; + } + + // swap the median so it ends up in the middle + if (median != pivot) { + // Fake-match: use partitionFirst here instead of e.g. swapWith. + i = size; + do { + temp = MEM_U8(partitionFirst); + MEM_U8(partitionFirst) = MEM_U8(median); + MEM_U8(median) = temp; + partitionFirst++; + median++; + i--; + } while (i != 0); + } + } + + // Partition the elements start, ..., pivot, ..., last, such that values smaller than the + // pivot are on the left, and values greater than the pivot are on the right (equal ones can + // go wherever). The pivot may end up getting swapped into another position in the process. + + partitionFirst = start; + partitionLast = last; + + // Loop invariant: Elements partitionFirst, ..., partitionLast remain to be partitioned, + // and pivot is in that range. + for (;;) { + while (partitionFirst < pivot && CMP(partitionFirst, pivot) < 0) { + // Skip over smaller values on the left. + partitionFirst += size; + } + + while (pivot < partitionLast) { + if (CMP(pivot, partitionLast) < 0) { + // Skip over greater values on the right. + partitionLast -= size; + } else { + // We have found a value we cannot skip over. Put it at the front. + // If the pivot was at the front, it gets swapped to the last position, + // otherwise, the value at the front is something we know isn't smaller + // than the pivot, so we can skip partitioning it. + newPartitionFirst = partitionFirst + size; + if (partitionFirst == pivot) { + swapWith = partitionLast; + pivot = partitionLast; + } else { + swapWith = partitionLast; + partitionLast -= size; + } + goto swapFront; + } + } + + // We have hit up against the pivot at the end. Swap it to the front to we can + // skip over it. The front element is known to not be smaller than the pivot, + // except if the pivot is at the front also, i.e. if the range has been reduced + // down to size 1 -- in that case it's time to break out of the loop. + partitionLast -= size; + if (partitionFirst == pivot) { + break; + } + swapWith = pivot; + pivot = partitionFirst; + newPartitionFirst = partitionFirst; + + swapFront: + i = size; + do { + temp = MEM_U8(partitionFirst); + MEM_U8(partitionFirst) = MEM_U8(swapWith); + MEM_U8(swapWith) = temp; + partitionFirst++; + swapWith++; + i--; + } while (i != 0); + partitionFirst = newPartitionFirst; + } + + afterPivot = pivot + size; + sizeBeforePivot = pivot - start; + sizeAfterPivot = end - afterPivot; + totalSize = sizeBeforePivot; + if (sizeAfterPivot >= sizeBeforePivot) { + if (sizeBeforePivot >= minSortSize) { + qst(mem, start, pivot, trampoline, compare_addr, sp, size, minSortSize, medianOfThreeThreshold); + } + start = afterPivot; + totalSize = sizeAfterPivot; + } else { + if (sizeAfterPivot >= minSortSize) { + qst(mem, afterPivot, end, trampoline, compare_addr, sp, size, minSortSize, medianOfThreeThreshold); + } + end = pivot; + } + } while (totalSize >= minSortSize); +} + +#undef CMP + +uint32_t wrapper_regcmp(uint8_t* mem, uint32_t string1_addr, uint32_t sp) { STRING(string1); fprintf(stderr, "regex string: %s\n", string1); assert(0 && "regcmp not implemented"); return 0; } -uint32_t wrapper_regex(uint8_t *mem, uint32_t re_addr, uint32_t subject_addr, uint32_t sp) { +uint32_t wrapper_regex(uint8_t* mem, uint32_t re_addr, uint32_t subject_addr, uint32_t sp) { STRING(subject); assert(0 && "regex not implemented"); return 0; } -void wrapper___assert(uint8_t *mem, uint32_t assertion_addr, uint32_t file_addr, int line) { +void wrapper___assert(uint8_t* mem, uint32_t assertion_addr, uint32_t file_addr, int line) { STRING(assertion) STRING(file) __assert(assertion, file, line); } + +union host_doubleword { + uint64_t ww; + double d; +}; + +union FloatReg FloatReg_from_double(double d) { + union host_doubleword val; + union FloatReg floatreg; + + val.d = d; + + floatreg.w[0] = val.ww & 0xFFFFFFFF; + floatreg.w[1] = (val.ww >> 32) & 0xFFFFFFFF; + + return floatreg; +} + +double double_from_FloatReg(union FloatReg floatreg) { + union host_doubleword val; + + val.ww = floatreg.w[1]; + val.ww <<= 32; + val.ww |= floatreg.w[0]; + return val.d; +} + +double double_from_memory(uint8_t* mem, uint32_t address) { + union host_doubleword val; + + val.ww = MEM_U32(address); + val.ww <<= 32; + val.ww |= MEM_U32(address + 4); + return val.d; +} diff --git a/tools/ido5.3_recomp/libc_impl.h b/tools/ido-static-recomp/libc_impl.h similarity index 93% rename from tools/ido5.3_recomp/libc_impl.h rename to tools/ido-static-recomp/libc_impl.h index 0f1d920f..b9f50b37 100644 --- a/tools/ido5.3_recomp/libc_impl.h +++ b/tools/ido-static-recomp/libc_impl.h @@ -1,5 +1,14 @@ +#ifndef LIBC_IMPL_H +#define LIBC_IMPL_H + #include +union FloatReg { + float f[2]; + uint32_t w[2]; + //double d; +}; + void mmap_initial_data_range(uint8_t *mem, uint32_t start, uint32_t end); void setup_libc_data(uint8_t *mem); @@ -31,6 +40,8 @@ int wrapper_atol(uint8_t *mem, uint32_t nptr_addr); double wrapper_atof(uint8_t *mem, uint32_t nptr_addr); int wrapper_strtol(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr, int base); uint32_t wrapper_strtoul(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr, int base); +int64_t wrapper_strtoll(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr, int base); +uint64_t wrapper_strtoull(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr, int base); double wrapper_strtod(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr); uint32_t wrapper_strchr(uint8_t *mem, uint32_t str_addr, int c); uint32_t wrapper_strrchr(uint8_t *mem, uint32_t str_addr, int c); @@ -39,6 +50,7 @@ uint32_t wrapper_strpbrk(uint8_t *mem, uint32_t str_addr, uint32_t accept_addr); int wrapper_fstat(uint8_t *mem, int fildes, uint32_t buf_addr); int wrapper_stat(uint8_t *mem, uint32_t pathname_addr, uint32_t buf_addr); int wrapper_ftruncate(uint8_t *mem, int fd, int length); +int wrapper_truncate(uint8_t *mem, uint32_t pathname_addr, int length); void wrapper_bcopy(uint8_t *mem, uint32_t src_addr, uint32_t dst_addr, uint32_t len); uint32_t wrapper_memcpy(uint8_t *mem, uint32_t dst_addr, uint32_t src_addr, uint32_t len); uint32_t wrapper_memccpy(uint8_t *mem, uint32_t dst_addr, uint32_t src_addr, int c, uint32_t len); @@ -48,6 +60,7 @@ uint32_t wrapper_fopen(uint8_t *mem, uint32_t path_addr, uint32_t mode_addr); uint32_t wrapper_freopen(uint8_t *mem, uint32_t path_addr, uint32_t mode_addr, uint32_t fp_addr); int wrapper_fclose(uint8_t *mem, uint32_t fp_addr); int wrapper_fflush(uint8_t *mem, uint32_t fp_addr); +int wrapper_fchown(uint8_t *mem, int fd, int owner, int group); int wrapper_ftell(uint8_t *mem, uint32_t fp_addr); void wrapper_rewind(uint8_t *mem, uint32_t fp_addr); int wrapper_fseek(uint8_t *mem, uint32_t fp_addr, int offset, int origin); @@ -101,10 +114,10 @@ int wrapper_time(uint8_t *mem, uint32_t tloc_addr); void wrapper_bzero(uint8_t *mem, uint32_t str_addr, uint32_t n); int wrapper_fp_class_d(double d); double wrapper_ldexp(double d, int i); -int64_t wrapper___ll_mul(int64_t a0, int64_t a1); +uint64_t wrapper___ll_mul(uint64_t a0, uint64_t a1); int64_t wrapper___ll_div(int64_t a0, int64_t a1); int64_t wrapper___ll_rem(uint64_t a0, int64_t a1); -int64_t wrapper___ll_lshift(int64_t a0, uint64_t shift); +uint64_t wrapper___ll_lshift(uint64_t a0, uint64_t shift); int64_t wrapper___ll_rshift(int64_t a0, uint64_t shift); uint64_t wrapper___ull_div(uint64_t a0, uint64_t a1); uint64_t wrapper___ull_rem(uint64_t a0, uint64_t a1); @@ -161,3 +174,9 @@ uint32_t wrapper_qsort(uint8_t *mem, uint32_t base_addr, uint32_t num, uint32_t uint32_t wrapper_regcmp(uint8_t *mem, uint32_t string1_addr, uint32_t sp); uint32_t wrapper_regex(uint8_t *mem, uint32_t re_addr, uint32_t subject_addr, uint32_t sp); void wrapper___assert(uint8_t *mem, uint32_t assertion_addr, uint32_t file_addr, int line); + +union FloatReg FloatReg_from_double(double d); +double double_from_FloatReg(union FloatReg floatreg); +double double_from_memory(uint8_t *mem, uint32_t address); + +#endif diff --git a/tools/ido-static-recomp/recomp.cpp b/tools/ido-static-recomp/recomp.cpp new file mode 100644 index 00000000..683e750d --- /dev/null +++ b/tools/ido-static-recomp/recomp.cpp @@ -0,0 +1,3813 @@ +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "rabbitizer.hpp" +#include "rabbitizer.h" + +#include "elf.h" + +#if defined(_WIN32) && !defined(__CYGWIN__) +#include +#endif /* _WIN32 && !__CYGWIN__ */ + +#if !defined(_MSC_VER) && !defined(__CYGWIN__) && !defined(_WIN32) +#define UNIX_PLATFORM +#endif + +#ifdef UNIX_PLATFORM +// TODO: determine if any of those headers are not required +#include +#include +#include // for __cxa_demangle +#include // for dladdr +#include +#include +#endif + +#ifndef FULL_TRACEBACK +// Change to non-zero to have full traceback, including names not exported +#define FULL_TRACEBACK 0 +#endif + +// set this to 1 when testing a new program, to verify that no false function pointers are found +#define INSPECT_FUNCTION_POINTERS 0 + +#ifndef TRACE +#define TRACE 0 +#endif + +#define LABELS_64_BIT 1 + +#ifndef DUMP_INSTRUCTIONS +// Set to non-zero to dump actual disassembly when dumping C code +#define DUMP_INSTRUCTIONS 0 +#endif + +#define u32be(x) (uint32_t)(((x & 0xff) << 24) + ((x & 0xff00) << 8) + ((x & 0xff0000) >> 8) + ((uint32_t)(x) >> 24)) +#define u16be(x) (uint16_t)(((x & 0xff) << 8) + ((x & 0xff00) >> 8)) +#define read_u32_be(buf) (uint32_t)(((buf)[0] << 24) + ((buf)[1] << 16) + ((buf)[2] << 8) + ((buf)[3])) + +#define UniqueId_cpu_li rabbitizer::InstrId::UniqueId::cpu_USERDEF_00 +#define UniqueId_cpu_la rabbitizer::InstrId::UniqueId::cpu_USERDEF_01 + +using namespace std; + +struct Edge { + uint32_t i; + uint8_t function_entry : 1; + uint8_t function_exit : 1; + uint8_t extern_function : 1; + uint8_t function_pointer : 1; +}; + +struct Insn { + // base instruction + rabbitizer::InstructionCpu instruction; + + // + bool is_global_got_memop; + bool no_following_successor; + + // patching instructions + bool patched; + // lui pairs + uint32_t patched_addr; + // immediates are 16 bits wide, but they can be either signed or unsigned + // a 32 bits signed member can hold all those possible values + int32_t patched_imms; + rabbitizer::Registers::Cpu::GprO32 lila_dst_reg; + int linked_insn; + union { + uint32_t linked_value; + float linked_float; + }; + + // jumptable instructions + uint32_t jtbl_addr; + uint32_t num_cases; + rabbitizer::Registers::Cpu::GprO32 index_reg; + + // graph + vector successors; + vector predecessors; + uint64_t b_liveout; + uint64_t b_livein; + uint64_t f_livein; + uint64_t f_liveout; + + Insn(uint32_t word, uint32_t vram) : instruction(word, vram) { + this->is_global_got_memop = false; + this->no_following_successor = false; + + this->patched = false; + this->patched_addr = 0; + this->patched_imms = 0; + this->lila_dst_reg = rabbitizer::Registers::Cpu::GprO32::GPR_O32_zero; + this->linked_insn = -1; + this->linked_value = 0; + + this->jtbl_addr = 0; + this->num_cases = 0; + this->index_reg = rabbitizer::Registers::Cpu::GprO32::GPR_O32_zero; + + this->b_liveout = 0; + this->b_livein = 0; + this->f_livein = 0; + this->f_liveout = 0; + } + + void patchInstruction(rabbitizer::InstrId::UniqueId instructionId) { + this->patched = true; + RabbitizerInstruction* innerInstr = this->instruction.getCPtr(); + innerInstr->uniqueId = (RabbitizerInstrId)(instructionId); + innerInstr->descriptor = &RabbitizerInstrDescriptor_Descriptors[innerInstr->uniqueId]; + } + + void patchAddress(rabbitizer::InstrId::UniqueId instructionId, uint32_t newAddress) { + this->patchInstruction(instructionId); + this->patched_addr = newAddress; + } + + uint32_t getAddress() const { + if (this->patched && this->patched_addr != 0) { + return this->patched_addr; + } + + if (this->instruction.hasOperandAlias(rabbitizer::OperandType::cpu_label)) { + return this->instruction.getInstrIndexAsVram(); + } + + if (this->instruction.isBranch()) { + return this->instruction.getVram() + this->instruction.getBranchOffset(); + } + + assert(!"unreachable code"); + } + + void patchImmediate(int32_t newImmediate) { + this->patched = true; + this->patched_imms = newImmediate; + } + + int32_t getImmediate() const { + if (this->patched) { + return this->patched_imms; + } + + return this->instruction.getProcessedImmediate(); + } + + std::string disassemble() const { + char buffer[0x1000]; + int32_t imm; + + switch (this->instruction.getUniqueId()) { + case UniqueId_cpu_li: + imm = this->getImmediate(); + if (imm >= 0) { + sprintf(buffer, "li %s, 0x%X", RabbitizerRegister_getNameGpr((int)this->lila_dst_reg), + imm); + } else { + sprintf(buffer, "li %s, %i", RabbitizerRegister_getNameGpr((int)this->lila_dst_reg), imm); + } + return buffer; + + case UniqueId_cpu_la: + sprintf(buffer, "la %s, 0x%X", RabbitizerRegister_getNameGpr((int)this->lila_dst_reg), + this->getAddress()); + return buffer; + + default: + return this->instruction.disassembleInstruction(0); + } + } +}; + +struct Function { + vector returns; // points to delay slots + uint32_t end_addr; // address after end + uint32_t nargs; + uint32_t nret; + bool v0_in; + bool referenced_by_function_pointer; +}; + +bool conservative; + +const uint8_t* text_section; +uint32_t text_section_len; +uint32_t text_vaddr; + +const uint8_t* rodata_section; +uint32_t rodata_section_len; +uint32_t rodata_vaddr; + +const uint8_t* data_section; +uint32_t data_section_len; +uint32_t data_vaddr; + +uint32_t bss_section_len; +uint32_t bss_vaddr; + +vector insns; +set label_addresses; +vector got_globals; +vector got_locals; +uint32_t gp_value; +uint32_t gp_value_adj; + +map symbol_names; + +vector> data_function_pointers; +set la_function_pointers; +map functions; +uint32_t main_addr; +uint32_t mcount_addr; +uint32_t procedure_table_start; +uint32_t procedure_table_len; + +#define FLAG_NO_MEM 1 +#define FLAG_VARARG 2 + +/** + * Struct containing information on external functions that are called using the wrappers in `libc_impl.c`. + * + * name: function name + * params: first char is return type, subsequent chars are argument types. Key to chars used: + * - 'v' void + * - 'i' signed int (int32_t) + * - 'u' unsigned int (uint32_t) + * - 'p' pointer (uintptr_t) + * - 'f' float + * - 'd' double + * - 'l' signed long long (int64_t) + * - 'j' unsigned long long (uint64_t) + * - 't' trampoline + * + * flags: use defines above + */ +const struct ExternFunction { + const char* name; + const char* params; + int flags; +} extern_functions[] = { + { "exit", "vi", 0 }, // override exit from application + { "abort", "v", 0 }, + { "sbrk", "pi", 0 }, + { "malloc", "pu", 0 }, + { "calloc", "puu", 0 }, + { "realloc", "ppu", 0 }, + { "free", "vp", 0 }, + { "fscanf", "ipp", FLAG_VARARG }, + { "printf", "ip", FLAG_VARARG }, + { "sprintf", "ipp", FLAG_VARARG }, + { "fprintf", "ipp", FLAG_VARARG }, + { "_doprnt", "ippp", 0 }, + { "strlen", "up", 0 }, + { "open", "ipii", 0 }, + { "creat", "ipi", 0 }, + { "access", "ipi", 0 }, + { "rename", "ipp", 0 }, + { "utime", "ipp", 0 }, + { "flock", "iii", 0 }, + { "chmod", "ipu", 0 }, + { "umask", "ii", FLAG_NO_MEM }, + { "ecvt", "pdipp", 0 }, + { "fcvt", "pdipp", 0 }, + { "sqrt", "dd", FLAG_NO_MEM }, + { "sqrtf", "ff", FLAG_NO_MEM }, + { "atoi", "ip", 0 }, + { "atol", "ip", 0 }, + { "atof", "dp", 0 }, + { "strtol", "ippi", 0 }, + { "strtoul", "uppi", 0 }, + { "strtoll", "lppi", 0 }, + { "strtoull", "jppi", 0 }, + { "strtod", "dpp", 0 }, + { "strchr", "ppi", 0 }, + { "strrchr", "ppi", 0 }, + { "strcspn", "upp", 0 }, + { "strpbrk", "ppp", 0 }, + { "fstat", "iip", 0 }, + { "stat", "ipp", 0 }, + { "ftruncate", "iii", 0 }, + { "truncate", "ipi", 0}, + { "bcopy", "vppu", 0 }, + { "memcpy", "pppu", 0 }, + { "memccpy", "pppiu", 0 }, + { "read", "iipu", 0 }, + { "write", "iipu", 0 }, + { "fopen", "ppp", 0 }, + { "freopen", "pppp", 0 }, + { "fclose", "ip", 0 }, + { "ftell", "ip", 0 }, + { "rewind", "vp", 0 }, + { "fseek", "ipii", 0 }, + { "lseek", "iiii", 0 }, + { "fflush", "ip", 0 }, + { "fchown", "iiii", 0 }, + { "dup", "ii", 0 }, + { "dup2", "iii", 0 }, + { "pipe", "ip", 0 }, + { "perror", "vp", 0 }, + { "fdopen", "iip", 0 }, + { "memset", "ppiu", 0 }, + { "bcmp", "ippu", 0 }, + { "memcmp", "ippu", 0 }, + { "getpid", "i", FLAG_NO_MEM }, + { "getpgrp", "i", 0 }, + { "remove", "ip", 0 }, + { "unlink", "ip", 0 }, + { "close", "ii", 0 }, + { "strcmp", "ipp", 0 }, + { "strncmp", "ippu", 0 }, + { "strcpy", "ppp", 0 }, + { "strncpy", "pppu", 0 }, + { "strcat", "ppp", 0 }, + { "strncat", "pppu", 0 }, + { "strtok", "ppp", 0 }, + { "strstr", "ppp", 0 }, + { "strdup", "pp", 0 }, + { "toupper", "ii", FLAG_NO_MEM }, + { "tolower", "ii", FLAG_NO_MEM }, + { "gethostname", "ipu", 0 }, + { "isatty", "ii", 0 }, + { "strftime", "upupp", 0 }, + { "times", "ip", 0 }, + { "clock", "i", FLAG_NO_MEM }, + { "ctime", "pp", 0 }, + { "localtime", "pp", 0 }, + { "setvbuf", "ippiu", 0 }, + { "__semgetc", "ip", 0 }, + { "__semputc", "iip", 0 }, + { "fgetc", "ip", 0 }, + { "fgets", "ipip", 0 }, + { "__filbuf", "ip", 0 }, + { "__flsbuf", "iip", 0 }, + { "ungetc", "iip", 0 }, + { "gets", "pp", 0 }, + { "fread", "upuup", 0 }, + { "fwrite", "upuup", 0 }, + { "fputs", "ipp", 0 }, + { "puts", "ip", 0 }, + { "getcwd", "ppu", 0 }, + { "time", "ip", 0 }, + { "bzero", "vpu", 0 }, + { "fp_class_d", "id", FLAG_NO_MEM }, + { "ldexp", "ddi", FLAG_NO_MEM }, + { "__ll_mul", "lll", FLAG_NO_MEM }, + { "__ll_div", "lll", FLAG_NO_MEM }, + { "__ll_rem", "ljl", FLAG_NO_MEM }, + { "__ll_lshift", "llj", FLAG_NO_MEM }, + { "__ll_rshift", "llj", FLAG_NO_MEM }, + { "__ull_div", "jjj", FLAG_NO_MEM }, + { "__ull_rem", "jjj", FLAG_NO_MEM }, + { "__ull_rshift", "jjj", FLAG_NO_MEM }, + { "__d_to_ull", "jd", FLAG_NO_MEM }, + { "__d_to_ll", "ld", FLAG_NO_MEM }, + { "__f_to_ull", "jf", FLAG_NO_MEM }, + { "__f_to_ll", "lf", FLAG_NO_MEM }, + { "__ull_to_f", "fj", FLAG_NO_MEM }, + { "__ll_to_f", "fl", FLAG_NO_MEM }, + { "__ull_to_d", "dj", FLAG_NO_MEM }, + { "__ll_to_d", "dl", FLAG_NO_MEM }, + { "_exit", "vi", 0 }, + { "_cleanup", "v", 0 }, + { "_rld_new_interface", "pu", FLAG_VARARG }, + { "_exithandle", "v", 0 }, + { "_prctl", "ii", FLAG_VARARG }, + { "_atod", "dpii", 0 }, + { "pathconf", "ipi", 0 }, + { "getenv", "pp", 0 }, + { "gettxt", "ppp", 0 }, + { "setlocale", "pip", 0 }, + { "mmap", "ppuiiii", 0 }, + { "munmap", "ipu", 0 }, + { "mprotect", "ipui", 0 }, + { "sysconf", "ii", 0 }, + { "getpagesize", "i", 0 }, + { "strerror", "pi", 0 }, + { "ioctl", "iiu", FLAG_VARARG }, + { "fcntl", "iii", FLAG_VARARG }, + { "signal", "pit", 0 }, + { "sigset", "pit", 0 }, + { "get_fpc_csr", "i", 0 }, + { "set_fpc_csr", "ii", 0 }, + { "setjmp", "ip", 0 }, + { "longjmp", "vpi", 0 }, + { "tempnam", "ppp", 0 }, + { "tmpnam", "pp", 0 }, + { "mktemp", "pp", 0 }, + { "mkstemp", "ip", 0 }, + { "tmpfile", "p", 0 }, + { "wait", "ip", 0 }, + { "kill", "iii", 0 }, + { "execlp", "ip", FLAG_VARARG }, + { "execv", "ipp", 0 }, + { "execvp", "ipp", 0 }, + { "fork", "i", 0 }, + { "system", "ip", 0 }, + { "tsearch", "pppp", 0 }, + { "tfind", "pppp", 0 }, + { "qsort", "vpuut", 0 }, + { "regcmp", "pp", FLAG_VARARG }, + { "regex", "ppp", FLAG_VARARG }, + { "__assert", "vppi", 0 }, +}; + +void disassemble(void) { + uint32_t i; + + RabbitizerConfig_Cfg.misc.omit0XOnSmallImm = true; + RabbitizerConfig_Cfg.misc.opcodeLJust -= 8; + RabbitizerConfig_Cfg.misc.upperCaseImm = false; + insns.reserve(1 + text_section_len / sizeof(uint32_t)); // +1 for dummy instruction + + for (i = 0; i < text_section_len; i += sizeof(uint32_t)) { + uint32_t word = read_u32_be(&text_section[i]); + Insn insn(word, text_vaddr + i); + insns.push_back(insn); + } + + { + // Add dummy NOP instruction to avoid out of bounds + Insn insn(0x00000000, text_vaddr + i); + insn.no_following_successor = true; + insns.push_back(insn); + } +} + +void add_function(uint32_t addr) { + if (addr >= text_vaddr && addr < text_vaddr + text_section_len) { + functions[addr]; + } +} + +map::iterator find_function(uint32_t addr) { + if (functions.size() == 0) { + return functions.end(); + } + + auto it = functions.upper_bound(addr); + + if (it == functions.begin()) { + return functions.end(); + } + + --it; + return it; +} + +rabbitizer::Registers::Cpu::GprO32 get_dest_reg(const Insn& insn) { + switch (insn.instruction.getUniqueId()) { + case rabbitizer::InstrId::UniqueId::cpu_jalr: + // jalr technically modifies rd, so an empty case is here to avoid crashing + break; + + case UniqueId_cpu_li: + case UniqueId_cpu_la: + return insn.lila_dst_reg; + + default: + if (insn.instruction.modifiesRt()) { + return insn.instruction.GetO32_rt(); + } else if (insn.instruction.modifiesRd()) { + return insn.instruction.GetO32_rd(); + } + break; + } + + return rabbitizer::Registers::Cpu::GprO32::GPR_O32_zero; +} + +// try to find a matching LUI for a given register +void link_with_lui(int offset, rabbitizer::Registers::Cpu::GprO32 reg, int mem_imm) { +#define MAX_LOOKBACK 128 + // don't attempt to compute addresses for zero offset + // end search after some sane max number of instructions + int end_search = std::max(0, offset - MAX_LOOKBACK); + + for (int search = offset - 1; search >= end_search; search--) { + switch (insns[search].instruction.getUniqueId()) { + case rabbitizer::InstrId::UniqueId::cpu_lui: + if (reg == insns[search].instruction.GetO32_rt()) { + goto loop_end; + } + continue; + + case rabbitizer::InstrId::UniqueId::cpu_lw: + case rabbitizer::InstrId::UniqueId::cpu_ld: + case rabbitizer::InstrId::UniqueId::cpu_addiu: + case rabbitizer::InstrId::UniqueId::cpu_add: + case rabbitizer::InstrId::UniqueId::cpu_sub: + case rabbitizer::InstrId::UniqueId::cpu_subu: + if (reg == get_dest_reg(insns[search])) { + if ((insns[search].instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_lw) && + insns[search].instruction.GetO32_rs() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_gp) { + int mem_imm0 = insns[search].instruction.getProcessedImmediate(); + uint32_t got_entry = (mem_imm0 + gp_value_adj) / sizeof(uint32_t); + + if (got_entry < got_locals.size()) { + // used for static functions + uint32_t addr = got_locals[got_entry] + mem_imm; + insns[search].linked_insn = offset; + insns[search].linked_value = addr; + insns[offset].linked_insn = search; + insns[offset].linked_value = addr; + + // Patch instruction to contain full address + insns[search].lila_dst_reg = get_dest_reg(insns[search]); + insns[search].patchAddress(UniqueId_cpu_la, addr); + + // Patch instruction to have offset 0 + switch (insns[offset].instruction.getUniqueId()) { + case rabbitizer::InstrId::UniqueId::cpu_addiu: { + rabbitizer::Registers::Cpu::GprO32 dst_reg = insns[offset].instruction.GetO32_rt(); + insns[offset].patchInstruction(rabbitizer::InstrId::UniqueId::cpu_move); + // Patch the destination register too + insns[offset].instruction.Set_rd(dst_reg); + } + + if (addr >= text_vaddr && addr < text_vaddr + text_section_len) { + add_function(addr); + } + goto loop_end; + + case rabbitizer::InstrId::UniqueId::cpu_lb: + case rabbitizer::InstrId::UniqueId::cpu_lbu: + case rabbitizer::InstrId::UniqueId::cpu_sb: + case rabbitizer::InstrId::UniqueId::cpu_lh: + case rabbitizer::InstrId::UniqueId::cpu_lhu: + case rabbitizer::InstrId::UniqueId::cpu_sh: + case rabbitizer::InstrId::UniqueId::cpu_lw: + case rabbitizer::InstrId::UniqueId::cpu_sw: + case rabbitizer::InstrId::UniqueId::cpu_ldc1: + case rabbitizer::InstrId::UniqueId::cpu_lwc1: + case rabbitizer::InstrId::UniqueId::cpu_swc1: + insns[offset].patchImmediate(0); + goto loop_end; + + default: + assert(0 && "Unsupported instruction type"); + } + } + goto loop_end; + } else { + // ignore: reg is pointer, offset is probably struct data member + goto loop_end; + } + } + + continue; + + case rabbitizer::InstrId::UniqueId::cpu_jr: + if ((insns[search].instruction.GetO32_rs() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_ra) && + (offset - search >= 2)) { + // stop looking when previous `jr ra` is hit, + // but ignore if `offset` is branch delay slot for this `jr ra` + goto loop_end; + } + continue; + + default: + continue; + } + } +loop_end:; +} + +// for a given `jalr t9`, find the matching t9 load +void link_with_jalr(int offset) { + // end search after some sane max number of instructions + int end_search = std::max(0, offset - MAX_LOOKBACK); + + for (int search = offset - 1; search >= end_search; search--) { + if (get_dest_reg(insns[search]) == rabbitizer::Registers::Cpu::GprO32::GPR_O32_t9) { + // should be a switch with returns + switch (insns[search].instruction.getUniqueId()) { + case rabbitizer::InstrId::UniqueId::cpu_lw: + case UniqueId_cpu_la: + if (insns[search].is_global_got_memop || + (insns[search].instruction.getUniqueId() == UniqueId_cpu_la)) { + insns[search].linked_insn = offset; + insns[offset].linked_insn = search; + insns[offset].linked_value = insns[search].linked_value; + + insns[offset].patchAddress(rabbitizer::InstrId::UniqueId::cpu_jal, insns[search].linked_value); + + insns[search].patchInstruction(rabbitizer::InstrId::UniqueId::cpu_nop); + insns[search].is_global_got_memop = false; + + add_function(insns[search].linked_value); + } + return; + + case rabbitizer::InstrId::UniqueId::cpu_addiu: + if (insns[search].linked_insn != -1) { + uint32_t first = insns[search].linked_insn; + + // not describing as patched since instruction not edited + insns[search].linked_insn = offset; + insns[offset].linked_insn = first; + insns[offset].linked_value = insns[search].linked_value; + } + return; + + case rabbitizer::InstrId::UniqueId::cpu_ld: + case rabbitizer::InstrId::UniqueId::cpu_addu: + case rabbitizer::InstrId::UniqueId::cpu_add: + case rabbitizer::InstrId::UniqueId::cpu_sub: + case rabbitizer::InstrId::UniqueId::cpu_subu: + return; + + default: + break; + } + } else if ((insns[search].instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_jr) && + (insns[search].instruction.GetO32_rs() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_ra)) { + // stop looking when previous `jr ra` is hit + return; + } + } +} + +// TODO: uniformise use of insn vs insns[i] +void pass1(void) { + for (size_t i = 0; i < insns.size(); i++) { + Insn& insn = insns[i]; + + // TODO: replace with BAL. Or just fix properly + if (insn.instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_bal) { + insn.patchAddress(rabbitizer::InstrId::UniqueId::cpu_jal, + insn.instruction.getVram() + insn.instruction.getBranchOffset()); + } + + if (insn.instruction.isJump()) { + if (insn.instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_jal || + insn.instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_j) { + uint32_t target = insn.getAddress(); + + label_addresses.insert(target); + add_function(target); + } else if (insn.instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_jr) { + // sltiu $at, $ty, z + // sw $reg, offset($sp) (very seldom, one or more, usually in func entry) + // lw $gp, offset($sp) (if PIC, and very seldom) + // beqz $at, .L + // some other instruction (not always) + // lui $at, %hi(jtbl) + // sll $tx, $ty, 2 + // addu $at, $at, $tx + // lw $tx, %lo(jtbl)($at) + // nop (code compiled with 5.3) + // addu $tx, $tx, $gp (if PIC) + // jr $tx + + // IDO 7.1: + // lw at,offset(gp) + // andi t9,t8,0x3f + // sll t9,t9,0x2 + // addu at,at,t9 + // lw t9,offset(at) + // addu t9,t9,gp + // jr t9 + + // IDO 5.3: + // lw at,offset(gp) + // andi t3,t2,0x3f + // sll t3,t3,0x2 + // addu at,at,t3 + // something + // lw t3,offset(at) + // something + // addu t3,t3,gp + // jr t3 + if (i >= 7 && rodata_section != NULL) { + bool is_pic = + (insns[i - 1].instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_addu) && + (insns[i - 1].instruction.GetO32_rt() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_gp); + bool has_nop = + insns[i - is_pic - 1].instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_nop; + bool has_extra = insns[i - is_pic - has_nop - 5].instruction.getUniqueId() != + rabbitizer::InstrId::UniqueId::cpu_beqz; + int lw = i - (int)is_pic - (int)has_nop - 1; + + if (insns[lw].instruction.getUniqueId() != rabbitizer::InstrId::UniqueId::cpu_lw) { + --lw; + } + + if ((insns[lw].instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_lw) && + (insns[lw].linked_insn != -1)) { + int sltiu_index = -1; + int andi_index = -1; + uint32_t addu_index = lw - 1; + uint32_t num_cases; + bool found = false; + bool and_variant = false; + int end = 14; + + if (insns[addu_index].instruction.getUniqueId() != rabbitizer::InstrId::UniqueId::cpu_addu) { + --addu_index; + } + + if (insns[addu_index].instruction.getUniqueId() != rabbitizer::InstrId::UniqueId::cpu_addu) { + goto skip; + } + + if (insns[addu_index - 1].instruction.getUniqueId() != rabbitizer::InstrId::UniqueId::cpu_sll) { + goto skip; + } + + if (get_dest_reg(insns[addu_index - 1]) != insn.instruction.GetO32_rs()) { + goto skip; + } + + for (int j = 3; j <= 4; j++) { + if (insns[lw - j].instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_andi) { + andi_index = lw - j; + break; + } + } + + if (i == 368393) { + // In copt + end = 18; + } + + for (int j = 5; j <= end; j++) { + if ((insns[lw - has_extra - j].instruction.getUniqueId() == + rabbitizer::InstrId::UniqueId::cpu_sltiu) && + (insns[lw - has_extra - j].instruction.GetO32_rt() == + rabbitizer::Registers::Cpu::GprO32::GPR_O32_at)) { + sltiu_index = j; + break; + } + + if (insns[lw - has_extra - j].instruction.getUniqueId() == + rabbitizer::InstrId::UniqueId::cpu_jr) { + // Prevent going into a previous switch + break; + } + } + + if (sltiu_index != -1) { + andi_index = -1; + } + + if (sltiu_index != -1 && insns[lw - has_extra - sltiu_index].instruction.getUniqueId() == + rabbitizer::InstrId::UniqueId::cpu_sltiu) { + num_cases = insns[lw - has_extra - sltiu_index].instruction.getProcessedImmediate(); + found = true; + } else if (andi_index != -1) { + num_cases = insns[andi_index].instruction.getProcessedImmediate() + 1; + found = true; + and_variant = true; + } else if (i == 219382) { + // Special hard case in copt where the initial sltiu is in another basic block + found = true; + num_cases = 13; + } else if (i == 370995) { + // Special hard case in copt where the initial sltiu is in another basic block + found = true; + num_cases = 12; + } + + if (found) { + uint32_t jtbl_addr = insns[lw].linked_value; + + if (is_pic) { + insns[i - 1].patchInstruction(rabbitizer::InstrId::UniqueId::cpu_nop); + } + + insn.jtbl_addr = jtbl_addr; + insn.num_cases = num_cases; + insn.index_reg = insns[addu_index - 1].instruction.GetO32_rt(); + insns[lw].patchInstruction(rabbitizer::InstrId::UniqueId::cpu_nop); + + insns[addu_index].patchInstruction(rabbitizer::InstrId::UniqueId::cpu_nop); + + insns[addu_index - 1].patchInstruction(rabbitizer::InstrId::UniqueId::cpu_nop); + + if (!and_variant) { + insns[addu_index - 2].patchInstruction(rabbitizer::InstrId::UniqueId::cpu_nop); + } + + if (jtbl_addr < rodata_vaddr || + jtbl_addr + num_cases * sizeof(uint32_t) > rodata_vaddr + rodata_section_len) { + fprintf(stderr, "jump table outside rodata\n"); + exit(EXIT_FAILURE); + } + + for (uint32_t i = 0; i < num_cases; i++) { + uint32_t target_addr = + read_u32_be(rodata_section + (jtbl_addr - rodata_vaddr) + i * sizeof(uint32_t)); + + target_addr += gp_value; + // printf("%08X\n", target_addr); + label_addresses.insert(target_addr); + } + } + skip:; + } + } + } else if (insn.instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_jalr) { + // empty + } else { + assert(!"Unreachable code"); + } + } else if (insn.instruction.isBranch()) { + uint32_t target = insn.getAddress(); + + label_addresses.insert(target); + } + + switch (insns[i].instruction.getUniqueId()) { + // find floating point LI + case rabbitizer::InstrId::UniqueId::cpu_mtc1: { + rabbitizer::Registers::Cpu::GprO32 rt = insns[i].instruction.GetO32_rt(); + + for (int s = i - 1; s >= 0; s--) { + switch (insns[s].instruction.getUniqueId()) { + case rabbitizer::InstrId::UniqueId::cpu_lui: + if (insns[s].instruction.GetO32_rt() == rt) { + float f; + uint32_t lui_imm = insns[s].instruction.getProcessedImmediate() << 16; + + memcpy(&f, &lui_imm, sizeof(f)); + // link up the LUI with this instruction and the float + insns[s].linked_insn = i; + insns[s].linked_float = f; + // rewrite LUI instruction to be LI + insns[s].lila_dst_reg = get_dest_reg(insns[s]); + insns[s].patchInstruction(UniqueId_cpu_li); + insns[s].patchImmediate(lui_imm); + } + goto loop_end; + + case rabbitizer::InstrId::UniqueId::cpu_lw: + case rabbitizer::InstrId::UniqueId::cpu_ld: + case rabbitizer::InstrId::UniqueId::cpu_lh: + case rabbitizer::InstrId::UniqueId::cpu_lhu: + case rabbitizer::InstrId::UniqueId::cpu_lb: + case rabbitizer::InstrId::UniqueId::cpu_lbu: + case rabbitizer::InstrId::UniqueId::cpu_addiu: + if (rt == insns[s].instruction.GetO32_rt()) { + goto loop_end; + } + continue; + + case rabbitizer::InstrId::UniqueId::cpu_add: + case rabbitizer::InstrId::UniqueId::cpu_sub: + case rabbitizer::InstrId::UniqueId::cpu_subu: + if (rt == insns[s].instruction.GetO32_rd()) { + goto loop_end; + } + continue; + + case rabbitizer::InstrId::UniqueId::cpu_jr: + if (insns[s].instruction.GetO32_rs() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_ra) { + goto loop_end; + } + continue; + + default: + continue; + } + } + loop_end:; + } break; + + case rabbitizer::InstrId::UniqueId::cpu_sd: + case rabbitizer::InstrId::UniqueId::cpu_sw: + case rabbitizer::InstrId::UniqueId::cpu_sh: + case rabbitizer::InstrId::UniqueId::cpu_sb: + case rabbitizer::InstrId::UniqueId::cpu_lb: + case rabbitizer::InstrId::UniqueId::cpu_lbu: + case rabbitizer::InstrId::UniqueId::cpu_ld: + case rabbitizer::InstrId::UniqueId::cpu_ldl: + case rabbitizer::InstrId::UniqueId::cpu_ldr: + case rabbitizer::InstrId::UniqueId::cpu_lh: + case rabbitizer::InstrId::UniqueId::cpu_lhu: + case rabbitizer::InstrId::UniqueId::cpu_lw: + case rabbitizer::InstrId::UniqueId::cpu_lwu: + case rabbitizer::InstrId::UniqueId::cpu_ldc1: + case rabbitizer::InstrId::UniqueId::cpu_lwc1: + case rabbitizer::InstrId::UniqueId::cpu_lwc2: + case rabbitizer::InstrId::UniqueId::cpu_swc1: + case rabbitizer::InstrId::UniqueId::cpu_swc2: { + rabbitizer::Registers::Cpu::GprO32 mem_rs = insns[i].instruction.GetO32_rs(); + int32_t mem_imm = insns[i].instruction.getProcessedImmediate(); + + if (mem_rs == rabbitizer::Registers::Cpu::GprO32::GPR_O32_gp) { + unsigned int got_entry = (mem_imm + gp_value_adj) / sizeof(unsigned int); + + if (got_entry >= got_locals.size()) { + got_entry -= got_locals.size(); + if (got_entry < got_globals.size()) { + assert(insn.instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_lw); + unsigned int dest_vaddr = got_globals[got_entry]; + + insns[i].is_global_got_memop = true; + insns[i].linked_value = dest_vaddr; + + // patch to LA + insns[i].lila_dst_reg = get_dest_reg(insns[i]); + insns[i].patchAddress(UniqueId_cpu_la, dest_vaddr); + } + } + } else { + link_with_lui(i, mem_rs, mem_imm); + } + } break; + + case rabbitizer::InstrId::UniqueId::cpu_addiu: + case rabbitizer::InstrId::UniqueId::cpu_ori: { + // could be insn? + rabbitizer::Registers::Cpu::GprO32 rt = insns[i].instruction.GetO32_rt(); + rabbitizer::Registers::Cpu::GprO32 rs = insns[i].instruction.GetO32_rs(); + int32_t imm = insns[i].instruction.getProcessedImmediate(); + + if (rs == rabbitizer::Registers::Cpu::GprO32::GPR_O32_zero) { // becomes LI + insns[i].lila_dst_reg = get_dest_reg(insns[i]); + insns[i].patchInstruction(UniqueId_cpu_li); + insns[i].patchImmediate(imm); + } else if (rt != rabbitizer::Registers::Cpu::GprO32::GPR_O32_gp) { // only look for LUI if rt and rs are + // the same + link_with_lui(i, rs, imm); + } + } break; + + case rabbitizer::InstrId::UniqueId::cpu_jalr: { + rabbitizer::Registers::Cpu::GprO32 rs = insn.instruction.GetO32_rs(); + + if (rs == rabbitizer::Registers::Cpu::GprO32::GPR_O32_t9) { + link_with_jalr(i); + if (insn.linked_insn != -1) { + insn.patchAddress(rabbitizer::InstrId::UniqueId::cpu_jal, insn.linked_value); + + label_addresses.insert(insn.linked_value); + add_function(insn.linked_value); + } + } + } break; + + default: + break; + } + + if ((insn.instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_addu) && + (insn.instruction.GetO32_rd() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_gp) && + (insn.instruction.GetO32_rs() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_gp) && + (insn.instruction.GetO32_rt() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_t9) && i >= 2) { + for (size_t j = i - 2; j <= i; j++) { + insns[j].patchInstruction(rabbitizer::InstrId::UniqueId::cpu_nop); + } + } + } +} + +uint32_t addr_to_i(uint32_t addr) { + return (addr - text_vaddr) / 4; +} + +void pass2(void) { + // Find returns in each function + for (size_t i = 0; i < insns.size(); i++) { + uint32_t addr = text_vaddr + i * 4; + Insn& insn = insns[i]; + + if ((insn.instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_jr) && + (insn.instruction.GetO32_rs() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_ra)) { + auto it = find_function(addr); + assert(it != functions.end()); + + it->second.returns.push_back(addr + 4); + } + + if (insn.instruction.getUniqueId() == UniqueId_cpu_la) { + uint32_t faddr = insn.getAddress(); + + if ((text_vaddr <= faddr) && (faddr < text_vaddr + text_section_len)) { + la_function_pointers.insert(faddr); + functions[faddr].referenced_by_function_pointer = true; +#if INSPECT_FUNCTION_POINTERS + fprintf(stderr, "la function pointer: 0x%x at 0x%x\n", faddr, addr); +#endif + } + } + } + + for (auto it = functions.begin(); it != functions.end(); ++it) { + if (it->second.returns.size() == 0) { + uint32_t i = addr_to_i(it->first); + auto str_it = symbol_names.find(it->first); + + if (str_it != symbol_names.end() && str_it->second == "__start") { + + } else if (str_it != symbol_names.end() && str_it->second == "xmalloc") { + // orig 5.3: + /* + 496bf4: 3c1c0fb9 lui gp,0xfb9 + 496bf8: 279c366c addiu gp,gp,13932 + 496bfc: 0399e021 addu gp,gp,t9 + 496c00: 27bdffd8 addiu sp,sp,-40 + 496c04: 8f858de8 lw a1,-29208(gp) + 496c08: 10000006 b 496c24 + 496c0c: afbf0020 sw ra,32(sp) + */ + + // jal alloc_new + // lui $a1, malloc_scb + // jr $ra + // nop + uint32_t alloc_new_addr = text_vaddr + (i + 7) * 4; + + insns[i].patchAddress(rabbitizer::InstrId::UniqueId::cpu_jal, alloc_new_addr); + + assert(symbol_names.count(alloc_new_addr) && symbol_names[alloc_new_addr] == "alloc_new"); + i++; + + // LA + if (insns[i + 5].instruction.getUniqueId() == UniqueId_cpu_la) { + // 7.1 + insns[i] = insns[i + 5]; + } else { + // 5.3 + insns[i] = insns[i + 3]; + } + i++; + + // JR $RA + insns[i].patched = true; + insns[i].instruction = rabbitizer::InstructionCpu(0x03E00008, insns[i].instruction.getVram()); + it->second.returns.push_back(text_vaddr + i * 4 + 4); + i++; + + for (uint32_t j = 0; j < 4; j++) { + // NOP + insns[i].patched = true; + insns[i].instruction = rabbitizer::InstructionCpu(0, insns[i].instruction.getVram()); + i++; + } + } else if (str_it != symbol_names.end() && str_it->second == "xfree") { + // jal alloc_dispose + // lui $a1, malloc_scb + // jr $ra + // nop + uint32_t alloc_dispose_addr = text_vaddr + (i + 4) * 4; + + if (symbol_names.count(alloc_dispose_addr + 4) && + symbol_names[alloc_dispose_addr + 4] == "alloc_dispose") { + alloc_dispose_addr += 4; + } + + insns[i].patchAddress(rabbitizer::InstrId::UniqueId::cpu_jal, alloc_dispose_addr); + assert(symbol_names.count(alloc_dispose_addr) && symbol_names[alloc_dispose_addr] == "alloc_dispose"); + i++; + + insns[i] = insns[i + 2]; + i++; + + // JR $RA + insns[i].patched = true; + insns[i].instruction = rabbitizer::InstructionCpu(0x03E00008, insns[i].instruction.getVram()); + it->second.returns.push_back(text_vaddr + i * 4 + 4); + i++; + + // NOP + insns[i].patched = true; + insns[i].instruction = rabbitizer::InstructionCpu(0, insns[i].instruction.getVram()); + } else if ((insns[i].instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_lw) && + (insns[i + 1].instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_move) && + (insns[i + 2].instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_jalr)) { + /* + 408f50: 8f998010 lw t9,-32752(gp) + 408f54: 03e07821 move t7,ra + 408f58: 0320f809 jalr t9 + */ + } else if (it->first > mcount_addr) { + fprintf(stderr, "no ret: 0x%x\n", it->first); + abort(); + } + } + + auto next = it; + + ++next; + if (next == functions.end()) { + it->second.end_addr = text_vaddr + text_section_len; + } else { + it->second.end_addr = next->first; + } + } +} + +void add_edge(uint32_t from, uint32_t to, bool function_entry = false, bool function_exit = false, + bool extern_function = false, bool function_pointer = false) { + Edge fe = Edge(), be = Edge(); + + fe.i = to; + be.i = from; + fe.function_entry = function_entry; + be.function_entry = function_entry; + fe.function_exit = function_exit; + be.function_exit = function_exit; + fe.extern_function = extern_function; + be.extern_function = extern_function; + fe.function_pointer = function_pointer; + be.function_pointer = function_pointer; + insns[from].successors.push_back(fe); + insns[to].predecessors.push_back(be); +} + +void pass3(void) { + // Build graph + for (size_t i = 0; i < insns.size(); i++) { + uint32_t addr = text_vaddr + i * 4; + Insn& insn = insns[i]; + + if (insn.no_following_successor) { + continue; + } + + switch (insn.instruction.getUniqueId()) { + case rabbitizer::InstrId::UniqueId::cpu_beq: + case rabbitizer::InstrId::UniqueId::cpu_bgez: + case rabbitizer::InstrId::UniqueId::cpu_bgtz: + case rabbitizer::InstrId::UniqueId::cpu_blez: + case rabbitizer::InstrId::UniqueId::cpu_bltz: + case rabbitizer::InstrId::UniqueId::cpu_bne: + case rabbitizer::InstrId::UniqueId::cpu_beqz: + case rabbitizer::InstrId::UniqueId::cpu_bnez: + case rabbitizer::InstrId::UniqueId::cpu_bc1f: + case rabbitizer::InstrId::UniqueId::cpu_bc1t: + add_edge(i, i + 1); + add_edge(i + 1, addr_to_i(insn.getAddress())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_beql: + case rabbitizer::InstrId::UniqueId::cpu_bgezl: + case rabbitizer::InstrId::UniqueId::cpu_bgtzl: + case rabbitizer::InstrId::UniqueId::cpu_blezl: + case rabbitizer::InstrId::UniqueId::cpu_bltzl: + case rabbitizer::InstrId::UniqueId::cpu_bnel: + case rabbitizer::InstrId::UniqueId::cpu_bc1fl: + case rabbitizer::InstrId::UniqueId::cpu_bc1tl: + add_edge(i, i + 1); + add_edge(i, i + 2); + add_edge(i + 1, addr_to_i(insn.getAddress())); + insns[i + 1].no_following_successor = true; // don't inspect delay slot + break; + + case rabbitizer::InstrId::UniqueId::cpu_b: + case rabbitizer::InstrId::UniqueId::cpu_j: + add_edge(i, i + 1); + add_edge(i + 1, addr_to_i(insn.getAddress())); + insns[i + 1].no_following_successor = true; // don't inspect delay slot + break; + + case rabbitizer::InstrId::UniqueId::cpu_jr: { + add_edge(i, i + 1); + + if (insn.jtbl_addr != 0) { + uint32_t jtbl_pos = insn.jtbl_addr - rodata_vaddr; + + assert(jtbl_pos < rodata_section_len && + jtbl_pos + insn.num_cases * sizeof(uint32_t) <= rodata_section_len); + + for (uint32_t j = 0; j < insn.num_cases; j++) { + uint32_t dest_addr = read_u32_be(rodata_section + jtbl_pos + j * sizeof(uint32_t)) + gp_value; + + add_edge(i + 1, addr_to_i(dest_addr)); + } + } else { + assert(insn.instruction.GetO32_rs() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_ra && + "jump to address in register not supported"); + } + + insns[i + 1].no_following_successor = true; // don't inspect delay slot + break; + } + + case rabbitizer::InstrId::UniqueId::cpu_jal: { + add_edge(i, i + 1); + + uint32_t dest = insn.getAddress(); + + if (dest > mcount_addr && dest >= text_vaddr && dest < text_vaddr + text_section_len) { + add_edge(i + 1, addr_to_i(dest), true); + + auto it = functions.find(dest); + assert(it != functions.end()); + + for (uint32_t ret_instr : it->second.returns) { + add_edge(addr_to_i(ret_instr), i + 2, false, true); + } + } else { + add_edge(i + 1, i + 2, false, false, true); + } + + insns[i + 1].no_following_successor = true; // don't inspect delay slot + break; + } + + case rabbitizer::InstrId::UniqueId::cpu_jalr: + // function pointer + add_edge(i, i + 1); + add_edge(i + 1, i + 2, false, false, false, true); + insns[i + 1].no_following_successor = true; // don't inspect delay slot + break; + + default: + add_edge(i, i + 1); + break; + } + } +} + +#define GPR_O32_hi (rabbitizer::Registers::Cpu::GprO32)((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_ra + 1) +#define GPR_O32_lo (rabbitizer::Registers::Cpu::GprO32)((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_ra + 2) + +uint64_t map_reg(rabbitizer::Registers::Cpu::GprO32 reg) { + return (uint64_t)1 << ((int)reg - (int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_zero + 1); +} + +uint64_t temporary_regs(void) { + // clang-format off + return + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_t0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_t1) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_t2) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_t3) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_t4) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_t5) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_t6) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_t7) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_t8) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_t9); + // clang-format on +} + +typedef enum { + /* 0 */ TYPE_NOP, // No arguments + /* 1 */ TYPE_S, // in + /* 2 */ TYPE_D, // 1 out + /* 3 */ TYPE_D_S, // out, in +} TYPE; + +TYPE insn_to_type(Insn& insn) { + switch (insn.instruction.getUniqueId()) { + case rabbitizer::InstrId::UniqueId::cpu_add_s: + case rabbitizer::InstrId::UniqueId::cpu_add_d: + return TYPE_NOP; + + case rabbitizer::InstrId::UniqueId::cpu_add: + case rabbitizer::InstrId::UniqueId::cpu_addu: + return TYPE_D_S; + + case rabbitizer::InstrId::UniqueId::cpu_addi: + case rabbitizer::InstrId::UniqueId::cpu_addiu: + case rabbitizer::InstrId::UniqueId::cpu_andi: + case rabbitizer::InstrId::UniqueId::cpu_ori: + case rabbitizer::InstrId::UniqueId::cpu_lb: + case rabbitizer::InstrId::UniqueId::cpu_lbu: + case rabbitizer::InstrId::UniqueId::cpu_lh: + case rabbitizer::InstrId::UniqueId::cpu_lhu: + case rabbitizer::InstrId::UniqueId::cpu_lw: + case rabbitizer::InstrId::UniqueId::cpu_lwl: + // case rabbitizer::InstrId::UniqueId::cpu_lwr: + case rabbitizer::InstrId::UniqueId::cpu_move: + case rabbitizer::InstrId::UniqueId::cpu_negu: + case rabbitizer::InstrId::UniqueId::cpu_not: + case rabbitizer::InstrId::UniqueId::cpu_sll: + case rabbitizer::InstrId::UniqueId::cpu_slti: + case rabbitizer::InstrId::UniqueId::cpu_sltiu: + case rabbitizer::InstrId::UniqueId::cpu_sra: + case rabbitizer::InstrId::UniqueId::cpu_srl: + case rabbitizer::InstrId::UniqueId::cpu_xori: + return TYPE_D_S; + + case rabbitizer::InstrId::UniqueId::cpu_mfhi: + return TYPE_D_S; + + case rabbitizer::InstrId::UniqueId::cpu_mflo: + return TYPE_D_S; + + case rabbitizer::InstrId::UniqueId::cpu_and: + case rabbitizer::InstrId::UniqueId::cpu_or: + case rabbitizer::InstrId::UniqueId::cpu_nor: + case rabbitizer::InstrId::UniqueId::cpu_sllv: + case rabbitizer::InstrId::UniqueId::cpu_slt: + case rabbitizer::InstrId::UniqueId::cpu_sltu: + case rabbitizer::InstrId::UniqueId::cpu_srav: + case rabbitizer::InstrId::UniqueId::cpu_srlv: + case rabbitizer::InstrId::UniqueId::cpu_subu: + case rabbitizer::InstrId::UniqueId::cpu_xor: + return TYPE_D_S; + + case rabbitizer::InstrId::UniqueId::cpu_cfc1: + case rabbitizer::InstrId::UniqueId::cpu_mfc1: + case UniqueId_cpu_li: + case UniqueId_cpu_la: + case rabbitizer::InstrId::UniqueId::cpu_lui: + return TYPE_D; + + case rabbitizer::InstrId::UniqueId::cpu_ctc1: + case rabbitizer::InstrId::UniqueId::cpu_bgez: + case rabbitizer::InstrId::UniqueId::cpu_bgezl: + case rabbitizer::InstrId::UniqueId::cpu_bgtz: + case rabbitizer::InstrId::UniqueId::cpu_bgtzl: + case rabbitizer::InstrId::UniqueId::cpu_blez: + case rabbitizer::InstrId::UniqueId::cpu_blezl: + case rabbitizer::InstrId::UniqueId::cpu_bltz: + case rabbitizer::InstrId::UniqueId::cpu_bltzl: + case rabbitizer::InstrId::UniqueId::cpu_beqz: + case rabbitizer::InstrId::UniqueId::cpu_bnez: + case rabbitizer::InstrId::UniqueId::cpu_mtc1: + return TYPE_S; + + case rabbitizer::InstrId::UniqueId::cpu_beq: + case rabbitizer::InstrId::UniqueId::cpu_beql: + case rabbitizer::InstrId::UniqueId::cpu_bne: + case rabbitizer::InstrId::UniqueId::cpu_bnel: + case rabbitizer::InstrId::UniqueId::cpu_sb: + case rabbitizer::InstrId::UniqueId::cpu_sh: + case rabbitizer::InstrId::UniqueId::cpu_sw: + case rabbitizer::InstrId::UniqueId::cpu_swl: + // case rabbitizer::InstrId::UniqueId::cpu_swr: + case rabbitizer::InstrId::UniqueId::cpu_tne: + case rabbitizer::InstrId::UniqueId::cpu_teq: + case rabbitizer::InstrId::UniqueId::cpu_tge: + case rabbitizer::InstrId::UniqueId::cpu_tgeu: + case rabbitizer::InstrId::UniqueId::cpu_tlt: + return TYPE_S; + + case rabbitizer::InstrId::UniqueId::cpu_div: + return TYPE_D_S; + + case rabbitizer::InstrId::UniqueId::cpu_div_s: + case rabbitizer::InstrId::UniqueId::cpu_div_d: + return TYPE_NOP; + + case rabbitizer::InstrId::UniqueId::cpu_divu: + case rabbitizer::InstrId::UniqueId::cpu_mult: + case rabbitizer::InstrId::UniqueId::cpu_multu: + return TYPE_D_S; + + case rabbitizer::InstrId::UniqueId::cpu_neg_s: + case rabbitizer::InstrId::UniqueId::cpu_neg_d: + return TYPE_NOP; + + case rabbitizer::InstrId::UniqueId::cpu_jalr: + return TYPE_S; + + case rabbitizer::InstrId::UniqueId::cpu_jr: + if (insn.jtbl_addr != 0) { + insn.instruction.Set_rs(insn.index_reg); + } + if (insn.instruction.GetO32_rs() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_ra) { + return TYPE_NOP; + } + return TYPE_S; + + case rabbitizer::InstrId::UniqueId::cpu_lwc1: + case rabbitizer::InstrId::UniqueId::cpu_ldc1: + case rabbitizer::InstrId::UniqueId::cpu_swc1: + case rabbitizer::InstrId::UniqueId::cpu_sdc1: + return TYPE_S; + + default: + return TYPE_NOP; + } +} + +uint64_t get_dest_reg_mask(const Insn& insn) { + switch (insn.instruction.getUniqueId()) { + case rabbitizer::InstrId::UniqueId::cpu_div: + case rabbitizer::InstrId::UniqueId::cpu_divu: + case rabbitizer::InstrId::UniqueId::cpu_mult: + case rabbitizer::InstrId::UniqueId::cpu_multu: + return map_reg(GPR_O32_lo) | map_reg(GPR_O32_hi); + + default: + return map_reg(get_dest_reg(insn)); + } +} + +uint64_t get_single_source_reg_mask(const rabbitizer::InstructionCpu& instr) { + switch (instr.getUniqueId()) { + case rabbitizer::InstrId::UniqueId::cpu_mflo: + return map_reg(GPR_O32_lo); + case rabbitizer::InstrId::UniqueId::cpu_mfhi: + return map_reg(GPR_O32_hi); + + default: + break; + } + if (instr.hasOperandAlias(rabbitizer::OperandType::cpu_rs)) { + return map_reg(instr.GetO32_rs()); + } else if (instr.hasOperandAlias(rabbitizer::OperandType::cpu_rt)) { + return map_reg(instr.GetO32_rt()); + } else { + return 0; + } +} + +uint64_t get_all_source_reg_mask(const rabbitizer::InstructionCpu& instr) { + uint64_t ret = 0; + + switch (instr.getUniqueId()) { + case rabbitizer::InstrId::UniqueId::cpu_mflo: + ret |= map_reg(GPR_O32_lo); + case rabbitizer::InstrId::UniqueId::cpu_mfhi: + ret |= map_reg(GPR_O32_hi); + + default: + break; + } + + if (instr.hasOperandAlias(rabbitizer::OperandType::cpu_rs)) { + ret |= map_reg(instr.GetO32_rs()); + } + if (instr.hasOperandAlias(rabbitizer::OperandType::cpu_rt) && !instr.modifiesRt()) { + ret |= map_reg(instr.GetO32_rt()); + } + return ret; +} + +void pass4(void) { + vector q; // TODO: Why is this called q? + uint64_t livein_func_start = 1U | map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a1) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_sp) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_zero); + + q.push_back(main_addr); + insns[addr_to_i(main_addr)].f_livein = livein_func_start; + + for (auto& it : data_function_pointers) { + q.push_back(it.second); + insns[addr_to_i(it.second)].f_livein = livein_func_start | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a2) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a3); + } + + for (auto& addr : la_function_pointers) { + q.push_back(addr); + insns[addr_to_i(addr)].f_livein = livein_func_start | map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a2) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a3); + } + + while (!q.empty()) { + uint32_t addr = q.back(); + q.pop_back(); + uint32_t i = addr_to_i(addr); + Insn& insn = insns[i]; + uint64_t live = insn.f_livein | 1U; + uint64_t src_regs_map; + + switch (insn_to_type(insn)) { + case TYPE_D: + live |= get_dest_reg_mask(insn); + break; + + case TYPE_D_S: + src_regs_map = get_all_source_reg_mask(insn.instruction); + if ((live & src_regs_map) == src_regs_map) { + live |= get_dest_reg_mask(insn); + } + break; + + case TYPE_S: + case TYPE_NOP: + break; + } + + if ((insn.f_liveout | live) == insn.f_liveout) { + // No new bits + continue; + } + + live |= insn.f_liveout; + insn.f_liveout = live; + + bool function_entry = false; + + for (Edge& e : insn.successors) { + uint64_t new_live = live; + + if (e.function_exit) { + new_live &= 1U | map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_zero); + } else if (e.function_entry) { + new_live &= 1U | map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a1) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a2) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a3) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_sp) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_zero); + function_entry = true; + } else if (e.extern_function) { + string_view name; + size_t extern_function_id; + uint32_t address = insns[i - 1].getAddress(); + + // TODO: Can this only ever be a J-type instruction? + auto it = symbol_names.find(address); + const ExternFunction* found_fn = nullptr; + + if (it != symbol_names.end()) { + name = it->second; + + for (auto& fn : extern_functions) { + if (name == fn.name) { + found_fn = &fn; + break; + } + } + + if (found_fn == nullptr) { + fprintf(stderr, "missing extern function: %s\n", string(name).c_str()); + } + } + + assert(found_fn); + + char ret_type = found_fn->params[0]; + + new_live &= ~(map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a1) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a2) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a3) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1) | temporary_regs()); + + switch (ret_type) { + case 'i': + case 'u': + case 'p': + new_live |= map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0); + break; + + case 'f': + break; + + case 'd': + break; + + case 'v': + break; + + case 'l': + case 'j': + new_live |= map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1); + break; + } + } else if (e.function_pointer) { + new_live &= ~(map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a1) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a2) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a3) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1) | temporary_regs()); + new_live |= map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1); + } + + if ((insns[e.i].f_livein | new_live) != insns[e.i].f_livein) { + insns[e.i].f_livein |= new_live; + q.push_back(text_vaddr + e.i * sizeof(uint32_t)); + } + } + + if (function_entry) { + // add one edge that skips the function call, for callee-saved register liveness propagation + live &= ~(map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a1) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a2) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a3) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1) | temporary_regs()); + + if ((insns[i + 1].f_livein | live) != insns[i + 1].f_livein) { + insns[i + 1].f_livein |= live; + q.push_back(text_vaddr + (i + 1) * sizeof(uint32_t)); + } + } + } +} + +void pass5(void) { + vector q; + + assert(functions.count(main_addr)); + + q = functions[main_addr].returns; + for (auto addr : q) { + insns[addr_to_i(addr)].b_liveout = 1U | map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0); + } + + for (auto& it : data_function_pointers) { + for (auto addr : functions[it.second].returns) { + q.push_back(addr); + insns[addr_to_i(addr)].b_liveout = 1U | map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1); + } + } + + for (auto& func_addr : la_function_pointers) { + for (auto addr : functions[func_addr].returns) { + q.push_back(addr); + insns[addr_to_i(addr)].b_liveout = 1U | map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1); + } + } + + for (auto& insn : insns) { + if (insn.f_livein != 0) { + q.push_back(insn.instruction.getVram()); + } + } + + while (!q.empty()) { + uint32_t addr = q.back(); + + q.pop_back(); + + uint32_t i = addr_to_i(addr); + Insn& insn = insns[i]; + uint64_t live = insn.b_liveout | 1; + + switch (insn_to_type(insn)) { + case TYPE_S: + live |= get_all_source_reg_mask(insn.instruction); + break; + + case TYPE_D: + live &= ~get_dest_reg_mask(insn); + break; + + case TYPE_D_S: + if (live & get_dest_reg_mask(insn)) { + live &= ~get_dest_reg_mask(insn); + live |= get_all_source_reg_mask(insn.instruction); + } + break; + + case TYPE_NOP: + break; + } + + if ((insn.b_livein | live) == insn.b_livein) { + // No new bits + continue; + } + + live |= insn.b_livein; + insn.b_livein = live; + + bool function_exit = false; + + for (Edge& e : insn.predecessors) { + uint64_t new_live = live; + + if (e.function_exit) { + new_live &= 1U | map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1); + function_exit = true; + } else if (e.function_entry) { + new_live &= 1U | map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a1) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a2) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a3) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_sp); + } else if (e.extern_function) { + string_view name; + size_t extern_function_id; + const ExternFunction* found_fn = nullptr; + uint32_t address = insns[i - 2].getAddress(); + // TODO: Can this only ever be a J-type instruction? + auto it = symbol_names.find(address); + + if (it != symbol_names.end()) { + name = it->second; + for (auto& fn : extern_functions) { + if (name == fn.name) { + found_fn = &fn; + break; + } + } + } + + assert(found_fn); + + uint64_t args = 1U; + + if (found_fn->flags & FLAG_VARARG) { + // Assume the worst, that all four registers are used + for (int j = 0; j < 4; j++) { + args |= map_reg((rabbitizer::Registers::Cpu::GprO32)( + (int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + j)); + } + } + + int pos = 0; + int pos_float = 0; + bool only_floats_so_far = true; + + for (const char* p = found_fn->params + 1; *p != '\0'; ++p) { + switch (*p) { + case 'i': + case 'u': + case 'p': + case 't': + only_floats_so_far = false; + if (pos < 4) { + args |= map_reg((rabbitizer::Registers::Cpu::GprO32)( + (int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + pos)); + } + ++pos; + break; + + case 'f': + if (only_floats_so_far && pos_float < 4) { + pos_float += 2; + } else if (pos < 4) { + args |= map_reg((rabbitizer::Registers::Cpu::GprO32)( + (int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + pos)); + } + ++pos; + break; + + case 'd': + // !!! + if (pos % 1 != 0) { + ++pos; + } + if (only_floats_so_far && pos_float < 4) { + pos_float += 2; + } else if (pos < 4) { + args |= map_reg((rabbitizer::Registers::Cpu::GprO32)( + (int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + pos)) | + map_reg((rabbitizer::Registers::Cpu::GprO32)( + (int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + pos + 1)); + } + pos += 2; + break; + + case 'l': + case 'j': + if (pos % 1 != 0) { + ++pos; + } + only_floats_so_far = false; + if (pos < 4) { + args |= map_reg((rabbitizer::Registers::Cpu::GprO32)( + (int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + pos)) | + map_reg((rabbitizer::Registers::Cpu::GprO32)( + (int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + pos + 1)); + } + pos += 2; + break; + } + } + args |= map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_sp); + new_live &= ~(map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a1) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a2) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a3) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1) | temporary_regs()); + new_live |= args; + } else if (e.function_pointer) { + new_live &= ~(map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a1) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a2) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a3) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1) | temporary_regs()); + new_live |= map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a1) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a2) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a3); + } + + if ((insns[e.i].b_liveout | new_live) != insns[e.i].b_liveout) { + insns[e.i].b_liveout |= new_live; + q.push_back(text_vaddr + e.i * sizeof(uint32_t)); + } + } + + if (function_exit) { + // add one edge that skips the function call, for callee-saved register liveness propagation + live &= ~(map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a1) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a2) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a3) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1) | temporary_regs()); + + if ((insns[i - 1].b_liveout | live) != insns[i - 1].b_liveout) { + insns[i - 1].b_liveout |= live; + q.push_back(text_vaddr + (i - 1) * sizeof(uint32_t)); + } + } + } +} + +void pass6(void) { + for (auto& it : functions) { + uint32_t addr = it.first; + Function& f = it.second; + + for (uint32_t ret : f.returns) { + Insn& i = insns[addr_to_i(ret)]; + + if (i.f_liveout & i.b_liveout & map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1)) { + f.nret = 2; + } else if ((i.f_liveout & i.b_liveout & map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0)) && + f.nret == 0) { + f.nret = 1; + } + } + + Insn& insn = insns.at(addr_to_i(addr)); + + for (int i = 0; i < 4; i++) { + if (insn.f_livein & insn.b_livein & + map_reg( + (rabbitizer::Registers::Cpu::GprO32)((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + i))) { + f.nargs = 1 + i; + } + } + f.v0_in = (insn.f_livein & insn.b_livein & map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0)) != 0 && + !f.referenced_by_function_pointer; + } +} + +void dump(void) { + for (size_t i = 0; i < insns.size(); i++) { + Insn& insn = insns[i]; + uint32_t vaddr = text_vaddr + i * sizeof(uint32_t); + if (label_addresses.count(vaddr)) { + if (symbol_names.count(vaddr)) { + printf("L%08x: //%s\n", vaddr, symbol_names[vaddr].c_str()); + } else { + printf("L%08x:\n", vaddr); + } + } + + // TODO: construct an immediate override for the instructions + printf("\t%s", insn.disassemble().c_str()); + if (insn.patched) { + printf("\t[patched, immediate now 0x%X]", insn.patched_addr); + } + printf("\n"); + } +} + +const char* r(uint32_t reg) { + static const char* regs[] = { + /* */ "zero", "at", "v0", "v1", + /* */ "a0", "a1", "a2", "a3", + /* */ "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", + /* */ "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7", + /* */ "t8", "t9", "k0", "k1", "gp", "sp", "fp", "ra", + }; + + assert(reg < std::size(regs)); + return regs[reg]; +} + +const char* wr(uint32_t reg) { + // clang-format off + static const char *regs[] = { + "f0.w[0]", "f0.w[1]", + "f2.w[0]", "f2.w[1]", + "f4.w[0]", "f4.w[1]", + "f6.w[0]", "f6.w[1]", + "f8.w[0]", "f8.w[1]", + "f10.w[0]", "f10.w[1]", + "f12.w[0]", "f12.w[1]", + "f14.w[0]", "f14.w[1]", + "f16.w[0]", "f16.w[1]", + "f18.w[0]", "f18.w[1]", + "f20.w[0]", "f20.w[1]", + "f22.w[0]", "f22.w[1]", + "f24.w[0]", "f24.w[1]", + "f26.w[0]", "f26.w[1]", + "f28.w[0]", "f28.w[1]", + "f30.w[0]", "f30.w[1]" + }; + // clang-format on + + size_t index = reg - (int)rabbitizer::Registers::Cpu::Cop1O32::COP1_O32_fv0; + + assert(index < std::size(regs)); + return regs[index]; +} + +const char* fr(uint32_t reg) { + // clang-format off + static const char *regs[] = { + "f0.f[0]", "f0.f[1]", + "f2.f[0]", "f2.f[1]", + "f4.f[0]", "f4.f[1]", + "f6.f[0]", "f6.f[1]", + "f8.f[0]", "f8.f[1]", + "f10.f[0]", "f10.f[1]", + "f12.f[0]", "f12.f[1]", + "f14.f[0]", "f14.f[1]", + "f16.f[0]", "f16.f[1]", + "f18.f[0]", "f18.f[1]", + "f20.f[0]", "f20.f[1]", + "f22.f[0]", "f22.f[1]", + "f24.f[0]", "f24.f[1]", + "f26.f[0]", "f26.f[1]", + "f28.f[0]", "f28.f[1]", + "f30.f[0]", "f30.f[1]", + }; + // clang-format on + + size_t index = reg - (int)rabbitizer::Registers::Cpu::Cop1O32::COP1_O32_fv0; + + assert(index < std::size(regs)); + return regs[index]; +} + +const char* dr(uint32_t reg) { + // clang-format off + static const char *regs[] = { + "f0", + "f2", + "f4", + "f6", + "f8", + "f10", + "f12", + "f14", + "f16", + "f18", + "f20", + "f22", + "f24", + "f26", + "f28", + "f30" + }; + // clang-format on + + size_t index = reg - (int)rabbitizer::Registers::Cpu::Cop1O32::COP1_O32_fv0; + + assert(index % 2 == 0); + index /= 2; + assert(index < std::size(regs)); + return regs[index]; +} + +void dump_instr(int i); + +void dump_cond_branch(int i, const char* lhs, const char* op, const char* rhs) { + Insn& insn = insns[i]; + const char* cast1 = ""; + const char* cast2 = ""; + + if (strcmp(op, "==") && strcmp(op, "!=")) { + cast1 = "(int)"; + if (strcmp(rhs, "0")) { + cast2 = "(int)"; + } + } + printf("if (%s%s %s %s%s) {\n", cast1, lhs, op, cast2, rhs); + dump_instr(i + 1); + + uint32_t addr = insn.getAddress(); + + printf("goto L%x;}\n", addr); +} + +void dump_cond_branch_likely(int i, const char* lhs, const char* op, const char* rhs) { + uint32_t target = text_vaddr + (i + 2) * sizeof(uint32_t); + + dump_cond_branch(i, lhs, op, rhs); + if (!TRACE) { + printf("else goto L%x;\n", target); + } else { + printf("else {printf(\"pc=0x%08x (ignored)\\n\"); goto L%x;}\n", text_vaddr + (i + 1) * 4, target); + } + label_addresses.insert(target); +} + +void dump_jal(int i, uint32_t imm) { + string_view name; + auto it = symbol_names.find(imm); + const ExternFunction* found_fn = nullptr; + + // Check for an external function at the address in the immediate. If it does not exist, function is internal + if (it != symbol_names.end()) { + name = it->second; + for (auto& fn : extern_functions) { + if (name == fn.name) { + found_fn = &fn; + break; + } + } + } + + dump_instr(i + 1); + + if (found_fn != nullptr) { + if (found_fn->flags & FLAG_VARARG) { + for (int j = 0; j < 4; j++) { + printf("MEM_U32(sp + %d) = %s;\n", j * 4, r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + j)); + } + } + + const char ret_type = found_fn->params[0]; + + switch (ret_type) { + case 'v': + break; + + case 'i': + case 'u': + case 'p': + printf("%s = ", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0)); + break; + + case 'f': + printf("%s = ", fr((int)rabbitizer::Registers::Cpu::Cop1O32::COP1_O32_fv0)); + break; + + case 'd': + printf("tempf64 = "); + break; + + case 'l': + case 'j': + printf("temp64 = "); + break; + } + + printf("wrapper_%s(", string(name).c_str()); + + bool first = true; + + if (!(found_fn->flags & FLAG_NO_MEM)) { + printf("mem"); + first = false; + } + + int pos = 0; + int pos_float = 0; + bool only_floats_so_far = true; + bool needs_sp = false; + + for (const char* p = &found_fn->params[1]; *p != '\0'; ++p) { + if (!first) { + printf(", "); + } + + first = false; + + switch (*p) { + case 't': + printf("trampoline, "); + needs_sp = true; + // fallthrough + case 'i': + case 'u': + case 'p': + only_floats_so_far = false; + if (pos < 4) { + printf("%s", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + pos)); + } else { + printf("MEM_%c32(sp + %d)", *p == 'i' ? 'S' : 'U', pos * 4); + } + ++pos; + break; + + case 'f': + if (only_floats_so_far && pos_float < 4) { + printf("%s", fr((int)rabbitizer::Registers::Cpu::Cop1O32::COP1_O32_fa0 + pos_float)); + pos_float += 2; + } else if (pos < 4) { + printf("BITCAST_U32_TO_F32(%s)", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + pos)); + } else { + printf("BITCAST_U32_TO_F32(MEM_U32(sp + %d))", pos * 4); + } + ++pos; + break; + + case 'd': + if (pos % 1 != 0) { + ++pos; + } + if (only_floats_so_far && pos_float < 4) { + printf("double_from_FloatReg(%s)", + dr((int)rabbitizer::Registers::Cpu::Cop1O32::COP1_O32_fa0 + pos_float)); + pos_float += 2; + } else if (pos < 4) { + printf("BITCAST_U64_TO_F64(((uint64_t)%s << 32) | (uint64_t)%s)", + r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + pos), + r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + pos + 1)); + } else { + printf("BITCAST_U64_TO_F64(((uint64_t)MEM_U32(sp + %d) << 32) | " + "(uint64_t)MEM_U32(sp + " + "%d))", + pos * 4, (pos + 1) * 4); + } + pos += 2; + break; + + case 'l': + case 'j': + if (pos % 1 != 0) { + ++pos; + } + only_floats_so_far = false; + if (*p == 'l') { + printf("(int64_t)"); + } + if (pos < 4) { + printf("(((uint64_t)%s << 32) | (uint64_t)%s)", + r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + pos), + r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + pos + 1)); + } else { + printf("(((uint64_t)MEM_U32(sp + %d) << 32) | (uint64_t)MEM_U32(sp + %d))", pos * 4, + (pos + 1) * 4); + } + pos += 2; + break; + } + } + + if ((found_fn->flags & FLAG_VARARG) || needs_sp) { + printf("%s%s", first ? "" : ", ", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_sp)); + } + + printf(");\n"); + + if (ret_type == 'l' || ret_type == 'j') { + printf("%s = (uint32_t)(temp64 >> 32);\n", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0)); + printf("%s = (uint32_t)temp64;\n", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1)); + } else if (ret_type == 'd') { + printf("%s = FloatReg_from_double(tempf64);\n", dr((int)rabbitizer::Registers::Cpu::Cop1O32::COP1_O32_fv0)); + } + } else { + Function& f = functions.find(imm)->second; + + if (f.nret == 1) { + printf("v0 = "); + } else if (f.nret == 2) { + printf("temp64 = "); + } + + if (!name.empty()) { + printf("f_%s", string(name).c_str()); + } else { + printf("func_%x", imm); + } + + printf("(mem, sp"); + + if (f.v0_in) { + printf(", %s", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0)); + } + + for (uint32_t i = 0; i < f.nargs; i++) { + printf(", %s", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + i)); + } + + printf(");\n"); + + if (f.nret == 2) { + printf("%s = (uint32_t)(temp64 >> 32);\n", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0)); + printf("%s = (uint32_t)temp64;\n", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1)); + } + } + + printf("goto L%x;\n", text_vaddr + (i + 2) * 4); + label_addresses.insert(text_vaddr + (i + 2) * 4); +} + +void dump_instr(int i) { + Insn& insn = insns[i]; + + const char* symbol_name = NULL; + if (symbol_names.count(text_vaddr + i * sizeof(uint32_t)) != 0) { + symbol_name = symbol_names[text_vaddr + i * sizeof(uint32_t)].c_str(); + printf("//%s:\n", symbol_name); + } + + if (TRACE) { + printf("++cnt; printf(\"pc=0x%08x%s%s\\n\"); ", text_vaddr + i * 4, symbol_name ? " " : "", + symbol_name ? symbol_name : ""); + } + + uint64_t src_regs_map; + if (!insn.instruction.isJump() && !insn.instruction.isBranch() && !conservative) { + switch (insn_to_type(insn)) { + case TYPE_S: + src_regs_map = get_all_source_reg_mask(insn.instruction); + if (!((insn.f_livein & src_regs_map) == src_regs_map)) { + printf("// fdead %llx ", (unsigned long long)insn.f_livein); + } + break; + + case TYPE_D_S: { + uint64_t reg_mask = get_all_source_reg_mask(insn.instruction); + + if ((insn.f_livein & reg_mask) != reg_mask) { + printf("// fdead %llx ", (unsigned long long)insn.f_livein); + break; + } + } + // fallthrough + case TYPE_D: + if (!(insn.b_liveout & get_dest_reg_mask(insn))) { +#if 0 + printf("// %i bdead %llx %llx ", i, (unsigned long long)insn.b_liveout, + (unsigned long long)get_dest_reg_mask(insn)); +#else + printf("// bdead %llx ", (unsigned long long)insn.b_liveout); +#endif + } + break; + + case TYPE_NOP: + break; + } + } + + int32_t imm; + char buf[0x100]; + switch (insn.instruction.getUniqueId()) { + case rabbitizer::InstrId::UniqueId::cpu_add: + case rabbitizer::InstrId::UniqueId::cpu_addu: + if (insn.instruction.GetO32_rs() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_zero) { + printf("%s = %s;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rt())); + } else if (insn.instruction.GetO32_rt() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_zero) { + printf("%s = %s;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rs())); + } else { + printf("%s = %s + %s;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt())); + } + break; + + case rabbitizer::InstrId::UniqueId::cpu_add_s: + printf("%s = %s + %s;\n", fr((int)insn.instruction.GetO32_fd()), fr((int)insn.instruction.GetO32_fs()), + fr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_add_d: + printf("%s = FloatReg_from_double(double_from_FloatReg(%s) + double_from_FloatReg(%s));\n", + dr((int)insn.instruction.GetO32_fd()), dr((int)insn.instruction.GetO32_fs()), + dr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_addi: + case rabbitizer::InstrId::UniqueId::cpu_addiu: + imm = insn.getImmediate(); + if (insn.instruction.GetO32_rs() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_zero) { + printf("%s = 0x%x;\n", r((int)insn.instruction.GetO32_rt()), imm); + } else { + printf("%s = %s + 0x%x;\n", r((int)insn.instruction.GetO32_rt()), r((int)insn.instruction.GetO32_rs()), + imm); + } + break; + + case rabbitizer::InstrId::UniqueId::cpu_and: + printf("%s = %s & %s;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_andi: + imm = insn.getImmediate(); + printf("%s = %s & 0x%x;\n", r((int)insn.instruction.GetO32_rt()), r((int)insn.instruction.GetO32_rs()), + imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_beq: + dump_cond_branch(i, r((int)insn.instruction.GetO32_rs()), "==", r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_beql: + dump_cond_branch_likely(i, r((int)insn.instruction.GetO32_rs()), + "==", r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_bgez: + dump_cond_branch(i, r((int)insn.instruction.GetO32_rs()), ">=", "0"); + break; + + case rabbitizer::InstrId::UniqueId::cpu_bgezl: + dump_cond_branch_likely(i, r((int)insn.instruction.GetO32_rs()), ">=", "0"); + break; + + case rabbitizer::InstrId::UniqueId::cpu_bgtz: + dump_cond_branch(i, r((int)insn.instruction.GetO32_rs()), ">", "0"); + break; + + case rabbitizer::InstrId::UniqueId::cpu_bgtzl: + dump_cond_branch_likely(i, r((int)insn.instruction.GetO32_rs()), ">", "0"); + break; + + case rabbitizer::InstrId::UniqueId::cpu_blez: + dump_cond_branch(i, r((int)insn.instruction.GetO32_rs()), "<=", "0"); + break; + + case rabbitizer::InstrId::UniqueId::cpu_blezl: + dump_cond_branch_likely(i, r((int)insn.instruction.GetO32_rs()), "<=", "0"); + break; + + case rabbitizer::InstrId::UniqueId::cpu_bltz: + dump_cond_branch(i, r((int)insn.instruction.GetO32_rs()), "<", "0"); + break; + + case rabbitizer::InstrId::UniqueId::cpu_bltzl: + dump_cond_branch_likely(i, r((int)insn.instruction.GetO32_rs()), "<", "0"); + break; + + case rabbitizer::InstrId::UniqueId::cpu_bne: + dump_cond_branch(i, r((int)insn.instruction.GetO32_rs()), "!=", r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_bnel: + dump_cond_branch_likely(i, r((int)insn.instruction.GetO32_rs()), + "!=", r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_break: + printf("abort();\n"); + break; + + case rabbitizer::InstrId::UniqueId::cpu_beqz: + dump_cond_branch(i, r((int)insn.instruction.GetO32_rs()), "==", "0"); + break; + + case rabbitizer::InstrId::UniqueId::cpu_b: + dump_instr(i + 1); + imm = insn.getAddress(); + printf("goto L%x;\n", imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_bc1f: + printf("if (!cf) {\n"); + dump_instr(i + 1); + imm = insn.getAddress(); + printf("goto L%x;}\n", imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_bc1t: + printf("if (cf) {\n"); + dump_instr(i + 1); + imm = insn.getAddress(); + printf("goto L%x;}\n", imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_bc1fl: { + uint32_t target = text_vaddr + (i + 2) * sizeof(uint32_t); + printf("if (!cf) {\n"); + dump_instr(i + 1); + imm = insn.getAddress(); + printf("goto L%x;}\n", imm); + if (!TRACE) { + printf("else goto L%x;\n", target); + } else { + printf("else {printf(\"pc=0x%08x (ignored)\\n\"); goto L%x;}\n", text_vaddr + (i + 1) * 4, target); + } + label_addresses.insert(target); + } break; + + case rabbitizer::InstrId::UniqueId::cpu_bc1tl: { + uint32_t target = text_vaddr + (i + 2) * sizeof(uint32_t); + printf("if (cf) {\n"); + dump_instr(i + 1); + imm = insn.getAddress(); + printf("goto L%x;}\n", imm); + if (!TRACE) { + printf("else goto L%x;\n", target); + } else { + printf("else {printf(\"pc=0x%08x (ignored)\\n\"); goto L%x;}\n", text_vaddr + (i + 1) * 4, target); + } + label_addresses.insert(target); + } break; + + case rabbitizer::InstrId::UniqueId::cpu_bnez: + dump_cond_branch(i, r((int)insn.instruction.GetO32_rs()), "!=", "0"); + break; + + case rabbitizer::InstrId::UniqueId::cpu_c_lt_s: + printf("cf = %s < %s;\n", fr((int)insn.instruction.GetO32_fs()), fr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_c_le_s: + printf("cf = %s <= %s;\n", fr((int)insn.instruction.GetO32_fs()), fr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_c_eq_s: + printf("cf = %s == %s;\n", fr((int)insn.instruction.GetO32_fs()), fr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_c_lt_d: + printf("cf = double_from_FloatReg(%s) < double_from_FloatReg(%s);\n", dr((int)insn.instruction.GetO32_fs()), + dr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_c_le_d: + printf("cf = double_from_FloatReg(%s) <= double_from_FloatReg(%s);\n", + dr((int)insn.instruction.GetO32_fs()), dr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_c_eq_d: + printf("cf = double_from_FloatReg(%s) == double_from_FloatReg(%s);\n", + dr((int)insn.instruction.GetO32_fs()), dr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_cvt_s_w: + printf("%s = (int)%s;\n", fr((int)insn.instruction.GetO32_fd()), wr((int)insn.instruction.GetO32_fs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_cvt_d_w: + printf("%s = FloatReg_from_double((int)%s);\n", dr((int)insn.instruction.GetO32_fd()), + wr((int)insn.instruction.GetO32_fs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_cvt_d_s: + printf("%s = FloatReg_from_double(%s);\n", dr((int)insn.instruction.GetO32_fd()), + fr((int)insn.instruction.GetO32_fs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_cvt_s_d: + printf("%s = double_from_FloatReg(%s);\n", fr((int)insn.instruction.GetO32_fd()), + dr((int)insn.instruction.GetO32_fs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_cvt_w_d: + printf("%s = cvt_w_d(double_from_FloatReg(%s));\n", wr((int)insn.instruction.GetO32_fd()), + dr((int)insn.instruction.GetO32_fs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_cvt_w_s: + printf("%s = cvt_w_s(%s);\n", wr((int)insn.instruction.GetO32_fd()), fr((int)insn.instruction.GetO32_fs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_cvt_l_d: + case rabbitizer::InstrId::UniqueId::cpu_cvt_l_s: + case rabbitizer::InstrId::UniqueId::cpu_cvt_s_l: + case rabbitizer::InstrId::UniqueId::cpu_cvt_d_l: + goto unimplemented; + + case rabbitizer::InstrId::UniqueId::cpu_cfc1: + assert(insn.instruction.Get_cop1cs() == rabbitizer::Registers::Cpu::Cop1Control::COP1_CONTROL_FpcCsr); + printf("%s = fcsr;\n", r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_ctc1: + assert(insn.instruction.Get_cop1cs() == rabbitizer::Registers::Cpu::Cop1Control::COP1_CONTROL_FpcCsr); + printf("fcsr = %s;\n", r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_div: + printf("lo = (int)%s / (int)%s; ", r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt())); + printf("hi = (int)%s %% (int)%s;\n", r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_divu: + printf("lo = %s / %s; ", r((int)insn.instruction.GetO32_rs()), r((int)insn.instruction.GetO32_rt())); + printf("hi = %s %% %s;\n", r((int)insn.instruction.GetO32_rs()), r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_div_s: + printf("%s = %s / %s;\n", fr((int)insn.instruction.GetO32_fd()), fr((int)insn.instruction.GetO32_fs()), + fr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_div_d: + printf("%s = FloatReg_from_double(double_from_FloatReg(%s) / double_from_FloatReg(%s));\n", + dr((int)insn.instruction.GetO32_fd()), dr((int)insn.instruction.GetO32_fs()), + dr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_mov_s: + printf("%s = %s;\n", fr((int)insn.instruction.GetO32_fd()), fr((int)insn.instruction.GetO32_fs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_mov_d: + printf("%s = %s;\n", dr((int)insn.instruction.GetO32_fd()), dr((int)insn.instruction.GetO32_fs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_mul_s: + printf("%s = %s * %s;\n", fr((int)insn.instruction.GetO32_fd()), fr((int)insn.instruction.GetO32_fs()), + fr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_mul_d: + printf("%s = FloatReg_from_double(double_from_FloatReg(%s) * double_from_FloatReg(%s));\n", + dr((int)insn.instruction.GetO32_fd()), dr((int)insn.instruction.GetO32_fs()), + dr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_negu: + printf("%s = -%s;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_neg_s: + printf("%s = -%s;\n", fr((int)insn.instruction.GetO32_fd()), fr((int)insn.instruction.GetO32_fs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_neg_d: + printf("%s = FloatReg_from_double(-double_from_FloatReg(%s));\n", dr((int)insn.instruction.GetO32_fd()), + dr((int)insn.instruction.GetO32_fs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_sub: + if (insn.instruction.GetO32_rs() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_zero) { + printf("%s = -%s;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rt())); + break; + } else { + goto unimplemented; + } + + case rabbitizer::InstrId::UniqueId::cpu_sub_s: + printf("%s = %s - %s;\n", fr((int)insn.instruction.GetO32_fd()), fr((int)insn.instruction.GetO32_fs()), + fr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_sub_d: + printf("%s = FloatReg_from_double(double_from_FloatReg(%s) - double_from_FloatReg(%s));\n", + dr((int)insn.instruction.GetO32_fd()), dr((int)insn.instruction.GetO32_fs()), + dr((int)insn.instruction.GetO32_ft())); + break; + + // Jumps + + case rabbitizer::InstrId::UniqueId::cpu_j: + dump_instr(i + 1); + imm = insn.getAddress(); + printf("goto L%x;\n", imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_jal: + imm = insn.getAddress(); + dump_jal(i, imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_jalr: + printf("fp_dest = %s;\n", r((int)insn.instruction.GetO32_rs())); + dump_instr(i + 1); + printf("temp64 = trampoline(mem, sp, %s, %s, %s, %s, fp_dest);\n", + r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0), + r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a1), + r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a2), + r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a3)); + printf("%s = (uint32_t)(temp64 >> 32);\n", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0)); + printf("%s = (uint32_t)temp64;\n", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1)); + printf("goto L%x;\n", text_vaddr + (i + 2) * 4); + label_addresses.insert(text_vaddr + (i + 2) * 4); + break; + + case rabbitizer::InstrId::UniqueId::cpu_jr: + // TODO: understand why the switch version fails, and why only it needs the nop + if (insn.jtbl_addr != 0) { + uint32_t jtbl_pos = insn.jtbl_addr - rodata_vaddr; + + assert(jtbl_pos < rodata_section_len && + jtbl_pos + insn.num_cases * sizeof(uint32_t) <= rodata_section_len); +#if 1 + printf(";static void *const Lswitch%x[] = {\n", insn.jtbl_addr); + + for (uint32_t i = 0; i < insn.num_cases; i++) { + uint32_t dest_addr = read_u32_be(rodata_section + jtbl_pos + i * sizeof(uint32_t)) + gp_value; + printf("&&L%x,\n", dest_addr); + label_addresses.insert(dest_addr); + } + + printf("};\n"); + printf("dest = Lswitch%x[%s];\n", insn.jtbl_addr, r((int)insn.index_reg)); + dump_instr(i + 1); + printf("goto *dest;\n"); +#else + // This block produces a switch instead of an array of labels. + // It is not being used because currently it is a bit bugged. + // It has been keep as a reference and with the main intention to fix it + + assert(insns[i + 1].id == MIPS_INS_NOP); + printf("switch (%s) {\n", r(insn.index_reg)); + + for (uint32_t i = 0; i < insn.num_cases; i++) { + uint32_t dest_addr = read_u32_be(rodata_section + jtbl_pos + i * sizeof(uint32_t)) + gp_value; + printf("case %u: goto L%x;\n", i, dest_addr); + label_addresses.insert(dest_addr); + } + + printf("}\n"); +#endif + } else { + if (insn.instruction.GetO32_rs() != rabbitizer::Registers::Cpu::GprO32::GPR_O32_ra) { + printf("UNSUPPORTED JR %s (no jumptable available)\n", r((int)insn.instruction.GetO32_rs())); + } else { + dump_instr(i + 1); + switch (find_function(text_vaddr + i * sizeof(uint32_t))->second.nret) { + case 0: + printf("return;\n"); + break; + + case 1: + printf("return v0;\n"); + break; + + case 2: + printf("return ((uint64_t)v0 << 32) | v1;\n"); + break; + } + } + } + break; + + case rabbitizer::InstrId::UniqueId::cpu_lb: + imm = insn.getImmediate(); + printf("%s = MEM_S8(%s + %d);\n", r((int)insn.instruction.GetO32_rt()), + r((int)insn.instruction.GetO32_rs()), imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_lbu: + imm = insn.getImmediate(); + printf("%s = MEM_U8(%s + %d);\n", r((int)insn.instruction.GetO32_rt()), + r((int)insn.instruction.GetO32_rs()), imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_lh: + imm = insn.getImmediate(); + printf("%s = MEM_S16(%s + %d);\n", r((int)insn.instruction.GetO32_rt()), + r((int)insn.instruction.GetO32_rs()), imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_lhu: + imm = insn.getImmediate(); + printf("%s = MEM_U16(%s + %d);\n", r((int)insn.instruction.GetO32_rt()), + r((int)insn.instruction.GetO32_rs()), imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_lui: + imm = insn.getImmediate(); + printf("%s = 0x%x;\n", r((int)insn.instruction.GetO32_rt()), imm << 16); + break; + + case rabbitizer::InstrId::UniqueId::cpu_lw: + imm = insn.getImmediate(); + printf("%s = MEM_U32(%s + %d);\n", r((int)insn.instruction.GetO32_rt()), + r((int)insn.instruction.GetO32_rs()), imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_lwc1: + imm = insn.getImmediate(); + printf("%s = MEM_U32(%s + %d);\n", wr((int)insn.instruction.GetO32_ft()), + r((int)insn.instruction.GetO32_rs()), imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_ldc1: + imm = insn.getImmediate(); + assert(((int)insn.instruction.GetO32_ft() - (int)rabbitizer::Registers::Cpu::Cop1O32::COP1_O32_fv0) % 2 == + 0); + printf("%s = MEM_U32(%s + %d);\n", wr((int)insn.instruction.GetO32_ft() + 1), + r((int)insn.instruction.GetO32_rs()), imm); + printf("%s = MEM_U32(%s + %d + 4);\n", wr((int)insn.instruction.GetO32_ft()), + r((int)insn.instruction.GetO32_rs()), imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_lwl: { + const char* reg = r((int)insn.instruction.GetO32_rt()); + + imm = insn.getImmediate(); + + printf("%s = %s + %d; ", reg, r((int)insn.instruction.GetO32_rs()), imm); + printf("%s = ((uint32_t)MEM_U8(%s) << 24) | (MEM_U8(%s + 1) << 16) | (MEM_U8(%s + 2) << 8) | MEM_U8(%s + 3);\n", reg, + reg, reg, reg, reg); + } break; + + case rabbitizer::InstrId::UniqueId::cpu_lwr: + printf("//%s\n", insn.disassemble().c_str()); + break; + + case UniqueId_cpu_la: { + uint32_t addr = insn.getAddress(); + + printf("%s = 0x%x;", r((int)insn.lila_dst_reg), addr); + if ((text_vaddr <= addr) && (addr < text_vaddr + text_section_len)) { + printf(" // function pointer"); + label_addresses.insert(addr); + } + printf("\n"); + } break; + + case UniqueId_cpu_li: + imm = insn.getImmediate(); + + printf("%s = 0x%x;\n", r((int)insn.lila_dst_reg), imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_mfc1: + printf("%s = %s;\n", r((int)insn.instruction.GetO32_rt()), wr((int)insn.instruction.GetO32_fs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_mfhi: + printf("%s = hi;\n", r((int)insn.instruction.GetO32_rd())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_mflo: + printf("%s = lo;\n", r((int)insn.instruction.GetO32_rd())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_move: + printf("%s = %s;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_mtc1: + printf("%s = %s;\n", wr((int)insn.instruction.GetO32_fs()), r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_mult: + printf("lo = %s * %s;\n", r((int)insn.instruction.GetO32_rs()), r((int)insn.instruction.GetO32_rt())); + printf("hi = (uint32_t)((int64_t)(int)%s * (int64_t)(int)%s >> 32);\n", + r((int)insn.instruction.GetO32_rs()), r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_multu: + printf("lo = %s * %s;\n", r((int)insn.instruction.GetO32_rs()), r((int)insn.instruction.GetO32_rt())); + printf("hi = (uint32_t)((uint64_t)%s * (uint64_t)%s >> 32);\n", r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_sqrt_s: + printf("%s = sqrtf(%s);\n", fr((int)insn.instruction.GetO32_fd()), fr((int)insn.instruction.GetO32_fs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_nor: + printf("%s = ~(%s | %s);\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_not: + printf("%s = ~%s;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_or: + printf("%s = %s | %s;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_ori: + imm = insn.getImmediate(); + printf("%s = %s | 0x%x;\n", r((int)insn.instruction.GetO32_rt()), r((int)insn.instruction.GetO32_rs()), + imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_sb: + imm = insn.getImmediate(); + printf("MEM_U8(%s + %d) = (uint8_t)%s;\n", r((int)insn.instruction.GetO32_rs()), imm, + r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_sh: + imm = insn.getImmediate(); + printf("MEM_U16(%s + %d) = (uint16_t)%s;\n", r((int)insn.instruction.GetO32_rs()), imm, + r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_sll: + printf("%s = %s << %d;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rt()), + insn.instruction.Get_sa()); + break; + + case rabbitizer::InstrId::UniqueId::cpu_sllv: + printf("%s = %s << (%s & 0x1f);\n", r((int)insn.instruction.GetO32_rd()), + r((int)insn.instruction.GetO32_rt()), r((int)insn.instruction.GetO32_rs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_slt: + printf("%s = (int)%s < (int)%s;\n", r((int)insn.instruction.GetO32_rd()), + r((int)insn.instruction.GetO32_rs()), r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_slti: + imm = insn.getImmediate(); + printf("%s = (int)%s < (int)0x%x;\n", r((int)insn.instruction.GetO32_rt()), + r((int)insn.instruction.GetO32_rs()), imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_sltiu: + imm = insn.getImmediate(); + printf("%s = %s < 0x%x;\n", r((int)insn.instruction.GetO32_rt()), r((int)insn.instruction.GetO32_rs()), + imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_sltu: + printf("%s = %s < %s;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_sra: + printf("%s = (int)%s >> %d;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rt()), + insn.instruction.Get_sa()); + break; + + case rabbitizer::InstrId::UniqueId::cpu_srav: + printf("%s = (int)%s >> (%s & 0x1f);\n", r((int)insn.instruction.GetO32_rd()), + r((int)insn.instruction.GetO32_rt()), r((int)insn.instruction.GetO32_rs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_srl: + printf("%s = %s >> %d;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rt()), + insn.instruction.Get_sa()); + break; + + case rabbitizer::InstrId::UniqueId::cpu_srlv: + printf("%s = %s >> (%s & 0x1f);\n", r((int)insn.instruction.GetO32_rd()), + r((int)insn.instruction.GetO32_rt()), r((int)insn.instruction.GetO32_rs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_subu: + printf("%s = %s - %s;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_sw: + imm = insn.getImmediate(); + printf("MEM_U32(%s + %d) = %s;\n", r((int)insn.instruction.GetO32_rs()), imm, + r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_swc1: + imm = insn.getImmediate(); + printf("MEM_U32(%s + %d) = %s;\n", r((int)insn.instruction.GetO32_rs()), imm, + wr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_sdc1: + assert(((int)insn.instruction.GetO32_ft() - (int)rabbitizer::Registers::Cpu::Cop1O32::COP1_O32_fv0) % 2 == + 0); + imm = insn.getImmediate(); + printf("MEM_U32(%s + %d) = %s;\n", r((int)insn.instruction.GetO32_rs()), imm, + wr((int)insn.instruction.GetO32_ft() + 1)); + printf("MEM_U32(%s + %d + 4) = %s;\n", r((int)insn.instruction.GetO32_rs()), imm, + wr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_swl: + imm = insn.getImmediate(); + for (int i = 0; i < 4; i++) { + printf("MEM_U8(%s + %d + %d) = (uint8_t)(%s >> %d);\n", r((int)insn.instruction.GetO32_rs()), imm, i, + r((int)insn.instruction.GetO32_rt()), (3 - i) * 8); + } + break; + + case rabbitizer::InstrId::UniqueId::cpu_swr: + printf("//%s\n", insn.disassemble().c_str()); + break; + + case rabbitizer::InstrId::UniqueId::cpu_trunc_w_s: + printf("%s = (int)%s;\n", wr((int)insn.instruction.GetO32_fd()), fr((int)insn.instruction.GetO32_fs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_trunc_w_d: + printf("%s = (int)double_from_FloatReg(%s);\n", wr((int)insn.instruction.GetO32_fd()), + dr((int)insn.instruction.GetO32_fs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_trunc_l_d: + case rabbitizer::InstrId::UniqueId::cpu_trunc_l_s: + goto unimplemented; + + case rabbitizer::InstrId::UniqueId::cpu_xor: + printf("%s = %s ^ %s;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_xori: + imm = insn.getImmediate(); + printf("%s = %s ^ 0x%x;\n", r((int)insn.instruction.GetO32_rt()), r((int)insn.instruction.GetO32_rs()), + imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_tne: + imm = insn.instruction.Get_code_lower(); + printf("assert(%s == %s && \"tne %d\");\n", r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt()), imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_teq: + imm = insn.instruction.Get_code_lower(); + printf("assert(%s != %s && \"teq %d\");\n", r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt()), imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_tge: + imm = insn.instruction.Get_code_lower(); + printf("assert((int)%s < (int)%s && \"tge %d\");\n", r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt()), imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_tgeu: + imm = insn.instruction.Get_code_lower(); + printf("assert(%s < %s && \"tgeu %d\");\n", r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt()), imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_tlt: + imm = insn.instruction.Get_code_lower(); + printf("assert((int)%s >= (int)%s && \"tlt %d\");\n", r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt()), imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_nop: + printf("//nop;\n"); + break; + + default: + unimplemented: + printf("UNIMPLEMENTED 0x%X : %s\n", insn.instruction.getRaw(), insn.disassemble().c_str()); + break; + } +} + +void inspect_data_function_pointers(vector>& ret, const uint8_t* section, + uint32_t section_vaddr, uint32_t len) { + for (uint32_t i = 0; i < len; i += 4) { + uint32_t addr = read_u32_be(section + i); + + if (addr == 0x430b00 || addr == 0x433b00) { + // in as1, not function pointers (normal integers) + continue; + } + + if (addr == 0x4a0000) { + // in copt + continue; + } + + if (section_vaddr + i >= procedure_table_start && + section_vaddr + i < procedure_table_start + procedure_table_len) { + // some linking table with a "all" functions, in as1 5.3 + continue; + } + + if ((addr >= text_vaddr) && (addr < text_vaddr + text_section_len) && ((addr % 4) == 0)) { +#if INSPECT_FUNCTION_POINTERS + fprintf(stderr, "assuming function pointer 0x%x at 0x%x\n", addr, section_vaddr + i); +#endif + ret.push_back(make_pair(section_vaddr + i, addr)); + label_addresses.insert(addr); + functions[addr].referenced_by_function_pointer = true; + } + } +} + +void dump_function_signature(Function& f, uint32_t vaddr) { + printf("static "); + switch (f.nret) { + case 0: + printf("void "); + break; + + case 1: + printf("uint32_t "); + break; + + case 2: + printf("uint64_t "); + break; + } + + auto name_it = symbol_names.find(vaddr); + + if (name_it != symbol_names.end()) { + printf("f_%s", name_it->second.c_str()); + } else { + printf("func_%x", vaddr); + } + + printf("(uint8_t *mem, uint32_t sp"); + + if (f.v0_in) { + printf(", uint32_t %s", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0)); + } + + for (uint32_t i = 0; i < f.nargs; i++) { + printf(", uint32_t %s", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + i)); + } + + printf(")"); +} + +void dump_c(void) { + map symbol_names_inv; + + for (auto& it : symbol_names) { + symbol_names_inv[it.second] = it.first; + } + + uint32_t min_addr = UINT32_MAX; + uint32_t max_addr = 0; + + if (data_section_len > 0) { + min_addr = std::min(min_addr, data_vaddr); + max_addr = std::max(max_addr, data_vaddr + data_section_len); + } + if (rodata_section_len > 0) { + min_addr = std::min(min_addr, rodata_vaddr); + max_addr = std::max(max_addr, rodata_vaddr + rodata_section_len); + } + if (bss_section_len) { + min_addr = std::min(min_addr, bss_vaddr); + max_addr = std::max(max_addr, bss_vaddr + bss_section_len); + } + + // 64 kB. Supposedly the worst-case smallest permitted page size, increase if necessary. + // Ensures the hardcoded min_addr and max_addr are sufficiently aligned for the machine running the + // recompiled binaries (and not just the one doing the original recomp build). + uint32_t page_size = 0x10000; + + min_addr = min_addr & ~(page_size - 1); + max_addr = (max_addr + (page_size - 1)) & ~(page_size - 1); + + uint32_t stack_bottom = min_addr; + min_addr -= 0x100000; // 1 MB stack + stack_bottom -= 0x10; // for main's stack frame + + printf("#include \"header.h\"\n"); + + if (conservative) { + printf("static uint32_t s0, s1, s2, s3, s4, s5, s6, s7, fp;\n"); + } + + printf("static const uint32_t rodata[] = {\n"); + + for (size_t i = 0; i < rodata_section_len; i += 4) { + printf("0x%x,%s", read_u32_be(rodata_section + i), i % 32 == 28 ? "\n" : ""); + } + + printf("};\n"); + printf("static const uint32_t data[] = {\n"); + + for (size_t i = 0; i < data_section_len; i += 4) { + printf("0x%x,%s", read_u32_be(data_section + i), i % 32 == 28 ? "\n" : ""); + } + + printf("};\n"); + + /* if (!data_function_pointers.empty()) { + printf("static const struct { uint32_t orig_addr; void *recompiled_addr; } data_function_pointers[] = {\n"); + for (auto item : data_function_pointers) { + printf("{0x%x, &&L%x},\n", item.first, item.second); + } + printf("};\n"); + } */ + + if (TRACE) { + printf("static unsigned long long int cnt = 0;\n"); + } + + for (auto& f_it : functions) { + uint32_t addr = f_it.first; + auto& ins = insns.at(addr_to_i(addr)); + + if (ins.f_livein != 0) { + // Function is used + dump_function_signature(f_it.second, addr); + printf(";\n"); + } + } + + if (!data_function_pointers.empty() || !la_function_pointers.empty()) { + printf("uint64_t trampoline(uint8_t *mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, uint32_t a3, " + "uint32_t fp_dest) {\n"); + printf("switch (fp_dest) {\n"); + + for (auto& it : functions) { + Function& f = it.second; + + if (f.referenced_by_function_pointer) { + printf("case 0x%x: ", it.first); + + if (f.nret == 1) { + printf("return (uint64_t)"); + } else if (f.nret == 2) { + printf("return "); + } + + auto name_it = symbol_names.find(it.first); + + if (name_it != symbol_names.end()) { + printf("f_%s", name_it->second.c_str()); + } else { + printf("func_%x", it.first); + } + + printf("(mem, sp"); + + for (unsigned int i = 0; i < f.nargs; i++) { + printf(", a%d", i); + } + + printf(")"); + + if (f.nret == 1) { + printf(" << 32"); + } + + printf(";"); + + if (f.nret == 0) { + printf(" return 0;"); + } + + printf("\n"); + } + } + + printf("default: abort();"); + printf("}\n"); + printf("}\n"); + } + + printf("int run(uint8_t *mem, int argc, char *argv[]) {\n"); + printf("mmap_initial_data_range(mem, 0x%x, 0x%x);\n", min_addr, max_addr); + + printf("memcpy(mem + 0x%x, rodata, 0x%x);\n", rodata_vaddr, rodata_section_len); + printf("memcpy(mem + 0x%x, data, 0x%x);\n", data_vaddr, data_section_len); + + /* if (!data_function_pointers.empty()) { + if (!LABELS_64_BIT) { + printf("for (int i = 0; i < %d; i++) MEM_U32(data_function_pointers[i].orig_addr) = + (uint32_t)(uintptr_t)data_function_pointers[i].recompiled_addr;\n", (int)data_function_pointers.size()); } else { + printf("for (int i = 0; i < %d; i++) MEM_U32(data_function_pointers[i].orig_addr) = + (uint32_t)((uintptr_t)data_function_pointers[i].recompiled_addr - (uintptr_t)&&Loffset);\n", + (int)data_function_pointers.size()); + } + } */ + + printf("MEM_S32(0x%x) = argc;\n", symbol_names_inv.at("__Argc")); + printf("MEM_S32(0x%x) = argc;\n", stack_bottom); + printf("uint32_t al = argc * 4; for (int i = 0; i < argc; i++) al += strlen(argv[i]) + 1;\n"); + printf("uint32_t arg_addr = wrapper_malloc(mem, al);\n"); + printf("MEM_U32(0x%x) = arg_addr;\n", symbol_names_inv.at("__Argv")); + printf("MEM_U32(0x%x) = arg_addr;\n", stack_bottom + 4); + printf("uint32_t arg_strpos = arg_addr + argc * 4;\n"); + printf("for (int i = 0; i < argc; i++) {MEM_U32(arg_addr + i * 4) = arg_strpos; uint32_t p = 0; do { " + "MEM_S8(arg_strpos) = argv[i][p]; ++arg_strpos; } while (argv[i][p++] != '\\0');}\n"); + + printf("setup_libc_data(mem);\n"); + + // printf("gp = 0x%x;\n", gp_value); // only to recreate the outcome when ugen reads uninitialized stack memory + + printf("int ret = f_main(mem, 0x%x", stack_bottom); + + Function& main_func = functions[main_addr]; + + if (main_func.nargs >= 1) { + printf(", argc"); + } + + if (main_func.nargs >= 2) { + printf(", arg_addr"); + } + + printf(");\n"); + + if (TRACE) { + printf("end: fprintf(stderr, \"cnt: %%llu\\n\", cnt);\n"); + } + + printf("return ret;\n"); + printf("}\n"); + + for (auto& f_it : functions) { + Function& f = f_it.second; + uint32_t start_addr = f_it.first; + uint32_t end_addr = f.end_addr; + + if (insns[addr_to_i(start_addr)].f_livein == 0) { + // Non-used function, skip + continue; + } + + printf("\n"); + dump_function_signature(f, start_addr); + printf(" {\n"); + printf("const uint32_t zero = 0;\n"); + + if (!conservative) { + printf("uint32_t at = 0, v1 = 0, t0 = 0, t1 = 0, t2 = 0,\n"); + printf("t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, s0 = 0, s1 = 0, s2 = 0, s3 = 0, s4 = 0, s5 = 0,\n"); + printf("s6 = 0, s7 = 0, t8 = 0, t9 = 0, gp = 0, fp = 0, s8 = 0, ra = 0;\n"); + } else { + printf("uint32_t at = 0, v1 = 0, t0 = 0, t1 = 0, t2 = 0,\n"); + printf("t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, t8 = 0, t9 = 0, gp = 0x10000, ra = 0x10000;\n"); + } + + printf("uint32_t lo = 0, hi = 0;\n"); + printf("int cf = 0;\n"); + printf("uint64_t temp64;\n"); + printf("double tempf64;\n"); + printf("uint32_t fp_dest;\n"); + printf("void *dest;\n"); + + if (!f.v0_in) { + printf("uint32_t v0 = 0;\n"); + } + + for (uint32_t j = f.nargs; j < 4; j++) { + printf("uint32_t %s = 0;\n", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + j)); + } + + for (size_t i = addr_to_i(start_addr), end_i = addr_to_i(end_addr); i < end_i; i++) { + Insn& insn = insns[i]; + uint32_t vaddr = text_vaddr + i * 4; + if (label_addresses.count(vaddr)) { + printf("L%x:\n", vaddr); + } +#if DUMP_INSTRUCTIONS + printf("// %s:\n", insn.disassemble().c_str()); +#endif + dump_instr(i); + } + + printf("}\n"); + } + /* for (size_t i = 0; i < insns.size(); i++) { + Insn& insn = insns[i]; + uint32_t vaddr = text_vaddr + i * 4; + auto fn_it = functions.find(vaddr); + + if (fn_it != functions.end()) { + Function& f = fn_it->second; + + printf("}\n\n"); + + switch (f.nret) { + case 0: + printf("void "); + break; + + case 1: + printf("uint32_t "); + break; + + case 2: + printf("uint64_t "); + break; + } + + auto name_it = symbol_names.find(vaddr); + + if (name_it != symbol_names.end()) { + printf("%s", name_it->second.c_str()); + } else { + printf("func_%x", vaddr); + } + + printf("(uint8_t *mem, uint32_t sp"); + + if (f.v0_in) { + printf(", uint32_t %s", r(MIPS_REG_V0)); + } + + for (uint32_t i = 0; i < f.nargs; i++) { + printf(", uint32_t %s", r(MIPS_REG_A0 + i)); + } + + printf(") {\n"); + printf("const uint32_t zero = 0;\n"); + printf("uint32_t at = 0, v1 = 0, t0 = 0, t1 = 0, t2 = 0,\n"); + printf("t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, s0 = 0, s1 = 0, s2 = 0, s3 = 0, s4 = 0, s5 = 0,\n"); + printf("s6 = 0, s7 = 0, t8 = 0, t9 = 0, gp = 0, fp = 0, s8 = 0, ra = 0;\n"); + printf("uint32_t lo = 0, hi = 0;\n"); + printf("int cf = 0;\n"); + + if (!f.v0_in) { + printf("uint32_t v0 = 0;\n"); + } + + for (uint32_t j = f.nargs; j < 4; j++) { + printf("uint32_t %s = 0;\n", r(MIPS_REG_A0 + j)); + } + } + + if (label_addresses.count(vaddr)) { + printf("L%x:\n", vaddr); + } + + dump_instr(i); + } */ +} + +void parse_elf(const uint8_t* data, size_t file_len) { + Elf32_Ehdr* ehdr; + Elf32_Shdr *shdr, *str_shdr, *sym_shdr = NULL, *dynsym_shdr, *dynamic_shdr, *reginfo_shdr, *got_shdr, + *sym_strtab = NULL, *sym_dynstr; + int text_section_index = -1; + int symtab_section_index = -1; + int dynsym_section_index = -1; + int reginfo_section_index = -1; + int dynamic_section_index = -1; + int got_section_index = -1; + int rodata_section_index = -1; + int data_section_index = -1; + int bss_section_index = -1; + uint32_t text_offset = 0; + uint32_t vaddr_adj = 0; + + if (file_len < 4 || data[0] != 0x7f || data[1] != 'E' || data[2] != 'L' || data[3] != 'F') { + fprintf(stderr, "Not an ELF file.\n"); + exit(EXIT_FAILURE); + } + + ehdr = (Elf32_Ehdr*)data; + if (ehdr->e_ident[EI_DATA] != 2 || u16be(ehdr->e_machine) != 8) { + fprintf(stderr, "Not big-endian MIPS.\n"); + exit(EXIT_FAILURE); + } + + if (u16be(ehdr->e_shstrndx) == 0) { + // (We could look at program headers instead in this case.) + fprintf(stderr, "Missing section headers; stripped binaries are not yet supported.\n"); + exit(EXIT_FAILURE); + } + +#define SECTION(index) (Elf32_Shdr*)(data + u32be(ehdr->e_shoff) + (index)*u16be(ehdr->e_shentsize)) +#define STR(strtab, offset) (const char*)(data + u32be(strtab->sh_offset) + offset) + + str_shdr = SECTION(u16be(ehdr->e_shstrndx)); + for (int i = 0; i < u16be(ehdr->e_shnum); i++) { + shdr = SECTION(i); + + const char* name = STR(str_shdr, u32be(shdr->sh_name)); + + if (strcmp(name, ".text") == 0) { + text_offset = u32be(shdr->sh_offset); + text_vaddr = u32be(shdr->sh_addr); + vaddr_adj = text_vaddr - u32be(shdr->sh_addr); + text_section_len = u32be(shdr->sh_size); + text_section = data + text_offset; + text_section_index = i; + } + + if (u32be(shdr->sh_type) == SHT_SYMTAB) { + symtab_section_index = i; + } + + if (u32be(shdr->sh_type) == SHT_DYNSYM) { + dynsym_section_index = i; + } + + if (u32be(shdr->sh_type) == SHT_MIPS_REGINFO) { + reginfo_section_index = i; + } + + if (u32be(shdr->sh_type) == SHT_DYNAMIC) { + dynamic_section_index = i; + } + + if (strcmp(name, ".got") == 0) { + got_section_index = i; + } + + if (strcmp(name, ".rodata") == 0) { + rodata_section_index = i; + } + + if (strcmp(name, ".data") == 0) { + data_section_index = i; + } + + if (strcmp(name, ".bss") == 0) { + bss_section_index = i; + } + } + + if (text_section_index == -1) { + fprintf(stderr, "Missing .text section.\n"); + exit(EXIT_FAILURE); + } + + if (symtab_section_index == -1 && dynsym_section_index == -1) { + fprintf(stderr, "Missing .symtab or .dynsym section.\n"); + exit(EXIT_FAILURE); + } + + if (dynsym_section_index != -1) { + if (reginfo_section_index == -1) { + fprintf(stderr, "Missing .reginfo section.\n"); + exit(EXIT_FAILURE); + } + + if (dynamic_section_index == -1) { + fprintf(stderr, "Missing .dynamic section.\n"); + exit(EXIT_FAILURE); + } + + if (got_section_index == -1) { + fprintf(stderr, "Missing .got section.\n"); + exit(EXIT_FAILURE); + } + } + + if (rodata_section_index != -1) { + shdr = SECTION(rodata_section_index); + uint32_t size = u32be(shdr->sh_size); + rodata_section = data + u32be(shdr->sh_offset); + rodata_section_len = size; + rodata_vaddr = u32be(shdr->sh_addr); + } + + if (data_section_index != -1) { + shdr = SECTION(data_section_index); + uint32_t size = u32be(shdr->sh_size); + data_section = data + u32be(shdr->sh_offset); + data_section_len = size; + data_vaddr = u32be(shdr->sh_addr); + } + + if (bss_section_index != -1) { + shdr = SECTION(bss_section_index); + uint32_t size = u32be(shdr->sh_size); + bss_section_len = size; + bss_vaddr = u32be(shdr->sh_addr); + } + + // add symbols + if (symtab_section_index != -1) { + sym_shdr = SECTION(symtab_section_index); + sym_strtab = SECTION(u32be(sym_shdr->sh_link)); + assert(0 && ".symtab not supported - use a program with .dynsym instead"); + + assert(u32be(sym_shdr->sh_entsize) == sizeof(Elf32_Sym)); + for (uint32_t i = 0; i < u32be(sym_shdr->sh_size); i += sizeof(Elf32_Sym)) { + Elf32_Sym* sym = (Elf32_Sym*)(data + u32be(sym_shdr->sh_offset) + i); + const char* name = STR(sym_strtab, u32be(sym->st_name)); + uint32_t addr = u32be(sym->st_value); + + if (u16be(sym->st_shndx) != text_section_index || name[0] == '.') { + continue; + } + + addr += vaddr_adj; + // disasm_label_add(state, name, addr, u32be(sym->st_size), true); + } + } + + if (dynsym_section_index != -1) { + dynsym_shdr = SECTION(dynsym_section_index); + sym_dynstr = SECTION(u32be(dynsym_shdr->sh_link)); + reginfo_shdr = SECTION(reginfo_section_index); + dynamic_shdr = SECTION(dynamic_section_index); + got_shdr = SECTION(got_section_index); + + Elf32_RegInfo* reg_info = (Elf32_RegInfo*)(data + u32be(reginfo_shdr->sh_offset)); + uint32_t gp_base = u32be(reg_info->ri_gp_value); // gp should have this value through the program run + uint32_t got_start = 0; + uint32_t local_got_no = 0; + uint32_t first_got_sym = 0; + uint32_t dynsym_no = 0; // section size can't be used due to alignment 16 padding + + assert(u32be(dynamic_shdr->sh_entsize) == sizeof(Elf32_Dyn)); + for (uint32_t i = 0; i < u32be(dynamic_shdr->sh_size); i += sizeof(Elf32_Dyn)) { + Elf32_Dyn* dyn = (Elf32_Dyn*)(data + u32be(dynamic_shdr->sh_offset) + i); + + if (u32be(dyn->d_tag) == DT_PLTGOT) { + got_start = u32be(dyn->d_un.d_ptr); + } + + if (u32be(dyn->d_tag) == DT_MIPS_LOCAL_GOTNO) { + local_got_no = u32be(dyn->d_un.d_val); + } + + if (u32be(dyn->d_tag) == DT_MIPS_GOTSYM) { + first_got_sym = u32be(dyn->d_un.d_val); + } + + if (u32be(dyn->d_tag) == DT_MIPS_SYMTABNO) { + dynsym_no = u32be(dyn->d_un.d_val); + } + } + + assert(got_start != 0); + + // value to add to asm gp offset, for example 32752, if -32752(gp) refers to the first entry in got. + uint32_t gp_adj = gp_base - got_start; + + assert(gp_adj < 0x10000); + + assert(u32be(dynsym_shdr->sh_entsize) == sizeof(Elf32_Sym)); + + uint32_t global_got_no = dynsym_no - first_got_sym; + // global_got_entry *global_entries = (global_got_entry *)calloc(global_got_no, sizeof(global_got_entry)); + + got_globals.resize(global_got_no); + + uint32_t common_start = ~0U; + vector common_order; + + for (uint32_t i = 0; i < dynsym_no; i++) { + Elf32_Sym* sym = (Elf32_Sym*)(data + u32be(dynsym_shdr->sh_offset) + i * sizeof(Elf32_Sym)); + const char* name = STR(sym_dynstr, u32be(sym->st_name)); + uint32_t addr = u32be(sym->st_value); + + addr += vaddr_adj; + + uint8_t type = ELF32_ST_TYPE(sym->st_info); + + if (!strcmp(name, "_procedure_table")) { + procedure_table_start = addr; + } else if (!strcmp(name, "_procedure_table_size")) { + procedure_table_len = 40 * u32be(sym->st_value); + } + + if ((u16be(sym->st_shndx) == SHN_MIPS_TEXT && type == STT_FUNC) || + (type == STT_OBJECT && + (u16be(sym->st_shndx) == SHN_MIPS_ACOMMON || u16be(sym->st_shndx) == SHN_MIPS_DATA))) { + // disasm_label_add(state, name, addr, u32be(sym->st_size), true); + if (type == STT_OBJECT) {} + + if (u16be(sym->st_shndx) == SHN_MIPS_ACOMMON) { + if (addr < common_start) { + common_start = addr; + } + + common_order.push_back(name); + } + + if (type == STT_FUNC) { + add_function(addr); + + if (strcmp(name, "main") == 0) { + main_addr = addr; + } + + if (strcmp(name, "_mcount") == 0) { + mcount_addr = addr; + } + + symbol_names[addr] = name; + } + } + + if (i >= first_got_sym) { + uint32_t got_value = u32be(*(uint32_t*)(data + u32be(got_shdr->sh_offset) + + (local_got_no + (i - first_got_sym)) * sizeof(uint32_t))); + + if (u16be(sym->st_shndx) == SHN_MIPS_TEXT && type == STT_FUNC) { + // got_globals[i - first_got_sym] = got_value; + // label_addresses.insert(got_value); + got_globals[i - first_got_sym] = addr; // to include the 3 instr gp header thing + label_addresses.insert(addr); + } else if (type == STT_OBJECT && + (u16be(sym->st_shndx) == SHN_UNDEF || u16be(sym->st_shndx) == SHN_COMMON)) { + // symbol defined externally (for example in libc) + got_globals[i - first_got_sym] = got_value; + } else { + got_globals[i - first_got_sym] = addr; + } + + symbol_names[got_globals[i - first_got_sym]] = name; + } + } + + uint32_t* local_entries = (uint32_t*)calloc(local_got_no, sizeof(uint32_t)); + got_locals.resize(local_got_no); + for (uint32_t i = 0; i < local_got_no; i++) { + uint32_t* entry = (uint32_t*)(data + u32be(got_shdr->sh_offset) + i * sizeof(uint32_t)); + got_locals[i] = u32be(*entry); + } + + gp_value = gp_base; + gp_value_adj = gp_adj; + + free(local_entries); + } + + // add relocations + for (int i = 0; i < u16be(ehdr->e_shnum); i++) { + Elf32_Rel* prevHi = NULL; + + shdr = SECTION(i); + if (u32be(shdr->sh_type) != SHT_REL || u32be(shdr->sh_info) != (uint32_t)text_section_index) + continue; + + if (sym_shdr == NULL) { + fprintf(stderr, "Relocations without .symtab section\n"); + exit(EXIT_FAILURE); + } + + assert(u32be(shdr->sh_link) == (uint32_t)symtab_section_index); + assert(u32be(shdr->sh_entsize) == sizeof(Elf32_Rel)); + + for (uint32_t i = 0; i < u32be(shdr->sh_size); i += sizeof(Elf32_Rel)) { + Elf32_Rel* rel = (Elf32_Rel*)(data + u32be(shdr->sh_offset) + i); + uint32_t offset = text_offset + u32be(rel->r_offset); + uint32_t symIndex = ELF32_R_SYM(u32be(rel->r_info)); + uint32_t rtype = ELF32_R_TYPE(u32be(rel->r_info)); + const char* symName = "0"; + + if (symIndex != STN_UNDEF) { + Elf32_Sym* sym = (Elf32_Sym*)(data + u32be(sym_shdr->sh_offset) + symIndex * sizeof(Elf32_Sym)); + + symName = STR(sym_strtab, u32be(sym->st_name)); + } + + if (rtype == R_MIPS_HI16) { + if (prevHi != NULL) { + fprintf(stderr, "Consecutive R_MIPS_HI16.\n"); + exit(EXIT_FAILURE); + } + + prevHi = rel; + continue; + } + + if (rtype == R_MIPS_LO16) { + int32_t addend = (int16_t)((data[offset + 2] << 8) + data[offset + 3]); + + if (prevHi != NULL) { + uint32_t offset2 = text_offset + u32be(prevHi->r_offset); + + addend += (uint32_t)((data[offset2 + 2] << 8) + data[offset2 + 3]) << 16; + // add_reloc(state, offset2, symName, addend, out_range.vaddr); + } + prevHi = NULL; + // add_reloc(state, offset, symName, addend, out_range.vaddr); + } else if (rtype == R_MIPS_26) { + int32_t addend = (u32be(*(uint32_t*)(data + offset)) & ((1 << 26) - 1)) << 2; + + if (addend >= (1 << 27)) { + addend -= 1 << 28; + } + // add_reloc(state, offset, symName, addend, out_range.vaddr); + } + + else { + fprintf(stderr, "Bad relocation type %d.\n", rtype); + exit(EXIT_FAILURE); + } + } + + if (prevHi != NULL) { + fprintf(stderr, "R_MIPS_HI16 without matching R_MIPS_LO16.\n"); + exit(EXIT_FAILURE); + } + } +} +#undef SECTION +#undef STR + +size_t read_file(const char* file_name, uint8_t** data) { + FILE* in; + uint8_t* in_buf = NULL; + long file_size; + long bytes_read; + + in = fopen(file_name, "rb"); + assert(in != nullptr); + + // allocate buffer to read from offset to end of file + fseek(in, 0, SEEK_END); + file_size = ftell(in); + assert(file_size != -1L); + + in_buf = (uint8_t*)malloc(file_size); + fseek(in, 0, SEEK_SET); + + // read bytes + bytes_read = fread(in_buf, 1, file_size, in); + assert(bytes_read == file_size); + + fclose(in); + *data = in_buf; + return bytes_read; +} + +#ifdef UNIX_PLATFORM +void crashHandler(int sig) { + void* array[4096]; + const size_t nMaxFrames = std::size(array); + size_t size = backtrace(array, nMaxFrames); + char** symbols = backtrace_symbols(array, nMaxFrames); + + fprintf(stderr, "\n recomp crashed. (Signal: %i)\n", sig); + + // Feel free to add more crash messages. + const char* crashEasterEgg[] = { + "\tIT'S A SECRET TO EVERYBODY. \n\tBut it shouldn't be, you'd better ask about it!", + "\tI AM ERROR.", + "\tGRUMBLE,GRUMBLE...", + "\tDODONGO DISLIKES SMOKE \n\tAnd recomp dislikes whatever you fed it.", + "\tMay the way of the Hero lead \n\tto the debugger.", + "\tTHE WIND FISH SLUMBERS LONG... \n\tTHE HERO'S LIFE GONE... ", + "\tSEA BEARS FOAM, SLEEP BEARS DREAMS. \n\tBOTH END IN THE SAME WAY CRASSSH!", + "\tYou've met with a terrible fate, haven't you?", + "\tMaster, I calculate a 100% probability that recomp has crashed. \n\tAdditionally, the " + "batteries in your Wii Remote are nearly depleted.", + "\t CONGRATURATIONS! \n" + "\tAll Pages are displayed.\n" + "\t THANK YOU! \n" + "\t You are great debugger!", + "\tRCP is HUNG UP!!\n" + "\tOh! MY GOD!!", + }; + + srand(time(nullptr)); + auto easterIndex = rand() % std::size(crashEasterEgg); + + fprintf(stderr, "\n%s\n\n", crashEasterEgg[easterIndex]); + + fprintf(stderr, "Traceback:\n"); + for (size_t i = 1; i < size; i++) { + Dl_info info; + uint32_t gotAddress = dladdr(array[i], &info); + std::string functionName(symbols[i]); + + if (gotAddress != 0 && info.dli_sname != nullptr) { + int32_t status; + char* demangled = abi::__cxa_demangle(info.dli_sname, nullptr, nullptr, &status); + const char* nameFound = info.dli_sname; + + if (status == 0) { + nameFound = demangled; + } + + { + char auxBuffer[0x8000]; + + snprintf(auxBuffer, std::size(auxBuffer), "%s (+0x%lX)", nameFound, + (char*)array[i] - (char*)info.dli_saddr); + functionName = auxBuffer; + } + free(demangled); + +#if FULL_TRACEBACK == 0 + fprintf(stderr, "%-3zd %s\n", i, functionName.c_str()); +#endif + } + +#if FULL_TRACEBACK != 0 + fprintf(stderr, "%-3zd %s\n", i, functionName.c_str()); +#endif + } + + fprintf(stderr, "\n"); + + free(symbols); + exit(1); +} +#endif + +int main(int argc, char* argv[]) { + const char* filename = argv[1]; + + if (strcmp(filename, "--conservative") == 0) { + conservative = true; + filename = argv[2]; + } + +#ifdef UNIX_PLATFORM + signal(SIGSEGV, crashHandler); + signal(SIGABRT, crashHandler); +#endif + + uint8_t* data; + size_t len = read_file(filename, &data); + + parse_elf(data, len); + disassemble(); + inspect_data_function_pointers(data_function_pointers, rodata_section, rodata_vaddr, rodata_section_len); + inspect_data_function_pointers(data_function_pointers, data_section, data_vaddr, data_section_len); + pass1(); + pass2(); + pass3(); + pass4(); + pass5(); + pass6(); + // dump(); + dump_c(); + free(data); + + return 0; +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/.clang-format b/tools/ido-static-recomp/tools/rabbitizer/.clang-format new file mode 100644 index 00000000..414e3cff --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/.clang-format @@ -0,0 +1,23 @@ +IndentWidth: 4 +Language: Cpp +UseTab: Never +ColumnLimit: 160 +PointerAlignment: Right +BreakBeforeBraces: Attach +SpaceAfterCStyleCast: false +Cpp11BracedListStyle: false +IndentCaseLabels: true +BinPackArguments: true +BinPackParameters: true +AlignAfterOpenBracket: Align +AlignOperands: true +BreakBeforeTernaryOperators: true +BreakBeforeBinaryOperators: None +AllowShortBlocksOnASingleLine: true +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: false +AlignEscapedNewlines: Left +AlignTrailingComments: true +SortIncludes: false diff --git a/tools/ido-static-recomp/tools/rabbitizer/.clang-tidy b/tools/ido-static-recomp/tools/rabbitizer/.clang-tidy new file mode 100644 index 00000000..8534b8a6 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/.clang-tidy @@ -0,0 +1,9 @@ +Checks: 'readability-*,-readability-magic-numbers,clang-diagnostic-*,clang-analyzer-*,-clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling,bugprone*,-bugprone-branch-clone,modernize*,performance*,portability*,diagnostic-*,analyzer-*,misc*,-misc-no-recursion' +WarningsAsErrors: '' +HeaderFilterRegex: '(src|include)\/.*\.h$' +FormatStyle: 'file' +CheckOptions: + # Require argument names to match exactly (instead of allowing a name to be a prefix/suffix of another) + # Note: 'true' is expected by clang-tidy 12+ but '1' is used for compatibility with older versions + - key: readability-inconsistent-declaration-parameter-name.Strict + value: 1 diff --git a/tools/ido-static-recomp/tools/rabbitizer/.gitattributes b/tools/ido-static-recomp/tools/rabbitizer/.gitattributes new file mode 100644 index 00000000..dfe07704 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/tools/ido-static-recomp/tools/rabbitizer/.github/workflows/ci.yml b/tools/ido-static-recomp/tools/rabbitizer/.github/workflows/ci.yml new file mode 100644 index 00000000..6baeb371 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/.github/workflows/ci.yml @@ -0,0 +1,54 @@ +name: Build and upload to PyPI + +# Build on every branch push, tag push, and pull request change: +on: [push, pull_request] + +jobs: + build_wheels: + name: Build wheels on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + + steps: + - uses: actions/checkout@v2 + + - name: Build wheels + uses: pypa/cibuildwheel@v2.5.0 + env: + CIBW_ARCHS_WINDOWS: "auto" + CIBW_ARCHS_LINUX: "auto" + CIBW_ARCHS_MACOS: "all" + + - uses: actions/upload-artifact@v2 + with: + path: ./wheelhouse/*.whl + + build_sdist: + name: Build source distribution + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Build sdist + run: pipx run build --sdist + + - uses: actions/upload-artifact@v2 + with: + path: dist/*.tar.gz + + upload_pypi: + needs: [build_wheels, build_sdist] + runs-on: ubuntu-latest + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') + steps: + - uses: actions/download-artifact@v2 + with: + name: artifact + path: dist + + - uses: pypa/gh-action-pypi-publish@v1.4.2 + with: + user: __token__ + password: ${{ secrets.pypi_password }} diff --git a/tools/ido-static-recomp/tools/rabbitizer/.github/workflows/make.yml b/tools/ido-static-recomp/tools/rabbitizer/.github/workflows/make.yml new file mode 100644 index 00000000..3079d9e3 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/.github/workflows/make.yml @@ -0,0 +1,14 @@ +name: make + +# Build on every branch push, tag push, and pull request change: +on: [push, pull_request] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - name: make + run: make WERROR=1 diff --git a/tools/ido-static-recomp/tools/rabbitizer/.gitignore b/tools/ido-static-recomp/tools/rabbitizer/.gitignore new file mode 100644 index 00000000..e433d8d7 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/.gitignore @@ -0,0 +1,215 @@ +# https://raw.githubusercontent.com/github/gitignore/main/C.gitignore +# https://raw.githubusercontent.com/github/gitignore/main/Python.gitignore + +# Prerequisites +*.d + +# Object files +*.o +*.ko +*.obj +*.elf + +# Linker output +*.ilk +*.map +*.exp + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# Debug files +*.dSYM/ +*.su +*.idb +*.pdb + +# Kernel Module Compile Results +*.mod* +*.cmd +.tmp_versions/ +modules.order +Module.symvers +Mkfile.old +dkms.conf + + + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + + +.vscode/ + diff --git a/tools/ido-static-recomp/tools/rabbitizer/.gitrepo b/tools/ido-static-recomp/tools/rabbitizer/.gitrepo new file mode 100644 index 00000000..cbd77990 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/.gitrepo @@ -0,0 +1,12 @@ +; DO NOT EDIT (unless you know what you are doing) +; +; This subdirectory is a git "subrepo", and this file is maintained by the +; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme +; +[subrepo] + remote = git@github.com:Decompollaborate/rabbitizer.git + branch = develop + commit = 72bf240f468d30286888212b5fb773fae94340f6 + parent = fa84f928c510147d6083b979efb28a5a07eefe10 + method = merge + cmdver = 0.4.3 diff --git a/tools/ido-static-recomp/tools/rabbitizer/LICENSE b/tools/ido-static-recomp/tools/rabbitizer/LICENSE new file mode 100644 index 00000000..10a2aa35 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Decompollaborate + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/tools/ido-static-recomp/tools/rabbitizer/MANIFEST.in b/tools/ido-static-recomp/tools/rabbitizer/MANIFEST.in new file mode 100644 index 00000000..1e60716c --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/MANIFEST.in @@ -0,0 +1,6 @@ +# SPDX-FileCopyrightText: © 2022 Decompollaborate +# SPDX-License-Identifier: MIT + +include **/*.h +include **/**/*.h +graft include diff --git a/tools/ido-static-recomp/tools/rabbitizer/Makefile b/tools/ido-static-recomp/tools/rabbitizer/Makefile new file mode 100644 index 00000000..e0b92c36 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/Makefile @@ -0,0 +1,140 @@ +# Build options can be changed by modifying the makefile or by building with 'make SETTING=value'. +DEBUG ?= 0 +WERROR ?= 0 +ASAN ?= 0 +EXPERIMENTAL ?= 0 +SANITY_CHECKS ?= 1 + +CC := clang +CXX := clang++ +AR := ar +IINC := -I include +IINC_XX := -I include -I cplusplus/include +CSTD := -std=c11 +CXXSTD := -std=c++17 +CFLAGS := -fPIC +CXXFLAGS := -fPIC +LDFLAGS := -Lbuild -lrabbitizer +LDXXFLAGS := -Lbuild -lrabbitizerpp +WARNINGS := -Wall -Wextra -Wpedantic +# WARNINGS := -Wall -Wextra -Wpedantic -Wpadded +WARNINGS += -Werror=vla -Werror=switch -Werror=implicit-fallthrough -Werror=unused-function -Werror=unused-parameter -Werror=shadow +WARNINGS_C := -Werror=implicit-function-declaration -Werror=incompatible-pointer-types +WARNINGS_CXX := + +ifeq ($(CC),gcc) + WARNINGS += -Wno-cast-function-type +endif + +ifeq ($(DEBUG),0) + OPTFLAGS := -Os -g +else + OPTFLAGS := -O0 -g3 + CFLAGS += -DDEVELOPMENT=1 + CXXFLAGS += -DDEVELOPMENT=1 +endif + +ifneq ($(WERROR),0) + WARNINGS += -Werror +endif + +ifneq ($(ASAN),0) + CFLAGS += -fsanitize=address -fsanitize=pointer-compare -fsanitize=pointer-subtract -fsanitize=undefined + CXXFLAGS += -fsanitize=address -fsanitize=pointer-compare -fsanitize=pointer-subtract -fsanitize=undefined +endif + +ifneq ($(EXPERIMENTAL),0) + CFLAGS += -DEXPERIMENTAL + CXXFLAGS += -DEXPERIMENTAL +endif + +ifneq ($(SANITY_CHECKS),0) + CFLAGS += -DRAB_SANITY_CHECKS=1 + CXXFLAGS += -DRAB_SANITY_CHECKS=1 +endif + + +SRC_DIRS := $(shell find src -type d) +C_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c)) +H_FILES := $(foreach dir,$(IINC),$(wildcard $(dir)/**/*.h)) +O_FILES := $(foreach f,$(C_FILES:.c=.o),build/$f) + +SRCXX_DIRS := $(shell find cplusplus/src -type d) +CXX_FILES := $(foreach dir,$(SRCXX_DIRS),$(wildcard $(dir)/*.cpp)) +HXX_FILES := $(foreach dir,$(IINC_XX),$(wildcard $(dir)/**/*.hpp)) +OXX_FILES := $(foreach f,$(CXX_FILES:.cpp=.o),build/$f) + +DEP_FILES := $(O_FILES:%.o=%.d) $(OXX_FILES:%.o=%.d) + +TESTS_DIRS := $(shell find tests -type d) + +STATIC_LIB := build/librabbitizer.a +DYNAMIC_LIB := build/librabbitizer.so + +STATIC_LIB_XX := build/librabbitizerpp.a +DYNAMIC_LIB_XX := build/librabbitizerpp.so + +# create build directories +$(shell mkdir -p $(foreach dir,$(SRC_DIRS) $(SRCXX_DIRS) $(TESTS_DIRS),build/$(dir))) + + +# Dependencies of libraries + +$(STATIC_LIB): $(O_FILES) +$(DYNAMIC_LIB): $(O_FILES) + +$(STATIC_LIB_XX): $(O_FILES) $(OXX_FILES) +$(DYNAMIC_LIB_XX): $(O_FILES) $(OXX_FILES) + + +#### Main Targets ### + +all: static tests + +static: $(STATIC_LIB) $(STATIC_LIB_XX) +dynamic: $(DYNAMIC_LIB) $(DYNAMIC_LIB_XX) + +clean: + $(RM) -rf build + +distclean: clean + $(RM) -rf dist rabbitizer.egg-info .mypy_cache + +format: + clang-format-11 -i -style=file $(C_FILES) + clang-format-11 -i -style=file $(CXX_FILES) + +tidy: + clang-tidy-11 -p . --fix --fix-errors $(C_FILES) $(H_FILES) -- $(CSTD) $(OPTFLAGS) $(IINC) $(WARNINGS) $(WARNINGS_C) $(CFLAGS) + +tests: build/test.elf build/rsptest.elf build/r5900test.elf build/registersTrackerTest.elf build/tests/cplusplus/test.elf + +.PHONY: all clean distclean format tidy tests +.DEFAULT_GOAL := all +.SECONDARY: + + +#### Various Recipes #### + +build/%.elf: %.c | $(STATIC_LIB) + $(CC) -MMD $(CSTD) $(OPTFLAGS) $(IINC) $(WARNINGS) $(WARNINGS_C) $(CFLAGS) -o $@ $^ $(LDFLAGS) + +build/%.elf: %.cpp | $(STATIC_LIB_XX) + $(CXX) -MMD $(CXXSTD) $(OPTFLAGS) $(IINC_XX) $(WARNINGS) $(WARNINGS_CXX) $(CXXFLAGS) -o $@ $^ $(LDXXFLAGS) + +build/%.a: + $(AR) rcs $@ $^ + +build/%.so: + $(CC) -shared -o $@ $^ + +build/%.o: %.c +# The -MMD flags additionaly creates a .d file with the same name as the .o file. + $(CC) -MMD -c $(CSTD) $(OPTFLAGS) $(IINC) $(WARNINGS) $(WARNINGS_C) $(CFLAGS) -o $@ $< + +build/%.o: %.cpp +# The -MMD flags additionaly creates a .d file with the same name as the .o file. + $(CXX) -MMD -c $(CXXSTD) $(OPTFLAGS) $(IINC_XX) $(WARNINGS) $(WARNINGS_CXX) $(CXXFLAGS) -o $@ $< + + +-include $(DEP_FILES) diff --git a/tools/ido-static-recomp/tools/rabbitizer/README.md b/tools/ido-static-recomp/tools/rabbitizer/README.md new file mode 100644 index 00000000..18bc794c --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/README.md @@ -0,0 +1,55 @@ +# rabbitizer + +[![PyPI - Downloads](https://img.shields.io/pypi/dm/rabbitizer)](https://pypi.org/project/rabbitizer/) +![GitHub](https://img.shields.io/github/license/Decompollaborate/rabbitizer) +![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/Decompollaborate/rabbitizer) +![PyPI](https://img.shields.io/pypi/v/rabbitizer) +![GitHub contributors](https://img.shields.io/github/contributors/Decompollaborate/rabbitizer?logo=purple) + +A MIPS instruction decoder API. + +Currently supports all the CPU instructions for MIPS I, II, III and IV. + +## Installing + +The recommended way to install is using from the PyPi release, via `pip`: + +```bash +pip install rabbitizer +``` + +In case you want to mess with the latest development version without wanting to clone the repository, then you could use the following command: + +```bash +pip install git+https://github.com/Decompollaborate/rabbitizer.git@develop +``` + +NOTE: Installing the development version is not recommended. Proceed at your own risk. + +## Features + +- Should produces matching assembly. +- Fully written in C for fast decoding. +- Python bindings. + - The minimal Python version is 3.7, older versions are not guaranteed to work. +- Includes some minor tools to build your own pointer/symbol detection. +- Configurable, many features can be turned on and off. +- MIPS instructions features: + - Named registers for MIPS VR4300's coprocessors. + - Support for many pseudoinstructions. + - Properly handle move to/from coprocessor instructions. + - Support for numeric, o32, n32 and n64 ABI register names. +- Some workarounds for some specific compilers/assemblers: + - `SN64`: + - `div`/`divu` fix: tweaks a bit the produced `div`, `divu` and `break` instructions. +- N64 RSP instruction decoding support. + - RSP decoding has been tested to build back to matching assemblies with [armips](https://github.com/Kingcom/armips/). +- R5900 (PS2's Emotion Engine processor) decoding support. + +## References + +- R5900: + - EmotionEngine instruction decoding: + - Official documentation from Toshiba: + - VU instruction manual: + - GNU binutils: diff --git a/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/analysis/LoPairingInfo.hpp b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/analysis/LoPairingInfo.hpp new file mode 100644 index 00000000..020761a5 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/analysis/LoPairingInfo.hpp @@ -0,0 +1,36 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_LO_PAIRING_INFO_HPP +#define RABBITIZER_LO_PAIRING_INFO_HPP +#pragma once + +#include "analysis/RabbitizerLoPairingInfo.h" + + +namespace rabbitizer { + class LoPairingInfo { + protected: + RabbitizerLoPairingInfo pairingInfo; + + public: + LoPairingInfo(); + LoPairingInfo(const RabbitizerLoPairingInfo &pairingInfo); + + /** + * Returns a pointer to the inner RabbitizerLoPairingInfo. + * It is recommended to not mess with it unless you know what you are doing. + */ + RabbitizerLoPairingInfo *getCPtr(); + const RabbitizerLoPairingInfo *getCPtr() const; + + int getInstrOffset() const; + int64_t getValue() const; + bool shouldProcess() const; + bool isGpRel() const; + bool isGpGot() const; + }; +}; + + +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/analysis/RegistersTracker.hpp b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/analysis/RegistersTracker.hpp new file mode 100644 index 00000000..d3e1cb9e --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/analysis/RegistersTracker.hpp @@ -0,0 +1,49 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_REGISTERS_TRACKER_HPP +#define RABBITIZER_REGISTERS_TRACKER_HPP +#pragma once + +#include "analysis/RabbitizerRegistersTracker.h" + +#include "analysis/LoPairingInfo.hpp" +#include "instructions/InstructionBase.hpp" + + +namespace rabbitizer { + class RegistersTracker { + protected: + RabbitizerRegistersTracker tracker; + + public: + RegistersTracker(); + RegistersTracker(const RegistersTracker &other); + virtual ~RegistersTracker(); + + /** + * Returns a pointer to the inner RabbitizerRegistersTracker. + * It is recommended to not mess with it unless you know what you are doing. + */ + RabbitizerRegistersTracker *getCPtr(); + const RabbitizerRegistersTracker *getCPtr() const; + + bool moveRegisters(const InstructionBase &instr); + void overwriteRegisters(const InstructionBase &instr, int instrOffset); + void unsetRegistersAfterFuncCall(const InstructionBase &instr, const InstructionBase &prevInstr); + bool getAddressIfCanSetType(const InstructionBase &instr, int instrOffset, uint32_t *dstAddress) const; + bool getJrInfo(const InstructionBase &instr, int *dstOffset, uint32_t *dstAddress) const; + + void processLui(const InstructionBase &instr, int instrOffset); + void processLui(const InstructionBase &instr, int instrOffset, const InstructionBase &prevInstr); + void processGpLoad(const InstructionBase &instr, int instrOffset); + bool getLuiOffsetForConstant(const InstructionBase &instr, int *dstOffset) const; + void processConstant(const InstructionBase &instr, uint32_t value, int offset); + LoPairingInfo preprocessLoAndGetInfo(const InstructionBase &instr, int instrOffset); + void processLo(const InstructionBase &instr, uint32_t value, int offset); + bool hasLoButNoHi(const InstructionBase &instr) const; + }; +}; + + +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/InstrId.hpp b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/InstrId.hpp new file mode 100644 index 00000000..59bf46f5 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/InstrId.hpp @@ -0,0 +1,38 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_INSTRID_HPP +#define RABBITIZER_INSTRID_HPP +#pragma once + +#include + + +namespace rabbitizer { + namespace InstrId { + #define RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, ...) \ + prefix##_##name, + + #define RABBITIZER_DEF_INSTR_ID_ALTNAME(prefix, caseBits, name, altname, ...) \ + RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, __VA_ARGS__) + + enum class UniqueId { + #include "instructions/instr_id/RabbitizerInstrId_cpu.inc" + + #include "instructions/instr_id/RabbitizerInstrId_rsp.inc" + + #include "instructions/instr_id/RabbitizerInstrId_r5900.inc" + + ALL_MAX = RABBITIZER_DEF_INSTR_ID(r5900, , MAX, ) + }; + + #undef RABBITIZER_DEF_INSTR_ID + #undef RABBITIZER_DEF_INSTR_ID_ALTNAME + + + std::string getOpcodeName(UniqueId uniqueId); + }; +}; + + +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/InstructionBase.hpp b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/InstructionBase.hpp new file mode 100644 index 00000000..ced9901a --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/InstructionBase.hpp @@ -0,0 +1,253 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_INSTRUCTION_BASE_HPP +#define RABBITIZER_INSTRUCTION_BASE_HPP +#pragma once + +#include +#include + +#include "instructions/RabbitizerInstruction.h" + +#include "instructions/Registers.hpp" +#include "instructions/OperandType.hpp" +#include "instructions/InstrId.hpp" + + +namespace rabbitizer { + class InstructionBase { + protected: + RabbitizerInstruction instr; + + InstructionBase() = default; + virtual ~InstructionBase() = default; + + public: + /** + * Returns a pointer to the inner RabbitizerInstruction. + * It is recommended to not mess with it unless you know what you are doing. + */ + RabbitizerInstruction *getCPtr(); + const RabbitizerInstruction *getCPtr() const; + + /* getters */ + + uint8_t Get_opcode() const; + uint8_t Get_sa() const; + uint8_t Get_function() const; + + Registers::Cpu::GprO32 GetO32_rs() const; + Registers::Cpu::GprO32 GetO32_rt() const; + Registers::Cpu::GprO32 GetO32_rd() const; + + Registers::Cpu::GprN32 GetN32_rs() const; + Registers::Cpu::GprN32 GetN32_rt() const; + Registers::Cpu::GprN32 GetN32_rd() const; + + Registers::Cpu::Cop0 Get_cop0d() const; + + uint32_t Get_instr_index() const; + uint16_t Get_immediate() const; + + Registers::Cpu::Cop1O32 GetO32_fs() const; + Registers::Cpu::Cop1O32 GetO32_ft() const; + Registers::Cpu::Cop1O32 GetO32_fd() const; + + Registers::Cpu::Cop1N32 GetN32_fs() const; + Registers::Cpu::Cop1N32 GetN32_ft() const; + Registers::Cpu::Cop1N32 GetN32_fd() const; + + Registers::Cpu::Cop1N64 GetN64_fs() const; + Registers::Cpu::Cop1N64 GetN64_ft() const; + Registers::Cpu::Cop1N64 GetN64_fd() const; + + Registers::Cpu::Cop1Control Get_cop1cs() const; + + Registers::Cpu::Cop2 Get_cop2t() const; + + uint8_t Get_op() const; + + uint32_t Get_code() const; + uint32_t Get_code_upper() const; + uint32_t Get_code_lower() const; + + uint32_t Get_copraw() const; + + uint8_t Get_fmt() const; + uint8_t Get_fc() const; + uint8_t Get_cond() const; + + uint8_t Get_tf() const; + uint8_t Get_nd() const; + uint8_t Get_bc_fmt() const; + + uint8_t Get_stype() const; + + /* getters */ + + + /* setters */ + + void Set_opcode(uint8_t val); + void Set_sa(uint8_t val); + void Set_function(uint8_t val); + + void Set_rs(Registers::Cpu::GprO32 val); + void Set_rt(Registers::Cpu::GprO32 val); + void Set_rd(Registers::Cpu::GprO32 val); + + void Set_rs(Registers::Cpu::GprN32 val); + void Set_rt(Registers::Cpu::GprN32 val); + void Set_rd(Registers::Cpu::GprN32 val); + + void Set_cop0d(Registers::Cpu::Cop0 val); + + void Set_instr_index(uint32_t val); + void Set_immediate(uint16_t val); + + void Set_fs(Registers::Cpu::Cop1O32 val); + void Set_ft(Registers::Cpu::Cop1O32 val); + void Set_fd(Registers::Cpu::Cop1O32 val); + + void Set_fs(Registers::Cpu::Cop1N32 val); + void Set_ft(Registers::Cpu::Cop1N32 val); + void Set_fd(Registers::Cpu::Cop1N32 val); + + void Set_fs(Registers::Cpu::Cop1N64 val); + void Set_ft(Registers::Cpu::Cop1N64 val); + void Set_fd(Registers::Cpu::Cop1N64 val); + + void Set_cop1cs(Registers::Cpu::Cop1Control val); + + void Set_cop2t(Registers::Cpu::Cop2 val); + + void Set_op(uint8_t val); + + void Set_code(uint32_t val); + void Set_code_upper(uint32_t val); + void Set_code_lower(uint32_t val); + + void Set_copraw(uint32_t val); + + void Set_fmt(uint8_t val); + void Set_fc(uint8_t val); + void Set_cond(uint8_t val); + + void Set_tf(uint8_t val); + void Set_nd(uint8_t val); + void Set_bc_fmt(uint8_t val); + + void Set_stype(uint8_t val); + + /* setters */ + + + /* more getters */ + + uint32_t getRaw() const; + + InstrId::UniqueId getUniqueId() const; + uint32_t getVram() const; + bool isInHandwrittenFunction() const; + + int32_t getProcessedImmediate() const; + uint32_t getInstrIndexAsVram() const; + + int32_t getBranchOffset() const; + int32_t getGenericBranchOffset(uint32_t currentVram) const; + + + std::string getOpcodeName() const; + + /* more getters */ + + + /* */ + + void blankOut(); + + + /* Instruction examination */ + + bool isImplemented() const; + bool isLikelyHandwritten() const; + bool isNop() const; + bool isUnconditionalBranch() const; + bool isJrRa() const; + bool isJrNotRa() const; + bool hasDelaySlot() const; + + std::string mapInstrToType() const; + + bool sameOpcode(const InstructionBase &other) const; + bool sameOpcodeButDifferentArguments(const InstructionBase &other) const; + + bool hasOperand(OperandType operand) const; + bool hasOperandAlias(OperandType operand) const; + + uint32_t getValidBits() const; + bool isValid() const; + + /* Instruction examination */ + + + /* Instruction descriptor */ + + bool isUnknownType() const; + bool isJType() const; + bool isIType() const; + bool isRType() const; + bool isRegimmType() const; + + // TODO + // RabbitizerInstrSuffix instrSuffix() const; + + bool isBranch() const; + bool isBranchLikely() const; + bool isJump() const; + bool isTrap() const; + + bool isFloat() const; + bool isDouble() const; + + bool isUnsigned() const; + + bool modifiesRt() const; + bool modifiesRd() const; + + bool notEmitedByCompilers() const; + + bool canBeHi() const; + bool canBeLo() const; + bool doesLink() const; + bool doesDereference() const; + bool doesLoad() const; + bool doesStore() const; + bool maybeIsMove() const; + + bool isPseudo() const; + + /* Instruction descriptor */ + + + /* Disassembly */ + + bool mustDisasmAsData() const; + + std::string disassembleOperands() const; + std::string disassembleOperands(std::string_view immOverride) const; + + std::string disassembleInstruction(int extraLJust) const; + std::string disassembleInstruction(int extraLJust, std::string_view immOverride) const; + + std::string disassembleAsData(int extraLJust) const; + + std::string disassemble(int extraLJust) const; + std::string disassemble(int extraLJust, std::string_view immOverride) const; + + /* Disassembly */ + }; +}; + +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/InstructionCpu.hpp b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/InstructionCpu.hpp new file mode 100644 index 00000000..ef2eec54 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/InstructionCpu.hpp @@ -0,0 +1,20 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_INSTRUCTION_CPU_HPP +#define RABBITIZER_INSTRUCTION_CPU_HPP +#pragma once + +#include "InstructionBase.hpp" + + +namespace rabbitizer { + class InstructionCpu : public InstructionBase { + public: + InstructionCpu(uint32_t word, uint32_t vram); + virtual ~InstructionCpu(); + }; +}; + + +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/InstructionR5900.hpp b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/InstructionR5900.hpp new file mode 100644 index 00000000..0be3a271 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/InstructionR5900.hpp @@ -0,0 +1,41 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_INSTRUCTION_R5900_HPP +#define RABBITIZER_INSTRUCTION_R5900_HPP +#pragma once + +#include "InstructionBase.hpp" + + +namespace rabbitizer { + class InstructionR5900 : public InstructionBase { + public: + InstructionR5900(uint32_t word, uint32_t vram); + virtual ~InstructionR5900(); + + Registers::R5900::VF GetR5900_vfs() const; + Registers::R5900::VF GetR5900_vft() const; + Registers::R5900::VF GetR5900_vfd() const; + + Registers::R5900::VI GetR5900_vis() const; + Registers::R5900::VI GetR5900_vit() const; + Registers::R5900::VI GetR5900_vid() const; + + uint8_t GetR5900_mmi_function() const; + uint8_t GetR5900_fhi_flo() const; + + uint8_t GetR5900_xyzw_x() const; + uint8_t GetR5900_xyzw_y() const; + uint8_t GetR5900_xyzw_z() const; + uint8_t GetR5900_xyzw_w() const; + uint8_t GetR5900_n() const; + uint8_t GetR5900_l() const; + uint8_t GetR5900_m() const; + + uint8_t GetR5900_imm5() const; + }; +}; + + +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/InstructionRsp.hpp b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/InstructionRsp.hpp new file mode 100644 index 00000000..f2d32a13 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/InstructionRsp.hpp @@ -0,0 +1,40 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_INSTRUCTION_RSP_HPP +#define RABBITIZER_INSTRUCTION_RSP_HPP +#pragma once + +#include "InstructionBase.hpp" + + +namespace rabbitizer { + class InstructionRsp : public InstructionBase { + public: + InstructionRsp(uint32_t word, uint32_t vram); + virtual ~InstructionRsp(); + + Registers::Rsp::Gpr GetRsp_rs() const; + Registers::Rsp::Gpr GetRsp_rt() const; + Registers::Rsp::Gpr GetRsp_rd() const; + + Registers::Rsp::Cop0 GetRsp_cop0d() const; + + Registers::Rsp::Cop2 GetRsp_cop2t() const; + + Registers::Rsp::Cop2Control GetRsp_cop2cd() const; + + Registers::Rsp::Vector GetRsp_vs() const; + Registers::Rsp::Vector GetRsp_vt() const; + Registers::Rsp::Vector GetRsp_vd() const; + + uint8_t GetRsp_elementhigh() const; + uint8_t GetRsp_elementlow() const; + + uint8_t GetRsp_index() const; + uint8_t GetRsp_de() const; + }; +}; + + +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/OperandType.hpp b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/OperandType.hpp new file mode 100644 index 00000000..abd728ad --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/OperandType.hpp @@ -0,0 +1,27 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_OPERAND_TYPE_HPP +#define RABBITIZER_OPERAND_TYPE_HPP +#pragma once + + +namespace rabbitizer { + #define RAB_DEF_OPERAND(prefix, operand) \ + prefix##_##operand, + + enum class OperandType { + RAB_DEF_OPERAND(ALL, INVALID) + + #include "instructions/operands/RabbitizerOperandType_cpu.inc" + #include "instructions/operands/RabbitizerOperandType_rsp.inc" + #include "instructions/operands/RabbitizerOperandType_r5900.inc" + + RAB_DEF_OPERAND(ALL, MAX) + }; + + #undef RAB_DEF_OPERAND +}; + + +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/Registers.hpp b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/Registers.hpp new file mode 100644 index 00000000..ceddd8f8 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/instructions/Registers.hpp @@ -0,0 +1,94 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_REGISTER_HPP +#define RABBITIZER_REGISTER_HPP +#pragma once + + +namespace rabbitizer { + + namespace Registers { + #define RABBITIZER_DEF_REG(prefix, name, numeric) \ + prefix##_##name + + #define RABBITIZER_DEF_REG_NODOLLAR(prefix, name, numeric) \ + prefix##_##name + + namespace Cpu { + enum class GprO32 { + #include "instructions/registers/RabbitizerRegister_GprO32.inc" + }; + + enum class GprN32 { + #include "instructions/registers/RabbitizerRegister_GprN32.inc" + }; + + + enum class Cop0 { + #include "instructions/registers/RabbitizerRegister_Cop0.inc" + }; + + // Float registers + enum class Cop1O32 { + #include "instructions/registers/RabbitizerRegister_Cop1O32.inc" + }; + + enum class Cop1N32 { + #include "instructions/registers/RabbitizerRegister_Cop1N32.inc" + }; + + enum class Cop1N64 { + #include "instructions/registers/RabbitizerRegister_Cop1N64.inc" + }; + + enum class Cop1Control { + #include "instructions/registers/RabbitizerRegister_Cop1Control.inc" + }; + + enum class Cop2 { + #include "instructions/registers/RabbitizerRegister_Cop2.inc" + }; + }; + + + namespace Rsp { + enum class Gpr { + #include "instructions/registers/RabbitizerRegister_RspGpr.inc" + }; + + enum class Cop0 { + #include "instructions/registers/RabbitizerRegister_RspCop0.inc" + }; + + enum class Cop2 { + #include "instructions/registers/RabbitizerRegister_RspCop2.inc" + }; + + enum class Cop2Control { + #include "instructions/registers/RabbitizerRegister_RspCop2Control.inc" + }; + + enum class Vector { + #include "instructions/registers/RabbitizerRegister_RspVector.inc" + }; + }; + + + namespace R5900 { + enum class VF { + #include "instructions/registers/RabbitizerRegister_R5900VF.inc" + }; + + enum class VI { + #include "instructions/registers/RabbitizerRegister_R5900VI.inc" + }; + }; + + #undef RABBITIZER_DEF_REG + #undef RABBITIZER_DEF_REG_NODOLLAR + }; +}; + + +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/rabbitizer.hpp b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/rabbitizer.hpp new file mode 100644 index 00000000..332101e8 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/include/rabbitizer.hpp @@ -0,0 +1,26 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_HPP +#define RABBITIZER_HPP +#pragma once + + +#include "common/RabbitizerVersion.h" +#include "common/RabbitizerConfig.h" + +#include "instructions/OperandType.hpp" +#include "instructions/InstrId.hpp" +//#include "instructions/InstrSuffix.hpp" +//#include "instructions/InstrDescriptor.hpp" +#include "instructions/Registers.hpp" +#include "instructions/InstructionBase.hpp" +#include "instructions/InstructionCpu.hpp" +#include "instructions/InstructionRsp.hpp" +#include "instructions/InstructionR5900.hpp" + +#include "analysis/LoPairingInfo.hpp" +#include "analysis/RegistersTracker.hpp" + + +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/analysis/LoPairingInfo.cpp b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/analysis/LoPairingInfo.cpp new file mode 100644 index 00000000..d6fba253 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/analysis/LoPairingInfo.cpp @@ -0,0 +1,34 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "analysis/LoPairingInfo.hpp" + +using namespace rabbitizer; + +LoPairingInfo::LoPairingInfo() : pairingInfo{} { +} +LoPairingInfo::LoPairingInfo(const RabbitizerLoPairingInfo &newPairingInfo) : pairingInfo{ newPairingInfo } { +} + +RabbitizerLoPairingInfo *LoPairingInfo::getCPtr() { + return &this->pairingInfo; +} +const RabbitizerLoPairingInfo *LoPairingInfo::getCPtr() const { + return &this->pairingInfo; +} + +int LoPairingInfo::getInstrOffset() const { + return this->pairingInfo.instrOffset; +} +int64_t LoPairingInfo::getValue() const { + return this->pairingInfo.value; +} +bool LoPairingInfo::shouldProcess() const { + return this->pairingInfo.shouldProcess; +} +bool LoPairingInfo::isGpRel() const { + return this->pairingInfo.isGpRel; +} +bool LoPairingInfo::isGpGot() const { + return this->pairingInfo.isGpGot; +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/analysis/RegistersTracker.cpp b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/analysis/RegistersTracker.cpp new file mode 100644 index 00000000..5294d58f --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/analysis/RegistersTracker.cpp @@ -0,0 +1,64 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "analysis/RegistersTracker.hpp" + +using namespace rabbitizer; + +RegistersTracker::RegistersTracker() { + RabbitizerRegistersTracker_init(&this->tracker, NULL); +} +RegistersTracker::RegistersTracker(const RegistersTracker &other) { + RabbitizerRegistersTracker_init(&this->tracker, &other.tracker); +} +RegistersTracker::~RegistersTracker() { + RabbitizerRegistersTracker_destroy(&this->tracker); +} + +RabbitizerRegistersTracker *RegistersTracker::getCPtr() { + return &this->tracker; +} +const RabbitizerRegistersTracker *RegistersTracker::getCPtr() const { + return &this->tracker; +} + +bool RegistersTracker::moveRegisters(const InstructionBase &instr) { + return RabbitizerRegistersTracker_moveRegisters(&this->tracker, instr.getCPtr()); +} +void RegistersTracker::overwriteRegisters(const InstructionBase &instr, int instrOffset) { + RabbitizerRegistersTracker_overwriteRegisters(&this->tracker, instr.getCPtr(), instrOffset); +} +void RegistersTracker::unsetRegistersAfterFuncCall(const InstructionBase &instr, const InstructionBase &prevInstr) { + RabbitizerRegistersTracker_unsetRegistersAfterFuncCall(&this->tracker, instr.getCPtr(), prevInstr.getCPtr()); +} +bool RegistersTracker::getAddressIfCanSetType(const InstructionBase &instr, int instrOffset, uint32_t *dstAddress) const { + return RabbitizerRegistersTracker_getAddressIfCanSetType(&this->tracker, instr.getCPtr(), instrOffset, dstAddress); +} +bool RegistersTracker::getJrInfo(const InstructionBase &instr, int *dstOffset, uint32_t *dstAddress) const { + return RabbitizerRegistersTracker_getJrInfo(&this->tracker, instr.getCPtr(), dstOffset, dstAddress); +} + +void RegistersTracker::processLui(const InstructionBase &instr, int instrOffset) { + RabbitizerRegistersTracker_processLui(&this->tracker, instr.getCPtr(), instrOffset, NULL); +} +void RegistersTracker::processLui(const InstructionBase &instr, int instrOffset, const InstructionBase &prevInstr) { + RabbitizerRegistersTracker_processLui(&this->tracker, instr.getCPtr(), instrOffset, prevInstr.getCPtr()); +} +void RegistersTracker::processGpLoad(const InstructionBase &instr, int instrOffset) { + RabbitizerRegistersTracker_processGpLoad(&this->tracker, instr.getCPtr(), instrOffset); +} +bool RegistersTracker::getLuiOffsetForConstant(const InstructionBase &instr, int *dstOffset) const { + return RabbitizerRegistersTracker_getLuiOffsetForConstant(&this->tracker, instr.getCPtr(), dstOffset); +} +void RegistersTracker::processConstant(const InstructionBase &instr, uint32_t value, int offset) { + RabbitizerRegistersTracker_processConstant(&this->tracker, instr.getCPtr(), value, offset); +} +LoPairingInfo RegistersTracker::preprocessLoAndGetInfo(const InstructionBase &instr, int instrOffset) { + return RabbitizerRegistersTracker_preprocessLoAndGetInfo(&this->tracker, instr.getCPtr(), instrOffset); +} +void RegistersTracker::processLo(const InstructionBase &instr, uint32_t value, int offset) { + RabbitizerRegistersTracker_processLo(&this->tracker, instr.getCPtr(), value, offset); +} +bool RegistersTracker::hasLoButNoHi(const InstructionBase &instr) const { + return RabbitizerRegistersTracker_hasLoButNoHi(&this->tracker, instr.getCPtr()); +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/instructions/InstrId.cpp b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/instructions/InstrId.cpp new file mode 100644 index 00000000..03e28d01 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/instructions/InstrId.cpp @@ -0,0 +1,14 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/InstrId.hpp" + +#include "instructions/RabbitizerInstrId.h" + +using namespace rabbitizer; + +std::string InstrId::getOpcodeName(InstrId::UniqueId uniqueId) { + RabbitizerInstrId id = static_cast(uniqueId); + + return std::string(RabbitizerInstrId_getOpcodeName(id)); +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/instructions/InstructionBase.cpp b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/instructions/InstructionBase.cpp new file mode 100644 index 00000000..4f5ad5be --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/instructions/InstructionBase.cpp @@ -0,0 +1,1036 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/InstructionBase.hpp" + +#include + +#include "instructions/RabbitizerInstruction.h" +#include "instructions/RabbitizerInstructionR5900.h" + +using namespace rabbitizer; + +RabbitizerInstruction *InstructionBase::getCPtr() { + return &this->instr; +} +const RabbitizerInstruction *InstructionBase::getCPtr() const { + return &this->instr; +} + +/* getters */ + +uint8_t InstructionBase::Get_opcode() const { + return RAB_INSTR_GET_opcode(&this->instr); +} +uint8_t InstructionBase::Get_sa() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_sa)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'sa' operand."); + } +#endif + + return RAB_INSTR_GET_sa(&this->instr); +} +uint8_t InstructionBase::Get_function() const { + /* + #ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_function)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'function' operand."); + } + #endif + */ + + return RAB_INSTR_GET_function(&this->instr); +} + +Registers::Cpu::GprO32 InstructionBase::GetO32_rs() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_rs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rs' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_rs(&this->instr)); +} +Registers::Cpu::GprO32 InstructionBase::GetO32_rt() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_rt)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rt' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_rt(&this->instr)); +} +Registers::Cpu::GprO32 InstructionBase::GetO32_rd() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_rd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rd' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_rd(&this->instr)); +} + +Registers::Cpu::GprN32 InstructionBase::GetN32_rs() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_rs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rs' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_rs(&this->instr)); +} +Registers::Cpu::GprN32 InstructionBase::GetN32_rt() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_rt)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rt' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_rt(&this->instr)); +} +Registers::Cpu::GprN32 InstructionBase::GetN32_rd() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_rd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rd' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_rd(&this->instr)); +} + +Registers::Cpu::Cop0 InstructionBase::Get_cop0d() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_cop0d)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'cop0d' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_cop0d(&this->instr)); +} + +uint32_t InstructionBase::Get_instr_index() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_label)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'label' operand."); + } +#endif + + return RAB_INSTR_GET_instr_index(&this->instr); +} +uint16_t InstructionBase::Get_immediate() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_immediate)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'immediate' operand."); + } +#endif + + return RAB_INSTR_GET_immediate(&this->instr); +} + +Registers::Cpu::Cop1O32 InstructionBase::GetO32_fs() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_fs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'fs' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_fs(&this->instr)); +} +Registers::Cpu::Cop1O32 InstructionBase::GetO32_ft() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_ft)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'ft' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_ft(&this->instr)); +} +Registers::Cpu::Cop1O32 InstructionBase::GetO32_fd() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_fd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'fd' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_fd(&this->instr)); +} + +Registers::Cpu::Cop1N32 InstructionBase::GetN32_fs() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_fs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'fs' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_fs(&this->instr)); +} +Registers::Cpu::Cop1N32 InstructionBase::GetN32_ft() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_ft)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'ft' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_ft(&this->instr)); +} +Registers::Cpu::Cop1N32 InstructionBase::GetN32_fd() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_fd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'fd' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_fd(&this->instr)); +} + +Registers::Cpu::Cop1N64 InstructionBase::GetN64_fs() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_fs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'fs' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_fs(&this->instr)); +} +Registers::Cpu::Cop1N64 InstructionBase::GetN64_ft() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_ft)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'ft' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_ft(&this->instr)); +} +Registers::Cpu::Cop1N64 InstructionBase::GetN64_fd() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_fd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'fd' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_fd(&this->instr)); +} + +Registers::Cpu::Cop1Control InstructionBase::Get_cop1cs() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_cop1cs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'cop1cs' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_cop1cs(&this->instr)); +} + +Registers::Cpu::Cop2 InstructionBase::Get_cop2t() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_cop2t)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'cop2t' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_cop2t(&this->instr)); +} + +uint8_t InstructionBase::Get_op() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_op)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'op' operand."); + } +#endif + + return RAB_INSTR_GET_op(&this->instr); +} + +uint32_t InstructionBase::Get_code() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_code)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'code' operand."); + } +#endif + + return RAB_INSTR_GET_code(&this->instr); +} +uint32_t InstructionBase::Get_code_upper() const { +#if 0 +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_code_upper)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'code_upper' operand."); + } +#endif +#endif + + return RAB_INSTR_GET_code_upper(&this->instr); +} +uint32_t InstructionBase::Get_code_lower() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_code_lower)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'code_lower' operand."); + } +#endif + + return RAB_INSTR_GET_code_lower(&this->instr); +} + +uint32_t InstructionBase::Get_copraw() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_copraw)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'copraw' operand."); + } +#endif + + return RAB_INSTR_GET_copraw(&this->instr); +} + +uint8_t InstructionBase::Get_fmt() const { + return RAB_INSTR_GET_fmt(&this->instr); +} +uint8_t InstructionBase::Get_fc() const { + return RAB_INSTR_GET_fc(&this->instr); +} +uint8_t InstructionBase::Get_cond() const { + return RAB_INSTR_GET_cond(&this->instr); +} + +uint8_t InstructionBase::Get_tf() const { + return RAB_INSTR_GET_tf(&this->instr); +} +uint8_t InstructionBase::Get_nd() const { + return RAB_INSTR_GET_nd(&this->instr); +} +uint8_t InstructionBase::Get_bc_fmt() const { + return RAB_INSTR_GET_bc_fmt(&this->instr); +} + +uint8_t InstructionBase::Get_stype() const { + return RAB_INSTR_GET_stype(&this->instr); +} + +/* getters */ + +/* setters */ + +void InstructionBase::Set_opcode(uint8_t val) { + this->instr.word = RAB_INSTR_PACK_opcode(this->instr.word, val); +} +void InstructionBase::Set_sa(uint8_t val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_sa)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'sa' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_sa(this->instr.word, val); +} +void InstructionBase::Set_function(uint8_t val) { + this->instr.word = RAB_INSTR_PACK_function(this->instr.word, val); +} + +void InstructionBase::Set_rs(Registers::Cpu::GprO32 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_rs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rs' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_rs(this->instr.word, static_cast(val)); +} +void InstructionBase::Set_rt(Registers::Cpu::GprO32 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_rt)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rt' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_rt(this->instr.word, static_cast(val)); +} +void InstructionBase::Set_rd(Registers::Cpu::GprO32 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_rd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rd' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_rd(this->instr.word, static_cast(val)); +} + +void InstructionBase::Set_rs(Registers::Cpu::GprN32 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_rs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rs' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_rs(this->instr.word, static_cast(val)); +} +void InstructionBase::Set_rt(Registers::Cpu::GprN32 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_rt)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rt' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_rt(this->instr.word, static_cast(val)); +} +void InstructionBase::Set_rd(Registers::Cpu::GprN32 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_rd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rd' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_rd(this->instr.word, static_cast(val)); +} + +void InstructionBase::Set_cop0d(Registers::Cpu::Cop0 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_cop0d)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'cop0d' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_cop0d(this->instr.word, static_cast(val)); +} + +void InstructionBase::Set_instr_index(uint32_t val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_label)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'label' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_instr_index(this->instr.word, val); +} +void InstructionBase::Set_immediate(uint16_t val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_immediate)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'immediate' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_immediate(this->instr.word, val); +} + +void InstructionBase::Set_fs(Registers::Cpu::Cop1O32 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_fs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'fs' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_fs(this->instr.word, static_cast(val)); +} +void InstructionBase::Set_ft(Registers::Cpu::Cop1O32 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_ft)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'ft' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_ft(this->instr.word, static_cast(val)); +} +void InstructionBase::Set_fd(Registers::Cpu::Cop1O32 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_fd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'fd' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_fd(this->instr.word, static_cast(val)); +} + +void InstructionBase::Set_fs(Registers::Cpu::Cop1N32 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_fs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'fs' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_fs(this->instr.word, static_cast(val)); +} +void InstructionBase::Set_ft(Registers::Cpu::Cop1N32 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_ft)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'ft' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_ft(this->instr.word, static_cast(val)); +} +void InstructionBase::Set_fd(Registers::Cpu::Cop1N32 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_fd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'fd' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_fd(this->instr.word, static_cast(val)); +} + +void InstructionBase::Set_fs(Registers::Cpu::Cop1N64 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_fs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'fs' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_fs(this->instr.word, static_cast(val)); +} +void InstructionBase::Set_ft(Registers::Cpu::Cop1N64 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_ft)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'ft' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_ft(this->instr.word, static_cast(val)); +} +void InstructionBase::Set_fd(Registers::Cpu::Cop1N64 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_fd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'fd' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_fd(this->instr.word, static_cast(val)); +} + +void InstructionBase::Set_cop1cs(Registers::Cpu::Cop1Control val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_cop1cs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'cop1cs' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_cop1cs(this->instr.word, static_cast(val)); +} + +void InstructionBase::Set_cop2t(Registers::Cpu::Cop2 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_cop2t)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'cop2t' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_cop2t(this->instr.word, static_cast(val)); +} + +void InstructionBase::Set_op(uint8_t val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_op)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'op' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_op(this->instr.word, val); +} + +void InstructionBase::Set_code(uint32_t val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_code)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'code' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_code(this->instr.word, val); +} + +void InstructionBase::Set_code_upper(uint32_t val) { +#if 0 +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_code_upper)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'code_upper' operand."); + } +#endif +#endif + + this->instr.word = RAB_INSTR_PACK_code_upper(this->instr.word, val); +} + +void InstructionBase::Set_code_lower(uint32_t val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_code_lower)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'code_lower' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_code_lower(this->instr.word, val); +} + +void InstructionBase::Set_copraw(uint32_t val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_copraw)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'copraw' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_copraw(this->instr.word, val); +} + +void InstructionBase::Set_fmt(uint8_t val) { + this->instr.word = RAB_INSTR_PACK_fmt(this->instr.word, val); +} +void InstructionBase::Set_fc(uint8_t val) { + this->instr.word = RAB_INSTR_PACK_fc(this->instr.word, val); +} +void InstructionBase::Set_cond(uint8_t val) { + this->instr.word = RAB_INSTR_PACK_cond(this->instr.word, val); +} + +void InstructionBase::Set_tf(uint8_t val) { + this->instr.word = RAB_INSTR_PACK_tf(this->instr.word, val); +} +void InstructionBase::Set_nd(uint8_t val) { + this->instr.word = RAB_INSTR_PACK_nd(this->instr.word, val); +} +void InstructionBase::Set_bc_fmt(uint8_t val) { + this->instr.word = RAB_INSTR_PACK_bc_fmt(this->instr.word, val); +} + +void InstructionBase::Set_stype(uint8_t val) { + this->instr.word = RAB_INSTR_PACK_stype(this->instr.word, val); +} + +/* setters */ + +/* more getters */ + +uint32_t InstructionBase::getRaw() const { + return RabbitizerInstruction_getRaw(&this->instr); +} + +InstrId::UniqueId InstructionBase::getUniqueId() const { + return static_cast(this->instr.uniqueId); +} +uint32_t InstructionBase::getVram() const { + return this->instr.vram; +} +bool InstructionBase::isInHandwrittenFunction() const { + return this->instr.inHandwrittenFunction; +} + +int32_t InstructionBase::getProcessedImmediate() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_immediate)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'immediate' operand."); + } +#endif + + return RabbitizerInstruction_getProcessedImmediate(&this->instr); +} +uint32_t InstructionBase::getInstrIndexAsVram() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_label)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'label' operand."); + } +#endif + + return RabbitizerInstruction_getInstrIndexAsVram(&this->instr); +} + +int32_t InstructionBase::getBranchOffset() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_branch_target_label)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'branch_target_label' operand."); + } +#endif + + return RabbitizerInstruction_getBranchOffset(&this->instr); +} +int32_t InstructionBase::getGenericBranchOffset(uint32_t currentVram) const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_branch_target_label) && !hasOperandAlias(OperandType::cpu_label)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have either 'branch_target_label' or 'label' operands."); + } +#endif + + return RabbitizerInstruction_getGenericBranchOffset(&this->instr, currentVram); +} + +std::string InstructionBase::getOpcodeName() const { + return InstrId::getOpcodeName(getUniqueId()); +} + +/* more getters */ + +/* */ + +void InstructionBase::blankOut() { + RabbitizerInstruction_blankOut(&this->instr); +} + +/* Instruction examination */ + +bool InstructionBase::isImplemented() const { + return RabbitizerInstruction_isImplemented(&this->instr); +} +bool InstructionBase::isLikelyHandwritten() const { + return RabbitizerInstruction_isLikelyHandwritten(&this->instr); +} +bool InstructionBase::isNop() const { + return RabbitizerInstruction_isNop(&this->instr); +} +bool InstructionBase::isUnconditionalBranch() const { + return RabbitizerInstruction_isUnconditionalBranch(&this->instr); +} +bool InstructionBase::isJrRa() const { + return RabbitizerInstruction_isJrRa(&this->instr); +} +bool InstructionBase::isJrNotRa() const { + return RabbitizerInstruction_isJrNotRa(&this->instr); +} +bool InstructionBase::hasDelaySlot() const { + return RabbitizerInstruction_hasDelaySlot(&this->instr); +} + +std::string InstructionBase::mapInstrToType() const { + return std::string(RabbitizerInstruction_mapInstrToType(&this->instr)); +} + +bool InstructionBase::sameOpcode(const InstructionBase &other) const { + return RabbitizerInstruction_sameOpcode(&this->instr, &other.instr); +} +bool InstructionBase::sameOpcodeButDifferentArguments(const InstructionBase &other) const { + return RabbitizerInstruction_sameOpcodeButDifferentArguments(&this->instr, &other.instr); +} + +bool InstructionBase::hasOperand(OperandType operand) const { + return RabbitizerInstruction_hasOperand(&this->instr, static_cast(operand)); +} +bool InstructionBase::hasOperandAlias(OperandType operand) const { + return RabbitizerInstruction_hasOperandAlias(&this->instr, static_cast(operand)); +} + +uint32_t InstructionBase::getValidBits() const { + return RabbitizerInstruction_getValidBits(&this->instr); +} +bool InstructionBase::isValid() const { + return RabbitizerInstruction_isValid(&this->instr); +} + +/* Instruction examination */ + +/* Instruction descriptor */ + +bool InstructionBase::isUnknownType() const { + return RabbitizerInstrDescriptor_isUnknownType(this->instr.descriptor); +} +bool InstructionBase::isJType() const { + return RabbitizerInstrDescriptor_isJType(this->instr.descriptor); +} +bool InstructionBase::isIType() const { + return RabbitizerInstrDescriptor_isIType(this->instr.descriptor); +} +bool InstructionBase::isRType() const { + return RabbitizerInstrDescriptor_isRType(this->instr.descriptor); +} +bool InstructionBase::isRegimmType() const { + return RabbitizerInstrDescriptor_isRegimmType(this->instr.descriptor); +} + +// TODO +// RabbitizerInstrSuffix instrSuffix() const; + +bool InstructionBase::isBranch() const { + return RabbitizerInstrDescriptor_isBranch(this->instr.descriptor); +} +bool InstructionBase::isBranchLikely() const { + return RabbitizerInstrDescriptor_isBranchLikely(this->instr.descriptor); +} +bool InstructionBase::isJump() const { + return RabbitizerInstrDescriptor_isJump(this->instr.descriptor); +} +bool InstructionBase::isTrap() const { + return RabbitizerInstrDescriptor_isTrap(this->instr.descriptor); +} + +bool InstructionBase::isFloat() const { + return RabbitizerInstrDescriptor_isFloat(this->instr.descriptor); +} +bool InstructionBase::isDouble() const { + return RabbitizerInstrDescriptor_isDouble(this->instr.descriptor); +} + +bool InstructionBase::isUnsigned() const { + return RabbitizerInstrDescriptor_isUnsigned(this->instr.descriptor); +} + +bool InstructionBase::modifiesRt() const { + return RabbitizerInstrDescriptor_modifiesRt(this->instr.descriptor); +} +bool InstructionBase::modifiesRd() const { + return RabbitizerInstrDescriptor_modifiesRd(this->instr.descriptor); +} + +bool InstructionBase::notEmitedByCompilers() const { + return RabbitizerInstrDescriptor_notEmitedByCompilers(this->instr.descriptor); +} + +bool InstructionBase::canBeHi() const { + return RabbitizerInstrDescriptor_canBeHi(this->instr.descriptor); +} +bool InstructionBase::canBeLo() const { + return RabbitizerInstrDescriptor_canBeLo(this->instr.descriptor); +} +bool InstructionBase::doesLink() const { + return RabbitizerInstrDescriptor_doesLink(this->instr.descriptor); +} +bool InstructionBase::doesDereference() const { + return RabbitizerInstrDescriptor_doesDereference(this->instr.descriptor); +} +bool InstructionBase::doesLoad() const { + return RabbitizerInstrDescriptor_doesLoad(this->instr.descriptor); +} +bool InstructionBase::doesStore() const { + return RabbitizerInstrDescriptor_doesStore(this->instr.descriptor); +} +bool InstructionBase::maybeIsMove() const { + return RabbitizerInstrDescriptor_maybeIsMove(this->instr.descriptor); +} + +bool InstructionBase::isPseudo() const { + return RabbitizerInstrDescriptor_isPseudo(this->instr.descriptor); +} + +/* Instruction descriptor */ + +/* Disassembly */ + +bool InstructionBase::mustDisasmAsData() const { + return RabbitizerInstruction_mustDisasmAsData(&this->instr); +} + +std::string InstructionBase::disassembleOperands() const { + const char *immOverridePtr = NULL; + size_t immOverrideLength = 0; + size_t bufferSize; + size_t disassmbledSize; + char *buffer; + + bufferSize = RabbitizerInstruction_getSizeForBufferOperandsDisasm(&instr, immOverrideLength); + + buffer = (char *)malloc(bufferSize + 1); + if (buffer == NULL) { + throw std::runtime_error("buffer == NULL"); + } + + disassmbledSize = RabbitizerInstruction_disassembleOperands(&instr, buffer, immOverridePtr, immOverrideLength); + + std::string output(buffer); + free(buffer); + + if (disassmbledSize > bufferSize) { + throw std::runtime_error("disassmbledSize > bufferSize"); + } + + return output; +} +std::string InstructionBase::disassembleOperands(std::string_view immOverride) const { + const char *immOverridePtr = immOverride.data(); + size_t immOverrideLength = immOverride.size(); + size_t bufferSize; + size_t disassmbledSize; + char *buffer; + + bufferSize = RabbitizerInstruction_getSizeForBufferOperandsDisasm(&instr, immOverrideLength); + + buffer = (char *)malloc(bufferSize + 1); + if (buffer == NULL) { + throw std::runtime_error("buffer == NULL"); + } + + disassmbledSize = RabbitizerInstruction_disassembleOperands(&instr, buffer, immOverridePtr, immOverrideLength); + + std::string output(buffer); + free(buffer); + + if (disassmbledSize > bufferSize) { + throw std::runtime_error("disassmbledSize > bufferSize"); + } + + return output; +} + +std::string InstructionBase::disassembleInstruction(int extraLJust) const { + const char *immOverridePtr = NULL; + size_t immOverrideLength = 0; + size_t bufferSize; + size_t disassmbledSize; + char *buffer; + + bufferSize = RabbitizerInstruction_getSizeForBufferInstrDisasm(&instr, immOverrideLength, extraLJust); + + buffer = (char *)malloc(bufferSize + 1); + if (buffer == NULL) { + throw std::runtime_error("buffer == NULL"); + } + + disassmbledSize = RabbitizerInstruction_disassembleInstruction(&instr, buffer, immOverridePtr, immOverrideLength, extraLJust); + + std::string output(buffer); + free(buffer); + + if (disassmbledSize > bufferSize) { + throw std::runtime_error("disassmbledSize > bufferSize"); + } + + return output; +} +std::string InstructionBase::disassembleInstruction(int extraLJust, std::string_view immOverride) const { + const char *immOverridePtr = immOverride.data(); + size_t immOverrideLength = immOverride.size(); + size_t bufferSize; + size_t disassmbledSize; + char *buffer; + + bufferSize = RabbitizerInstruction_getSizeForBufferInstrDisasm(&instr, immOverrideLength, extraLJust); + + buffer = (char *)malloc(bufferSize + 1); + if (buffer == NULL) { + throw std::runtime_error("buffer == NULL"); + } + + disassmbledSize = RabbitizerInstruction_disassembleInstruction(&instr, buffer, immOverridePtr, immOverrideLength, extraLJust); + + std::string output(buffer); + free(buffer); + + if (disassmbledSize > bufferSize) { + throw std::runtime_error("disassmbledSize > bufferSize"); + } + + return output; +} + +std::string InstructionBase::disassembleAsData(int extraLJust) const { + size_t bufferSize; + size_t disassmbledSize; + char *buffer; + + bufferSize = RabbitizerInstruction_getSizeForBufferDataDisasm(&instr, extraLJust); + + buffer = (char *)malloc(bufferSize + 1); + if (buffer == NULL) { + throw std::runtime_error("buffer == NULL"); + } + + disassmbledSize = RabbitizerInstruction_disassembleAsData(&instr, buffer, extraLJust); + + std::string output(buffer); + free(buffer); + + if (disassmbledSize > bufferSize) { + throw std::runtime_error("disassmbledSize > bufferSize"); + } + + return output; +} + +std::string InstructionBase::disassemble(int extraLJust) const { + const char *immOverridePtr = NULL; + size_t immOverrideLength = 0; + size_t bufferSize; + size_t disassmbledSize; + char *buffer; + + bufferSize = RabbitizerInstruction_getSizeForBuffer(&instr, immOverrideLength, extraLJust); + + buffer = (char *)malloc(bufferSize + 1); + if (buffer == NULL) { + throw std::runtime_error("buffer == NULL"); + } + + disassmbledSize = RabbitizerInstruction_disassemble(&instr, buffer, immOverridePtr, immOverrideLength, extraLJust); + + std::string output(buffer); + free(buffer); + + if (disassmbledSize > bufferSize) { + throw std::runtime_error("disassmbledSize > bufferSize"); + } + + return output; +} + +std::string InstructionBase::disassemble(int extraLJust, std::string_view immOverride) const { + const char *immOverridePtr = immOverride.data(); + size_t immOverrideLength = immOverride.size(); + size_t bufferSize; + size_t disassmbledSize; + char *buffer; + + bufferSize = RabbitizerInstruction_getSizeForBuffer(&instr, immOverrideLength, extraLJust); + + buffer = (char *)malloc(bufferSize + 1); + if (buffer == NULL) { + throw std::runtime_error("buffer == NULL"); + } + + disassmbledSize = RabbitizerInstruction_disassemble(&instr, buffer, immOverridePtr, immOverrideLength, extraLJust); + + std::string output(buffer); + free(buffer); + + if (disassmbledSize > bufferSize) { + throw std::runtime_error("disassmbledSize > bufferSize"); + } + + return output; +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/instructions/InstructionCpu.cpp b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/instructions/InstructionCpu.cpp new file mode 100644 index 00000000..9488b9a3 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/instructions/InstructionCpu.cpp @@ -0,0 +1,15 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/InstructionCpu.hpp" + +using namespace rabbitizer; + +InstructionCpu::InstructionCpu(uint32_t word, uint32_t vram) : InstructionBase() { + RabbitizerInstruction_init(&this->instr, word, vram); + RabbitizerInstruction_processUniqueId(&this->instr); +} + +InstructionCpu::~InstructionCpu() { + RabbitizerInstruction_destroy(&this->instr); +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/instructions/InstructionR5900.cpp b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/instructions/InstructionR5900.cpp new file mode 100644 index 00000000..0fe00630 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/instructions/InstructionR5900.cpp @@ -0,0 +1,118 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/InstructionR5900.hpp" + +#include + +#include "instructions/RabbitizerInstructionR5900.h" + +using namespace rabbitizer; + +InstructionR5900::InstructionR5900(uint32_t word, uint32_t vram) : InstructionBase() { + RabbitizerInstructionR5900_init(&this->instr, word, vram); + RabbitizerInstructionR5900_processUniqueId(&this->instr); +} + +InstructionR5900::~InstructionR5900() { + RabbitizerInstructionR5900_destroy(&this->instr); +} + +Registers::R5900::VF InstructionR5900::GetR5900_vfs() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_rs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'vfs' operand."); + } +#endif + + return static_cast(RAB_INSTR_R5900_GET_vfs(&this->instr)); +} + +Registers::R5900::VF InstructionR5900::GetR5900_vft() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_rt)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'vft' operand."); + } +#endif + + return static_cast(RAB_INSTR_R5900_GET_vft(&this->instr)); +} + +Registers::R5900::VF InstructionR5900::GetR5900_vfd() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_rd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'vfd' operand."); + } +#endif + + return static_cast(RAB_INSTR_R5900_GET_vfd(&this->instr)); +} + +Registers::R5900::VI InstructionR5900::GetR5900_vis() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_rs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'vis' operand."); + } +#endif + + return static_cast(RAB_INSTR_R5900_GET_vis(&this->instr)); +} + +Registers::R5900::VI InstructionR5900::GetR5900_vit() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_rt)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'vit' operand."); + } +#endif + + return static_cast(RAB_INSTR_R5900_GET_vit(&this->instr)); +} + +Registers::R5900::VI InstructionR5900::GetR5900_vid() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_rd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'vid' operand."); + } +#endif + + return static_cast(RAB_INSTR_R5900_GET_vid(&this->instr)); +} + +uint8_t InstructionR5900::GetR5900_mmi_function() const { + return RAB_INSTR_R5900_GET_mmi_function(&this->instr); +} +uint8_t InstructionR5900::GetR5900_fhi_flo() const { + return RAB_INSTR_R5900_GET_fhi_flo(&this->instr); +} + +uint8_t InstructionR5900::GetR5900_xyzw_x() const { + return RAB_INSTR_R5900_GET_xyzw_x(&this->instr); +} +uint8_t InstructionR5900::GetR5900_xyzw_y() const { + return RAB_INSTR_R5900_GET_xyzw_y(&this->instr); +} +uint8_t InstructionR5900::GetR5900_xyzw_z() const { + return RAB_INSTR_R5900_GET_xyzw_z(&this->instr); +} +uint8_t InstructionR5900::GetR5900_xyzw_w() const { + return RAB_INSTR_R5900_GET_xyzw_w(&this->instr); +} +uint8_t InstructionR5900::GetR5900_n() const { + return RAB_INSTR_R5900_GET_n(&this->instr); +} +uint8_t InstructionR5900::GetR5900_l() const { + return RAB_INSTR_R5900_GET_l(&this->instr); +} +uint8_t InstructionR5900::GetR5900_m() const { + return RAB_INSTR_R5900_GET_m(&this->instr); +} + +uint8_t InstructionR5900::GetR5900_imm5() const { + return RAB_INSTR_R5900_GET_imm5(&this->instr); +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/instructions/InstructionRsp.cpp b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/instructions/InstructionRsp.cpp new file mode 100644 index 00000000..891a0351 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/cplusplus/src/instructions/InstructionRsp.cpp @@ -0,0 +1,128 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/InstructionRsp.hpp" + +#include + +#include "instructions/RabbitizerInstructionRsp.h" + +using namespace rabbitizer; + +InstructionRsp::InstructionRsp(uint32_t word, uint32_t vram) : InstructionBase() { + RabbitizerInstructionRsp_init(&this->instr, word, vram); + RabbitizerInstructionRsp_processUniqueId(&this->instr); +} + +InstructionRsp::~InstructionRsp() { + RabbitizerInstructionRsp_destroy(&this->instr); +} + +Registers::Rsp::Gpr InstructionRsp::GetRsp_rs() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_rs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rs' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_rs(&this->instr)); +} +Registers::Rsp::Gpr InstructionRsp::GetRsp_rt() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_rt)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rt' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_rt(&this->instr)); +} +Registers::Rsp::Gpr InstructionRsp::GetRsp_rd() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_rd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rd' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_rd(&this->instr)); +} + +Registers::Rsp::Cop0 InstructionRsp::GetRsp_cop0d() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_cop0d)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'cop0d' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_cop0d(&this->instr)); +} + +Registers::Rsp::Cop2 InstructionRsp::GetRsp_cop2t() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_cop2t)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'cop2t' operand."); + } +#endif + + return static_cast(RAB_INSTR_RSP_GET_cop2t(&this->instr)); +} + +Registers::Rsp::Cop2Control InstructionRsp::GetRsp_cop2cd() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_cop2t)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'cop2cd' operand."); + } +#endif + + return static_cast(RAB_INSTR_RSP_GET_cop2cd(&this->instr)); +} + +Registers::Rsp::Vector InstructionRsp::GetRsp_vs() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_vs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'vs' operand."); + } +#endif + + return static_cast(RAB_INSTR_RSP_GET_vs(&this->instr)); +} +Registers::Rsp::Vector InstructionRsp::GetRsp_vt() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_vt)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'vt' operand."); + } +#endif + + return static_cast(RAB_INSTR_RSP_GET_vt(&this->instr)); +} +Registers::Rsp::Vector InstructionRsp::GetRsp_vd() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_vd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'vd' operand."); + } +#endif + + return static_cast(RAB_INSTR_RSP_GET_vd(&this->instr)); +} + +uint8_t InstructionRsp::GetRsp_elementhigh() const { + return RAB_INSTR_RSP_GET_elementhigh(&this->instr); +} +uint8_t InstructionRsp::GetRsp_elementlow() const { + return RAB_INSTR_RSP_GET_elementlow(&this->instr); +} + +uint8_t InstructionRsp::GetRsp_index() const { + return RAB_INSTR_RSP_GET_index(&this->instr); +} +uint8_t InstructionRsp::GetRsp_de() const { + return RAB_INSTR_RSP_GET_de(&this->instr); +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/analysis/RabbitizerLoPairingInfo.h b/tools/ido-static-recomp/tools/rabbitizer/include/analysis/RabbitizerLoPairingInfo.h new file mode 100644 index 00000000..b6a70ed2 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/analysis/RabbitizerLoPairingInfo.h @@ -0,0 +1,34 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_LO_PAIRING_INFO_H +#define RABBITIZER_LO_PAIRING_INFO_H +#pragma once + +#include + +#include "common/Utils.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef struct RabbitizerLoPairingInfo { + int instrOffset; + int64_t value; // could be either an unsigned 32 bits number or a signed one, so use 64 bits to ensure it fits + bool shouldProcess; + bool isGpRel; + bool isGpGot; +} RabbitizerLoPairingInfo; + + +NON_NULL(1) +void RabbitizerLoPairingInfo_Init(RabbitizerLoPairingInfo *self); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/analysis/RabbitizerRegistersTracker.h b/tools/ido-static-recomp/tools/rabbitizer/include/analysis/RabbitizerRegistersTracker.h new file mode 100644 index 00000000..36ccbd56 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/analysis/RabbitizerRegistersTracker.h @@ -0,0 +1,65 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_REGISTERS_TRACKER_H +#define RABBITIZER_REGISTERS_TRACKER_H +#pragma once + +#include "common/Utils.h" +#include "RabbitizerTrackedRegisterState.h" +#include "RabbitizerLoPairingInfo.h" +#include "instructions/RabbitizerInstruction.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define RAB_REGISTERS_COUNT 32 + + +typedef struct RabbitizerRegistersTracker { + RabbitizerTrackedRegisterState registers[RAB_REGISTERS_COUNT]; +} RabbitizerRegistersTracker; + +// TODO: Change functions which use parameters as a way to return values into actual structs returned by the functions + +NON_NULL(1) +void RabbitizerRegistersTracker_init(RabbitizerRegistersTracker *self, const RabbitizerRegistersTracker *other); +NON_NULL(1) +void RabbitizerRegistersTracker_destroy(RabbitizerRegistersTracker *self); + +NON_NULL(1, 2) +bool RabbitizerRegistersTracker_moveRegisters(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr); +NON_NULL(1, 2) +void RabbitizerRegistersTracker_overwriteRegisters(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int instrOffset); +NON_NULL(1, 2, 3) +void RabbitizerRegistersTracker_unsetRegistersAfterFuncCall(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, const RabbitizerInstruction *prevInstr); +NON_NULL(1, 2, 4) +bool RabbitizerRegistersTracker_getAddressIfCanSetType(const RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int instrOffset, uint32_t *dstAddress); +NON_NULL(1, 2, 3, 4) +bool RabbitizerRegistersTracker_getJrInfo(const RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int *dstOffset, uint32_t *dstAddress); + +// prevInstr can be NULL +NON_NULL(1, 2) +void RabbitizerRegistersTracker_processLui(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int instrOffset, const RabbitizerInstruction *prevInstr); +NON_NULL(1, 2) +void RabbitizerRegistersTracker_processGpLoad(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int instrOffset); +NON_NULL(1, 2, 3) +bool RabbitizerRegistersTracker_getLuiOffsetForConstant(const RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int *dstOffset); +NON_NULL(1, 2) +void RabbitizerRegistersTracker_processConstant(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, uint32_t value, int offset); +NON_NULL(1, 2, 4, 5) // deprecated +bool RabbitizerRegistersTracker_getLuiOffsetForLo(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int instrOffset, int *dstOffset, bool *dstIsGp); +NODISCARD NON_NULL(1, 2) +RabbitizerLoPairingInfo RabbitizerRegistersTracker_preprocessLoAndGetInfo(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int instrOffset); +NON_NULL(1, 2) +void RabbitizerRegistersTracker_processLo(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, uint32_t value, int offset); +NON_NULL(1, 2) +bool RabbitizerRegistersTracker_hasLoButNoHi(const RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/analysis/RabbitizerTrackedRegisterState.h b/tools/ido-static-recomp/tools/rabbitizer/include/analysis/RabbitizerTrackedRegisterState.h new file mode 100644 index 00000000..daf4b2da --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/analysis/RabbitizerTrackedRegisterState.h @@ -0,0 +1,80 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_TRACKED_REGISTER_STATE_H +#define RABBITIZER_TRACKED_REGISTER_STATE_H +#pragma once + +#include +#include +#include + +#include "common/Utils.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef struct RabbitizerTrackedRegisterState { + int registerNum; + + bool hasLuiValue; + int luiOffset; // The offset of last lui which set a value to this register + bool luiSetOnBranchLikely; + + bool hasGpGot; + int gpGotOffset; + + bool hasLoValue; + int loOffset; + bool dereferenced; + int dereferenceOffset; + + uint32_t value; +} RabbitizerTrackedRegisterState; + + +NON_NULL(1) +void RabbitizerTrackedRegisterState_init(RabbitizerTrackedRegisterState *self, int registerNum); +NON_NULL(1) +void RabbitizerTrackedRegisterState_destroy(RabbitizerTrackedRegisterState *self); + +NON_NULL(1) +void RabbitizerTrackedRegisterState_clear(RabbitizerTrackedRegisterState *self); +NON_NULL(1) +void RabbitizerTrackedRegisterState_clearHi(RabbitizerTrackedRegisterState *self); +NON_NULL(1) +void RabbitizerTrackedRegisterState_clearGp(RabbitizerTrackedRegisterState *self); +NON_NULL(1) +void RabbitizerTrackedRegisterState_clearLo(RabbitizerTrackedRegisterState *self); + +NON_NULL(1, 2) +void RabbitizerTrackedRegisterState_copyState(RabbitizerTrackedRegisterState *self, const RabbitizerTrackedRegisterState *other); + +NON_NULL(1) +void RabbitizerTrackedRegisterState_setHi(RabbitizerTrackedRegisterState *self, uint32_t value, int offset); +NON_NULL(1) +void RabbitizerTrackedRegisterState_setGpLoad(RabbitizerTrackedRegisterState *self, uint32_t value, int offset); +NON_NULL(1) +void RabbitizerTrackedRegisterState_setLo(RabbitizerTrackedRegisterState *self, uint32_t value, int offset); + +NON_NULL(1) +void RabbitizerTrackedRegisterState_deref(RabbitizerTrackedRegisterState *self, int offset); +NON_NULL(1, 2) +void RabbitizerTrackedRegisterState_dereferenceState(RabbitizerTrackedRegisterState *self, const RabbitizerTrackedRegisterState *other, int offset); + +NODISCARD NON_NULL(1) PURE +bool RabbitizerTrackedRegisterState_hasAnyValue(const RabbitizerTrackedRegisterState *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerTrackedRegisterState_wasSetInCurrentOffset(const RabbitizerTrackedRegisterState *self, int offset); + +NON_NULL(1) +void RabbitizerTrackedRegisterState_fprint(const RabbitizerTrackedRegisterState *self, FILE* outFile); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/common/Abi.inc b/tools/ido-static-recomp/tools/rabbitizer/include/common/Abi.inc new file mode 100644 index 00000000..fa01d92f --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/common/Abi.inc @@ -0,0 +1,7 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +RABBITIZER_DEF_ABI(NUMERIC), +RABBITIZER_DEF_ABI(O32), +RABBITIZER_DEF_ABI(N32), +RABBITIZER_DEF_ABI(N64), diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/common/RabbitizerConfig.h b/tools/ido-static-recomp/tools/rabbitizer/include/common/RabbitizerConfig.h new file mode 100644 index 00000000..8b9def78 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/common/RabbitizerConfig.h @@ -0,0 +1,83 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_CONFIG_H +#define RABBITIZER_CONFIG_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#define RABBITIZER_DEF_ABI(name) RABBITIZER_ABI_##name + +typedef enum RabbitizerAbi { + #include "Abi.inc" + + RABBITIZER_DEF_ABI(MAX), +} RabbitizerAbi; + +#undef RABBITIZER_DEF_ABI + +RabbitizerAbi RabbitizerAbi_fromStr(const char *name); + + +typedef struct RabbitizerConfig_RegisterNames { + bool namedRegisters; // Enables using named registers. This option takes precedence over the other named register options + RabbitizerAbi gprAbiNames; // The ABI names to be used for general purpose registers when disassembling the main processor's instructions + RabbitizerAbi fprAbiNames; // The ABI names to be used for floating point registers when disassembling the floating point (coprocessor 1) instructions + bool userFpcCsr; // Use FpcCsr as register $31 for the FP control/status register + bool vr4300Cop0NamedRegisters; // Use named registers for VR4300's coprocessor 0 registers + bool vr4300RspCop0NamedRegisters; // Use named registers for VR4300's RSP's coprocessor 0 registers +} RabbitizerConfig_RegisterNames; + +typedef struct RabbitizerConfig_PseudoInstr { + bool enablePseudos; // Produce pseudo instructions (like `move` or `b`) whenever those may match the desired original instruction + bool pseudoBeqz; + bool pseudoBnez; + bool pseudoB; + bool pseudoMove; + bool pseudoNot; + bool pseudoNegu; + bool pseudoBal; +} RabbitizerConfig_PseudoInstr; + +typedef struct RabbitizerConfig_ToolchainTweaks { + bool treatJAsUnconditionalBranch; //! @deprecated + /** + * Enables a few fixes for SN64's assembler related to div/divu instructions + * + * - SN64's assembler doesn't like assembling `div $0, a, b` with .set noat active. + * Removing the $0 fixes this issue (but not for handwritten asm) + * + * - SN64's assembler expands div to have break if dividing by zero + * However, the break it generates is different than the one it generates with `break N` + * So we replace break instrutions for SN64 with the exact word that the assembler generates when expanding div + */ + bool sn64DivFix; +} RabbitizerConfig_ToolchainTweaks; + +typedef struct RabbitizerConfig_Misc { + int opcodeLJust; // The minimal number of characters to left-align the opcode name + bool unknownInstrComment; // Generate a pseudo-disassembly comment when disassembling non implemented instructions + bool omit0XOnSmallImm; + bool upperCaseImm; +} RabbitizerConfig_Misc; + +typedef struct RabbitizerConfig { + RabbitizerConfig_RegisterNames regNames; + RabbitizerConfig_PseudoInstr pseudos; + RabbitizerConfig_ToolchainTweaks toolchainTweaks; + RabbitizerConfig_Misc misc; +} RabbitizerConfig; + +extern RabbitizerConfig RabbitizerConfig_Cfg; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/common/RabbitizerVersion.h b/tools/ido-static-recomp/tools/rabbitizer/include/common/RabbitizerVersion.h new file mode 100644 index 00000000..d59e716f --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/common/RabbitizerVersion.h @@ -0,0 +1,33 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_VERSION_H +#define RABBITIZER_VERSION_H + +#include "Utils.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +// Header version +#define RAB_VERSION_MAJOR 1 +#define RAB_VERSION_MINOR 2 +#define RAB_VERSION_PATCH 3 + +#define RAB_VERSION_STR RAB_STRINGIFY(RAB_VERSION_MAJOR) "." RAB_STRINGIFY(RAB_VERSION_MINOR) "." RAB_STRINGIFY(RAB_VERSION_PATCH) + +// Compiled library version +extern const int RabVersion_Major; +extern const int RabVersion_Minor; +extern const int RabVersion_Patch; + +extern const char RabVersion_Str[]; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/common/Utils.h b/tools/ido-static-recomp/tools/rabbitizer/include/common/Utils.h new file mode 100644 index 00000000..6255a04a --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/common/Utils.h @@ -0,0 +1,116 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_UTILS_H +#define RABBITIZER_UTILS_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#if !defined(__GNUC__) && !defined(__clang__) +#define __attribute__(x) +#endif + +#if __STDC_VERSION__ >= 202000L +#define CONST [[gnu::const]] +#define DEPRECATED(reason) [[deprecated (reason)]] +#define FALLTHROUGH [[fallthrough]] +#define NODISCARD [[nodiscard]] +#define NORETURN [[noreturn]] +#define NON_NULL(...) [[gnu::nonnull (__VA_ARGS__)]] +#define PURE [[gnu::pure]] +#define RETURNS_NON_NULL [[gnu::returns_nonnull]] +#define UNUSED [[maybe_unused]] +#else +#define CONST __attribute__((const)) +#define DEPRECATED(reason) __attribute__((deprecated (reason))) +#define FALLTHROUGH __attribute__((fallthrough)) +#define NODISCARD __attribute__((warn_unused_result)) +#define NORETURN _Noreturn +#define NON_NULL(...) __attribute__((nonnull (__VA_ARGS__))) +#define PURE __attribute__((pure)) +#define RETURNS_NON_NULL __attribute__((returns_nonnull)) +#define UNUSED __attribute__((unused)) +#endif + + +#if defined(_MSC_VER) +# define UNREACHABLE __assume(0) +#elif defined(__GNUC__) || defined(__clang__) +# define UNREACHABLE __builtin_unreachable() +#else +# define UNREACHABLE +#endif + + +#define ARRAY_COUNT(arr) (sizeof(arr) / sizeof((arr)[0])) + +#define RAB_STRINGIFY(x) #x + +#define MASK(v, w) ((v) & ((1 << (w)) - 1)) + +/* + * the SHIFT macros take a value, a shift amount, and a width. + * + * For the left shift, the lower bits of the value are masked, + * then shifted left. + * + * For the right shift, the value is shifted right, then the lower bits + * are masked. + * + * (NOTE: SHIFTL(v, 0, 32) won't work, just use an assignment) + * + */ +#define SHIFTL(v, s, w) (MASK((v), (w)) << (s)) +#define SHIFTR(v, s, w) (MASK((v) >> (s), (w))) + +#define BITREPACK(fullword, v, s, w) ((SHIFTR((fullword), (s)+(w), 32-((s)+(w))) << ((s)+(w))) | SHIFTL((v), (s), (w)) | MASK((fullword), (s))) +#define BITREPACK_RIGHT(fullword, v, s, w) (SHIFTL((v), (s), (w)) | MASK((fullword), (s))) + + +#define RABUTILS_BUFFER_ADVANCE(buffer, totalSize, expression) \ + do { \ + size_t __tempSize = expression; \ + (buffer) += __tempSize; \ + (totalSize) += __tempSize; \ + } while (0) + +#define RABUTILS_BUFFER_WRITE_CHAR(buffer, totalSize, character) \ + do { \ + *(buffer) = (character); \ + RABUTILS_BUFFER_ADVANCE(buffer, totalSize, 1); \ + } while (0) + +#define RABUTILS_BUFFER_SPRINTF(buffer, totalSize, format, ...) \ + do { \ + int _len = sprintf(buffer, format, __VA_ARGS__); \ + assert(_len > 0); \ + RABUTILS_BUFFER_ADVANCE(buffer, totalSize, _len); \ + } while (0) + +#define RABUTILS_BUFFER_CPY(buffer, totalSize, string) \ + do { \ + size_t _tempSize = strlen(string); \ + memcpy(buffer, string, _tempSize); \ + RABUTILS_BUFFER_ADVANCE(buffer, totalSize, _tempSize); \ + } while (0) + + +CONST NODISCARD +int32_t RabbitizerUtils_From2Complement(uint32_t number, int bits); +NON_NULL(1) +size_t RabbitizerUtils_CharFill(char *dst, int count, char fillchar); +NON_NULL(1, 3) +size_t RabbitizerUtils_escapeString(char *dst, size_t dstSize, const char *src, size_t srcSize); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/InstrCategory.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/InstrCategory.inc new file mode 100644 index 00000000..9a6d85c1 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/InstrCategory.inc @@ -0,0 +1,6 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +RABBITIZER_DEF_INSTR_CATEGORY(CPU), +RABBITIZER_DEF_INSTR_CATEGORY(RSP), // N64 +RABBITIZER_DEF_INSTR_CATEGORY(R5900), // PS2's Emotion Engine diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerInstrDescriptor.h b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerInstrDescriptor.h new file mode 100644 index 00000000..e92f7971 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerInstrDescriptor.h @@ -0,0 +1,141 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_INSTRDESCRIPTOR_H +#define RABBITIZER_INSTRDESCRIPTOR_H +#pragma once + +#include + +#include "common/Utils.h" +#include "RabbitizerOperandType.h" +#include "RabbitizerInstrId.h" +#include "RabbitizerInstrSuffix.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef enum RabbitizerInstrType { + RABBITIZER_INSTR_TYPE_UNKNOWN, + RABBITIZER_INSTR_TYPE_J, + RABBITIZER_INSTR_TYPE_I, + RABBITIZER_INSTR_TYPE_R, + RABBITIZER_INSTR_TYPE_REGIMM, + RABBITIZER_INSTR_TYPE_MAX, +} RabbitizerInstrType; + +typedef enum RabbitizerArchitectureVersion { + RABBITIZER_ARCHVERSION_INVALID=-1, + RABBITIZER_ARCHVERSION_UNKNOWN, + RABBITIZER_ARCHVERSION_MIPS_I, + RABBITIZER_ARCHVERSION_MIPS_II, + RABBITIZER_ARCHVERSION_MIPS_III, + RABBITIZER_ARCHVERSION_MIPS_IV +} RabbitizerArchitectureVersion; + +typedef struct RabbitizerInstrDescriptor { + RabbitizerOperandType operands[4]; + RabbitizerInstrType instrType; + + RabbitizerInstrSuffix instrSuffix; + + bool isBranch; + bool isBranchLikely; + bool isJump; + bool isTrap; + + bool isFloat; + bool isDouble; + + bool isUnsigned; + + bool modifiesRt; + bool modifiesRd; + + bool notEmitedByCompilers; + + bool canBeHi; + bool canBeLo; + bool doesLink; // "and link" family of instructions + bool doesDereference; + bool doesLoad; // loads data from memory + bool doesStore; // stores data to memory + bool maybeIsMove; + + bool isPseudo; + + RabbitizerArchitectureVersion architectureVersion; // TODO: consider removing +} RabbitizerInstrDescriptor; + +// TODO: less redundant name +extern const RabbitizerInstrDescriptor RabbitizerInstrDescriptor_Descriptors[]; + + +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_isUnknownType(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_isJType(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_isIType(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_isRType(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_isRegimmType(const RabbitizerInstrDescriptor *self); + +NODISCARD NON_NULL(1) PURE +RabbitizerInstrSuffix RabbitizerInstrDescriptor_instrSuffix(const RabbitizerInstrDescriptor *self); + +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_isBranch(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_isBranchLikely(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_isJump(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_isTrap(const RabbitizerInstrDescriptor *self); + +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_isFloat(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_isDouble(const RabbitizerInstrDescriptor *self); + +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_isUnsigned(const RabbitizerInstrDescriptor *self); + +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_modifiesRt(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_modifiesRd(const RabbitizerInstrDescriptor *self); + +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_notEmitedByCompilers(const RabbitizerInstrDescriptor *self); + +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_canBeHi(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_canBeLo(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_doesLink(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_doesDereference(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_doesLoad(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_doesStore(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_maybeIsMove(const RabbitizerInstrDescriptor *self); + +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_isPseudo(const RabbitizerInstrDescriptor *self); + +NODISCARD NON_NULL(1) PURE +RabbitizerArchitectureVersion RabbitizerInstrDescriptor_getArchitectureVersion(const RabbitizerInstrDescriptor *self); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerInstrId.h b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerInstrId.h new file mode 100644 index 00000000..c3838211 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerInstrId.h @@ -0,0 +1,46 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_INSTRID_H +#define RABBITIZER_INSTRID_H +#pragma once + +#include "common/Utils.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +#define RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, ...) \ + RABBITIZER_INSTR_ID_##prefix##_##name, + +#define RABBITIZER_DEF_INSTR_ID_ALTNAME(prefix, caseBits, name, altname, ...) \ + RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, __VA_ARGS__) + +typedef enum RabbitizerInstrId { + #include "instructions/instr_id/RabbitizerInstrId_cpu.inc" + + #include "instructions/instr_id/RabbitizerInstrId_rsp.inc" + + #include "instructions/instr_id/RabbitizerInstrId_r5900.inc" + + RABBITIZER_INSTR_ID_ALL_MAX = RABBITIZER_DEF_INSTR_ID(r5900, , MAX, ) +} RabbitizerInstrId; + +#undef RABBITIZER_DEF_INSTR_ID +#undef RABBITIZER_DEF_INSTR_ID_ALTNAME + + +extern const char *RabbitizerInstrId_Names[]; + + +CONST NODISCARD RETURNS_NON_NULL +const char *RabbitizerInstrId_getOpcodeName(RabbitizerInstrId uniqueId); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerInstrSuffix.h b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerInstrSuffix.h new file mode 100644 index 00000000..7c59e334 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerInstrSuffix.h @@ -0,0 +1,36 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_INSTRSUFFIX_H +#define RABBITIZER_INSTRSUFFIX_H +#pragma once + +#include "common/Utils.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +struct RabbitizerInstruction; + +typedef enum RabbitizerInstrSuffix { + RABINSTRSUFFIX_NONE, + + RABINSTRSUFFIX_R5900_xyzw, + + RABINSTRSUFFIX_MAX +} RabbitizerInstrSuffix; + +CONST NODISCARD NON_NULL(1) +size_t RabbitizerInstrSuffix_getSizeForBuffer(const struct RabbitizerInstruction *self, RabbitizerInstrSuffix instrSuffix); + +CONST NODISCARD NON_NULL(1, 2) +size_t RabbitizerInstrSuffix_processSuffix(const struct RabbitizerInstruction *self, char *dst, RabbitizerInstrSuffix instrSuffix); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerInstruction.h b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerInstruction.h new file mode 100644 index 00000000..17e3bab9 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerInstruction.h @@ -0,0 +1,263 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_INSTRUCTION_H +#define RABBITIZER_INSTRUCTION_H +#pragma once + +#include +#include +#include + +#include "common/Utils.h" + +#include "RabbitizerInstrId.h" +#include "RabbitizerInstrDescriptor.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +#define RABBITIZER_DEF_INSTR_CATEGORY(name) RABBITIZER_INSTRCAT_##name + +typedef enum RabbitizerInstrCategory { + #include "instructions/InstrCategory.inc" + + RABBITIZER_DEF_INSTR_CATEGORY(MAX), +} RabbitizerInstrCategory; + +#undef RABBITIZER_DEF_INSTR_CATEGORY + + +typedef struct RabbitizerInstruction { + uint32_t word; + uint32_t _mandatorybits; + + RabbitizerInstrId uniqueId; + const RabbitizerInstrDescriptor *descriptor; + + uint32_t vram; + bool _handwrittenCategory; + bool inHandwrittenFunction; + RabbitizerInstrCategory category; +} RabbitizerInstruction; + + +#define RAB_INSTR_GET_opcode(self) (SHIFTR((self)->word, 26, 6)) +#define RAB_INSTR_GET_rs(self) (SHIFTR((self)->word, 21, 5)) +#define RAB_INSTR_GET_rt(self) (SHIFTR((self)->word, 16, 5)) +#define RAB_INSTR_GET_rd(self) (SHIFTR((self)->word, 11, 5)) +#define RAB_INSTR_GET_sa(self) (SHIFTR((self)->word, 6, 5)) +#define RAB_INSTR_GET_function(self) (SHIFTR((self)->word, 0, 6)) + +#define RAB_INSTR_GET_cop0d(self) (SHIFTR((self)->word, 11, 5)) + +#define RAB_INSTR_GET_instr_index(self) (SHIFTR((self)->word, 0, 26)) +#define RAB_INSTR_GET_immediate(self) (SHIFTR((self)->word, 0, 16)) + +#define RAB_INSTR_GET_fs(self) (SHIFTR((self)->word, 11, 5)) +#define RAB_INSTR_GET_ft(self) (SHIFTR((self)->word, 16, 5)) +#define RAB_INSTR_GET_fd(self) (SHIFTR((self)->word, 6, 5)) +#define RAB_INSTR_GET_cop1cs(self) (SHIFTR((self)->word, 11, 5)) + +#define RAB_INSTR_GET_op(self) (SHIFTR((self)->word, 16, 5)) + +#define RAB_INSTR_GET_code(self) (SHIFTR((self)->word, 6, 20)) +#define RAB_INSTR_GET_code_upper(self) (SHIFTR((self)->word, 16, 10)) +#define RAB_INSTR_GET_code_lower(self) (SHIFTR((self)->word, 6, 10)) + +#define RAB_INSTR_GET_copraw(self) (SHIFTR((self)->word, 0, 25)) + +#define RAB_INSTR_GET_fmt(self) (SHIFTR((self)->word, 21, 5)) +#define RAB_INSTR_GET_fc(self) (SHIFTR((self)->word, 4, 2)) +#define RAB_INSTR_GET_cond(self) (SHIFTR((self)->word, 0, 4)) + +#define RAB_INSTR_GET_cop2t(self) (SHIFTR((self)->word, 16, 5)) + +#define RAB_INSTR_GET_tf(self) (SHIFTR((self)->word, 16, 1)) +#define RAB_INSTR_GET_nd(self) (SHIFTR((self)->word, 17, 1)) +#define RAB_INSTR_GET_bc_fmt(self) (SHIFTR((self)->word, 16, 5)) + +#define RAB_INSTR_GET_stype(self) (SHIFTR((self)->word, 6, 5)) + + +#define RAB_INSTR_PACK_opcode(word, value) (BITREPACK_RIGHT((word), (value), 26, 6)) +#define RAB_INSTR_PACK_rs(word, value) (BITREPACK((word), (value), 21, 5)) +#define RAB_INSTR_PACK_rt(word, value) (BITREPACK((word), (value), 16, 5)) +#define RAB_INSTR_PACK_rd(word, value) (BITREPACK((word), (value), 11, 5)) +#define RAB_INSTR_PACK_sa(word, value) (BITREPACK((word), (value), 6, 5)) +#define RAB_INSTR_PACK_function(word, value) (BITREPACK((word), (value), 0, 6)) + +#define RAB_INSTR_PACK_cop0d(word, value) (BITREPACK((word), (value), 11, 5)) + +#define RAB_INSTR_PACK_instr_index(word, value) (BITREPACK((word), (value), 0, 26)) +#define RAB_INSTR_PACK_immediate(word, value) (BITREPACK((word), (value), 0, 16)) + +#define RAB_INSTR_PACK_code(word, value) (BITREPACK((word), (value), 6, 20)) +#define RAB_INSTR_PACK_code_upper(word, value) (BITREPACK((word), (value), 16, 10)) +#define RAB_INSTR_PACK_code_lower(word, value) (BITREPACK((word), (value), 6, 10)) + +#define RAB_INSTR_PACK_copraw(word, value) (BITREPACK((word), (value), 0, 25)) + +#define RAB_INSTR_PACK_fmt(word, value) (BITREPACK((word), (value), 21, 5)) +#define RAB_INSTR_PACK_fc(word, value) (BITREPACK((word), (value), 4, 2)) +#define RAB_INSTR_PACK_cond(word, value) (BITREPACK((word), (value), 0, 4)) + +#define RAB_INSTR_PACK_fs(word, value) (BITREPACK((word), (value), 11, 5)) +#define RAB_INSTR_PACK_ft(word, value) (BITREPACK((word), (value), 16, 5)) +#define RAB_INSTR_PACK_fd(word, value) (BITREPACK((word), (value), 6, 5)) +#define RAB_INSTR_PACK_cop1cs(word, value) (BITREPACK((word), (value), 11, 5)) + +#define RAB_INSTR_PACK_op(word, value) (BITREPACK((word), (value), 16, 5)) + +#define RAB_INSTR_PACK_cop2t(word, value) (BITREPACK((word), (value), 16, 5)) + +#define RAB_INSTR_PACK_tf(word, value) (BITREPACK((word), (value), 16, 1)) +#define RAB_INSTR_PACK_nd(word, value) (BITREPACK((word), (value), 17, 1)) +#define RAB_INSTR_PACK_bc_fmt(word, value) (BITREPACK((word), (value), 16, 5)) + +#define RAB_INSTR_PACK_stype(word, value) (BITREPACK((word), (value), 6, 5)) + + +NON_NULL(1) +void RabbitizerInstruction_init(RabbitizerInstruction *self, uint32_t word, uint32_t vram); +NON_NULL(1) +void RabbitizerInstruction_destroy(RabbitizerInstruction* self); + + +/* Process uniqueId */ + +NON_NULL(1) +void RabbitizerInstruction_processUniqueId_Normal(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstruction_processUniqueId_Special(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstruction_processUniqueId_Regimm(RabbitizerInstruction *self); + +NON_NULL(1) +void RabbitizerInstruction_processUniqueId_Coprocessor0_BC0(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstruction_processUniqueId_Coprocessor0_Tlb(RabbitizerInstruction *self); + +NON_NULL(1) +void RabbitizerInstruction_processUniqueId_Coprocessor0(RabbitizerInstruction *self); + +NON_NULL(1) +void RabbitizerInstruction_processUniqueId_Coprocessor1_BC1(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstruction_processUniqueId_Coprocessor1_FpuS(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstruction_processUniqueId_Coprocessor1_FpuD(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstruction_processUniqueId_Coprocessor1_FpuW(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstruction_processUniqueId_Coprocessor1_FpuL(RabbitizerInstruction *self); + +NON_NULL(1) +void RabbitizerInstruction_processUniqueId_Coprocessor1(RabbitizerInstruction *self); + +NON_NULL(1) +void RabbitizerInstruction_processUniqueId_Coprocessor2(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstruction_processUniqueId(RabbitizerInstruction *self); + +/* Process uniqueId */ + + +/* General getters */ + +NODISCARD NON_NULL(1) PURE +uint32_t RabbitizerInstruction_getRaw(const RabbitizerInstruction *self); + +NODISCARD NON_NULL(1) PURE +uint32_t RabbitizerInstruction_getImmediate(const RabbitizerInstruction *self); +NODISCARD NON_NULL(1) PURE +int32_t RabbitizerInstruction_getProcessedImmediate(const RabbitizerInstruction *self); +NODISCARD NON_NULL(1) PURE +uint32_t RabbitizerInstruction_getInstrIndex(const RabbitizerInstruction *self); +NODISCARD NON_NULL(1) PURE +uint32_t RabbitizerInstruction_getInstrIndexAsVram(const RabbitizerInstruction *self); + +NODISCARD NON_NULL(1) PURE +int32_t RabbitizerInstruction_getBranchOffset(const RabbitizerInstruction *self); +NODISCARD NON_NULL(1) PURE +int32_t RabbitizerInstruction_getGenericBranchOffset(const RabbitizerInstruction *self, uint32_t currentVram); + +/* General getters */ + +NON_NULL(1) +void RabbitizerInstruction_blankOut(RabbitizerInstruction *self); + + +/* Instruction examination */ + +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstruction_isImplemented(const RabbitizerInstruction *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstruction_isLikelyHandwritten(const RabbitizerInstruction *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstruction_isNop(const RabbitizerInstruction *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstruction_isUnconditionalBranch(const RabbitizerInstruction *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstruction_isJrRa(const RabbitizerInstruction *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstruction_isJrNotRa(const RabbitizerInstruction *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstruction_hasDelaySlot(const RabbitizerInstruction *self); + +NODISCARD NON_NULL(1) PURE +const char *RabbitizerInstruction_mapInstrToType(const RabbitizerInstruction *self); + +NODISCARD NON_NULL(1, 2) PURE +bool RabbitizerInstruction_sameOpcode(const RabbitizerInstruction *self, const RabbitizerInstruction *other); +NODISCARD NON_NULL(1, 2) PURE +bool RabbitizerInstruction_sameOpcodeButDifferentArguments(const RabbitizerInstruction *self, const RabbitizerInstruction *other); + +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstruction_hasOperand(const RabbitizerInstruction *self, RabbitizerOperandType operand); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstruction_hasOperandAlias(const RabbitizerInstruction *self, RabbitizerOperandType operand); + +NODISCARD NON_NULL(1) PURE +uint32_t RabbitizerInstruction_getValidBits(const RabbitizerInstruction *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstruction_isValid(const RabbitizerInstruction *self); + +/* Instruction examination */ + + +/* Disassembly */ + +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstruction_mustDisasmAsData(const RabbitizerInstruction *self); + +NODISCARD NON_NULL(1) PURE +size_t RabbitizerInstruction_getSizeForBufferOperandsDisasm(const RabbitizerInstruction *self, size_t immOverrideLength); +NON_NULL(1, 2) +size_t RabbitizerInstruction_disassembleOperands(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength); + +NODISCARD NON_NULL(1) PURE +size_t RabbitizerInstruction_getSizeForBufferInstrDisasm(const RabbitizerInstruction *self, size_t immOverrideLength, int extraLJust); +NON_NULL(1, 2) +size_t RabbitizerInstruction_disassembleInstruction(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength, int extraLJust); + +NODISCARD NON_NULL(1) PURE +size_t RabbitizerInstruction_getSizeForBufferDataDisasm(const RabbitizerInstruction *self, int extraLJust); +NON_NULL(1, 2) +size_t RabbitizerInstruction_disassembleAsData(const RabbitizerInstruction *self, char *dst, int extraLJust); + +NODISCARD NON_NULL(1) PURE +size_t RabbitizerInstruction_getSizeForBuffer(const RabbitizerInstruction *self, size_t immOverrideLength, int extraLJust); +NON_NULL(1, 2) +size_t RabbitizerInstruction_disassemble(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength, int extraLJust); + +/* Disassembly */ + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerInstructionR5900.h b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerInstructionR5900.h new file mode 100644 index 00000000..af5e809e --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerInstructionR5900.h @@ -0,0 +1,87 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_INSTRUCTION_R5900_H +#define RABBITIZER_INSTRUCTION_R5900_H +#pragma once + +#include "RabbitizerInstruction.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +#define RAB_INSTR_R5900_GET_mmi_function(self) (SHIFTR((self)->word, 6, 5)) +#define RAB_INSTR_R5900_GET_fhi_flo(self) ((SHIFTR((self)->word, 6, 5) << 2) | SHIFTR((self)->word, 0, 2)) + +#define RAB_INSTR_R5900_GET_vfs(self) (SHIFTR((self)->word, 11, 5)) +#define RAB_INSTR_R5900_GET_vft(self) (SHIFTR((self)->word, 16, 5)) +#define RAB_INSTR_R5900_GET_vfd(self) (SHIFTR((self)->word, 6, 5)) + +#define RAB_INSTR_R5900_GET_xyzw_x(self) (SHIFTR((self)->word, 24, 1)) +#define RAB_INSTR_R5900_GET_xyzw_y(self) (SHIFTR((self)->word, 23, 1)) +#define RAB_INSTR_R5900_GET_xyzw_z(self) (SHIFTR((self)->word, 22, 1)) +#define RAB_INSTR_R5900_GET_xyzw_w(self) (SHIFTR((self)->word, 21, 1)) +#define RAB_INSTR_R5900_GET_n(self) (SHIFTR((self)->word, 0, 2)) +#define RAB_INSTR_R5900_GET_l(self) (SHIFTR((self)->word, 21, 2)) +#define RAB_INSTR_R5900_GET_m(self) (SHIFTR((self)->word, 23, 2)) + +#define RAB_INSTR_R5900_GET_vis(self) (SHIFTR((self)->word, 11, 5)) +#define RAB_INSTR_R5900_GET_vit(self) (SHIFTR((self)->word, 16, 5)) +#define RAB_INSTR_R5900_GET_vid(self) (SHIFTR((self)->word, 6, 5)) + +#define RAB_INSTR_R5900_GET_imm5(self) (SHIFTR((self)->word, 6, 5)) + + +#define RAB_INSTR_R5900_PACK_mmi_function(word, value) (BITREPACK((word), (value), 6, 5)) +#define RAB_INSTR_R5900_PACK_fhi_flo(word, value) (BITREPACK(BITREPACK((word), (value) >> 2, 6, 5), (value), 0, 2)) + +#define RAB_INSTR_R5900_PACK_vfs(word, value) (BITREPACK((word), (value), 11, 5)) +#define RAB_INSTR_R5900_PACK_vft(word, value) (BITREPACK((word), (value), 16, 5)) +#define RAB_INSTR_R5900_PACK_vfd(word, value) (BITREPACK((word), (value), 6, 5)) + +#define RAB_INSTR_R5900_PACK_xyzw_x(word, value) (BITREPACK((word), (value), 24, 1)) +#define RAB_INSTR_R5900_PACK_xyzw_y(word, value) (BITREPACK((word), (value), 23, 1)) +#define RAB_INSTR_R5900_PACK_xyzw_z(word, value) (BITREPACK((word), (value), 22, 1)) +#define RAB_INSTR_R5900_PACK_xyzw_w(word, value) (BITREPACK((word), (value), 21, 1)) +#define RAB_INSTR_R5900_PACK_n(word, value) (BITREPACK((word), (value), 0, 2)) +#define RAB_INSTR_R5900_PACK_l(word, value) (BITREPACK((word), (value), 21, 2)) +#define RAB_INSTR_R5900_PACK_m(word, value) (BITREPACK((word), (value), 23, 2)) + +#define RAB_INSTR_R5900_PACK_vis(word, value) (BITREPACK((word), (value), 11, 5)) +#define RAB_INSTR_R5900_PACK_vit(word, value) (BITREPACK((word), (value), 16, 5)) +#define RAB_INSTR_R5900_PACK_vid(word, value) (BITREPACK((word), (value), 6, 5)) + +#define RAB_INSTR_R5900_PACK_imm5(word, value) (BITREPACK((word), (value), 6, 5)) + + +NON_NULL(1) +void RabbitizerInstructionR5900_init(RabbitizerInstruction *self, uint32_t word, uint32_t vram); +NON_NULL(1) +void RabbitizerInstructionR5900_destroy(RabbitizerInstruction *self); + +NON_NULL(1) +void RabbitizerInstructionR5900_processUniqueId_Normal(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstructionR5900_processUniqueId_Special(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstructionR5900_processUniqueId_Regimm(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstructionR5900_processUniqueId_Coprocessor0(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstructionR5900_processUniqueId_Coprocessor1(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstructionR5900_processUniqueId_Coprocessor2(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstructionR5900_processUniqueId_MMI(RabbitizerInstruction *self); + +NON_NULL(1) +void RabbitizerInstructionR5900_processUniqueId(RabbitizerInstruction *self); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerInstructionRsp.h b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerInstructionRsp.h new file mode 100644 index 00000000..b2fb40d5 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerInstructionRsp.h @@ -0,0 +1,70 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_INSTRUCTION_RSP_H +#define RABBITIZER_INSTRUCTION_RSP_H +#pragma once + +#include "RabbitizerInstruction.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +#define RAB_INSTR_RSP_GET_cop2t(self) (SHIFTR((self)->word, 16, 5)) +#define RAB_INSTR_RSP_GET_cop2cd(self) (SHIFTR((self)->word, 11, 5)) + +#define RAB_INSTR_RSP_GET_vs(self) (SHIFTR((self)->word, 11, 5)) +#define RAB_INSTR_RSP_GET_vt(self) (SHIFTR((self)->word, 16, 5)) +#define RAB_INSTR_RSP_GET_vd(self) (SHIFTR((self)->word, 6, 5)) + +#define RAB_INSTR_RSP_GET_elementhigh(self) (SHIFTR((self)->word, 21, 4)) +#define RAB_INSTR_RSP_GET_elementlow(self) (SHIFTR((self)->word, 7, 4)) +#define RAB_INSTR_RSP_GET_OFFSET_VECTOR_RAW(self) (SHIFTR((self)->word, 0, 7)) + +#define RAB_INSTR_RSP_GET_index(self) (SHIFTR((self)->word, 7, 4)) +#define RAB_INSTR_RSP_GET_de(self) (SHIFTR((self)->word, 11, 5)) + + +#define RAB_INSTR_RSP_PACK_cop2t(word, value) (BITREPACK((word), value, 16, 5)) +#define RAB_INSTR_RSP_PACK_cop2cd(word, value) (BITREPACK((word), value, 11, 5)) + +#define RAB_INSTR_RSP_PACK_vs(word, value) (BITREPACK((word), value, 11, 5)) +#define RAB_INSTR_RSP_PACK_vt(word, value) (BITREPACK((word), value, 16, 5)) +#define RAB_INSTR_RSP_PACK_vd(word, value) (BITREPACK((word), value, 6, 5)) + +#define RAB_INSTR_RSP_PACK_elementhigh(word, value) (BITREPACK((word), value, 21, 4)) +#define RAB_INSTR_RSP_PACK_elementlow(word, value) (BITREPACK((word), value, 7, 4)) + +#define RAB_INSTR_RSP_PACK_index(word, value) (BITREPACK((word), value, 7, 4)) +#define RAB_INSTR_RSP_PACK_offset(word, value) (BITREPACK((word), value, 0, 7)) +#define RAB_INSTR_RSP_PACK_de(word, value) (BITREPACK((word), value, 11, 5)) + + +NON_NULL(1) +void RabbitizerInstructionRsp_init(RabbitizerInstruction *self, uint32_t word, uint32_t vram); +NON_NULL(1) +void RabbitizerInstructionRsp_destroy(RabbitizerInstruction *self); + + +NON_NULL(1) +void RabbitizerInstructionRsp_processUniqueId_Normal(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstructionRsp_processUniqueId_Special(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstructionRsp_processUniqueId_Regimm(RabbitizerInstruction *self); + +NON_NULL(1) +void RabbitizerInstructionRsp_processUniqueId(RabbitizerInstruction *self); + + +NODISCARD NON_NULL(1) PURE +uint16_t RabbitizerInstructionRsp_GetOffsetVector(const RabbitizerInstruction *self); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerOperandType.h b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerOperandType.h new file mode 100644 index 00000000..58c26594 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerOperandType.h @@ -0,0 +1,33 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_OPERAND_TYPE_H +#define RABBITIZER_OPERAND_TYPE_H +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + + +#define RAB_DEF_OPERAND(prefix, operand) \ + RAB_OPERAND_##prefix##_##operand, + +typedef enum RabbitizerOperandType { + RAB_DEF_OPERAND(ALL, INVALID) + +#include "operands/RabbitizerOperandType_cpu.inc" +#include "operands/RabbitizerOperandType_rsp.inc" +#include "operands/RabbitizerOperandType_r5900.inc" + + RAB_DEF_OPERAND(ALL, MAX) +} RabbitizerOperandType; + +#undef RAB_DEF_OPERAND + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerRegister.h b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerRegister.h new file mode 100644 index 00000000..1c6421cd --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/RabbitizerRegister.h @@ -0,0 +1,143 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_REGISTER_H +#define RABBITIZER_REGISTER_H +#pragma once + +#include + +#include "common/Utils.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +#define RABBITIZER_DEF_REG(prefix, name, numeric) \ + RABBITIZER_REG_##prefix##_##name + +#define RABBITIZER_DEF_REG_NODOLLAR(prefix, name, numeric) \ + RABBITIZER_REG_##prefix##_##name + + +typedef enum RabbitizerRegister_GprO32 { + #include "instructions/registers/RabbitizerRegister_GprO32.inc" +} RabbitizerRegister_GprO32; + +typedef enum RabbitizerRegister_GprN32 { + #include "instructions/registers/RabbitizerRegister_GprN32.inc" +} RabbitizerRegister_GprN32; + +typedef enum RabbitizerRegister_Cop0 { + #include "instructions/registers/RabbitizerRegister_Cop0.inc" +} RabbitizerRegister_Cop0; + +// Float registers +typedef enum RabbitizerRegister_Cop1O32 { + #include "instructions/registers/RabbitizerRegister_Cop1O32.inc" +} RabbitizerRegister_Cop1O32; + +typedef enum RabbitizerRegister_Cop1N32 { + #include "instructions/registers/RabbitizerRegister_Cop1N32.inc" +} RabbitizerRegister_Cop1N32; + +typedef enum RabbitizerRegister_Cop1N64 { + #include "instructions/registers/RabbitizerRegister_Cop1N64.inc" +} RabbitizerRegister_Cop1N64; + +typedef enum RabbitizerRegister_Cop1Control { + #include "instructions/registers/RabbitizerRegister_Cop1Control.inc" +} RabbitizerRegister_Cop1Control; + +typedef enum RabbitizerRegister_Cop2 { + #include "instructions/registers/RabbitizerRegister_Cop2.inc" +} RabbitizerRegister_Cop2; + + +/* RSP */ + +typedef enum RabbitizerRegister_RspGpr { + #include "instructions/registers/RabbitizerRegister_RspGpr.inc" +} RabbitizerRegister_RspGpr; + +typedef enum RabbitizerRegister_RspCop0 { + #include "instructions/registers/RabbitizerRegister_RspCop0.inc" +} RabbitizerRegister_RspCop0; + +typedef enum RabbitizerRegister_RspCop2 { + #include "instructions/registers/RabbitizerRegister_RspCop2.inc" +} RabbitizerRegister_RspCop2; + +typedef enum RabbitizerRegister_RspCop2Control { + #include "instructions/registers/RabbitizerRegister_RspCop2Control.inc" +} RabbitizerRegister_RspCop2Control; + +typedef enum RabbitizerRegister_RspVector { + #include "instructions/registers/RabbitizerRegister_RspVector.inc" +} RabbitizerRegister_RspVector; + +/* RSP */ + +/* R5900 */ + +typedef enum RabbitizerRegister_R5900VF { + #include "instructions/registers/RabbitizerRegister_R5900VF.inc" +} RabbitizerRegister_R5900VF; + +typedef enum RabbitizerRegister_R5900VI { + #include "instructions/registers/RabbitizerRegister_R5900VI.inc" +} RabbitizerRegister_R5900VI; + +/* R5900 */ + + +#undef RABBITIZER_DEF_REG +#undef RABBITIZER_DEF_REG_NODOLLAR + + +extern const char *RabbitizerRegister_GprO32_Names[][2]; +extern const char *RabbitizerRegister_GprN32_Names[][2]; +extern const char *RabbitizerRegister_Cop0_Names[][2]; +extern const char *RabbitizerRegister_Cop1O32_Names[][2]; +extern const char *RabbitizerRegister_Cop1N32_Names[][2]; +extern const char *RabbitizerRegister_Cop1N64_Names[][2]; +extern const char *RabbitizerRegister_Cop2_Names[][2]; +extern const char *RabbitizerRegister_RspGpr_Names[][2]; +extern const char *RabbitizerRegister_RspCop0_Names[][2]; +extern const char *RabbitizerRegister_RspVector_Names[][2]; + + +NODISCARD PURE RETURNS_NON_NULL +const char *RabbitizerRegister_getNameGpr(uint8_t regValue); +NODISCARD PURE RETURNS_NON_NULL +const char *RabbitizerRegister_getNameCop0(uint8_t regValue); +NODISCARD PURE RETURNS_NON_NULL +const char *RabbitizerRegister_getNameCop1(uint8_t regValue); +NODISCARD PURE RETURNS_NON_NULL +const char *RabbitizerRegister_getNameCop1Control(uint8_t regValue); +NODISCARD PURE RETURNS_NON_NULL +const char *RabbitizerRegister_getNameCop2(uint8_t regValue); + +NODISCARD PURE RETURNS_NON_NULL +const char *RabbitizerRegister_getNameRspGpr(uint8_t regValue); +NODISCARD PURE RETURNS_NON_NULL +const char *RabbitizerRegister_getNameRspCop0(uint8_t regValue); +NODISCARD PURE RETURNS_NON_NULL +const char *RabbitizerRegister_getNameRspCop2(uint8_t regValue); +NODISCARD PURE RETURNS_NON_NULL +const char *RabbitizerRegister_getNameRspCop2Control(uint8_t regValue); +NODISCARD PURE RETURNS_NON_NULL +const char *RabbitizerRegister_getNameRspVector(uint8_t regValue); + +NODISCARD PURE RETURNS_NON_NULL +const char *RabbitizerRegister_getNameR5900VF(uint8_t regValue); +NODISCARD PURE RETURNS_NON_NULL +const char *RabbitizerRegister_getNameR5900VI(uint8_t regValue); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/RabbitizerInstrId_cpu.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/RabbitizerInstrId_cpu.inc new file mode 100644 index 00000000..dbbb9818 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/RabbitizerInstrId_cpu.inc @@ -0,0 +1,40 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +RABBITIZER_DEF_INSTR_ID(cpu, , INVALID, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate}) + +#include "instructions/instr_id/cpu/cpu_normal.inc" +#include "instructions/instr_id/cpu/cpu_special.inc" +#include "instructions/instr_id/cpu/cpu_regimm.inc" +#include "instructions/instr_id/cpu/cpu_cop0.inc" +#include "instructions/instr_id/cpu/cpu_cop0_bc0.inc" +#include "instructions/instr_id/cpu/cpu_cop0_tlb.inc" +#include "instructions/instr_id/cpu/cpu_cop1.inc" +#include "instructions/instr_id/cpu/cpu_cop1_bc1.inc" +#include "instructions/instr_id/cpu/cpu_cop1_fpu_s.inc" +#include "instructions/instr_id/cpu/cpu_cop1_fpu_d.inc" +#include "instructions/instr_id/cpu/cpu_cop1_fpu_w.inc" +#include "instructions/instr_id/cpu/cpu_cop1_fpu_l.inc" + +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_00, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_01, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_02, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_03, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_04, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_05, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_06, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_07, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_08, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_09, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_10, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_11, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_12, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_13, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_14, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_15, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_16, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_17, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_18, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_19, .operands={0}) + +RABBITIZER_DEF_INSTR_ID(cpu, , MAX, .operands={0}) diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/RabbitizerInstrId_r5900.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/RabbitizerInstrId_r5900.inc new file mode 100644 index 00000000..10f11126 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/RabbitizerInstrId_r5900.inc @@ -0,0 +1,46 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +RABBITIZER_DEF_INSTR_ID(r5900, , INVALID, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .architectureVersion=-1) + +#include "instructions/instr_id/r5900/r5900_normal.inc" +#include "instructions/instr_id/r5900/r5900_special.inc" +#include "instructions/instr_id/r5900/r5900_regimm.inc" + +#include "instructions/instr_id/r5900/r5900_mmi.inc" +#include "instructions/instr_id/r5900/r5900_mmi_0.inc" +#include "instructions/instr_id/r5900/r5900_mmi_1.inc" +#include "instructions/instr_id/r5900/r5900_mmi_2.inc" +#include "instructions/instr_id/r5900/r5900_mmi_3.inc" + +#include "instructions/instr_id/r5900/r5900_cop0_tlb.inc" + +#include "instructions/instr_id/r5900/r5900_cop1_fpu_s.inc" + +#include "instructions/instr_id/r5900/r5900_cop2.inc" +#include "instructions/instr_id/r5900/r5900_cop2_bc2.inc" +#include "instructions/instr_id/r5900/r5900_cop2_special1.inc" +#include "instructions/instr_id/r5900/r5900_cop2_special2.inc" + +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_00, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_01, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_02, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_03, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_04, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_05, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_06, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_07, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_08, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_09, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_10, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_11, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_12, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_13, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_14, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_15, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_16, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_17, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_18, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_19, .operands={0}) + +RABBITIZER_DEF_INSTR_ID(r5900, , MAX, .operands={0}) diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/RabbitizerInstrId_rsp.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/RabbitizerInstrId_rsp.inc new file mode 100644 index 00000000..2fcaa854 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/RabbitizerInstrId_rsp.inc @@ -0,0 +1,41 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// RSP instructions +RABBITIZER_DEF_INSTR_ID(rsp, , INVALID, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) + +#include "instructions/instr_id/rsp/rsp_cop2.inc" +#include "instructions/instr_id/rsp/rsp_cop2_vu.inc" + +#include "instructions/instr_id/rsp/rsp_normal_lwc2.inc" +#include "instructions/instr_id/rsp/rsp_normal_swc2.inc" + +// CPU instructions but with rsp registers + +#include "instructions/instr_id/rsp/rsp_normal.inc" +#include "instructions/instr_id/rsp/rsp_special.inc" +#include "instructions/instr_id/rsp/rsp_regimm.inc" +#include "instructions/instr_id/rsp/rsp_cop0.inc" + +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_00, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_01, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_02, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_03, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_04, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_05, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_06, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_07, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_08, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_09, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_10, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_11, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_12, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_13, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_14, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_15, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_16, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_17, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_18, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_19, .operands={0}) + +RABBITIZER_DEF_INSTR_ID(rsp, , MAX, .operands={0}) diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop0.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop0.inc new file mode 100644 index 00000000..0aa3df49 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop0.inc @@ -0,0 +1,10 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP rt, cop0d +RABBITIZER_DEF_INSTR_ID(cpu, 0x00, mfc0, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .modifiesRt=true, .notEmitedByCompilers=true) // Move word From CP0 +RABBITIZER_DEF_INSTR_ID(cpu, 0x01, dmfc0, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .modifiesRt=true) // Doubleword Move From CP0 +RABBITIZER_DEF_INSTR_ID(cpu, 0x02, cfc0, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .modifiesRt=true) // Move control word From CP0 +RABBITIZER_DEF_INSTR_ID(cpu, 0x04, mtc0, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .notEmitedByCompilers=true) // Move word to CP0 +RABBITIZER_DEF_INSTR_ID(cpu, 0x05, dmtc0, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN) // Doubleword Move To CP0 +RABBITIZER_DEF_INSTR_ID(cpu, 0x06, ctc0, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN) // Move control word To CP0 diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop0_bc0.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop0_bc0.inc new file mode 100644 index 00000000..0165039b --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop0_bc0.inc @@ -0,0 +1,8 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP IMM +RABBITIZER_DEF_INSTR_ID(cpu, 0x00, bc0f, .operands={RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true) // Branch on FP False +RABBITIZER_DEF_INSTR_ID(cpu, 0x01, bc0t, .operands={RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true) // Branch on FP True +RABBITIZER_DEF_INSTR_ID(cpu, 0x02, bc0fl, .operands={RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true, .isBranchLikely=true) // Branch on FP False Likely +RABBITIZER_DEF_INSTR_ID(cpu, 0x03, bc0tl, .operands={RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true, .isBranchLikely=true) // Branch on FP True Likely diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop0_tlb.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop0_tlb.inc new file mode 100644 index 00000000..65b808e3 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop0_tlb.inc @@ -0,0 +1,12 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP +RABBITIZER_DEF_INSTR_ID(cpu, 0x01, tlbr, .operands={0}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .notEmitedByCompilers=true) // Read Indexed TLB Entry +RABBITIZER_DEF_INSTR_ID(cpu, 0x02, tlbwi, .operands={0}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .notEmitedByCompilers=true) // Write Indexed TLB Entry + +RABBITIZER_DEF_INSTR_ID(cpu, 0x06, tlbwr, .operands={0}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN) // Write Random TLB Entry + +RABBITIZER_DEF_INSTR_ID(cpu, 0x08, tlbp, .operands={0}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .notEmitedByCompilers=true) // Probe TLB for Matching Entry + +RABBITIZER_DEF_INSTR_ID(cpu, 0x18, eret, .operands={0}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .notEmitedByCompilers=true) // Return from Exception diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1.inc new file mode 100644 index 00000000..e6defc81 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1.inc @@ -0,0 +1,12 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP rt, fs +RABBITIZER_DEF_INSTR_ID(cpu, 0x00, mfc1, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .modifiesRt=true) // Move Word From Floating-Point +RABBITIZER_DEF_INSTR_ID(cpu, 0x01, dmfc1, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .modifiesRt=true) // Doubleword Move From Floating-Point +RABBITIZER_DEF_INSTR_ID(cpu, 0x04, mtc1, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Move Word to Floating-Point +RABBITIZER_DEF_INSTR_ID(cpu, 0x05, dmtc1, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Doubleword Move To Floating-Point + +// OP rt, cop1cs +RABBITIZER_DEF_INSTR_ID(cpu, 0x02, cfc1, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_cop1cs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .modifiesRt=true) // Move Control Word from Floating-Point +RABBITIZER_DEF_INSTR_ID(cpu, 0x06, ctc1, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_cop1cs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Move Control Word to Floating-Point diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_bc1.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_bc1.inc new file mode 100644 index 00000000..e339cd4d --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_bc1.inc @@ -0,0 +1,8 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP IMM +RABBITIZER_DEF_INSTR_ID(cpu, 0x00, bc1f, .operands={RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true) +RABBITIZER_DEF_INSTR_ID(cpu, 0x01, bc1t, .operands={RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true) +RABBITIZER_DEF_INSTR_ID(cpu, 0x02, bc1fl, .operands={RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true, .isBranchLikely=true) +RABBITIZER_DEF_INSTR_ID(cpu, 0x03, bc1tl, .operands={RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true, .isBranchLikely=true) diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_d.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_d.inc new file mode 100644 index 00000000..a512496c --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_d.inc @@ -0,0 +1,48 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP fd, fs, ft +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x00, add_d, add.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Add +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x01, sub_d, sub.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Sub +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x02, mul_d, mul.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Multiply +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x03, div_d, div.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Divide + +// OP fd, fs +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x04, sqrt_d, sqrt.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Square Root +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x05, abs_d, abs.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Absolute Value +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x06, mov_d, mov.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Move +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x07, neg_d, neg.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Negate + +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x08, round_l_d, round.l.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Round to Long Fixed-Point +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x09, trunc_l_d, trunc.l.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Truncate to Long Fixed-Point +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x0A, ceil_l_d, ceil.l.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Ceiling Convert to Long Fixed-Point +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x0B, floor_l_d, floor.l.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Floor Convert to Long Fixed-Point + +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x0C, round_w_d, round.w.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Round to Word Fixed-Point +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x0D, trunc_w_d, trunc.w.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Truncate to Word Fixed-Point +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x0E, ceil_w_d, ceil.w.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Ceiling Convert to Word Fixed-Point +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x0F, floor_w_d, floor.w.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Floor Convert to Word Fixed-Point + +// OP fd, fs +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x20, cvt_s_d, cvt.s.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x24, cvt_w_d, cvt.w.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x25, cvt_l_d, cvt.l.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true) + +// OP fs, ft +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x30, c_f_d, c.f.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x31, c_un_d, c.un.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x32, c_eq_d, c.eq.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x33, c_ueq_d, c.ueq.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x34, c_olt_d, c.olt.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x35, c_ult_d, c.ult.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x36, c_ole_d, c.ole.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x37, c_ule_d, c.ule.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) + +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x38, c_df_d, c.df.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x39, c_ngle_d, c.ngle.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x3A, c_deq_d, c.deq.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x3B, c_ngl_d, c.ngl.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x3C, c_lt_d, c.lt.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x3D, c_nge_d, c.nge.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x3E, c_le_d, c.le.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x3F, c_ngt_d, c.ngt.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_l.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_l.inc new file mode 100644 index 00000000..48eea054 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_l.inc @@ -0,0 +1,6 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP fd, fs +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x20, cvt_s_l, cvt.s.l, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x21, cvt_d_l, cvt.d.l, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true) diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_s.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_s.inc new file mode 100644 index 00000000..4271429b --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_s.inc @@ -0,0 +1,48 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP fd, fs, ft +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x00, add_s, add.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Add +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x01, sub_s, sub.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Sub +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x02, mul_s, mul.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Multiply +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x03, div_s, div.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Divide + +// OP fd, fs +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x04, sqrt_s, sqrt.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Square Root +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x05, abs_s, abs.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Absolute Value +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x06, mov_s, mov.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Move +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x07, neg_s, neg.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Negate + +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x08, round_l_s, round.l.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Round to Long Fixed-Point +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x09, trunc_l_s, trunc.l.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Truncate to Long Fixed-Point +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x0A, ceil_l_s, ceil.l.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Ceiling Convert to Long Fixed-Point +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x0B, floor_l_s, floor.l.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Floor Convert to Long Fixed-Point + +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x0C, round_w_s, round.w.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Round to Word Fixed-Point +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x0D, trunc_w_s, trunc.w.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Truncate to Word Fixed-Point +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x0E, ceil_w_s, ceil.w.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Ceiling Convert to Word Fixed-Point +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x0F, floor_w_s, floor.w.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Floor Convert to Word Fixed-Point + +// OP fd, fs +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x21, cvt_d_s, cvt.d.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x24, cvt_w_s, cvt.w.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x25, cvt_l_s, cvt.l.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) + +// OP fs, ft +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x30, c_f_s, c.f.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x31, c_un_s, c.un.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x32, c_eq_s, c.eq.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x33, c_ueq_s, c.ueq.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x34, c_olt_s, c.olt.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x35, c_ult_s, c.ult.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x36, c_ole_s, c.ole.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x37, c_ule_s, c.ule.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) + +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x38, c_sf_s, c.sf.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x39, c_ngle_s, c.ngle.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x3A, c_seq_s, c.seq.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x3B, c_ngl_s, c.ngl.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x3C, c_lt_s, c.lt.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x3D, c_nge_s, c.nge.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x3E, c_le_s, c.le.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x3F, c_ngt_s, c.ngt.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_w.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_w.inc new file mode 100644 index 00000000..9d07b6dc --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_w.inc @@ -0,0 +1,6 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP fd, fs +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x20, cvt_s_w, cvt.s.w, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x21, cvt_d_w, cvt.d.w, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true) diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_normal.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_normal.inc new file mode 100644 index 00000000..cc93fa5c --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_normal.inc @@ -0,0 +1,83 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP LABEL +RABBITIZER_DEF_INSTR_ID(cpu, 0x02, j, .operands={RAB_OPERAND_cpu_label}, .instrType=RABBITIZER_INSTR_TYPE_J, .isJump=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Jump +RABBITIZER_DEF_INSTR_ID(cpu, 0x03, jal, .operands={RAB_OPERAND_cpu_label}, .instrType=RABBITIZER_INSTR_TYPE_J, .isJump=true, .doesLink=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Jump And Link + +// OP rs, rt, IMM +RABBITIZER_DEF_INSTR_ID(cpu, 0x04, beq, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_I, .isBranch=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Branch on EQual +RABBITIZER_DEF_INSTR_ID(cpu, 0x05, bne, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_I, .isBranch=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Branch on Not Equal +RABBITIZER_DEF_INSTR_ID(cpu, 0x14, beql, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_I, .isBranch=true, .isBranchLikely=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Branch on EQual Likely +RABBITIZER_DEF_INSTR_ID(cpu, 0x15, bnel, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_I, .isBranch=true, .isBranchLikely=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Branch on Not Equal Likely + +// OP rs, IMM +RABBITIZER_DEF_INSTR_ID(cpu, 0x06, blez, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_I, .isBranch=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Branch on Less than or Equal to Zero +RABBITIZER_DEF_INSTR_ID(cpu, 0x16, blezl, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_I, .isBranch=true, .isBranchLikely=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Branch on Less than or Equal to Zero Likely +RABBITIZER_DEF_INSTR_ID(cpu, 0x07, bgtz, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_I, .isBranch=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Branch on Greater Than Zero +RABBITIZER_DEF_INSTR_ID(cpu, 0x17, bgtzl, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_I, .isBranch=true, .isBranchLikely=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Branch on Greater Than Zero Likely + +// OP rt, rs, IMM +RABBITIZER_DEF_INSTR_ID(cpu, 0x08, addi, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .notEmitedByCompilers=true, .canBeLo=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Add Immediate +RABBITIZER_DEF_INSTR_ID(cpu, 0x09, addiu, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Add Immediate Unsigned Word +RABBITIZER_DEF_INSTR_ID(cpu, 0x0A, slti, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Set on Less Than Immediate +RABBITIZER_DEF_INSTR_ID(cpu, 0x0B, sltiu, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Set on Less Than Immediate Unsigned +RABBITIZER_DEF_INSTR_ID(cpu, 0x0C, andi, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // And Immediate +RABBITIZER_DEF_INSTR_ID(cpu, 0x0D, ori, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true, .canBeLo=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Or Immediate +RABBITIZER_DEF_INSTR_ID(cpu, 0x0E, xori, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // eXclusive OR Immediate +RABBITIZER_DEF_INSTR_ID(cpu, 0x18, daddi, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword add Immediate +RABBITIZER_DEF_INSTR_ID(cpu, 0x19, daddiu, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword add Immediate Unsigned + +// OP rt, IMM +RABBITIZER_DEF_INSTR_ID(cpu, 0x0F, lui, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true, .canBeHi=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Upper Immediate + +// OP rt, IMM(base) +RABBITIZER_DEF_INSTR_ID(cpu, 0x1A, ldl, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Load Doubleword Left +RABBITIZER_DEF_INSTR_ID(cpu, 0x1B, ldr, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Load Doubleword Right +RABBITIZER_DEF_INSTR_ID(cpu, 0x20, lb, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Byte +RABBITIZER_DEF_INSTR_ID(cpu, 0x21, lh, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Halfword +RABBITIZER_DEF_INSTR_ID(cpu, 0x22, lwl, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Word Left +RABBITIZER_DEF_INSTR_ID(cpu, 0x23, lw, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Word +RABBITIZER_DEF_INSTR_ID(cpu, 0x24, lbu, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Byte Insigned +RABBITIZER_DEF_INSTR_ID(cpu, 0x25, lhu, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Halfword Unsigned +RABBITIZER_DEF_INSTR_ID(cpu, 0x26, lwr, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Word Right +RABBITIZER_DEF_INSTR_ID(cpu, 0x27, lwu, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Load Word Unsigned +RABBITIZER_DEF_INSTR_ID(cpu, 0x28, sb, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Store Byte +RABBITIZER_DEF_INSTR_ID(cpu, 0x29, sh, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Store Halfword +RABBITIZER_DEF_INSTR_ID(cpu, 0x2A, swl, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Store Word Left +RABBITIZER_DEF_INSTR_ID(cpu, 0x2B, sw, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Store Word +RABBITIZER_DEF_INSTR_ID(cpu, 0x2C, sdl, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Store Doubleword Left +RABBITIZER_DEF_INSTR_ID(cpu, 0x2D, sdr, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Store Doubleword Right +RABBITIZER_DEF_INSTR_ID(cpu, 0x2E, swr, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Store Word Right +RABBITIZER_DEF_INSTR_ID(cpu, 0x30, ll, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Load Linked word +RABBITIZER_DEF_INSTR_ID(cpu, 0x33, pref, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_IV) // Prefetch +RABBITIZER_DEF_INSTR_ID(cpu, 0x34, lld, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Load Linked Doubleword +RABBITIZER_DEF_INSTR_ID(cpu, 0x37, ld, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Load Doubleword +RABBITIZER_DEF_INSTR_ID(cpu, 0x38, sc, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Store Conditional word +RABBITIZER_DEF_INSTR_ID(cpu, 0x3C, scd, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Store Conditional Doubleword +RABBITIZER_DEF_INSTR_ID(cpu, 0x3F, sd, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Store Doubleword + +// OP op, IMM(base) +RABBITIZER_DEF_INSTR_ID(cpu, 0x2F, cache, .operands={RAB_OPERAND_cpu_op, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .notEmitedByCompilers=true) // Cache + +// OP ft, IMM(base) +RABBITIZER_DEF_INSTR_ID(cpu, 0x31, lwc1, .operands={RAB_OPERAND_cpu_ft, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Word to Coprocessor z +RABBITIZER_DEF_INSTR_ID(cpu, 0x35, ldc1, .operands={RAB_OPERAND_cpu_ft, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true, .isDouble=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Load Doubleword to Coprocessor z +RABBITIZER_DEF_INSTR_ID(cpu, 0x39, swc1, .operands={RAB_OPERAND_cpu_ft, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Store Word from Coprocessor z +RABBITIZER_DEF_INSTR_ID(cpu, 0x3D, sdc1, .operands={RAB_OPERAND_cpu_ft, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true, .isDouble=true, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Store Doubleword from Coprocessor z + +// OP cop2t, IMM(base) +RABBITIZER_DEF_INSTR_ID(cpu, 0x32, lwc2, .operands={RAB_OPERAND_cpu_cop2t, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Word to Coprocessor z +RABBITIZER_DEF_INSTR_ID(cpu, 0x36, ldc2, .operands={RAB_OPERAND_cpu_cop2t, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Load Doubleword to Coprocessor z +RABBITIZER_DEF_INSTR_ID(cpu, 0x3A, swc2, .operands={RAB_OPERAND_cpu_cop2t, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Store Word from Coprocessor z +RABBITIZER_DEF_INSTR_ID(cpu, 0x3E, sdc2, .operands={RAB_OPERAND_cpu_cop2t, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Store Doubleword from Coprocessor z + + +// Pseudo-Instruction Unique IDs + +// OP IMM +RABBITIZER_DEF_INSTR_ID(cpu, -0x03, b, .operands={RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_I, .isBranch=true, .isPseudo=true) // Branch (unconditional) + +// OP rs, IMM +RABBITIZER_DEF_INSTR_ID(cpu, -0x04, beqz, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_I, .isBranch=true, .isPseudo=true) // Branch on EQual Zero +RABBITIZER_DEF_INSTR_ID(cpu, -0x05, bnez, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_I, .isBranch=true, .isPseudo=true) // Branch on Not Equal Zero diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_regimm.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_regimm.inc new file mode 100644 index 00000000..4d47123b --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_regimm.inc @@ -0,0 +1,25 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP rs, IMM +RABBITIZER_DEF_INSTR_ID(cpu, 0x00, bltz, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Branch on Less Than Zero +RABBITIZER_DEF_INSTR_ID(cpu, 0x01, bgez, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Branch on Greater than or Equal to Zero +RABBITIZER_DEF_INSTR_ID(cpu, 0x02, bltzl, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Branch on Less Than Zero Likely +RABBITIZER_DEF_INSTR_ID(cpu, 0x03, bgezl, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Branch on Greater than or Equal to Zero Likely + +RABBITIZER_DEF_INSTR_ID(cpu, 0x08, tgei, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) +RABBITIZER_DEF_INSTR_ID(cpu, 0x09, tgeiu, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) +RABBITIZER_DEF_INSTR_ID(cpu, 0x0A, tlti, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) +RABBITIZER_DEF_INSTR_ID(cpu, 0x0B, tltiu, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) +RABBITIZER_DEF_INSTR_ID(cpu, 0x0C, teqi, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) +RABBITIZER_DEF_INSTR_ID(cpu, 0x0E, tnei, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) + +RABBITIZER_DEF_INSTR_ID(cpu, 0x10, bltzal, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .doesLink=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Branch on Less Than Zero and Link +RABBITIZER_DEF_INSTR_ID(cpu, 0x11, bgezal, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .doesLink=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Branch on Greater Than or Equal to Zero and Link +RABBITIZER_DEF_INSTR_ID(cpu, 0x12, bltzall, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true, .doesLink=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Branch on Less Than Zero and Link Likely +RABBITIZER_DEF_INSTR_ID(cpu, 0x13, bgezall, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true, .doesLink=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Branch on Greater Than or Equal to Zero and Link Likely + + +// Pseudo-Instruction Unique IDs + +RABBITIZER_DEF_INSTR_ID(cpu, -0x11, bal, .operands={RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .doesLink=true, .isPseudo=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Branch and Link diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_special.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_special.inc new file mode 100644 index 00000000..1adb970a --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/cpu/cpu_special.inc @@ -0,0 +1,93 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP rd, rt, sa +RABBITIZER_DEF_INSTR_ID(cpu, 0x00, sll, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Shift word Left Logical +RABBITIZER_DEF_INSTR_ID(cpu, 0x02, srl, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Shift word Right Logical +RABBITIZER_DEF_INSTR_ID(cpu, 0x03, sra, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Shift word Right Arithmetic +RABBITIZER_DEF_INSTR_ID(cpu, 0x38, dsll, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword Shift Left Logical +RABBITIZER_DEF_INSTR_ID(cpu, 0x3A, dsrl, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword Shift Right Logical +RABBITIZER_DEF_INSTR_ID(cpu, 0x3B, dsra, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword Shift Right Arithmetic +RABBITIZER_DEF_INSTR_ID(cpu, 0x3C, dsll32, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword Shift Left Logical plus 32 +RABBITIZER_DEF_INSTR_ID(cpu, 0x3E, dsrl32, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword Shift Right Logical plus 32 +RABBITIZER_DEF_INSTR_ID(cpu, 0x3F, dsra32, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword Shift Right Arithmetic plus 32 + +// OP rd, rt, rs +RABBITIZER_DEF_INSTR_ID(cpu, 0x14, dsllv, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword Shift Left Logical Variable +RABBITIZER_DEF_INSTR_ID(cpu, 0x16, dsrlv, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword Shift Right Logical Variable +RABBITIZER_DEF_INSTR_ID(cpu, 0x17, dsrav, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword Shift Right Arithmetic Variable +RABBITIZER_DEF_INSTR_ID(cpu, 0x04, sllv, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Shift word Left Logical Variable +RABBITIZER_DEF_INSTR_ID(cpu, 0x06, srlv, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Shift word Right Logical Variable +RABBITIZER_DEF_INSTR_ID(cpu, 0x07, srav, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Shift word Right Arithmetic Variable + +// OP rs +RABBITIZER_DEF_INSTR_ID(cpu, 0x11, mthi, .operands={RAB_OPERAND_cpu_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Move To HI register +RABBITIZER_DEF_INSTR_ID(cpu, 0x13, mtlo, .operands={RAB_OPERAND_cpu_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Move To LO register +RABBITIZER_DEF_INSTR_ID(cpu, 0x08, jr, .operands={RAB_OPERAND_cpu_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .isJump=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Jump Register +RABBITIZER_DEF_INSTR_ID(cpu, 0x09, jalr, .operands={RAB_OPERAND_cpu_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .isJump=true, .modifiesRd=true, .doesLink=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Jump And Link Register + +// OP rd, rs +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, -0x09, jalr_rd, jalr, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .isJump=true, .modifiesRd=true, .doesLink=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Jump And Link Register // Special case for rd != 31 + +// OP rd +RABBITIZER_DEF_INSTR_ID(cpu, 0x10, mfhi, .operands={RAB_OPERAND_cpu_rd}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Move From HI register +RABBITIZER_DEF_INSTR_ID(cpu, 0x12, mflo, .operands={RAB_OPERAND_cpu_rd}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Move From LO register + +// OP rd, rs, rt +RABBITIZER_DEF_INSTR_ID(cpu, 0x0A, movz, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_IV) // MOVe conditional on Zero +RABBITIZER_DEF_INSTR_ID(cpu, 0x0B, movn, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_IV) // MOVe conditional on Not zero +RABBITIZER_DEF_INSTR_ID(cpu, 0x1A, div, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // DIVide word +RABBITIZER_DEF_INSTR_ID(cpu, 0x1B, divu, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // DIVide Unsigned word + +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, -0x1A, sn64_div, div, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // DIVide word +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, -0x1B, sn64_divu, divu, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // DIVide Unsigned word + +RABBITIZER_DEF_INSTR_ID(cpu, 0x1E, ddiv, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword DIVide +RABBITIZER_DEF_INSTR_ID(cpu, 0x1F, ddivu, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword DIVide Unsigned +// RABBITIZER_DEF_INSTR_ID(cpu, , ddiv, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) +// RABBITIZER_DEF_INSTR_ID(cpu, , ddivu, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) +RABBITIZER_DEF_INSTR_ID(cpu, 0x20, add, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .notEmitedByCompilers=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // ADD word +RABBITIZER_DEF_INSTR_ID(cpu, 0x21, addu, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .maybeIsMove=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // ADD Unsigned word +RABBITIZER_DEF_INSTR_ID(cpu, 0x22, sub, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Subtract word +RABBITIZER_DEF_INSTR_ID(cpu, 0x23, subu, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // SUBtract Unsigned word +RABBITIZER_DEF_INSTR_ID(cpu, 0x24, and, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // AND +RABBITIZER_DEF_INSTR_ID(cpu, 0x25, or, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .maybeIsMove=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // OR +RABBITIZER_DEF_INSTR_ID(cpu, 0x26, xor, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // eXclusive OR +RABBITIZER_DEF_INSTR_ID(cpu, 0x27, nor, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Not OR +RABBITIZER_DEF_INSTR_ID(cpu, 0x2A, slt, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Set on Less Than +RABBITIZER_DEF_INSTR_ID(cpu, 0x2B, sltu, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Set on Less Than Unsigned +RABBITIZER_DEF_INSTR_ID(cpu, 0x2C, dadd, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword Add +RABBITIZER_DEF_INSTR_ID(cpu, 0x2D, daddu, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .maybeIsMove=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword Add Unsigned +RABBITIZER_DEF_INSTR_ID(cpu, 0x2E, dsub, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword SUBtract +RABBITIZER_DEF_INSTR_ID(cpu, 0x2F, dsubu, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword SUBtract Unsigned + +// OP code +RABBITIZER_DEF_INSTR_ID(cpu, 0x0C, syscall, .operands={RAB_OPERAND_cpu_code}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // SYStem CALL +RABBITIZER_DEF_INSTR_ID(cpu, 0x0D, break, .operands={RAB_OPERAND_cpu_code}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Break +RABBITIZER_DEF_INSTR_ID(cpu, 0x0F, sync, .operands={0}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Sync + +// OP rs, rt +RABBITIZER_DEF_INSTR_ID(cpu, 0x18, mult, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // MULTtiply word +RABBITIZER_DEF_INSTR_ID(cpu, 0x19, multu, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // MULTtiply Unsigned word +RABBITIZER_DEF_INSTR_ID(cpu, 0x1C, dmult, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword MULTiply +RABBITIZER_DEF_INSTR_ID(cpu, 0x1D, dmultu, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword MULTiply Unsigned + +RABBITIZER_DEF_INSTR_ID(cpu, 0x30, tge, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_code_lower}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Trap if Greater or Equal +RABBITIZER_DEF_INSTR_ID(cpu, 0x31, tgeu, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_code_lower}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Trap if Greater or Equal Unsigned +RABBITIZER_DEF_INSTR_ID(cpu, 0x32, tlt, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_code_lower}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Trap if Less Than +RABBITIZER_DEF_INSTR_ID(cpu, 0x33, tltu, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_code_lower}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Trap if Less Than Unsigned +RABBITIZER_DEF_INSTR_ID(cpu, 0x34, teq, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_code_lower}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Trap if EQual +RABBITIZER_DEF_INSTR_ID(cpu, 0x36, tne, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_code_lower}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Trap if Not Equal + + +// Pseudo-Instruction Unique IDs + +// OP +RABBITIZER_DEF_INSTR_ID(cpu, -0x01, nop, .operands={0}, .instrType=RABBITIZER_INSTR_TYPE_R, .isPseudo=true) // No OPeration + +// OP rd, rs +RABBITIZER_DEF_INSTR_ID(cpu, -0x25, move, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .maybeIsMove=true, .isPseudo=true) // Move +RABBITIZER_DEF_INSTR_ID(cpu, -0x27, not, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .isPseudo=true) // Not + +// OP rd, rt +RABBITIZER_DEF_INSTR_ID(cpu, -0x23, negu, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .isPseudo=true) diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_cop0_tlb.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_cop0_tlb.inc new file mode 100644 index 00000000..5173361a --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_cop0_tlb.inc @@ -0,0 +1,23 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31--------26-25------21--------------------------------5--------0 + | = COP0 | TLB | | fmt | + ------6----------5----------------------------------------------- + |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo +000 | --- | TLBR | TLBWI | --- | --- | --- | TLBWR | --- | +001 | TLBP | --- | --- | --- | --- | --- | --- | --- | +010 | --- | --- | --- | --- | --- | --- | --- | --- | +011 | ERET | --- | --- | --- | --- | --- | --- | --- | +100 | --- | --- | --- | --- | --- | --- | --- | --- | +101 | --- | --- | --- | --- | --- | --- | --- | --- | +110 | --- | --- | --- | --- | --- | --- | --- | --- | +111 | EI | DI | --- | --- | --- | --- | --- | --- | + hi |-------|-------|-------|-------|-------|-------|-------|-------| +*/ + +// The other instructions are implemented using the main CPU table + +RABBITIZER_DEF_INSTR_ID(r5900, 0x38, ei, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, 0x39, di, .operands={0}) diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_cop1_fpu_s.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_cop1_fpu_s.inc new file mode 100644 index 00000000..730e7e91 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_cop1_fpu_s.inc @@ -0,0 +1,46 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31--------26-25------21 -------------------------------5--------0 + | = COP1 | = S | | function| + ------6----------5-----------------------------------------6----- + |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo +000 | ADD.S | SUB.S | MUL.S | DIV.S | SQRT.S| ABS.S | MOV.S | NEG.S | +001 | --- | --- | --- | --- | --- | --- | --- | --- | +010 | --- | --- | --- | --- | --- | --- |RSQRT.S| --- | +011 | ADDA.S| SUBA.S| MULA.S| --- | MADD.S| MSUB.S|MADDA.S|MSUBA.S| +100 | --- | --- | --- | --- | CVT.W | --- | --- | --- | +101 | MAX.S | MIN.S | --- | --- | --- | --- | --- | --- | +110 | C.F | --- | C.EQ | --- | C.LT | --- | C.LE | --- | +111 | --- | --- | --- | --- | --- | --- | --- | --- | + hi |-------|-------|-------|-------|-------|-------|-------|-------| +*/ + +// The other instructions are implemented using the main CPU table + +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x04, c1__sqrt_s, c1, .operands={RAB_OPERAND_cpu_copraw}) + +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x16, rsqrt_s, rsqrt.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .isFloat=true) // floating point Reciprocal SQuare RooT + +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x18, adda_s, adda.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .isFloat=true) // floating point ADD to Accumulator +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x19, suba_s, suba.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .isFloat=true) // floating point SUBtract to Accumulator +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x1A, mula_s, mula.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .isFloat=true) // floating point MULtiply to Accumulator + +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x1C, madd_s, madd.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .isFloat=true) // floating point Multiply-ADD +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x1D, msub_s, msub.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .isFloat=true) // floating point Multiply abd SUBtract +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x1E, madda_s, madda.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .isFloat=true) // floating point Multiply-ADD Accumulator +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x1F, msuba_s, msuba.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .isFloat=true) // floating point Multiply SUBtract from Accumulator + +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x28, max_s, max.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .isFloat=true) // floating point MAXimum +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x29, min_s, min.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .isFloat=true) // floating point MINimum + +// Due to the R5900's FPU being non properly complaint the instruction cvt.w.s always behaves as trunc.w.s because is because EE can only do round-to-zero. +// Assemblers like GAS workaround this issue by decoding cvt.w.s as trunc.w.s, so we mimic that behaviour to allow assembling with GAS. +// Here's some reading about the binutils rationale: +// https://sourceware.org/legacy-ml/binutils/2012-11/msg00360.html +// https://sourceware.org/pipermail/binutils/2013-January/079863.html +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x24, trunc_w_s, trunc.w.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .isFloat=true) // Floating-Point Truncate to Word Fixed-Point + +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x34, c_lt_s, c.lt.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x36, c_le_s, c.le.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .isFloat=true) diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2.inc new file mode 100644 index 00000000..fae81904 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2.inc @@ -0,0 +1,21 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31--------26-25------21 ----------------------------------------0 + | = COP2 | fmt | | + ------6----------5----------------------------------------------- + |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo + 00 | --- | QMFC2 | CFC2 | --- | --- | QMTC2 | CTC2 | --- | + 01 | *1 | --- | --- | --- | --- | --- | --- | --- | + 10 | *2 | *2 | *2 | *2 | *2 | *2 | *2 | *2 | + 11 | *2 | *2 | *2 | *2 | *2 | *2 | *2 | *2 | + hi |-------|-------|-------|-------|-------|-------|-------|-------| + *1 = BC instructions, see BC2 list *2 =see special1 table +*/ + +// TODO: properties +RABBITIZER_DEF_INSTR_ID(r5900, 0x01, qmfc2, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_r5900_vfs}) +RABBITIZER_DEF_INSTR_ID(r5900, 0x02, cfc2, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_r5900_vis}) +RABBITIZER_DEF_INSTR_ID(r5900, 0x05, qmtc2, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_r5900_vfs}) +RABBITIZER_DEF_INSTR_ID(r5900, 0x06, ctc2, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_r5900_vis}) diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2_bc2.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2_bc2.inc new file mode 100644 index 00000000..734e0d4f --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2_bc2.inc @@ -0,0 +1,21 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31--------26-25------21-20------16------------------------------0 + | = COP0 | BC2 | fmt | | + ------6----------5----------5------------------------------------ + |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo + 00 | BC2F | BC2T | BC2FL | BC2TL | --- | --- | --- | --- | + 01 | --- | --- | --- | --- | --- | --- | --- | --- | + 10 | --- | --- | --- | --- | --- | --- | --- | --- | + 11 | --- | --- | --- | --- | --- | --- | --- | --- | + hi |-------|-------|-------|-------|-------|-------|-------|-------| +*/ + +// TODO: operands and properties + +RABBITIZER_DEF_INSTR_ID(r5900, 0x00, bc2f, .operands={RAB_OPERAND_cpu_branch_target_label}, .isBranch=true) +RABBITIZER_DEF_INSTR_ID(r5900, 0x01, bc2t, .operands={RAB_OPERAND_cpu_branch_target_label}, .isBranch=true) +RABBITIZER_DEF_INSTR_ID(r5900, 0x02, bc2fl, .operands={RAB_OPERAND_cpu_branch_target_label}, .isBranch=true, .isBranchLikely=true) +RABBITIZER_DEF_INSTR_ID(r5900, 0x03, bc2tl, .operands={RAB_OPERAND_cpu_branch_target_label}, .isBranch=true, .isBranchLikely=true) diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2_special1.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2_special1.inc new file mode 100644 index 00000000..043c911f --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2_special1.inc @@ -0,0 +1,82 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31---------26-25-----21-20-----------------------------5--------0 + | =COP2 | Special1 | |function| + ------6----------5------------------------------------------6---- + |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo +000 |VADDx |VADDy |VADDz |VADDw |VSUBx |VSUBy |VSUBz |VSUBw | +001 |VMADDx |VMADDy |VMADDz |VMADDw |VMSUBx |VMSUBy |VMSUBz |VMSUBw | +010 |VMAXx |VMAXy |VMAXz |VMAXw |VMINIx |VMINIy |VMINIz |VMINIw | +011 |VMULx |VMULy |VMULz |VMULw |VMULq |VMAXi |VMULi |VMINIi | +100 |VADDq |VMADDq |VADDi |VMADDi |VSUBq |VMSUBq |VSUbi |VMSUBi | +101 |VADD |VMADD |VMUL |VMAX |VSUB |VMSUB |VOPMSUB|VMINI | +110 |VIADD |VISUB |VIADDI | --- |VIAND |VIOR | --- | --- | +111 |VCALLMS|VCALLMSR| --- | --- | *1 | *1 | *1 | *1 | + hi |-------|-------|-------|-------|-------|-------|-------|-------| + *1=see special2 table +*/ + +// TODO: properties + +RABBITIZER_DEF_INSTR_ID(r5900, 0x00, vaddx, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // ADD broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x01, vaddy, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // ADD broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x02, vaddz, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // ADD broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x03, vaddw, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // ADD broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x04, vsubx, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // SUBtract broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x05, vsuby, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // SUBtract broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x06, vsubz, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // SUBtract broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x07, vsubw, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // SUBtract broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x08, vmaddx, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-ADD broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x09, vmaddy, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-ADD broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x0A, vmaddz, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-ADD broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x0B, vmaddw, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-ADD broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x0C, vmsubx, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-SUBtract broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x0D, vmsuby, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-SUBtract broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x0E, vmsubz, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-SUBtract broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x0F, vmsubw, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-SUBtract broadcast + +RABBITIZER_DEF_INSTR_ID(r5900, 0x10, vmaxx, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MAXimum broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x11, vmaxy, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MAXimum broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x12, vmaxz, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MAXimum broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x13, vmaxw, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MAXimum broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x14, vminix, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MINimum broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x15, vminiy, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MINimum broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x16, vminiz, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MINimum broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x17, vminiw, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MINimum broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x18, vmulx, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MULtiply broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x19, vmuly, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MULtiply broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x1A, vmulz, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MULtiply broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x1B, vmulw, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MULtiply broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x1C, vmulq, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_Q}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MULtiply Q +RABBITIZER_DEF_INSTR_ID(r5900, 0x1D, vmaxi, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_I}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MAXimum I +RABBITIZER_DEF_INSTR_ID(r5900, 0x1E, vmuli, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_I}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MULtiply I +RABBITIZER_DEF_INSTR_ID(r5900, 0x1F, vminii, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_I}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MINImum I + +RABBITIZER_DEF_INSTR_ID(r5900, 0x20, vaddq, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_Q}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // ADD Q +RABBITIZER_DEF_INSTR_ID(r5900, 0x21, vmaddq, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_Q}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-ADD Q +RABBITIZER_DEF_INSTR_ID(r5900, 0x22, vaddi, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_I}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // ADD I +RABBITIZER_DEF_INSTR_ID(r5900, 0x23, vmaddi, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_I}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-ADD I +RABBITIZER_DEF_INSTR_ID(r5900, 0x24, vsubq, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_Q}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // SUBtract Q +RABBITIZER_DEF_INSTR_ID(r5900, 0x25, vmsubq, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_Q}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-SUBtract Q +RABBITIZER_DEF_INSTR_ID(r5900, 0x26, vsubi, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_I}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // SUBtract I +RABBITIZER_DEF_INSTR_ID(r5900, 0x27, vmsubi, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_I}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-SUBtract I +RABBITIZER_DEF_INSTR_ID(r5900, 0x28, vadd, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // ADD +RABBITIZER_DEF_INSTR_ID(r5900, 0x29, vmadd, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-ADD +RABBITIZER_DEF_INSTR_ID(r5900, 0x2A, vmul, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MULtiply +RABBITIZER_DEF_INSTR_ID(r5900, 0x2B, vmax, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MAXimum +RABBITIZER_DEF_INSTR_ID(r5900, 0x2C, vsub, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // SUBtract +RABBITIZER_DEF_INSTR_ID(r5900, 0x2D, vmsub, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-SUBtract +RABBITIZER_DEF_INSTR_ID(r5900, 0x2E, vopmsub, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Outer product post decrement +RABBITIZER_DEF_INSTR_ID(r5900, 0x2F, vmini, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MINImum + +RABBITIZER_DEF_INSTR_ID(r5900, 0x30, viadd, .operands={RAB_OPERAND_r5900_vid, RAB_OPERAND_r5900_vis, RAB_OPERAND_r5900_vit}) // Integer ADD +RABBITIZER_DEF_INSTR_ID(r5900, 0x31, visub, .operands={RAB_OPERAND_r5900_vid, RAB_OPERAND_r5900_vis, RAB_OPERAND_r5900_vit}) // Integer SUBtract +RABBITIZER_DEF_INSTR_ID(r5900, 0x32, viaddi, .operands={RAB_OPERAND_r5900_vit, RAB_OPERAND_r5900_vis, RAB_OPERAND_r5900_immediate5}) // Integer ADD Immediate +RABBITIZER_DEF_INSTR_ID(r5900, 0x34, viand, .operands={RAB_OPERAND_r5900_vid, RAB_OPERAND_r5900_vis, RAB_OPERAND_r5900_vit}) // Integer AND +RABBITIZER_DEF_INSTR_ID(r5900, 0x35, vior, .operands={RAB_OPERAND_r5900_vid, RAB_OPERAND_r5900_vis, RAB_OPERAND_r5900_vit}) // Integer OR + +// TODO: operands and properties +RABBITIZER_DEF_INSTR_ID(r5900, 0x38, vcallms, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, 0x39, vcallmsr, .operands={RAB_OPERAND_r5900_vis}) diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2_special2.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2_special2.inc new file mode 100644 index 00000000..6558540f --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2_special2.inc @@ -0,0 +1,125 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31---------26-25-----21-20------------------11-10------6-5-2-1--0 + | =COP2 | Special2 | | fhi |1111|flo| + ------6----------5----------------------------------------------- +Note: opcode is flo | (fhi * 4). + |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo +0000 |VADDAx |VADDAy |VADDAz |VADDAw |VSUBAx |VSUBAy |VSUBAz |VSUBAw | +0001 |VMADDAx|VMADDAy|VMADDAz|VMADDAw|VMSUBAx|VMSUBAy|VMSUBAz|VMSUBAw| +0010 |VITOF0 |VITOF4 |VITOF12|VITOF15|VFTOI0 |VFTOI4 |VFTOI12|VFTOI15| +0011 |VMULAx |VMULAy |VMULAz |VMULAw |VMULAq |VABS |VMULAi |VCLIPw | +0100 |VADDAq |VMADDAq|VADDAi |VMADDAi|VSUBAq |VMSUBAq|VSUBAi |VMSUBAi| +0101 |VADDA |VMADDA |VMULA | --- |VSUBA |VMSUBA |VOPMULA|VNOP | +0110 |VMOVE |VMR32 | --- | --- |VLQI |VSQI |VLQD |VSQD | +0111 |VDIV |VSQRT |VRSQRT |VWAITQ |VMTIR |VMFIR |VILWR |VISWR | +1000 |VRNEXT |VRGET |VRINIT |VRXOR | --- | --- | --- | --- | +1001 | --- | --- | --- | --- | --- | --- | --- | --- | +1010 | --- | --- | --- | --- | --- | --- | --- | --- | +1011 | --- | --- | --- | --- | --- | --- | --- | --- | +1100 | --- | --- | --- | --- | --- | --- | --- | --- | +1101 | --- | --- | --- | --- | --- | --- | --- | --- | +1110 | --- | --- | --- | --- | --- | --- | --- | --- | +1111 | --- | --- | --- | --- | --- | --- | --- | --- | + hi |-------|-------|-------|-------|-------|-------|-------|-------| +*/ + +// TODO: operands and properties + +RABBITIZER_DEF_INSTR_ID(r5900, 0x00, vaddax, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Add accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x01, vadday, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Add accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x02, vaddaz, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Add accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x03, vaddaw, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Add accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x04, vsubax, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and substract accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x05, vsubay, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and substract accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x06, vsubaz, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and substract accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x07, vsubaw, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and substract accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x08, vmaddax, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw) // Multiply and add accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x09, vmadday, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw) // Multiply and add accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x0A, vmaddaz, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw) // Multiply and add accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x0B, vmaddaw, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw) // Multiply and add accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x0C, vmsubax, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and substract accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x0D, vmsubay, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and substract accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x0E, vmsubaz, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and substract accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x0F, vmsubaw, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and substract accumulator broadcast + +RABBITIZER_DEF_INSTR_ID(r5900, 0x10, vitof0, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vfsxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Integer to floating point +RABBITIZER_DEF_INSTR_ID(r5900, 0x11, vitof4, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vfsxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Integer to floating point +RABBITIZER_DEF_INSTR_ID(r5900, 0x12, vitof12, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vfsxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Integer to floating point +RABBITIZER_DEF_INSTR_ID(r5900, 0x13, vitof15, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vfsxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Integer to floating point +RABBITIZER_DEF_INSTR_ID(r5900, 0x14, vftoi0, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vfsxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Floating to integer +RABBITIZER_DEF_INSTR_ID(r5900, 0x15, vftoi4, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vfsxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Floating to integer +RABBITIZER_DEF_INSTR_ID(r5900, 0x16, vftoi12, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vfsxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Floating to integer +RABBITIZER_DEF_INSTR_ID(r5900, 0x17, vftoi15, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vfsxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Floating to integer + +RABBITIZER_DEF_INSTR_ID(r5900, 0x18, vmulax, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw) +RABBITIZER_DEF_INSTR_ID(r5900, 0x19, vmulay, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw) +RABBITIZER_DEF_INSTR_ID(r5900, 0x1A, vmulaz, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw) +RABBITIZER_DEF_INSTR_ID(r5900, 0x1B, vmulaw, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw) +// TODO +RABBITIZER_DEF_INSTR_ID(r5900, 0x1C, vmulaq, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_Q}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw) + +RABBITIZER_DEF_INSTR_ID(r5900, 0x1D, vabs, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vfsxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Absolute + +// TODO +RABBITIZER_DEF_INSTR_ID(r5900, 0x1E, vmulai, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_I}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw) + +RABBITIZER_DEF_INSTR_ID(r5900, 0x1F, vclipw, .operands={RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Clip + +RABBITIZER_DEF_INSTR_ID(r5900, 0x20, vaddaq, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_Q}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Add accumulator Q +RABBITIZER_DEF_INSTR_ID(r5900, 0x21, vmaddaq, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_Q}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and add accumulator Q +RABBITIZER_DEF_INSTR_ID(r5900, 0x22, vaddai, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_I}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Add accumulator I +RABBITIZER_DEF_INSTR_ID(r5900, 0x23, vmaddai, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_I}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and add accumulator I +RABBITIZER_DEF_INSTR_ID(r5900, 0x24, vsubaq, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_Q}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Subtract accumulator Q +RABBITIZER_DEF_INSTR_ID(r5900, 0x25, vmsubaq, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_Q}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and Subtract accumulator Q +RABBITIZER_DEF_INSTR_ID(r5900, 0x26, vsubai, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_I}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Subtract accumulator I +RABBITIZER_DEF_INSTR_ID(r5900, 0x27, vmsubai, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_I}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and Subtract accumulator I +RABBITIZER_DEF_INSTR_ID(r5900, 0x28, vadda, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vfsxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Add accumulator +RABBITIZER_DEF_INSTR_ID(r5900, 0x29, vmadda, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and add accumulator + +// TODO +RABBITIZER_DEF_INSTR_ID(r5900, 0x2A, vmula, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw) + +RABBITIZER_DEF_INSTR_ID(r5900, 0x2C, vsuba, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) +RABBITIZER_DEF_INSTR_ID(r5900, 0x2D, vmsuba, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vfsxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and substract accumulator +RABBITIZER_DEF_INSTR_ID(r5900, 0x2E, vopmula, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Outer product pre increment +RABBITIZER_DEF_INSTR_ID(r5900, 0x2F, vnop, .operands={0}) // No operation + +RABBITIZER_DEF_INSTR_ID(r5900, 0x30, vmove, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vfsxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Move floating point registers +RABBITIZER_DEF_INSTR_ID(r5900, 0x31, vmr32, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vfsxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Move and rotate per word +RABBITIZER_DEF_INSTR_ID(r5900, 0x34, vlqi, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vis_postincr}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Load quadraword post increment +RABBITIZER_DEF_INSTR_ID(r5900, 0x35, vsqi, .operands={RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vit_postincr}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Store quadraword post increment +RABBITIZER_DEF_INSTR_ID(r5900, 0x36, vlqd, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vis_predecr}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Load quadraword pre decrement +RABBITIZER_DEF_INSTR_ID(r5900, 0x37, vsqd, .operands={RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vit_predecr}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Store quadraword pre decrement + +RABBITIZER_DEF_INSTR_ID(r5900, 0x38, vdiv, .operands={RAB_OPERAND_r5900_Q, RAB_OPERAND_r5900_vfsl, RAB_OPERAND_r5900_vftm}) +RABBITIZER_DEF_INSTR_ID(r5900, 0x39, vsqrt, .operands={RAB_OPERAND_r5900_Q, RAB_OPERAND_r5900_vftm}) +RABBITIZER_DEF_INSTR_ID(r5900, 0x3A, vrsqrt, .operands={RAB_OPERAND_r5900_Q, RAB_OPERAND_r5900_vfsl,RAB_OPERAND_r5900_vftm}) + +RABBITIZER_DEF_INSTR_ID(r5900, 0x3B, vwaitq, .operands={0}) // Wait Q operation + +RABBITIZER_DEF_INSTR_ID(r5900, 0x3C, vmtir, .operands={RAB_OPERAND_r5900_vit, RAB_OPERAND_r5900_vfsl}) + +RABBITIZER_DEF_INSTR_ID(r5900, 0x3D, vmfir, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vis}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Move from integer register + +RABBITIZER_DEF_INSTR_ID(r5900, 0x3E, vilwr, .operands={RAB_OPERAND_r5900_vit, RAB_OPERAND_r5900_vis}, .isFloat=true, .doesDereference=true, .doesLoad=true) // Integer load word register +RABBITIZER_DEF_INSTR_ID(r5900, 0x3F, viswr, .operands={RAB_OPERAND_r5900_vit, RAB_OPERAND_r5900_vis}, .isFloat=true, .doesDereference=true, .doesStore=true) // Integer store word register +/* +"vilwr.w", RAB_OPERAND_r5900_vit,(RAB_OPERAND_r5900_vis) +"vilwr.x", RAB_OPERAND_r5900_vit,(RAB_OPERAND_r5900_vis) +"vilwr.y", RAB_OPERAND_r5900_vit,(RAB_OPERAND_r5900_vis) +"vilwr.z", RAB_OPERAND_r5900_vit,(RAB_OPERAND_r5900_vis) +"viswr.w", RAB_OPERAND_r5900_vit,(RAB_OPERAND_r5900_vis) +"viswr.x", RAB_OPERAND_r5900_vit,(RAB_OPERAND_r5900_vis) +"viswr.y", RAB_OPERAND_r5900_vit,(RAB_OPERAND_r5900_vis) +"viswr.z", RAB_OPERAND_r5900_vit,(RAB_OPERAND_r5900_vis) +*/ + +RABBITIZER_DEF_INSTR_ID(r5900, 0x40, vrnext, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_R}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // R next +RABBITIZER_DEF_INSTR_ID(r5900, 0x41, vrget, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_R}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // R move + +// TODO +RABBITIZER_DEF_INSTR_ID(r5900, 0x42, vrinit, .operands={RAB_OPERAND_r5900_R, RAB_OPERAND_r5900_vfsl}) +RABBITIZER_DEF_INSTR_ID(r5900, 0x43, vrxor, .operands={RAB_OPERAND_r5900_R, RAB_OPERAND_r5900_vfsl}) diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi.inc new file mode 100644 index 00000000..1cc9bf5c --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi.inc @@ -0,0 +1,49 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31---------26------------------------------------------5--------0 + | = MMI | | function| + ------6----------------------------------------------------6----- + |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo +000 | MADD | MADDU | --- | --- | PLZCW | --- | --- | --- | +001 | *1 | *2 | --- | --- | --- | --- | --- | --- | +010 | MFHI1 | MTHI1 | MFLO1 | MTLO1 | --- | --- | --- | --- | +011 | MULT1 | MULTU1| DIV1 | DIVU1 | --- | --- | --- | --- | +100 | MADD1 | MADDU1| --- | --- | --- | --- | --- | --- | +101 | *3 | *4 | --- | --- | --- | --- | --- | --- | +110 | PMFHL | PMTHL | --- | --- | PSLLH | --- | PSRLH | PSRAH | +111 | --- | --- | --- | --- | PSLLW | --- | PSRLW | PSRAW | + hi |-------|-------|-------|-------|-------|-------|-------|-------| + *1 = MMI0 list *2 = MMI2 list + *3 = MMI1 list *4 = MMI3 list +*/ + +RABBITIZER_DEF_INSTR_ID(r5900, 0x00, madd, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Multiply-ADD word +RABBITIZER_DEF_INSTR_ID(r5900, 0x01, maddu, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Multiply-ADD Unsigned word +RABBITIZER_DEF_INSTR_ID(r5900, 0x04, plzcw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs}, .modifiesRd=true) // Parallel Leading Zero or one Count Word + +RABBITIZER_DEF_INSTR_ID(r5900, 0x10, mfhi1, .operands={RAB_OPERAND_cpu_rd}, .modifiesRd=true) // Move From HI1 register +RABBITIZER_DEF_INSTR_ID(r5900, 0x11, mthi1, .operands={RAB_OPERAND_cpu_rs}) // Move To HI1 register +RABBITIZER_DEF_INSTR_ID(r5900, 0x12, mflo1, .operands={RAB_OPERAND_cpu_rd}) // Move From LO1 register +RABBITIZER_DEF_INSTR_ID(r5900, 0x13, mtlo1, .operands={RAB_OPERAND_cpu_rs}) // Move To LO1 register + +RABBITIZER_DEF_INSTR_ID(r5900, 0x18, mult1, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // MULTiply word pipeline 1 +RABBITIZER_DEF_INSTR_ID(r5900, 0x19, multu1, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // MULTiply Unsigned word pipeline 1 +RABBITIZER_DEF_INSTR_ID(r5900, 0x1A, div1, .operands={RAB_OPERAND_cpu_zero, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}) // DIVide word pipeline 1 +RABBITIZER_DEF_INSTR_ID(r5900, 0x1B, divu1, .operands={RAB_OPERAND_cpu_zero, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}) // DIVide Unsigned word pipeline 1 + +RABBITIZER_DEF_INSTR_ID(r5900, 0x20, madd1, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Multiply-ADD word pipeline 1 +RABBITIZER_DEF_INSTR_ID(r5900, 0x21, maddu1, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Multiply-ADD Unsigned word pipeline 1 + +// TODO: check this two instruction, it is supposed to have an extra .fmt +RABBITIZER_DEF_INSTR_ID(r5900, 0x30, pmfhl, .operands={RAB_OPERAND_cpu_rd}, .modifiesRd=true) // Parallel Move From Hi/Lo register +RABBITIZER_DEF_INSTR_ID(r5900, 0x31, pmthl, .operands={RAB_OPERAND_cpu_rs}) // Parallel Move To Hi/Lo register + +RABBITIZER_DEF_INSTR_ID(r5900, 0x34, psllh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .modifiesRd=true) // Parallel Shift Left Logical Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x36, psrlh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .modifiesRd=true) // Parallel Shift Right Logical Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x37, psrah, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .modifiesRd=true) // Parallel Shift Right Arithmetic Halfword + +RABBITIZER_DEF_INSTR_ID(r5900, 0x3C, psllw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .modifiesRd=true) // Parallel Shift Left Logical Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x3E, psrlw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .modifiesRd=true) // Parallel Shift Right Logical Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x3F, psraw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .modifiesRd=true) // Parallel Shift Right Arithmetic Word diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_0.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_0.inc new file mode 100644 index 00000000..d9203e52 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_0.inc @@ -0,0 +1,50 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31---------26------------------------------10--------6-5--------0 + | | |function | MMI0 | + ------6----------------------------------------------------6----- + |---00--|---01--|---10--|---11--| lo +000 |PADDW | PSUBW | PCGTW | PMAXW | +001 |PADDH | PSUBH | PCGTH | PMAXH | +010 |PADDB | PSUBB | PCGTB | --- | +011 | --- | --- | --- | --- | +100 |PADDSW |PSUBSW |PEXTLW | PPACW | +101 |PADDSH |PSUBSH |PEXTLH | PPACH | +110 |PADDSB |PSUBSB |PEXTLB | PPACB | +111 | --- | --- | PEXT5 | PPAC5 | + hi |-------|-------|-------|-------| +*/ + +RABBITIZER_DEF_INSTR_ID(r5900, 0x00, paddw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel ADD Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x01, psubw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel SUBtract Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x02, pcgtw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Compare for Greater Than Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x03, pmaxw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel MAXimum Word + +RABBITIZER_DEF_INSTR_ID(r5900, 0x04, paddh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel ADD Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x05, psubh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel SUBtract Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x06, pcgth, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Compare for Greater Than Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x07, pmaxh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel MAXimum Halfword + +RABBITIZER_DEF_INSTR_ID(r5900, 0x08, paddb, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel ADD Byte +RABBITIZER_DEF_INSTR_ID(r5900, 0x09, psubb, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel SUBtract Byte +RABBITIZER_DEF_INSTR_ID(r5900, 0x0A, pcgtb, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Compare for Greater Than Byte + +RABBITIZER_DEF_INSTR_ID(r5900, 0x10, paddsw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel ADD with Signed saturation Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x11, psubsw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel SUBtract with Signed saturation Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x12, pextlw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel EXTend Lower from Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x13, ppacw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel PACk to Word + +RABBITIZER_DEF_INSTR_ID(r5900, 0x14, paddsh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel ADD with Signed saturation Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x15, psubsh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel SUBtract with Signed saturation Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x16, pextlh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel EXTend Lower from Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x17, ppach, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel PACk to Halfword + +RABBITIZER_DEF_INSTR_ID(r5900, 0x18, paddsb, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel ADD with Signed saturation Bytes +RABBITIZER_DEF_INSTR_ID(r5900, 0x19, psubsb, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel SUBtract with Signed saturation Bytes +RABBITIZER_DEF_INSTR_ID(r5900, 0x1A, pextlb, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel EXTend Lower from Bytes +RABBITIZER_DEF_INSTR_ID(r5900, 0x1B, ppacb, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel PACk to Bytes + +RABBITIZER_DEF_INSTR_ID(r5900, 0x1E, pext5, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel EXTend from 5-bits +RABBITIZER_DEF_INSTR_ID(r5900, 0x1F, ppac5, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel PACk to 5-bits diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_1.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_1.inc new file mode 100644 index 00000000..64573223 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_1.inc @@ -0,0 +1,43 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31---------26------------------------------------------5--------0 + | | |function | MMI1 | + ------6----------------------------------------------------6----- + |---00--|---01--|---10--|---11--| lo +000 | --- | PABSW | PCEQW | PMINW | +001 |PADSBH | PABSH | PCEQH | PMINH | +010 | --- | --- | PCEQB | --- | +011 | --- | --- | --- | --- | +100 |PADDUW |PSUBUW |PEXTUW | --- | +101 |PADDUH |PSUBUH |PEXTUH | --- | +110 |PADDUB |PSUBUB |PEXTUB | QFSRV | +111 | --- | --- | --- | --- | + hi |-------|-------|-------|-------| +*/ + +// TODO: operands and properties +RABBITIZER_DEF_INSTR_ID(r5900, 0x01, pabsw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel ABSolute Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x02, pceqw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Compare for EQual Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x03, pminw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel MINimum Word + +RABBITIZER_DEF_INSTR_ID(r5900, 0x04, padsbh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel ADd/SuBtract Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x05, pabsh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel ABSolute Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x06, pceqh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Compare for EQual Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x07, pminh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel MINimum Halfword + +RABBITIZER_DEF_INSTR_ID(r5900, 0x0A, pceqb, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Compare for EQual Byte + +RABBITIZER_DEF_INSTR_ID(r5900, 0x10, padduw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel ADD Unsigned saturation Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x11, psubuw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel SUBtract Unsigned saturation Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x12, pextuw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel EXTend Upper from Word + +RABBITIZER_DEF_INSTR_ID(r5900, 0x14, padduh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel ADD Unsigned saturation Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x15, psubuh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel SUBtract Unsigned saturation Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x16, pextuh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel EXTend Upper from Halfword + +RABBITIZER_DEF_INSTR_ID(r5900, 0x18, paddub, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel ADD Unsigned saturation Byte +RABBITIZER_DEF_INSTR_ID(r5900, 0x19, psubub, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel SUBtract Unsigned saturation Byte +RABBITIZER_DEF_INSTR_ID(r5900, 0x1A, pextub, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel EXTend Upper from Byte +RABBITIZER_DEF_INSTR_ID(r5900, 0x1B, qfsrv, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Quadword Funnel Shift Right Variable diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_2.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_2.inc new file mode 100644 index 00000000..a7cd357f --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_2.inc @@ -0,0 +1,48 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31---------26------------------------------------------5--------0 + | | |function | MMI2 | + ------6----------------------------------------------------6----- + |---00--|---01--|---10--|---11--| lo +000 |PMADDW | --- |PSLLVW |PSRLVW | +001 |PMSUBW | --- | --- | --- | +010 |PMFHI |PMFLO |PINTH | --- | +011 |PMULTW |PDIVW |PCPYLD | --- | +100 |PMADDH |PHMADH | PAND | PXOR | +101 |PMSUBH |PHMSBH | --- | --- | +110 | --- | --- | PEXEH | PREVH | +111 |PMULTH |PDIVBW | PEXEW |PROT3W | + hi |-------|-------|-------|-------| +*/ + +RABBITIZER_DEF_INSTR_ID(r5900, 0x00, pmaddw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Multiply-ADD Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x02, psllvw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs}, .modifiesRd=true) // Parallel Shift Left Logical Variable Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x03, psrlvw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs}, .modifiesRd=true) // Parallel Shift Right Logical Variable Word + +RABBITIZER_DEF_INSTR_ID(r5900, 0x04, pmsubw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Multiply-SUBtract Word + +RABBITIZER_DEF_INSTR_ID(r5900, 0x08, pmfhi, .operands={RAB_OPERAND_cpu_rd}, .modifiesRd=true) // Parallel Move From HI register +RABBITIZER_DEF_INSTR_ID(r5900, 0x09, pmflo, .operands={RAB_OPERAND_cpu_rd}, .modifiesRd=true) // Parallel Move From LO register +RABBITIZER_DEF_INSTR_ID(r5900, 0x0A, pinth, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel INTerleave Halfword + +RABBITIZER_DEF_INSTR_ID(r5900, 0x0C, pmultw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel MULTiply Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x0D, pdivw, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}) // Parallel DIVide Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x0E, pcpyld, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel CoPY Lower Doubleword + +RABBITIZER_DEF_INSTR_ID(r5900, 0x10, pmaddh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Multiply-ADD Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x11, phmadh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Horizontal Multiply-ADd Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x12, pand, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel AND +RABBITIZER_DEF_INSTR_ID(r5900, 0x13, pxor, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel eXclusive OR + +RABBITIZER_DEF_INSTR_ID(r5900, 0x14, pmsubh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Multiply-SUBtract Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x15, phmsbh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Horizontal Multiply-Subtract Halfword + +RABBITIZER_DEF_INSTR_ID(r5900, 0x1A, pexeh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel EXchange Even Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x1B, prevh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel REVerse Halfword + +RABBITIZER_DEF_INSTR_ID(r5900, 0x1C, pmulth, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Multiply Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x1D, pdivbw, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel DIVide Broadcast Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x1E, pexew, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel EXchange Even Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x1F, prot3w, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel ROTate 3 Words left diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_3.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_3.inc new file mode 100644 index 00000000..21edadd5 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_3.inc @@ -0,0 +1,37 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31---------26------------------------------------------5--------0 + | | |function | MMI3 | + ------6----------------------------------------------------6----- + |---00--|---01--|---10--|---11--| lo +000 |PMADDUW| --- | --- |PSRAVW | +001 | --- | --- | --- | --- | +010 |PMTHI | PMTLO |PINTEH | --- | +011 |PMULTUW| PDIVUW|PCPYUD | --- | +100 | --- | --- | POR | PNOR | +101 | --- | --- | --- | --- | +110 | --- | --- | PEXCH | PCPYH | +111 | --- | --- | PEXCW | --- | + hi |-------|-------|-------|-------| +*/ + +RABBITIZER_DEF_INSTR_ID(r5900, 0x00, pmadduw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Multiply-ADD Unsigned Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x03, psravw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs}, .modifiesRd=true) // Parallel Shift Right Arithmetic Variable Word + +RABBITIZER_DEF_INSTR_ID(r5900, 0x08, pmthi, .operands={RAB_OPERAND_cpu_rs}) // Parallel Move To HI register +RABBITIZER_DEF_INSTR_ID(r5900, 0x09, pmtlo, .operands={RAB_OPERAND_cpu_rs}) // Parallel Move To LO register +RABBITIZER_DEF_INSTR_ID(r5900, 0x0A, pinteh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel INTerleave Even Halfword + +RABBITIZER_DEF_INSTR_ID(r5900, 0x0C, pmultuw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel MULTiply Unsigned Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x0D, pdivuw, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}) // Prallel DIVide Unsigned Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x0E, pcpyud, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel CoPY Upper Doubleword + +RABBITIZER_DEF_INSTR_ID(r5900, 0x12, por, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel OR +RABBITIZER_DEF_INSTR_ID(r5900, 0x13, pnor, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Not OR + +RABBITIZER_DEF_INSTR_ID(r5900, 0x1A, pexch, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel EXchange Center Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x1B, pcpyh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel CoPY Halfword + +RABBITIZER_DEF_INSTR_ID(r5900, 0x1E, pexcw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel EXchange Center Word diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_normal.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_normal.inc new file mode 100644 index 00000000..d5bd5c23 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_normal.inc @@ -0,0 +1,31 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31---------26---------------------------------------------------0 + | opcode | | + ------6---------------------------------------------------------- + |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo +000 | *1 | *2 | J | JAL | BEQ | BNE | BLEZ | BGTZ | +001 | ADDI | ADDIU | SLTI | SLTIU | ANDI | ORI | XORI | LUI | +010 | *3 | *4 | *5 | --- | BEQL | BNEL | BLEZL | BGTZL | +011 | DADDI |DADDIU | LDL | LDR | *6 | --- | LQ | SQ | +100 | LB | LH | LWL | LW | LBU | LHU | LWR | LWU | +101 | SB | SH | SWL | SW | SDL | SDR | SWR | CACHE | +110 | --- | LWC1 | --- | PREF | --- | --- | LQC2 | LD | +111 | --- | SWC1 | --- | --- | --- | --- | SQC2 | SD | + hi |-------|-------|-------|-------|-------|-------|-------|-------| + *1 = SPECIAL, see SPECIAL list *2 = REGIMM, see REGIMM list + *3 = COP0 *4 = COP1 + *5 = COP2 *6 = MMI table +*/ + +// The other instructions are implemented using the main CPU table + + +RABBITIZER_DEF_INSTR_ID(r5900, 0x1E, lq, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true) // Load Quadword +RABBITIZER_DEF_INSTR_ID(r5900, 0x1F, sq, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true) // Store Quadword + +RABBITIZER_DEF_INSTR_ID(r5900, 0x36, lqc2, .operands={RAB_OPERAND_r5900_vft, RAB_OPERAND_cpu_immediate_base}, .canBeLo=true, .doesDereference=true, .doesLoad=true) + +RABBITIZER_DEF_INSTR_ID(r5900, 0x3E, sqc2, .operands={RAB_OPERAND_r5900_vft, RAB_OPERAND_cpu_immediate_base}, .canBeLo=true, .doesDereference=true, .doesStore=true) diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_regimm.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_regimm.inc new file mode 100644 index 00000000..c1f27a2a --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_regimm.inc @@ -0,0 +1,20 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31---------26----------20-------16------------------------------0 + | = REGIMM | | rt | | + ------6---------------------5------------------------------------ + |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo + 00 | BLTZ | BGEZ | BLTZL | BGEZL | --- | --- | --- | --- | + 01 | TGEI | TGEIU | TLTI | TLTIU | TEQI | --- | TNEI | --- | + 10 | BLTZAL| BGEZAL|BLTZALL|BGEZALL| --- | --- | --- | --- | + 11 | MTSAB | MTSAH | --- | --- | --- | --- | --- | --- | + hi |-------|-------|-------|-------|-------|-------|-------|-------| +*/ + +// The other instructions are implemented using the main CPU table + +// OP rs, IMM +RABBITIZER_DEF_INSTR_ID(r5900, 0x18, mtsab, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM) +RABBITIZER_DEF_INSTR_ID(r5900, 0x19, mtsah, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM) diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_special.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_special.inc new file mode 100644 index 00000000..22e1bb73 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/r5900/r5900_special.inc @@ -0,0 +1,27 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31---------26------------------------------------------5--------0 + | = SPECIAL | | function| + ------6----------------------------------------------------6----- + |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo +000 | SLL | --- | SRL | SRA | SLLV | --- | SRLV | SRAV | +001 | JR | JALR | MOVZ | MOVN |SYSCALL| BREAK | --- | SYNC | +010 | MFHI | MTHI | MFLO | MTLO | DSLLV | --- | DSRLV | DSRAV | +011 | MULT | MULTU | DIV | DIVU | ---- | --- | ---- | ----- | +100 | ADD | ADDU | SUB | SUBU | AND | OR | XOR | NOR | +101 | MFSA | MTSA | SLT | SLTU | DADD | DADDU | DSUB | DSUBU | +110 | TGE | TGEU | TLT | TLTU | TEQ | --- | TNE | --- | +111 | DSLL | --- | DSRL | DSRA |DSLL32 | --- |DSRL32 |DSRA32 | + hi |-------|-------|-------|-------|-------|-------|-------|-------| +*/ + +// The other instructions are implemented using the main CPU table + +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, -0x0F, sync_p, sync.p, .operands={0}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Sync + +RABBITIZER_DEF_INSTR_ID(r5900, 0x18, mult, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // MULTtiply word + +RABBITIZER_DEF_INSTR_ID(r5900, 0x28, mfsa, .operands={RAB_OPERAND_cpu_rd}, .modifiesRd=true) // Move From Shift Amount register +RABBITIZER_DEF_INSTR_ID(r5900, 0x29, mtsa, .operands={RAB_OPERAND_cpu_rs}) // Move To Shift Amount register diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_cop0.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_cop0.inc new file mode 100644 index 00000000..c6c7d0ea --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_cop0.inc @@ -0,0 +1,6 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP rt, cop0d +RABBITIZER_DEF_INSTR_ID(rsp, 0x00, mfc0, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .modifiesRt=true, .notEmitedByCompilers=true) // Move word From CP0 +RABBITIZER_DEF_INSTR_ID(rsp, 0x04, mtc0, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .notEmitedByCompilers=true) // Move word to CP0 diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_cop2.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_cop2.inc new file mode 100644 index 00000000..344891db --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_cop2.inc @@ -0,0 +1,10 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP cop2t, vd[index] +RABBITIZER_DEF_INSTR_ID(rsp, 0x00, mfc2, .operands={RAB_OPERAND_rsp_cop2t, RAB_OPERAND_rsp_vs_index}, .modifiesRt=true) +RABBITIZER_DEF_INSTR_ID(rsp, 0x04, mtc2, .operands={RAB_OPERAND_rsp_cop2t, RAB_OPERAND_rsp_vs_index}) + +// OP rt, cop2cd +RABBITIZER_DEF_INSTR_ID(rsp, 0x02, cfc2, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_rsp_cop2cd}, .modifiesRt=true) +RABBITIZER_DEF_INSTR_ID(rsp, 0x06, ctc2, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_rsp_cop2cd}) diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_cop2_vu.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_cop2_vu.inc new file mode 100644 index 00000000..4a927a59 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_cop2_vu.inc @@ -0,0 +1,53 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP vd, vs, vt[elementhigh] +RABBITIZER_DEF_INSTR_ID(rsp, 0x00, vmulf, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x01, vmulu, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x02, vrndp, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x03, vmulq, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x04, vmudl, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x05, vmudm, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x06, vmudn, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x07, vmudh, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x08, vmacf, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x09, vmacu, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x0A, vrndn, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x0B, vmacq, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x0C, vmadl, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x0D, vmadm, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x0E, vmadn, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x0F, vmadh, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x10, vadd, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x11, vsub, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x13, vabs, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x14, vaddc, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x15, vsubc, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x1D, vsar, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x28, vand, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x29, vnand, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x2A, vor, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x2B, vnor, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x2C, vxor, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x2D, vnxor, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) + +RABBITIZER_DEF_INSTR_ID(rsp, 0x20, vlt, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x21, veq, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x22, vne, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x23, vge, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x24, vcl, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x25, vch, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x26, vcr, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x27, vmrg, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) + +// OP vd[de], vt[elementhigh] +RABBITIZER_DEF_INSTR_ID(rsp, 0x30, vrcp, .operands={RAB_OPERAND_rsp_vd_de, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x31, vrcpl, .operands={RAB_OPERAND_rsp_vd_de, RAB_OPERAND_rsp_vt_elementhigh}) // operands may be wrong +RABBITIZER_DEF_INSTR_ID(rsp, 0x32, vrcph, .operands={RAB_OPERAND_rsp_vd_de, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x33, vmov, .operands={RAB_OPERAND_rsp_vd_de, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x34, vrsq, .operands={RAB_OPERAND_rsp_vd_de, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x35, vrsql, .operands={RAB_OPERAND_rsp_vd_de, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x36, vrsqh, .operands={RAB_OPERAND_rsp_vd_de, RAB_OPERAND_rsp_vt_elementhigh}) + +// OP +RABBITIZER_DEF_INSTR_ID(rsp, 0x37, vnop, .operands={0}) diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_normal.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_normal.inc new file mode 100644 index 00000000..be73f5a0 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_normal.inc @@ -0,0 +1,53 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP LABEL +RABBITIZER_DEF_INSTR_ID(rsp, 0x02, j, .operands={RAB_OPERAND_cpu_label}, .instrType=RABBITIZER_INSTR_TYPE_J, .isJump=true) // Jump +RABBITIZER_DEF_INSTR_ID(rsp, 0x03, jal, .operands={RAB_OPERAND_cpu_label}, .instrType=RABBITIZER_INSTR_TYPE_J, .isJump=true, .doesLink=true) // Jump And Link + +// OP rs, rt, IMM +RABBITIZER_DEF_INSTR_ID(rsp, 0x04, beq, .operands={RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true) // Branch on EQual +RABBITIZER_DEF_INSTR_ID(rsp, 0x05, bne, .operands={RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true) // Branch on Not Equal + +// OP rs, IMM +RABBITIZER_DEF_INSTR_ID(rsp, 0x06, blez, .operands={RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true) // Branch on Less than or Equal to Zero +RABBITIZER_DEF_INSTR_ID(rsp, 0x07, bgtz, .operands={RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true) // Branch on Greater Than Zero + +// OP rt, rs, IMM +RABBITIZER_DEF_INSTR_ID(rsp, 0x08, addi, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .notEmitedByCompilers=true, .canBeLo=true) // Add Immediate +RABBITIZER_DEF_INSTR_ID(rsp, 0x09, addiu, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true) // Add Immediate Unsigned Word +RABBITIZER_DEF_INSTR_ID(rsp, 0x0A, slti, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true) // Set on Less Than Immediate +RABBITIZER_DEF_INSTR_ID(rsp, 0x0B, sltiu, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true) // Set on Less Than Immediate Unsigned +RABBITIZER_DEF_INSTR_ID(rsp, 0x0C, andi, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true) // And Immediate +RABBITIZER_DEF_INSTR_ID(rsp, 0x0D, ori, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true, .canBeLo=true) // Or Immediate +RABBITIZER_DEF_INSTR_ID(rsp, 0x0E, xori, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true) // eXclusive OR Immediate + +// OP rt, IMM +RABBITIZER_DEF_INSTR_ID(rsp, 0x0F, lui, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true, .canBeHi=true) // Load Upper Immediate + +// OP rt, IMM(base) +RABBITIZER_DEF_INSTR_ID(rsp, 0x20, lb, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Byte +RABBITIZER_DEF_INSTR_ID(rsp, 0x21, lh, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Halfword +RABBITIZER_DEF_INSTR_ID(rsp, 0x23, lw, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Word +RABBITIZER_DEF_INSTR_ID(rsp, 0x24, lbu, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Byte Insigned +RABBITIZER_DEF_INSTR_ID(rsp, 0x25, lhu, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Halfword Unsigned +RABBITIZER_DEF_INSTR_ID(rsp, 0x28, sb, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Store Byte +RABBITIZER_DEF_INSTR_ID(rsp, 0x29, sh, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Store Halfword +RABBITIZER_DEF_INSTR_ID(rsp, 0x2B, sw, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Store Word +RABBITIZER_DEF_INSTR_ID(rsp, 0x33, pref, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_IV) // Prefetch + +RABBITIZER_DEF_INSTR_ID(rsp, 0x2F, cache, .operands={RAB_OPERAND_cpu_op, RAB_OPERAND_rsp_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .notEmitedByCompilers=true) // Cache + +// OP ft, IMM(base) +RABBITIZER_DEF_INSTR_ID(rsp, 0x31, lwc1, .operands={RAB_OPERAND_cpu_ft, RAB_OPERAND_rsp_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Word to Coprocessor z +RABBITIZER_DEF_INSTR_ID(rsp, 0x39, swc1, .operands={RAB_OPERAND_cpu_ft, RAB_OPERAND_rsp_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Store Word from Coprocessor z + + +// Pseudo-Instruction Unique IDs + +// OP IMM +RABBITIZER_DEF_INSTR_ID(rsp, -0x03, b, .operands={RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true) // Branch (unconditional) + +// OP rs, IMM +RABBITIZER_DEF_INSTR_ID(rsp, -0x04, beqz, .operands={RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true) // Branch on EQual Zero +RABBITIZER_DEF_INSTR_ID(rsp, -0x05, bnez, .operands={RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true) // Branch on Not Equal Zero diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_normal_lwc2.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_normal_lwc2.inc new file mode 100644 index 00000000..4440fb09 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_normal_lwc2.inc @@ -0,0 +1,15 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP vt[elementlow], offset(vs) +RABBITIZER_DEF_INSTR_ID(rsp, 0x00, lbv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x01, lsv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x02, llv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x03, ldv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x04, lqv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x05, lrv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x06, lpv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x07, luv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x08, lhv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x09, lfv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x0B, ltv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_normal_swc2.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_normal_swc2.inc new file mode 100644 index 00000000..996c69f2 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_normal_swc2.inc @@ -0,0 +1,17 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP vt[elementlow], offset(vs) +RABBITIZER_DEF_INSTR_ID(rsp, 0x00, sbv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x01, ssv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x02, slv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x03, sdv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x04, sqv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x05, srv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x06, spv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x07, suv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x08, shv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x09, sfv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x0B, stv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) + +RABBITIZER_DEF_INSTR_ID(rsp, -0x07, swv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_regimm.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_regimm.inc new file mode 100644 index 00000000..c2132f94 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_regimm.inc @@ -0,0 +1,14 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP rs, IMM +RABBITIZER_DEF_INSTR_ID(rsp, 0x00, bltz, .operands={RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true) // Branch on Less Than Zero +RABBITIZER_DEF_INSTR_ID(rsp, 0x01, bgez, .operands={RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true) // Branch on Greater than or Equal to Zero + +RABBITIZER_DEF_INSTR_ID(rsp, 0x10, bltzal, .operands={RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .doesLink=true) // Branch on Less Than Zero and Link +RABBITIZER_DEF_INSTR_ID(rsp, 0x11, bgezal, .operands={RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .doesLink=true) // Branch on Greater Than or Equal to Zero and Link + + +// Pseudo-Instruction Unique IDs + +RABBITIZER_DEF_INSTR_ID(rsp, -0x11, bal, .operands={RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .doesLink=true, .isPseudo=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Branch and Link diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_special.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_special.inc new file mode 100644 index 00000000..9f12212d --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/instr_id/rsp/rsp_special.inc @@ -0,0 +1,49 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP rd, rt, sa +RABBITIZER_DEF_INSTR_ID(rsp, 0x00, sll, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rt, RAB_OPERAND_cpu_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // Shift word Left Logical +RABBITIZER_DEF_INSTR_ID(rsp, 0x02, srl, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rt, RAB_OPERAND_cpu_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // Shift word Right Logical +RABBITIZER_DEF_INSTR_ID(rsp, 0x03, sra, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rt, RAB_OPERAND_cpu_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // Shift word Right Arithmetic + +// OP rd, rt, rs +RABBITIZER_DEF_INSTR_ID(rsp, 0x04, sllv, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // Shift word Left Logical Variable +RABBITIZER_DEF_INSTR_ID(rsp, 0x06, srlv, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // Shift word Right Logical Variable +RABBITIZER_DEF_INSTR_ID(rsp, 0x07, srav, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // Shift word Right Arithmetic Variable + +// OP rs +RABBITIZER_DEF_INSTR_ID(rsp, 0x08, jr, .operands={RAB_OPERAND_rsp_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .isJump=true) // Jump Register +RABBITIZER_DEF_INSTR_ID(rsp, 0x09, jalr, .operands={RAB_OPERAND_rsp_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .isJump=true, .modifiesRd=true, .doesLink=true) // Jump And Link Register + +// OP rd, rs +RABBITIZER_DEF_INSTR_ID_ALTNAME(rsp, -0x09, jalr_rd, jalr, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .isJump=true, .modifiesRd=true, .doesLink=true) // Jump And Link Register // Special case for rd != 31 + +// OP rd, rs, rt +RABBITIZER_DEF_INSTR_ID(rsp, 0x0A, movz, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // MOVe conditional on Zero +RABBITIZER_DEF_INSTR_ID(rsp, 0x0B, movn, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // MOVe conditional on Not zero + +RABBITIZER_DEF_INSTR_ID(rsp, 0x20, add, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .notEmitedByCompilers=true) // ADD word +RABBITIZER_DEF_INSTR_ID(rsp, 0x21, addu, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // ADD Unsigned word +RABBITIZER_DEF_INSTR_ID(rsp, 0x22, sub, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // Subtract word +RABBITIZER_DEF_INSTR_ID(rsp, 0x23, subu, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // SUBtract Unsigned word +RABBITIZER_DEF_INSTR_ID(rsp, 0x24, and, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // AND +RABBITIZER_DEF_INSTR_ID(rsp, 0x25, or, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // OR +RABBITIZER_DEF_INSTR_ID(rsp, 0x26, xor, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // eXclusive OR +RABBITIZER_DEF_INSTR_ID(rsp, 0x27, nor, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // Not OR +RABBITIZER_DEF_INSTR_ID(rsp, 0x2A, slt, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // Set on Less Than +RABBITIZER_DEF_INSTR_ID(rsp, 0x2B, sltu, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // Set on Less Than Unsigned + +// OP code +RABBITIZER_DEF_INSTR_ID(rsp, 0x0D, break, .operands={RAB_OPERAND_cpu_code}, .instrType=RABBITIZER_INSTR_TYPE_R) // Break + + +// Pseudo-Instruction Unique IDs +// OP +RABBITIZER_DEF_INSTR_ID(rsp, -0x01, nop, .operands={0}, .instrType=RABBITIZER_INSTR_TYPE_R) // No OPeration + +// OP rd, rs +RABBITIZER_DEF_INSTR_ID(rsp, -0x25, move, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // Move +RABBITIZER_DEF_INSTR_ID(rsp, -0x27, not, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // Not + +// OP rd, rt +RABBITIZER_DEF_INSTR_ID(rsp, -0x23, negu, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/operands/RabbitizerOperandType_cpu.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/operands/RabbitizerOperandType_cpu.inc new file mode 100644 index 00000000..bb863366 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/operands/RabbitizerOperandType_cpu.inc @@ -0,0 +1,25 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +RAB_DEF_OPERAND(cpu, rs) +RAB_DEF_OPERAND(cpu, rt) +RAB_DEF_OPERAND(cpu, rd) +RAB_DEF_OPERAND(cpu, sa) +RAB_DEF_OPERAND(cpu, zero) // $zero +// RAB_DEF_OPERAND(cpu, function) +RAB_DEF_OPERAND(cpu, cop0d) +RAB_DEF_OPERAND(cpu, fs) +RAB_DEF_OPERAND(cpu, ft) +RAB_DEF_OPERAND(cpu, fd) +RAB_DEF_OPERAND(cpu, cop1cs) // Coprocessor 1 control fs +RAB_DEF_OPERAND(cpu, cop2t) +RAB_DEF_OPERAND(cpu, op) +RAB_DEF_OPERAND(cpu, code) +RAB_DEF_OPERAND(cpu, code_lower) +RAB_DEF_OPERAND(cpu, copraw) +RAB_DEF_OPERAND(cpu, label) +RAB_DEF_OPERAND(cpu, immediate) +RAB_DEF_OPERAND(cpu, branch_target_label) + +// composed/aliased operands +RAB_DEF_OPERAND(cpu, immediate_base) diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/operands/RabbitizerOperandType_r5900.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/operands/RabbitizerOperandType_r5900.inc new file mode 100644 index 00000000..36cb6efc --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/operands/RabbitizerOperandType_r5900.inc @@ -0,0 +1,33 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +RAB_DEF_OPERAND(r5900, I) +RAB_DEF_OPERAND(r5900, Q) +RAB_DEF_OPERAND(r5900, R) +RAB_DEF_OPERAND(r5900, ACC) +RAB_DEF_OPERAND(r5900, ACCxyzw) +RAB_DEF_OPERAND(r5900, vfs) +RAB_DEF_OPERAND(r5900, vft) +RAB_DEF_OPERAND(r5900, vfd) +RAB_DEF_OPERAND(r5900, vfsxyzw) +RAB_DEF_OPERAND(r5900, vftxyzw) +RAB_DEF_OPERAND(r5900, vfdxyzw) +RAB_DEF_OPERAND(r5900, vfsn) +RAB_DEF_OPERAND(r5900, vftn) +RAB_DEF_OPERAND(r5900, vfdn) +RAB_DEF_OPERAND(r5900, vfsl) +RAB_DEF_OPERAND(r5900, vftl) +RAB_DEF_OPERAND(r5900, vfdl) +RAB_DEF_OPERAND(r5900, vfsm) +RAB_DEF_OPERAND(r5900, vftm) +RAB_DEF_OPERAND(r5900, vfdm) +RAB_DEF_OPERAND(r5900, vis) +RAB_DEF_OPERAND(r5900, vit) +RAB_DEF_OPERAND(r5900, vid) +RAB_DEF_OPERAND(r5900, vis_predecr) +RAB_DEF_OPERAND(r5900, vit_predecr) +RAB_DEF_OPERAND(r5900, vid_predecr) +RAB_DEF_OPERAND(r5900, vis_postincr) +RAB_DEF_OPERAND(r5900, vit_postincr) +RAB_DEF_OPERAND(r5900, vid_postincr) +RAB_DEF_OPERAND(r5900, immediate5) diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/operands/RabbitizerOperandType_rsp.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/operands/RabbitizerOperandType_rsp.inc new file mode 100644 index 00000000..7bae435d --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/operands/RabbitizerOperandType_rsp.inc @@ -0,0 +1,24 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +RAB_DEF_OPERAND(rsp, rs) +RAB_DEF_OPERAND(rsp, rt) +RAB_DEF_OPERAND(rsp, rd) +RAB_DEF_OPERAND(rsp, cop0d) +RAB_DEF_OPERAND(rsp, cop2t) +RAB_DEF_OPERAND(rsp, cop2cd) // Coprocessor 2 control rd +RAB_DEF_OPERAND(rsp, vs) +RAB_DEF_OPERAND(rsp, vt) +RAB_DEF_OPERAND(rsp, vd) +// RAB_DEF_OPERAND(rsp, elementhigh) +// RAB_DEF_OPERAND(rsp, elementlow) +// RAB_DEF_OPERAND(rsp, index) +// RAB_DEF_OPERAND(rsp, offset) + +// composed/aliased operands +RAB_DEF_OPERAND(rsp, vt_elementhigh) +RAB_DEF_OPERAND(rsp, vt_elementlow) +RAB_DEF_OPERAND(rsp, vd_de) +RAB_DEF_OPERAND(rsp, vs_index) +RAB_DEF_OPERAND(rsp, offset_rs) +RAB_DEF_OPERAND(rsp, immediate_base) diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop0.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop0.inc new file mode 100644 index 00000000..9d3d63d2 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop0.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + + RABBITIZER_DEF_REG_NODOLLAR(COP0, Index, 0), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Random, 1), + RABBITIZER_DEF_REG_NODOLLAR(COP0, EntryLo0, 2), + RABBITIZER_DEF_REG_NODOLLAR(COP0, EntryLo1, 3), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Context, 4), + RABBITIZER_DEF_REG_NODOLLAR(COP0, PageMask, 5), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Wired, 6), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Reserved07, 7), + RABBITIZER_DEF_REG_NODOLLAR(COP0, BadVaddr, 8), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Count, 9), + RABBITIZER_DEF_REG_NODOLLAR(COP0, EntryHi, 10), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Compare, 11), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Status, 12), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Cause, 13), + RABBITIZER_DEF_REG_NODOLLAR(COP0, EPC, 14), + RABBITIZER_DEF_REG_NODOLLAR(COP0, PRevID, 15), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Config, 16), + RABBITIZER_DEF_REG_NODOLLAR(COP0, LLAddr, 17), + RABBITIZER_DEF_REG_NODOLLAR(COP0, WatchLo, 18), + RABBITIZER_DEF_REG_NODOLLAR(COP0, WatchHi, 19), + RABBITIZER_DEF_REG_NODOLLAR(COP0, XContext, 20), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Reserved21, 21), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Reserved22, 22), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Reserved23, 23), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Reserved24, 24), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Reserved25, 25), + RABBITIZER_DEF_REG_NODOLLAR(COP0, PErr, 26), + RABBITIZER_DEF_REG_NODOLLAR(COP0, CacheErr, 27), + RABBITIZER_DEF_REG_NODOLLAR(COP0, TagLo, 28), + RABBITIZER_DEF_REG_NODOLLAR(COP0, TagHi, 29), + RABBITIZER_DEF_REG_NODOLLAR(COP0, ErrorEPC, 30), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Reserved31, 31), diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1Control.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1Control.inc new file mode 100644 index 00000000..cad6bde5 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1Control.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + + RABBITIZER_DEF_REG(COP1_CONTROL, 0, 0), + RABBITIZER_DEF_REG(COP1_CONTROL, 1, 1), + RABBITIZER_DEF_REG(COP1_CONTROL, 2, 2), + RABBITIZER_DEF_REG(COP1_CONTROL, 3, 3), + RABBITIZER_DEF_REG(COP1_CONTROL, 4, 4), + RABBITIZER_DEF_REG(COP1_CONTROL, 5, 5), + RABBITIZER_DEF_REG(COP1_CONTROL, 6, 6), + RABBITIZER_DEF_REG(COP1_CONTROL, 7, 7), + RABBITIZER_DEF_REG(COP1_CONTROL, 8, 8), + RABBITIZER_DEF_REG(COP1_CONTROL, 9, 9), + RABBITIZER_DEF_REG(COP1_CONTROL, 10, 10), + RABBITIZER_DEF_REG(COP1_CONTROL, 11, 11), + RABBITIZER_DEF_REG(COP1_CONTROL, 12, 12), + RABBITIZER_DEF_REG(COP1_CONTROL, 13, 13), + RABBITIZER_DEF_REG(COP1_CONTROL, 14, 14), + RABBITIZER_DEF_REG(COP1_CONTROL, 15, 15), + RABBITIZER_DEF_REG(COP1_CONTROL, 16, 16), + RABBITIZER_DEF_REG(COP1_CONTROL, 17, 17), + RABBITIZER_DEF_REG(COP1_CONTROL, 18, 18), + RABBITIZER_DEF_REG(COP1_CONTROL, 19, 19), + RABBITIZER_DEF_REG(COP1_CONTROL, 20, 20), + RABBITIZER_DEF_REG(COP1_CONTROL, 21, 21), + RABBITIZER_DEF_REG(COP1_CONTROL, 22, 22), + RABBITIZER_DEF_REG(COP1_CONTROL, 23, 23), + RABBITIZER_DEF_REG(COP1_CONTROL, 24, 24), + RABBITIZER_DEF_REG(COP1_CONTROL, 25, 25), + RABBITIZER_DEF_REG(COP1_CONTROL, 26, 26), + RABBITIZER_DEF_REG(COP1_CONTROL, 27, 27), + RABBITIZER_DEF_REG(COP1_CONTROL, 28, 28), + RABBITIZER_DEF_REG(COP1_CONTROL, 29, 29), + RABBITIZER_DEF_REG(COP1_CONTROL, 30, 30), + RABBITIZER_DEF_REG(COP1_CONTROL, FpcCsr, 31), diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1N32.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1N32.inc new file mode 100644 index 00000000..affe4948 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1N32.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + + RABBITIZER_DEF_REG(COP1_N32, fv0, f0), + RABBITIZER_DEF_REG(COP1_N32, ft14, f1), + RABBITIZER_DEF_REG(COP1_N32, fv1, f2), + RABBITIZER_DEF_REG(COP1_N32, ft15, f3), + RABBITIZER_DEF_REG(COP1_N32, ft0, f4), + RABBITIZER_DEF_REG(COP1_N32, ft1, f5), + RABBITIZER_DEF_REG(COP1_N32, ft2, f6), + RABBITIZER_DEF_REG(COP1_N32, ft3, f7), + RABBITIZER_DEF_REG(COP1_N32, ft4, f8), + RABBITIZER_DEF_REG(COP1_N32, ft5, f9), + RABBITIZER_DEF_REG(COP1_N32, ft6, f10), + RABBITIZER_DEF_REG(COP1_N32, ft7, f11), + RABBITIZER_DEF_REG(COP1_N32, fa0, f12), + RABBITIZER_DEF_REG(COP1_N32, fa1, f13), + RABBITIZER_DEF_REG(COP1_N32, fa2, f14), + RABBITIZER_DEF_REG(COP1_N32, fa3, f15), + RABBITIZER_DEF_REG(COP1_N32, fa4, f16), + RABBITIZER_DEF_REG(COP1_N32, fa5, f17), + RABBITIZER_DEF_REG(COP1_N32, fa6, f18), + RABBITIZER_DEF_REG(COP1_N32, fa7, f19), + RABBITIZER_DEF_REG(COP1_N32, fs0, f20), + RABBITIZER_DEF_REG(COP1_N32, ft8, f21), + RABBITIZER_DEF_REG(COP1_N32, fs1, f22), + RABBITIZER_DEF_REG(COP1_N32, ft9, f23), + RABBITIZER_DEF_REG(COP1_N32, fs2, f24), + RABBITIZER_DEF_REG(COP1_N32, ft10, f25), + RABBITIZER_DEF_REG(COP1_N32, fs3, f26), + RABBITIZER_DEF_REG(COP1_N32, ft11, f27), + RABBITIZER_DEF_REG(COP1_N32, fs4, f28), + RABBITIZER_DEF_REG(COP1_N32, ft12, f29), + RABBITIZER_DEF_REG(COP1_N32, fs5, f30), + RABBITIZER_DEF_REG(COP1_N32, ft13, f31), diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1N64.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1N64.inc new file mode 100644 index 00000000..1388c93d --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1N64.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + + RABBITIZER_DEF_REG(COP1_N64, fv0, f0), + RABBITIZER_DEF_REG(COP1_N64, ft12, f1), + RABBITIZER_DEF_REG(COP1_N64, fv1, f2), + RABBITIZER_DEF_REG(COP1_N64, ft13, f3), + RABBITIZER_DEF_REG(COP1_N64, ft0, f4), + RABBITIZER_DEF_REG(COP1_N64, ft1, f5), + RABBITIZER_DEF_REG(COP1_N64, ft2, f6), + RABBITIZER_DEF_REG(COP1_N64, ft3, f7), + RABBITIZER_DEF_REG(COP1_N64, ft4, f8), + RABBITIZER_DEF_REG(COP1_N64, ft5, f9), + RABBITIZER_DEF_REG(COP1_N64, ft6, f10), + RABBITIZER_DEF_REG(COP1_N64, ft7, f11), + RABBITIZER_DEF_REG(COP1_N64, fa0, f12), + RABBITIZER_DEF_REG(COP1_N64, fa1, f13), + RABBITIZER_DEF_REG(COP1_N64, fa2, f14), + RABBITIZER_DEF_REG(COP1_N64, fa3, f15), + RABBITIZER_DEF_REG(COP1_N64, fa4, f16), + RABBITIZER_DEF_REG(COP1_N64, fa5, f17), + RABBITIZER_DEF_REG(COP1_N64, fa6, f18), + RABBITIZER_DEF_REG(COP1_N64, fa7, f19), + RABBITIZER_DEF_REG(COP1_N64, ft8, f20), + RABBITIZER_DEF_REG(COP1_N64, ft9, f21), + RABBITIZER_DEF_REG(COP1_N64, ft10, f22), + RABBITIZER_DEF_REG(COP1_N64, ft11, f23), + RABBITIZER_DEF_REG(COP1_N64, fs0, f24), + RABBITIZER_DEF_REG(COP1_N64, fs1, f25), + RABBITIZER_DEF_REG(COP1_N64, fs2, f26), + RABBITIZER_DEF_REG(COP1_N64, fs3, f27), + RABBITIZER_DEF_REG(COP1_N64, fs4, f28), + RABBITIZER_DEF_REG(COP1_N64, fs5, f29), + RABBITIZER_DEF_REG(COP1_N64, fs6, f30), + RABBITIZER_DEF_REG(COP1_N64, fs7, f31), diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1O32.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1O32.inc new file mode 100644 index 00000000..44ba53e1 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1O32.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + + RABBITIZER_DEF_REG(COP1_O32, fv0, f0), + RABBITIZER_DEF_REG(COP1_O32, fv0f, f1), + RABBITIZER_DEF_REG(COP1_O32, fv1, f2), + RABBITIZER_DEF_REG(COP1_O32, fv1f, f3), + RABBITIZER_DEF_REG(COP1_O32, ft0, f4), + RABBITIZER_DEF_REG(COP1_O32, ft0f, f5), + RABBITIZER_DEF_REG(COP1_O32, ft1, f6), + RABBITIZER_DEF_REG(COP1_O32, ft1f, f7), + RABBITIZER_DEF_REG(COP1_O32, ft2, f8), + RABBITIZER_DEF_REG(COP1_O32, ft2f, f9), + RABBITIZER_DEF_REG(COP1_O32, ft3, f10), + RABBITIZER_DEF_REG(COP1_O32, ft3f, f11), + RABBITIZER_DEF_REG(COP1_O32, fa0, f12), + RABBITIZER_DEF_REG(COP1_O32, fa0f, f13), + RABBITIZER_DEF_REG(COP1_O32, fa1, f14), + RABBITIZER_DEF_REG(COP1_O32, fa1f, f15), + RABBITIZER_DEF_REG(COP1_O32, ft4, f16), + RABBITIZER_DEF_REG(COP1_O32, ft4f, f17), + RABBITIZER_DEF_REG(COP1_O32, ft5, f18), + RABBITIZER_DEF_REG(COP1_O32, ft5f, f19), + RABBITIZER_DEF_REG(COP1_O32, fs0, f20), + RABBITIZER_DEF_REG(COP1_O32, fs0f, f21), + RABBITIZER_DEF_REG(COP1_O32, fs1, f22), + RABBITIZER_DEF_REG(COP1_O32, fs1f, f23), + RABBITIZER_DEF_REG(COP1_O32, fs2, f24), + RABBITIZER_DEF_REG(COP1_O32, fs2f, f25), + RABBITIZER_DEF_REG(COP1_O32, fs3, f26), + RABBITIZER_DEF_REG(COP1_O32, fs3f, f27), + RABBITIZER_DEF_REG(COP1_O32, fs4, f28), + RABBITIZER_DEF_REG(COP1_O32, fs4f, f29), + RABBITIZER_DEF_REG(COP1_O32, fs5, f30), + RABBITIZER_DEF_REG(COP1_O32, fs5f, f31), diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop2.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop2.inc new file mode 100644 index 00000000..84e40f32 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop2.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + + RABBITIZER_DEF_REG(COP2, 0, 0), + RABBITIZER_DEF_REG(COP2, 1, 1), + RABBITIZER_DEF_REG(COP2, 2, 2), + RABBITIZER_DEF_REG(COP2, 3, 3), + RABBITIZER_DEF_REG(COP2, 4, 4), + RABBITIZER_DEF_REG(COP2, 5, 5), + RABBITIZER_DEF_REG(COP2, 6, 6), + RABBITIZER_DEF_REG(COP2, 7, 7), + RABBITIZER_DEF_REG(COP2, 8, 8), + RABBITIZER_DEF_REG(COP2, 9, 9), + RABBITIZER_DEF_REG(COP2, 10, 10), + RABBITIZER_DEF_REG(COP2, 11, 11), + RABBITIZER_DEF_REG(COP2, 12, 12), + RABBITIZER_DEF_REG(COP2, 13, 13), + RABBITIZER_DEF_REG(COP2, 14, 14), + RABBITIZER_DEF_REG(COP2, 15, 15), + RABBITIZER_DEF_REG(COP2, 16, 16), + RABBITIZER_DEF_REG(COP2, 17, 17), + RABBITIZER_DEF_REG(COP2, 18, 18), + RABBITIZER_DEF_REG(COP2, 19, 19), + RABBITIZER_DEF_REG(COP2, 20, 20), + RABBITIZER_DEF_REG(COP2, 21, 21), + RABBITIZER_DEF_REG(COP2, 22, 22), + RABBITIZER_DEF_REG(COP2, 23, 23), + RABBITIZER_DEF_REG(COP2, 24, 24), + RABBITIZER_DEF_REG(COP2, 25, 25), + RABBITIZER_DEF_REG(COP2, 26, 26), + RABBITIZER_DEF_REG(COP2, 27, 27), + RABBITIZER_DEF_REG(COP2, 28, 28), + RABBITIZER_DEF_REG(COP2, 29, 29), + RABBITIZER_DEF_REG(COP2, 30, 30), + RABBITIZER_DEF_REG(COP2, 31, 31), diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_GprN32.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_GprN32.inc new file mode 100644 index 00000000..a937136b --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_GprN32.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + + RABBITIZER_DEF_REG(GPR_N32, zero, 0), + RABBITIZER_DEF_REG(GPR_N32, at, 1), + RABBITIZER_DEF_REG(GPR_N32, v0, 2), + RABBITIZER_DEF_REG(GPR_N32, v1, 3), + RABBITIZER_DEF_REG(GPR_N32, a0, 4), + RABBITIZER_DEF_REG(GPR_N32, a1, 5), + RABBITIZER_DEF_REG(GPR_N32, a2, 6), + RABBITIZER_DEF_REG(GPR_N32, a3, 7), + RABBITIZER_DEF_REG(GPR_N32, a4, 8), + RABBITIZER_DEF_REG(GPR_N32, a5, 9), + RABBITIZER_DEF_REG(GPR_N32, a6, 10), + RABBITIZER_DEF_REG(GPR_N32, a7, 11), + RABBITIZER_DEF_REG(GPR_N32, t0, 12), + RABBITIZER_DEF_REG(GPR_N32, t1, 13), + RABBITIZER_DEF_REG(GPR_N32, t2, 14), + RABBITIZER_DEF_REG(GPR_N32, t3, 15), + RABBITIZER_DEF_REG(GPR_N32, s0, 16), + RABBITIZER_DEF_REG(GPR_N32, s1, 17), + RABBITIZER_DEF_REG(GPR_N32, s2, 18), + RABBITIZER_DEF_REG(GPR_N32, s3, 19), + RABBITIZER_DEF_REG(GPR_N32, s4, 20), + RABBITIZER_DEF_REG(GPR_N32, s5, 21), + RABBITIZER_DEF_REG(GPR_N32, s6, 22), + RABBITIZER_DEF_REG(GPR_N32, s7, 23), + RABBITIZER_DEF_REG(GPR_N32, t8, 24), + RABBITIZER_DEF_REG(GPR_N32, t9, 25), + RABBITIZER_DEF_REG(GPR_N32, k0, 26), + RABBITIZER_DEF_REG(GPR_N32, k1, 27), + RABBITIZER_DEF_REG(GPR_N32, gp, 28), + RABBITIZER_DEF_REG(GPR_N32, sp, 29), + RABBITIZER_DEF_REG(GPR_N32, fp, 30), + RABBITIZER_DEF_REG(GPR_N32, ra, 31), diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_GprO32.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_GprO32.inc new file mode 100644 index 00000000..26685fe5 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_GprO32.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + + RABBITIZER_DEF_REG(GPR_O32, zero, 0), + RABBITIZER_DEF_REG(GPR_O32, at, 1), + RABBITIZER_DEF_REG(GPR_O32, v0, 2), + RABBITIZER_DEF_REG(GPR_O32, v1, 3), + RABBITIZER_DEF_REG(GPR_O32, a0, 4), + RABBITIZER_DEF_REG(GPR_O32, a1, 5), + RABBITIZER_DEF_REG(GPR_O32, a2, 6), + RABBITIZER_DEF_REG(GPR_O32, a3, 7), + RABBITIZER_DEF_REG(GPR_O32, t0, 8), + RABBITIZER_DEF_REG(GPR_O32, t1, 9), + RABBITIZER_DEF_REG(GPR_O32, t2, 10), + RABBITIZER_DEF_REG(GPR_O32, t3, 11), + RABBITIZER_DEF_REG(GPR_O32, t4, 12), + RABBITIZER_DEF_REG(GPR_O32, t5, 13), + RABBITIZER_DEF_REG(GPR_O32, t6, 14), + RABBITIZER_DEF_REG(GPR_O32, t7, 15), + RABBITIZER_DEF_REG(GPR_O32, s0, 16), + RABBITIZER_DEF_REG(GPR_O32, s1, 17), + RABBITIZER_DEF_REG(GPR_O32, s2, 18), + RABBITIZER_DEF_REG(GPR_O32, s3, 19), + RABBITIZER_DEF_REG(GPR_O32, s4, 20), + RABBITIZER_DEF_REG(GPR_O32, s5, 21), + RABBITIZER_DEF_REG(GPR_O32, s6, 22), + RABBITIZER_DEF_REG(GPR_O32, s7, 23), + RABBITIZER_DEF_REG(GPR_O32, t8, 24), + RABBITIZER_DEF_REG(GPR_O32, t9, 25), + RABBITIZER_DEF_REG(GPR_O32, k0, 26), + RABBITIZER_DEF_REG(GPR_O32, k1, 27), + RABBITIZER_DEF_REG(GPR_O32, gp, 28), + RABBITIZER_DEF_REG(GPR_O32, sp, 29), + RABBITIZER_DEF_REG(GPR_O32, fp, 30), + RABBITIZER_DEF_REG(GPR_O32, ra, 31), diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_R5900VF.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_R5900VF.inc new file mode 100644 index 00000000..afb88dd5 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_R5900VF.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +RABBITIZER_DEF_REG(R5900_VF, vf0, 0), +RABBITIZER_DEF_REG(R5900_VF, vf1, 1), +RABBITIZER_DEF_REG(R5900_VF, vf2, 2), +RABBITIZER_DEF_REG(R5900_VF, vf3, 3), +RABBITIZER_DEF_REG(R5900_VF, vf4, 4), +RABBITIZER_DEF_REG(R5900_VF, vf5, 5), +RABBITIZER_DEF_REG(R5900_VF, vf6, 6), +RABBITIZER_DEF_REG(R5900_VF, vf7, 7), +RABBITIZER_DEF_REG(R5900_VF, vf8, 8), +RABBITIZER_DEF_REG(R5900_VF, vf9, 9), +RABBITIZER_DEF_REG(R5900_VF, vf10, 10), +RABBITIZER_DEF_REG(R5900_VF, vf11, 11), +RABBITIZER_DEF_REG(R5900_VF, vf12, 12), +RABBITIZER_DEF_REG(R5900_VF, vf13, 13), +RABBITIZER_DEF_REG(R5900_VF, vf14, 14), +RABBITIZER_DEF_REG(R5900_VF, vf15, 15), +RABBITIZER_DEF_REG(R5900_VF, vf16, 16), +RABBITIZER_DEF_REG(R5900_VF, vf17, 17), +RABBITIZER_DEF_REG(R5900_VF, vf18, 18), +RABBITIZER_DEF_REG(R5900_VF, vf19, 19), +RABBITIZER_DEF_REG(R5900_VF, vf20, 20), +RABBITIZER_DEF_REG(R5900_VF, vf21, 21), +RABBITIZER_DEF_REG(R5900_VF, vf22, 22), +RABBITIZER_DEF_REG(R5900_VF, vf23, 23), +RABBITIZER_DEF_REG(R5900_VF, vf24, 24), +RABBITIZER_DEF_REG(R5900_VF, vf25, 25), +RABBITIZER_DEF_REG(R5900_VF, vf26, 26), +RABBITIZER_DEF_REG(R5900_VF, vf27, 27), +RABBITIZER_DEF_REG(R5900_VF, vf28, 28), +RABBITIZER_DEF_REG(R5900_VF, vf29, 29), +RABBITIZER_DEF_REG(R5900_VF, vf30, 30), +RABBITIZER_DEF_REG(R5900_VF, vf31, 31), diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_R5900VI.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_R5900VI.inc new file mode 100644 index 00000000..3e8e9f82 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_R5900VI.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +RABBITIZER_DEF_REG(R5900_VI, vi0, 0), +RABBITIZER_DEF_REG(R5900_VI, vi1, 1), +RABBITIZER_DEF_REG(R5900_VI, vi2, 2), +RABBITIZER_DEF_REG(R5900_VI, vi3, 3), +RABBITIZER_DEF_REG(R5900_VI, vi4, 4), +RABBITIZER_DEF_REG(R5900_VI, vi5, 5), +RABBITIZER_DEF_REG(R5900_VI, vi6, 6), +RABBITIZER_DEF_REG(R5900_VI, vi7, 7), +RABBITIZER_DEF_REG(R5900_VI, vi8, 8), +RABBITIZER_DEF_REG(R5900_VI, vi9, 9), +RABBITIZER_DEF_REG(R5900_VI, vi10, 10), +RABBITIZER_DEF_REG(R5900_VI, vi11, 11), +RABBITIZER_DEF_REG(R5900_VI, vi12, 12), +RABBITIZER_DEF_REG(R5900_VI, vi13, 13), +RABBITIZER_DEF_REG(R5900_VI, vi14, 14), +RABBITIZER_DEF_REG(R5900_VI, vi15, 15), +RABBITIZER_DEF_REG(R5900_VI, vi16, 16), +RABBITIZER_DEF_REG(R5900_VI, vi17, 17), +RABBITIZER_DEF_REG(R5900_VI, vi18, 18), +RABBITIZER_DEF_REG(R5900_VI, vi19, 19), +RABBITIZER_DEF_REG(R5900_VI, vi20, 20), +RABBITIZER_DEF_REG(R5900_VI, vi21, 21), +RABBITIZER_DEF_REG(R5900_VI, vi22, 22), +RABBITIZER_DEF_REG(R5900_VI, vi23, 23), +RABBITIZER_DEF_REG(R5900_VI, vi24, 24), +RABBITIZER_DEF_REG(R5900_VI, vi25, 25), +RABBITIZER_DEF_REG(R5900_VI, vi26, 26), +RABBITIZER_DEF_REG(R5900_VI, vi27, 27), +RABBITIZER_DEF_REG(R5900_VI, vi28, 28), +RABBITIZER_DEF_REG(R5900_VI, vi29, 29), +RABBITIZER_DEF_REG(R5900_VI, vi30, 30), +RABBITIZER_DEF_REG(R5900_VI, vi31, 31), diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_RspCop0.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_RspCop0.inc new file mode 100644 index 00000000..fdac94d1 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_RspCop0.inc @@ -0,0 +1,19 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, SP_MEM_ADDR, 0), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, SP_DRAM_ADDR, 1), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, SP_RD_LEN, 2), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, SP_WR_LEN, 3), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, SP_STATUS, 4), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, SP_DMA_FULL, 5), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, SP_DMA_BUSY, 6), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, SP_SEMAPHORE, 7), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, DPC_START, 8), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, DPC_END, 9), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, DPC_CURRENT, 10), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, DPC_STATUS, 11), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, DPC_CLOCK, 12), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, DPC_BUFBUSY, 13), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, DPC_PIPEBUSY, 14), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, DPC_TMEM, 15), diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_RspCop2.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_RspCop2.inc new file mode 100644 index 00000000..d22b673f --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_RspCop2.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + + RABBITIZER_DEF_REG(RSP_COP2, 0, 0), + RABBITIZER_DEF_REG(RSP_COP2, 1, 1), + RABBITIZER_DEF_REG(RSP_COP2, 2, 2), + RABBITIZER_DEF_REG(RSP_COP2, 3, 3), + RABBITIZER_DEF_REG(RSP_COP2, 4, 4), + RABBITIZER_DEF_REG(RSP_COP2, 5, 5), + RABBITIZER_DEF_REG(RSP_COP2, 6, 6), + RABBITIZER_DEF_REG(RSP_COP2, 7, 7), + RABBITIZER_DEF_REG(RSP_COP2, 8, 8), + RABBITIZER_DEF_REG(RSP_COP2, 9, 9), + RABBITIZER_DEF_REG(RSP_COP2, 10, 10), + RABBITIZER_DEF_REG(RSP_COP2, 11, 11), + RABBITIZER_DEF_REG(RSP_COP2, 12, 12), + RABBITIZER_DEF_REG(RSP_COP2, 13, 13), + RABBITIZER_DEF_REG(RSP_COP2, 14, 14), + RABBITIZER_DEF_REG(RSP_COP2, 15, 15), + RABBITIZER_DEF_REG(RSP_COP2, 16, 16), + RABBITIZER_DEF_REG(RSP_COP2, 17, 17), + RABBITIZER_DEF_REG(RSP_COP2, 18, 18), + RABBITIZER_DEF_REG(RSP_COP2, 19, 19), + RABBITIZER_DEF_REG(RSP_COP2, 20, 20), + RABBITIZER_DEF_REG(RSP_COP2, 21, 21), + RABBITIZER_DEF_REG(RSP_COP2, 22, 22), + RABBITIZER_DEF_REG(RSP_COP2, 23, 23), + RABBITIZER_DEF_REG(RSP_COP2, 24, 24), + RABBITIZER_DEF_REG(RSP_COP2, 25, 25), + RABBITIZER_DEF_REG(RSP_COP2, 26, 26), + RABBITIZER_DEF_REG(RSP_COP2, 27, 27), + RABBITIZER_DEF_REG(RSP_COP2, 28, 28), + RABBITIZER_DEF_REG(RSP_COP2, 29, 29), + RABBITIZER_DEF_REG(RSP_COP2, 30, 30), + RABBITIZER_DEF_REG(RSP_COP2, 31, 31), diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_RspCop2Control.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_RspCop2Control.inc new file mode 100644 index 00000000..0f730f31 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_RspCop2Control.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 0, 0), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 1, 1), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 2, 2), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 3, 3), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 4, 4), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 5, 5), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 6, 6), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 7, 7), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 8, 8), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 9, 9), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 10, 10), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 11, 11), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 12, 12), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 13, 13), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 14, 14), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 15, 15), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 16, 16), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 17, 17), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 18, 18), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 19, 19), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 20, 20), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 21, 21), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 22, 22), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 23, 23), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 24, 24), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 25, 25), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 26, 26), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 27, 27), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 28, 28), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 29, 29), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 30, 30), + RABBITIZER_DEF_REG(COP1_CONTROL, 31, 31), diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_RspGpr.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_RspGpr.inc new file mode 100644 index 00000000..490926cd --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_RspGpr.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + + RABBITIZER_DEF_REG(RSP_GPR, zero, 0), + RABBITIZER_DEF_REG(RSP_GPR, 1, 1), + RABBITIZER_DEF_REG(RSP_GPR, 2, 2), + RABBITIZER_DEF_REG(RSP_GPR, 3, 3), + RABBITIZER_DEF_REG(RSP_GPR, 4, 4), + RABBITIZER_DEF_REG(RSP_GPR, 5, 5), + RABBITIZER_DEF_REG(RSP_GPR, 6, 6), + RABBITIZER_DEF_REG(RSP_GPR, 7, 7), + RABBITIZER_DEF_REG(RSP_GPR, 8, 8), + RABBITIZER_DEF_REG(RSP_GPR, 9, 9), + RABBITIZER_DEF_REG(RSP_GPR, 10, 10), + RABBITIZER_DEF_REG(RSP_GPR, 11, 11), + RABBITIZER_DEF_REG(RSP_GPR, 12, 12), + RABBITIZER_DEF_REG(RSP_GPR, 13, 13), + RABBITIZER_DEF_REG(RSP_GPR, 14, 14), + RABBITIZER_DEF_REG(RSP_GPR, 15, 15), + RABBITIZER_DEF_REG(RSP_GPR, 16, 16), + RABBITIZER_DEF_REG(RSP_GPR, 17, 17), + RABBITIZER_DEF_REG(RSP_GPR, 18, 18), + RABBITIZER_DEF_REG(RSP_GPR, 19, 19), + RABBITIZER_DEF_REG(RSP_GPR, 20, 20), + RABBITIZER_DEF_REG(RSP_GPR, 21, 21), + RABBITIZER_DEF_REG(RSP_GPR, 22, 22), + RABBITIZER_DEF_REG(RSP_GPR, 23, 23), + RABBITIZER_DEF_REG(RSP_GPR, 24, 24), + RABBITIZER_DEF_REG(RSP_GPR, 25, 25), + RABBITIZER_DEF_REG(RSP_GPR, 26, 26), + RABBITIZER_DEF_REG(RSP_GPR, 27, 27), + RABBITIZER_DEF_REG(RSP_GPR, 28, 28), + RABBITIZER_DEF_REG(RSP_GPR, 29, 29), + RABBITIZER_DEF_REG(RSP_GPR, 30, 30), + RABBITIZER_DEF_REG(RSP_GPR, ra, 31), diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_RspVector.inc b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_RspVector.inc new file mode 100644 index 00000000..c2676d91 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/instructions/registers/RabbitizerRegister_RspVector.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + + RABBITIZER_DEF_REG(RSP_VECTOR, v0, 0), + RABBITIZER_DEF_REG(RSP_VECTOR, v1, 1), + RABBITIZER_DEF_REG(RSP_VECTOR, v2, 2), + RABBITIZER_DEF_REG(RSP_VECTOR, v3, 3), + RABBITIZER_DEF_REG(RSP_VECTOR, v4, 4), + RABBITIZER_DEF_REG(RSP_VECTOR, v5, 5), + RABBITIZER_DEF_REG(RSP_VECTOR, v6, 6), + RABBITIZER_DEF_REG(RSP_VECTOR, v7, 7), + RABBITIZER_DEF_REG(RSP_VECTOR, v8, 8), + RABBITIZER_DEF_REG(RSP_VECTOR, v9, 9), + RABBITIZER_DEF_REG(RSP_VECTOR, v10, 10), + RABBITIZER_DEF_REG(RSP_VECTOR, v11, 11), + RABBITIZER_DEF_REG(RSP_VECTOR, v12, 12), + RABBITIZER_DEF_REG(RSP_VECTOR, v13, 13), + RABBITIZER_DEF_REG(RSP_VECTOR, v14, 14), + RABBITIZER_DEF_REG(RSP_VECTOR, v15, 15), + RABBITIZER_DEF_REG(RSP_VECTOR, v16, 16), + RABBITIZER_DEF_REG(RSP_VECTOR, v17, 17), + RABBITIZER_DEF_REG(RSP_VECTOR, v18, 18), + RABBITIZER_DEF_REG(RSP_VECTOR, v19, 19), + RABBITIZER_DEF_REG(RSP_VECTOR, v20, 20), + RABBITIZER_DEF_REG(RSP_VECTOR, v21, 21), + RABBITIZER_DEF_REG(RSP_VECTOR, v22, 22), + RABBITIZER_DEF_REG(RSP_VECTOR, v23, 23), + RABBITIZER_DEF_REG(RSP_VECTOR, v24, 24), + RABBITIZER_DEF_REG(RSP_VECTOR, v25, 25), + RABBITIZER_DEF_REG(RSP_VECTOR, v26, 26), + RABBITIZER_DEF_REG(RSP_VECTOR, v27, 27), + RABBITIZER_DEF_REG(RSP_VECTOR, v28, 28), + RABBITIZER_DEF_REG(RSP_VECTOR, v29, 29), + RABBITIZER_DEF_REG(RSP_VECTOR, v30, 30), + RABBITIZER_DEF_REG(RSP_VECTOR, v31, 31), diff --git a/tools/ido-static-recomp/tools/rabbitizer/include/rabbitizer.h b/tools/ido-static-recomp/tools/rabbitizer/include/rabbitizer.h new file mode 100644 index 00000000..5bae2d58 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/include/rabbitizer.h @@ -0,0 +1,25 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_H +#define RABBITIZER_H +#pragma once + +#include "common/Utils.h" +#include "common/RabbitizerVersion.h" +#include "common/RabbitizerConfig.h" + +#include "instructions/RabbitizerOperandType.h" +#include "instructions/RabbitizerInstrId.h" +#include "instructions/RabbitizerInstrSuffix.h" +#include "instructions/RabbitizerInstrDescriptor.h" +#include "instructions/RabbitizerRegister.h" +#include "instructions/RabbitizerInstruction.h" +#include "instructions/RabbitizerInstructionRsp.h" +#include "instructions/RabbitizerInstructionR5900.h" + +#include "analysis/RabbitizerTrackedRegisterState.h" +#include "analysis/RabbitizerLoPairingInfo.h" +#include "analysis/RabbitizerRegistersTracker.h" + +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/pyproject.toml b/tools/ido-static-recomp/tools/rabbitizer/pyproject.toml new file mode 100644 index 00000000..35a5cb29 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/pyproject.toml @@ -0,0 +1,9 @@ +# SPDX-FileCopyrightText: © 2022 Decompollaborate +# SPDX-License-Identifier: MIT + +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[tool.cibuildwheel] +skip = ["cp36-*"] diff --git a/tools/ido-static-recomp/tools/rabbitizer/r5900test.c b/tools/ido-static-recomp/tools/rabbitizer/r5900test.c new file mode 100644 index 00000000..bc83f4db --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/r5900test.c @@ -0,0 +1,47 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerInstructionR5900.h" + +#include +#include +#include +#include + + +int main() { + uint32_t word; + RabbitizerInstruction instr; + char *buffer; + int extraLJust = 5; +#if 1 + uint32_t validbits; +#endif + + word = 0x4BE1634B; + + RabbitizerInstructionR5900_init(&instr, word, 0x00100000); + + RabbitizerInstructionR5900_processUniqueId(&instr); + + buffer = malloc(RabbitizerInstruction_getSizeForBuffer(&instr, 0, extraLJust) + 1); + assert(buffer != NULL); + + RabbitizerInstruction_disassemble(&instr, buffer, NULL, 0, extraLJust); + + printf("%08X: %s\n", word, buffer); + +#if 1 + validbits = RabbitizerInstruction_getValidBits(&instr); + + printf("word: %08X\n", instr.word); + printf("mandatory bits: %08X\n", instr._mandatorybits); + printf("valid bits: %08X\n", validbits); + printf("invalid bits: %08X\n", (~validbits) & instr.word); +#endif + + free(buffer); + RabbitizerInstructionR5900_destroy(&instr); + + return 0; +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/Config.pyi b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/Config.pyi new file mode 100644 index 00000000..c639b4f1 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/Config.pyi @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 + +# SPDX-FileCopyrightText: © 2022 Decompollaborate +# SPDX-License-Identifier: MIT + +from __future__ import annotations + +from .Enum import Enum + + +class Abi: + NUMERIC: Enum + O32: Enum + N32: Enum + N64: Enum + + @staticmethod + def fromStr(name: str | None) -> Enum: ... + + +class _RabbitizerConfig: + regNames_namedRegisters: bool = True + regNames_gprAbiNames: Enum = Abi.O32 + regNames_fprAbiNames: Enum = Abi.NUMERIC + regNames_userFpcCsr: bool = True + regNames_vr4300Cop0NamedRegisters: bool = True + regNames_vr4300RspCop0NamedRegisters: bool = True + + pseudos_enablePseudos: bool = True + pseudos_pseudoBeqz: bool = True + pseudos_pseudoBnez: bool = True + pseudos_pseudoB: bool = True + pseudos_pseudoMove: bool = True + pseudos_pseudoNot: bool = True + pseudos_pseudoNegu: bool = True + pseudos_pseudoBal: bool = True + + toolchainTweaks_sn64DivFix: bool = False + toolchainTweaks_treatJAsUnconditionalBranch: bool = False + + misc_opcodeLJust: int = 11 + misc_unknownInstrComment: bool = True + misc_omit0XOnSmallImm: bool = False + misc_upperCaseImm: bool = True + +config: _RabbitizerConfig diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/Enum.pyi b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/Enum.pyi new file mode 100644 index 00000000..afa18969 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/Enum.pyi @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 + +# SPDX-FileCopyrightText: © 2022 Decompollaborate +# SPDX-License-Identifier: MIT + +from __future__ import annotations + + +class Enum: + name: str + value: int + + def __init__(self, enumType: str, name: str, value: int) -> None: ... + + def __reduce__(self) -> tuple: ... + + def __lt__(self, __o: object) -> bool: ... + def __le__(self, __o: object) -> bool: ... + def __eq__(self, __o: object) -> bool: ... + def __gt__(self, __o: object) -> bool: ... + def __ge__(self, __o: object) -> bool: ... + + def __repr__(self) -> str: ... + def __str__(self) -> str: ... diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/InstrCategory.pyi b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/InstrCategory.pyi new file mode 100644 index 00000000..7d4b7e56 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/InstrCategory.pyi @@ -0,0 +1,15 @@ +#!/usr/bin/env python3 + +# SPDX-FileCopyrightText: © 2022 Decompollaborate +# SPDX-License-Identifier: MIT + +from __future__ import annotations + +from .Enum import Enum + + +class InstrCategory: + CPU: Enum + RSP: Enum + R5900: Enum + MAX: Enum diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/InstrId.pyi b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/InstrId.pyi new file mode 100644 index 00000000..87e87bf3 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/InstrId.pyi @@ -0,0 +1,631 @@ +#!/usr/bin/env python3 + +# SPDX-FileCopyrightText: © 2022 Decompollaborate +# SPDX-License-Identifier: MIT + +from __future__ import annotations + +from .Enum import Enum + + +class InstrId: + cpu_INVALID: Enum + cpu_mthi: Enum + cpu_mtlo: Enum + cpu_jr: Enum + cpu_jalr: Enum + cpu_jalr_rd: Enum + cpu_mfhi: Enum + cpu_mflo: Enum + cpu_mult: Enum + cpu_multu: Enum + cpu_dmult: Enum + cpu_dmultu: Enum + cpu_tge: Enum + cpu_tgeu: Enum + cpu_tlt: Enum + cpu_tltu: Enum + cpu_teq: Enum + cpu_tne: Enum + cpu_movz: Enum + cpu_movn: Enum + cpu_div: Enum + cpu_divu: Enum + cpu_sn64_div: Enum + cpu_sn64_divu: Enum + cpu_ddiv: Enum + cpu_ddivu: Enum + cpu_add: Enum + cpu_addu: Enum + cpu_sub: Enum + cpu_subu: Enum + cpu_and: Enum + cpu_or: Enum + cpu_xor: Enum + cpu_nor: Enum + cpu_slt: Enum + cpu_sltu: Enum + cpu_dadd: Enum + cpu_daddu: Enum + cpu_dsub: Enum + cpu_dsubu: Enum + cpu_syscall: Enum + cpu_break: Enum + cpu_sync: Enum + cpu_dsllv: Enum + cpu_dsrlv: Enum + cpu_dsrav: Enum + cpu_sllv: Enum + cpu_srlv: Enum + cpu_srav: Enum + cpu_sll: Enum + cpu_srl: Enum + cpu_sra: Enum + cpu_dsll: Enum + cpu_dsrl: Enum + cpu_dsra: Enum + cpu_dsll32: Enum + cpu_dsrl32: Enum + cpu_dsra32: Enum + cpu_bltz: Enum + cpu_bgez: Enum + cpu_bltzl: Enum + cpu_bgezl: Enum + cpu_tgei: Enum + cpu_tgeiu: Enum + cpu_tlti: Enum + cpu_tltiu: Enum + cpu_bltzal: Enum + cpu_bgezal: Enum + cpu_bltzall: Enum + cpu_bgezall: Enum + cpu_bal: Enum + cpu_teqi: Enum + cpu_tnei: Enum + cpu_j: Enum + cpu_jal: Enum + cpu_beq: Enum + cpu_bne: Enum + cpu_beql: Enum + cpu_bnel: Enum + cpu_blez: Enum + cpu_bgtz: Enum + cpu_blezl: Enum + cpu_bgtzl: Enum + cpu_lui: Enum + cpu_andi: Enum + cpu_ori: Enum + cpu_xori: Enum + cpu_addi: Enum + cpu_addiu: Enum + cpu_daddi: Enum + cpu_daddiu: Enum + cpu_slti: Enum + cpu_sltiu: Enum + cpu_ldl: Enum + cpu_ldr: Enum + cpu_lb: Enum + cpu_lh: Enum + cpu_lwl: Enum + cpu_lw: Enum + cpu_lbu: Enum + cpu_lhu: Enum + cpu_lwr: Enum + cpu_lwu: Enum + cpu_sb: Enum + cpu_sh: Enum + cpu_swl: Enum + cpu_sw: Enum + cpu_sdl: Enum + cpu_sdr: Enum + cpu_swr: Enum + cpu_ll: Enum + cpu_pref: Enum + cpu_lld: Enum + cpu_ld: Enum + cpu_sc: Enum + cpu_scd: Enum + cpu_sd: Enum + cpu_lwc1: Enum + cpu_ldc1: Enum + cpu_swc1: Enum + cpu_sdc1: Enum + cpu_lwc2: Enum + cpu_ldc2: Enum + cpu_swc2: Enum + cpu_sdc2: Enum + cpu_mfc0: Enum + cpu_dmfc0: Enum + cpu_cfc0: Enum + cpu_mtc0: Enum + cpu_dmtc0: Enum + cpu_ctc0: Enum + cpu_tlbr: Enum + cpu_tlbwi: Enum + cpu_tlbwr: Enum + cpu_tlbp: Enum + cpu_eret: Enum + cpu_bc0t: Enum + cpu_bc0f: Enum + cpu_bc0tl: Enum + cpu_bc0fl: Enum + cpu_mfc1: Enum + cpu_dmfc1: Enum + cpu_mtc1: Enum + cpu_dmtc1: Enum + cpu_cfc1: Enum + cpu_ctc1: Enum + cpu_bc1f: Enum + cpu_bc1t: Enum + cpu_bc1fl: Enum + cpu_bc1tl: Enum + cpu_add_s: Enum + cpu_sub_s: Enum + cpu_mul_s: Enum + cpu_div_s: Enum + cpu_add_d: Enum + cpu_sub_d: Enum + cpu_mul_d: Enum + cpu_div_d: Enum + cpu_sqrt_s: Enum + cpu_abs_s: Enum + cpu_mov_s: Enum + cpu_neg_s: Enum + cpu_sqrt_d: Enum + cpu_abs_d: Enum + cpu_mov_d: Enum + cpu_neg_d: Enum + cpu_round_l_s: Enum + cpu_trunc_l_s: Enum + cpu_ceil_l_s: Enum + cpu_floor_l_s: Enum + cpu_round_l_d: Enum + cpu_trunc_l_d: Enum + cpu_ceil_l_d: Enum + cpu_floor_l_d: Enum + cpu_round_w_s: Enum + cpu_trunc_w_s: Enum + cpu_ceil_w_s: Enum + cpu_floor_w_s: Enum + cpu_round_w_d: Enum + cpu_trunc_w_d: Enum + cpu_ceil_w_d: Enum + cpu_floor_w_d: Enum + cpu_c_f_s: Enum + cpu_c_un_s: Enum + cpu_c_eq_s: Enum + cpu_c_ueq_s: Enum + cpu_c_olt_s: Enum + cpu_c_ult_s: Enum + cpu_c_ole_s: Enum + cpu_c_ule_s: Enum + cpu_c_f_d: Enum + cpu_c_un_d: Enum + cpu_c_eq_d: Enum + cpu_c_ueq_d: Enum + cpu_c_olt_d: Enum + cpu_c_ult_d: Enum + cpu_c_ole_d: Enum + cpu_c_ule_d: Enum + cpu_c_sf_s: Enum + cpu_c_ngle_s: Enum + cpu_c_seq_s: Enum + cpu_c_ngl_s: Enum + cpu_c_lt_s: Enum + cpu_c_nge_s: Enum + cpu_c_le_s: Enum + cpu_c_ngt_s: Enum + cpu_c_sf_d: Enum + cpu_c_ngle_d: Enum + cpu_c_seq_d: Enum + cpu_c_ngl_d: Enum + cpu_c_lt_d: Enum + cpu_c_nge_d: Enum + cpu_c_le_d: Enum + cpu_c_ngt_d: Enum + cpu_cvt_s_d: Enum + cpu_cvt_s_w: Enum + cpu_cvt_s_l: Enum + cpu_cvt_d_s: Enum + cpu_cvt_d_w: Enum + cpu_cvt_d_l: Enum + cpu_cvt_w_s: Enum + cpu_cvt_w_d: Enum + cpu_cvt_l_s: Enum + cpu_cvt_l_d: Enum + cpu_nop: Enum + cpu_beqz: Enum + cpu_bnez: Enum + cpu_b: Enum + cpu_move: Enum + cpu_not: Enum + cpu_negu: Enum + cpu_MAX: Enum + + rsp_INVALID: Enum + rsp_vmulf: Enum + rsp_vmulu: Enum + rsp_vrndp: Enum + rsp_vmulq: Enum + rsp_vmudl: Enum + rsp_vmudm: Enum + rsp_vmudn: Enum + rsp_vmudh: Enum + rsp_vmacf: Enum + rsp_vmacu: Enum + rsp_vrndn: Enum + rsp_vmacq: Enum + rsp_vmadl: Enum + rsp_vmadm: Enum + rsp_vmadn: Enum + rsp_vmadh: Enum + rsp_vadd: Enum + rsp_vsub: Enum + rsp_vabs: Enum + rsp_vaddc: Enum + rsp_vsubc: Enum + rsp_vsar: Enum + rsp_vand: Enum + rsp_vnand: Enum + rsp_vor: Enum + rsp_vnor: Enum + rsp_vxor: Enum + rsp_vnxor: Enum + rsp_vlt: Enum + rsp_veq: Enum + rsp_vne: Enum + rsp_vge: Enum + rsp_vcl: Enum + rsp_vch: Enum + rsp_vcr: Enum + rsp_vmrg: Enum + rsp_vrcp: Enum + rsp_vrcpl: Enum + rsp_vrcph: Enum + rsp_vmov: Enum + rsp_vrsq: Enum + rsp_vrsql: Enum + rsp_vrsqh: Enum + rsp_vnop: Enum + rsp_mfc2: Enum + rsp_mtc2: Enum + rsp_cfc2: Enum + rsp_ctc2: Enum + rsp_sbv: Enum + rsp_ssv: Enum + rsp_slv: Enum + rsp_sdv: Enum + rsp_sqv: Enum + rsp_srv: Enum + rsp_spv: Enum + rsp_suv: Enum + rsp_swv: Enum + rsp_shv: Enum + rsp_sfv: Enum + rsp_stv: Enum + rsp_lbv: Enum + rsp_lsv: Enum + rsp_llv: Enum + rsp_ldv: Enum + rsp_lqv: Enum + rsp_lrv: Enum + rsp_lpv: Enum + rsp_luv: Enum + rsp_lhv: Enum + rsp_lfv: Enum + rsp_ltv: Enum + rsp_jr: Enum + rsp_jalr: Enum + rsp_jalr_rd: Enum + rsp_movz: Enum + rsp_movn: Enum + rsp_add: Enum + rsp_addu: Enum + rsp_sub: Enum + rsp_subu: Enum + rsp_and: Enum + rsp_or: Enum + rsp_xor: Enum + rsp_nor: Enum + rsp_slt: Enum + rsp_sltu: Enum + rsp_break: Enum + rsp_sllv: Enum + rsp_srlv: Enum + rsp_srav: Enum + rsp_sll: Enum + rsp_srl: Enum + rsp_sra: Enum + rsp_bltz: Enum + rsp_bgez: Enum + rsp_bltzal: Enum + rsp_bgezal: Enum + rsp_bal: Enum + rsp_j: Enum + rsp_jal: Enum + rsp_beq: Enum + rsp_bne: Enum + rsp_blez: Enum + rsp_bgtz: Enum + rsp_lui: Enum + rsp_andi: Enum + rsp_ori: Enum + rsp_xori: Enum + rsp_addi: Enum + rsp_addiu: Enum + rsp_slti: Enum + rsp_sltiu: Enum + rsp_lb: Enum + rsp_lh: Enum + rsp_lw: Enum + rsp_lbu: Enum + rsp_lhu: Enum + rsp_sb: Enum + rsp_sh: Enum + rsp_sw: Enum + rsp_pref: Enum + rsp_lwc1: Enum + rsp_swc1: Enum + rsp_mfc0: Enum + rsp_mtc0: Enum + rsp_nop: Enum + rsp_beqz: Enum + rsp_bnez: Enum + rsp_b: Enum + rsp_move: Enum + rsp_not: Enum + rsp_negu: Enum + rsp_MAX: Enum + + r5900_INVALID: Enum + r5900_lq: Enum + r5900_sq: Enum + r5900_lqc2: Enum + r5900_sqc2: Enum + r5900_sync_p: Enum + r5900_mfsa: Enum + r5900_mtsa: Enum + r5900_mtsab: Enum + r5900_mtsah: Enum + r5900_madd: Enum + r5900_maddu: Enum + r5900_plzcw: Enum + r5900_mfhi1: Enum + r5900_mthi1: Enum + r5900_mflo1: Enum + r5900_mtlo1: Enum + r5900_mult1: Enum + r5900_multu1: Enum + r5900_div1: Enum + r5900_divu1: Enum + r5900_madd1: Enum + r5900_maddu1: Enum + r5900_pmfhl: Enum + r5900_pmthl: Enum + r5900_psllh: Enum + r5900_psrlh: Enum + r5900_psrah: Enum + r5900_psllw: Enum + r5900_psrlw: Enum + r5900_psraw: Enum + r5900_paddw: Enum + r5900_psubw: Enum + r5900_pcgtw: Enum + r5900_pmaxw: Enum + r5900_paddh: Enum + r5900_psubh: Enum + r5900_pcgth: Enum + r5900_pmaxh: Enum + r5900_paddb: Enum + r5900_psubb: Enum + r5900_pcgtb: Enum + r5900_paddsw: Enum + r5900_psubsw: Enum + r5900_pextlw: Enum + r5900_ppacw: Enum + r5900_paddsh: Enum + r5900_psubsh: Enum + r5900_pextlh: Enum + r5900_ppach: Enum + r5900_paddsb: Enum + r5900_psubsb: Enum + r5900_pextlb: Enum + r5900_ppacb: Enum + r5900_pext5: Enum + r5900_ppac5: Enum + r5900_pabsw: Enum + r5900_pceqw: Enum + r5900_pminw: Enum + r5900_padsbh: Enum + r5900_pabsh: Enum + r5900_pceqh: Enum + r5900_pminh: Enum + r5900_pceqb: Enum + r5900_padduw: Enum + r5900_psubuw: Enum + r5900_pextuw: Enum + r5900_padduh: Enum + r5900_psubuh: Enum + r5900_pextuh: Enum + r5900_paddub: Enum + r5900_psubub: Enum + r5900_pextub: Enum + r5900_qfsrv: Enum + r5900_pmaddw: Enum + r5900_psllvw: Enum + r5900_psrlvw: Enum + r5900_pmsubw: Enum + r5900_pmfhi: Enum + r5900_pmflo: Enum + r5900_pinth: Enum + r5900_pmultw: Enum + r5900_pdivw: Enum + r5900_pcpyld: Enum + r5900_pmaddh: Enum + r5900_phmadh: Enum + r5900_pand: Enum + r5900_pxor: Enum + r5900_pmsubh: Enum + r5900_phmsbh: Enum + r5900_pexeh: Enum + r5900_prevh: Enum + r5900_pmulth: Enum + r5900_pdivbw: Enum + r5900_pexew: Enum + r5900_prot3w: Enum + r5900_pmadduw: Enum + r5900_psravw: Enum + r5900_pmthi: Enum + r5900_pmtlo: Enum + r5900_pinteh: Enum + r5900_pmultuw: Enum + r5900_pdivuw: Enum + r5900_pcpyud: Enum + r5900_por: Enum + r5900_pnor: Enum + r5900_pexch: Enum + r5900_pcpyh: Enum + r5900_pexcw: Enum + r5900_ei: Enum + r5900_di: Enum + r5900_rsqrt_s: Enum + r5900_adda_s: Enum + r5900_suba_s: Enum + r5900_mula_s: Enum + r5900_madd_s: Enum + r5900_msub_s: Enum + r5900_madda_s: Enum + r5900_msuba_s: Enum + r5900_max_s: Enum + r5900_min_s: Enum + r5900_qmfc2: Enum + r5900_cfc2: Enum + r5900_qmtc2: Enum + r5900_ctc2: Enum + r5900_bc2f: Enum + r5900_bc2t: Enum + r5900_bc2fl: Enum + r5900_bc2tl: Enum + r5900_vaddx: Enum + r5900_vaddy: Enum + r5900_vaddz: Enum + r5900_vaddw: Enum + r5900_vsubx: Enum + r5900_vsuby: Enum + r5900_vsubz: Enum + r5900_vsubw: Enum + r5900_vmaddx: Enum + r5900_vmaddy: Enum + r5900_vmaddz: Enum + r5900_vmaddw: Enum + r5900_vmsubx: Enum + r5900_vmsuby: Enum + r5900_vmsubz: Enum + r5900_vmsubw: Enum + r5900_vmaxx: Enum + r5900_vmaxy: Enum + r5900_vmaxz: Enum + r5900_vmaxw: Enum + r5900_vminix: Enum + r5900_vminiy: Enum + r5900_vminiz: Enum + r5900_vminiw: Enum + r5900_vmulx: Enum + r5900_vmuly: Enum + r5900_vmulz: Enum + r5900_vmulw: Enum + r5900_vmulq: Enum + r5900_vmaxi: Enum + r5900_vmuli: Enum + r5900_vminii: Enum + r5900_vaddq: Enum + r5900_vmaddq: Enum + r5900_vaddi: Enum + r5900_vmaddi: Enum + r5900_vsubq: Enum + r5900_vmsubq: Enum + r5900_vsubi: Enum + r5900_vmsubi: Enum + r5900_vadd: Enum + r5900_vmadd: Enum + r5900_vmul: Enum + r5900_vmax: Enum + r5900_vsub: Enum + r5900_vmsub: Enum + r5900_vopmsub: Enum + r5900_vmini: Enum + r5900_viadd: Enum + r5900_visub: Enum + r5900_viaddi: Enum + r5900_viand: Enum + r5900_vior: Enum + r5900_vcallms: Enum + r5900_callmsr: Enum + r5900_vaddax: Enum + r5900_vadday: Enum + r5900_vaddaz: Enum + r5900_vaddaw: Enum + r5900_vsubax: Enum + r5900_vsubay: Enum + r5900_vsubaz: Enum + r5900_vsubaw: Enum + r5900_vvmaddx: Enum + r5900_vvmaddy: Enum + r5900_vvmaddz: Enum + r5900_vvmaddw: Enum + r5900_vmsubax: Enum + r5900_vmsubay: Enum + r5900_vmsubaz: Enum + r5900_vmsubaw: Enum + r5900_vitof0: Enum + r5900_vitof4: Enum + r5900_vitof12: Enum + r5900_vitof15: Enum + r5900_vftoi0: Enum + r5900_vftoi4: Enum + r5900_vftoi12: Enum + r5900_vftoi15: Enum + r5900_vmulax: Enum + r5900_vmulay: Enum + r5900_vmulaz: Enum + r5900_vmulaw: Enum + r5900_vmulaq: Enum + r5900_vabs: Enum + r5900_vmulai: Enum + r5900_vclipw: Enum + r5900_vaddaq: Enum + r5900_vmaddaq: Enum + r5900_vaddai: Enum + r5900_vmaddai: Enum + r5900_vsubaq: Enum + r5900_vmsubaq: Enum + r5900_vsubai: Enum + r5900_vmsubai: Enum + r5900_vadda: Enum + r5900_vmadda: Enum + r5900_vmula: Enum + r5900_vsuba: Enum + r5900_vmsuba: Enum + r5900_vopmula: Enum + r5900_vnop: Enum + r5900_vmove: Enum + r5900_vmr32: Enum + r5900_vlqi: Enum + r5900_vsqi: Enum + r5900_vlqd: Enum + r5900_vsqd: Enum + r5900_vdiv: Enum + r5900_vsqrt: Enum + r5900_vrsqrt: Enum + r5900_vwaitq: Enum + r5900_vmtir: Enum + r5900_vmfir: Enum + r5900_vilwr: Enum + r5900_viswr: Enum + r5900_vrnext: Enum + r5900_vrget: Enum + r5900_vrinit: Enum + r5900_vrxor: Enum + r5900_MAX: Enum + + ALL_MAX: Enum diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/LoPairingInfo.pyi b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/LoPairingInfo.pyi new file mode 100644 index 00000000..70e2a1b7 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/LoPairingInfo.pyi @@ -0,0 +1,16 @@ +#!/usr/bin/env python3 + +# SPDX-FileCopyrightText: © 2022 Decompollaborate +# SPDX-License-Identifier: MIT + +from __future__ import annotations + + +class LoPairingInfo: + instrOffset: int + value: int + shouldProcess: bool + isGpRel: bool + isGpGot: bool + + def __init__(self): ... diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/RegGprN32.pyi b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/RegGprN32.pyi new file mode 100644 index 00000000..54443526 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/RegGprN32.pyi @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 + +# SPDX-FileCopyrightText: © 2022 Decompollaborate +# SPDX-License-Identifier: MIT + +from __future__ import annotations + +from .Enum import Enum + + +class RegGprN32: + zero: Enum + at: Enum + v0: Enum + v1: Enum + a0: Enum + a1: Enum + a2: Enum + a3: Enum + a4: Enum + a5: Enum + a6: Enum + a7: Enum + t0: Enum + t1: Enum + t2: Enum + t3: Enum + s0: Enum + s1: Enum + s2: Enum + s3: Enum + s4: Enum + s5: Enum + s6: Enum + s7: Enum + t8: Enum + t9: Enum + k0: Enum + k1: Enum + gp: Enum + sp: Enum + fp: Enum + ra: Enum diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/RegGprO32.pyi b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/RegGprO32.pyi new file mode 100644 index 00000000..f145ca3d --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/RegGprO32.pyi @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 + +# SPDX-FileCopyrightText: © 2022 Decompollaborate +# SPDX-License-Identifier: MIT + +from __future__ import annotations + +from .Enum import Enum + + +class RegGprO32: + zero: Enum + at: Enum + v0: Enum + v1: Enum + a0: Enum + a1: Enum + a2: Enum + a3: Enum + t0: Enum + t1: Enum + t2: Enum + t3: Enum + t4: Enum + t5: Enum + t6: Enum + t7: Enum + s0: Enum + s1: Enum + s2: Enum + s3: Enum + s4: Enum + s5: Enum + s6: Enum + s7: Enum + t8: Enum + t9: Enum + k0: Enum + k1: Enum + gp: Enum + sp: Enum + fp: Enum + ra: Enum diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/RegistersTracker.pyi b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/RegistersTracker.pyi new file mode 100644 index 00000000..967ba493 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/RegistersTracker.pyi @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 + +# SPDX-FileCopyrightText: © 2022 Decompollaborate +# SPDX-License-Identifier: MIT + +from __future__ import annotations + +from .rabbitizer import Instruction +from .LoPairingInfo import LoPairingInfo + + +class RegistersTracker: + def __init__(self, other: RegistersTracker|None=None): ... + + def moveRegisters(self, instr: Instruction) -> bool: ... + def overwriteRegisters(self, instr: Instruction, instructionOffset: int) -> None: ... + def unsetRegistersAfterFuncCall(self, instr: Instruction, prevInstr: Instruction) -> None: ... + def getAddressIfCanSetType(self, instr: Instruction, instrOffset: int) -> int|None: ... + def getJrInfo(self, instr: Instruction) -> tuple[int, int]|None: ... + + def processLui(self, instr: Instruction, instrOffset: int, prevInstr: Instruction|None=None) -> None: ... + def processGpLoad(self, instr: Instruction, instrOffset: int) -> None: ... + def getLuiOffsetForConstant(self, instr: Instruction) -> int|None: ... + def processConstant(self, instr: Instruction, value: int, offset: int) -> None: ... + def getLuiOffsetForLo(self, instr: Instruction, instrOffset: int) -> tuple[int, bool, bool]: ... #! deprecated + def preprocessLoAndGetInfo(self, instr: Instruction, instrOffset: int) -> LoPairingInfo: ... + def processLo(self, instr: Instruction, value: int, offset: int) -> None: ... + def hasLoButNoHi(self, instr: Instruction) -> bool: ... diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/TrackedRegisterState.pyi b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/TrackedRegisterState.pyi new file mode 100644 index 00000000..36ba693e --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/TrackedRegisterState.pyi @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 + +# SPDX-FileCopyrightText: © 2022 Decompollaborate +# SPDX-License-Identifier: MIT + +from __future__ import annotations + + +class RegistersTracker: + registerNum: int + + hasLuiValue: bool + luiOffset: int # The offset of last lui which set a value to this register + luiSetOnBranchLikely: bool + + hasGpGot: bool + gpGotOffset: int + + hasLoValue: bool + loOffset: int + dereferenced: bool + dereferenceOffset: int + + value: int diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/Utils.pyi b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/Utils.pyi new file mode 100644 index 00000000..7215556f --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/Utils.pyi @@ -0,0 +1,14 @@ +#!/usr/bin/env python3 + +# SPDX-FileCopyrightText: © 2022 Decompollaborate +# SPDX-License-Identifier: MIT + +from __future__ import annotations + + +class Utils: + @staticmethod + def from2Complement(number: int, bits: int) -> int: ... + + @staticmethod + def escapeString(src: str) -> str: ... diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/__init__.pyi b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/__init__.pyi new file mode 100644 index 00000000..1bc27a7f --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/__init__.pyi @@ -0,0 +1,21 @@ +#!/usr/bin/env python3 + +# SPDX-FileCopyrightText: © 2022 Decompollaborate +# SPDX-License-Identifier: MIT + +from __future__ import annotations + +from .Utils import * + +from .Enum import * +from .InstrCategory import * +from .InstrId import * + +from .RegGprO32 import * +from .RegGprN32 import * + +from .Config import * + +from .rabbitizer import * + +from .RegistersTracker import * diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/enums_utils.c b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/enums_utils.c new file mode 100644 index 00000000..081dcdaf --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/enums_utils.c @@ -0,0 +1,38 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "enums_utils.h" + + +int rabbitizer_EnumMetadata_Initialize(PyObject *submodule, RabbitizerEnumMetadata *enumValues) { + for (size_t i = 0; enumValues[i].enumType != 0; i++) { + PyObject *args; + + args = Py_BuildValue("ssi", enumValues[i].enumType, enumValues[i].name, enumValues[i].value); + if (args == NULL) { + goto error; + } + + enumValues[i].instance = PyObject_CallObject((PyObject*)&rabbitizer_type_Enum_TypeObject, args); + Py_DECREF(args); + if (enumValues[i].instance == NULL) { + goto error; + } + + enumValues[i].isInstanced = true; + if (PyModule_AddObject(submodule, enumValues[i].name, enumValues[i].instance) < 0) { + goto error; + } + } + return 0; + +error: + for (size_t i = 0; enumValues[i].enumType != 0; i++) { + if (enumValues[i].isInstanced) { + Py_DECREF(enumValues[i].instance); + } + enumValues[i].isInstanced = false; + } + + return -1; +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/enums_utils.h b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/enums_utils.h new file mode 100644 index 00000000..6cb8604f --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/enums_utils.h @@ -0,0 +1,85 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_ENUMS_UTILS_H +#define RABBITIZER_ENUMS_UTILS_H +#pragma once + + +#define PY_SSIZE_T_CLEAN +#include +#include "structmember.h" + +#include + + +extern PyTypeObject rabbitizer_type_Enum_TypeObject; + + +typedef struct PyRabbitizerEnum { + PyObject_HEAD + PyObject *enumType; + PyObject *name; + int value; +} PyRabbitizerEnum; + +typedef struct RabbitizerEnumMetadata { + const char *enumType; + const char *name; + int value; + bool isInstanced; + PyObject *instance; +} RabbitizerEnumMetadata; + + +int rabbitizer_EnumMetadata_Initialize(PyObject *submodule, RabbitizerEnumMetadata *enumValues); + + +#define DECL_ENUM(enumName) \ + extern RabbitizerEnumMetadata rabbitizer_enum_##enumName##_enumvalues[]; \ + PyObject *rabbitizer_enum_##enumName##_Init(void); \ + /* Return true if o is of this enum type */ \ + int rabbitizer_enum_##enumName##_Check(PyObject *o); + +#define DEF_ENUM(enumName, docs) \ + static PyModuleDef rabbitizer_enum_##enumName##_module = { \ + PyModuleDef_HEAD_INIT, \ + .m_name = "rabbitizer." #enumName, \ + .m_doc = PyDoc_STR(docs), \ + .m_size = -1, \ + .m_methods = rabbitizer_enum_##enumName##_methods, \ + }; \ + PyObject *rabbitizer_enum_##enumName##_Init(void) { \ + PyObject *submodule; \ + if (PyType_Ready(&rabbitizer_type_Enum_TypeObject) < 0) { \ + return NULL; \ + } \ + submodule = PyModule_Create(&rabbitizer_enum_##enumName##_module); \ + if (submodule == NULL) { \ + return NULL; \ + } \ + if (rabbitizer_EnumMetadata_Initialize(submodule, rabbitizer_enum_##enumName##_enumvalues) < 0) { \ + Py_DECREF(submodule); \ + return NULL; \ + } \ + return submodule; \ + } \ + /* Return true if o is of this enum type */ \ + int rabbitizer_enum_##enumName##_Check(PyObject *o) { \ + int isInstance = PyObject_IsInstance(o, (PyObject*)&rabbitizer_type_Enum_TypeObject); \ + int enumTypeCmp; \ + if (isInstance < 0) { \ + /* An error happened */ \ + /* PyObject_IsInstance already sets an exception, so nothing else to do here */ \ + return -1; \ + } \ + if (isInstance == 0) { \ + /* `other` isn't an instance of the Enum type */ \ + return 0; \ + } \ + /* Check if both enums have the same `enumType` */ \ + enumTypeCmp = PyUnicode_CompareWithASCIIString(((PyRabbitizerEnum*)o)->enumType, #enumName); \ + return enumTypeCmp == 0; \ + } + +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/rabbitizer_enum_Abi.c b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/rabbitizer_enum_Abi.c new file mode 100644 index 00000000..a0d5fb09 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/rabbitizer_enum_Abi.c @@ -0,0 +1,48 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "enums_utils.h" +#include "common/RabbitizerConfig.h" +#include "common/Utils.h" + + +#define RABBITIZER_DEF_ABI(name) { "Abi", #name, RABBITIZER_ABI_##name, false, NULL } + +RabbitizerEnumMetadata rabbitizer_enum_Abi_enumvalues[] = { + #include "common/Abi.inc" + RABBITIZER_DEF_ABI(MAX), + + { 0 }, +}; + +#undef RABBITIZER_DEF_ABI + + +static PyObject *rabbitizer_enum_Abi_fromStr(UNUSED PyObject *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = { "name", NULL }; + const char *name = NULL; + RabbitizerAbi abi; + PyObject *ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "z", kwlist, &name)) { + return NULL; + } + + abi = RabbitizerAbi_fromStr(name); + + ret = rabbitizer_enum_Abi_enumvalues[abi].instance; + Py_INCREF(ret); + return ret; +} + + +#define METHOD_NO_ARGS(name, docs) { #name, (PyCFunction) rabbitizer_enum_Abi_##name, METH_NOARGS, PyDoc_STR(docs) } +#define METHOD_ARGS(name, docs) { #name, (PyCFunction) rabbitizer_enum_Abi_##name, METH_VARARGS | METH_KEYWORDS, PyDoc_STR(docs) } + +static PyMethodDef rabbitizer_enum_Abi_methods[] = { + METHOD_ARGS(fromStr, ""), + + { 0 }, +}; + +DEF_ENUM(Abi, "") diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/rabbitizer_enum_InstrCategory.c b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/rabbitizer_enum_InstrCategory.c new file mode 100644 index 00000000..fbc94dda --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/rabbitizer_enum_InstrCategory.c @@ -0,0 +1,23 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "enums_utils.h" +#include "instructions/RabbitizerInstruction.h" + + +#define RABBITIZER_DEF_INSTR_CATEGORY(name) { "InstrCategory", #name, RABBITIZER_INSTRCAT_##name, false, NULL } + +RabbitizerEnumMetadata rabbitizer_enum_InstrCategory_enumvalues[] = { + #include "instructions/InstrCategory.inc" + RABBITIZER_DEF_INSTR_CATEGORY(MAX), + + { 0 }, +}; + +#undef RABBITIZER_DEF_INSTR_CATEGORY + +static PyMethodDef rabbitizer_enum_InstrCategory_methods[] = { + { 0 }, +}; + +DEF_ENUM(InstrCategory, "") diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/rabbitizer_enum_InstrId.c b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/rabbitizer_enum_InstrId.c new file mode 100644 index 00000000..fabf612d --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/rabbitizer_enum_InstrId.c @@ -0,0 +1,29 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "enums_utils.h" +#include "instructions/RabbitizerInstrId.h" + + +#define RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, ...) { "InstrId", #prefix "_" #name, RABBITIZER_INSTR_ID_##prefix##_##name, false, NULL }, +#define RABBITIZER_DEF_INSTR_ID_ALTNAME(prefix, caseBits, name, altname, ...) RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, __VA_ARGS__) + +RabbitizerEnumMetadata rabbitizer_enum_InstrId_enumvalues[] = { + #include "instructions/instr_id/RabbitizerInstrId_cpu.inc" + + #include "instructions/instr_id/RabbitizerInstrId_rsp.inc" + + #include "instructions/instr_id/RabbitizerInstrId_r5900.inc" + + RABBITIZER_DEF_INSTR_ID(ALL, , MAX, ) + { 0 }, +}; + +#undef RABBITIZER_DEF_INSTR_ID +#undef RABBITIZER_DEF_INSTR_ID_ALTNAME + +static PyMethodDef rabbitizer_enum_InstrId_methods[] = { + { 0 }, +}; + +DEF_ENUM(InstrId, "") diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/rabbitizer_type_Enum.c b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/rabbitizer_type_Enum.c new file mode 100644 index 00000000..299fb386 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/rabbitizer_type_Enum.c @@ -0,0 +1,211 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "rabbitizer_module.h" +#include "enums_utils.h" +#include "common/Utils.h" + + +static void rabbitizer_type_Enum_dealloc(PyRabbitizerEnum *self) { + Py_XDECREF(self->enumType); + Py_XDECREF(self->name); + Py_TYPE(self)->tp_free((PyObject *) self); +} + +static PyObject *rabbitizer_type_Enum_new(PyTypeObject *type, UNUSED PyObject *args, UNUSED PyObject *kwds) { + PyRabbitizerEnum *self = (PyRabbitizerEnum *) type->tp_alloc(type, 0); + + if (self == NULL) { + return NULL; + } + + self->enumType = PyUnicode_FromString(""); + if (self->enumType == NULL) { + Py_DECREF(self); + return NULL; + } + self->name = PyUnicode_FromString(""); + if (self->name == NULL) { + Py_DECREF(self); + return NULL; + } + self->value = 0; + + return (PyObject *) self; +} + +static int rabbitizer_type_Enum_init(PyRabbitizerEnum *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = { "enumType", "name", "value", NULL }; + PyObject *enumType = NULL; + PyObject *name = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "UUi", kwlist, &enumType, &name, &self->value)) { + return -1; + } + + if (enumType != NULL) { + PyObject *tmp = NULL; + + tmp = self->enumType; + Py_INCREF(enumType); + self->enumType = enumType; + Py_DECREF(tmp); + } + if (name) { + PyObject *tmp = NULL; + + tmp = self->name; + Py_INCREF(name); + self->name = name; + Py_DECREF(tmp); + } + + return 0; +} + + +#define DEF_MEMBER_GET_INT(name) \ + static PyObject *rabbitizer_type_Enum_member_get_##name(PyRabbitizerEnum *self, PyObject *Py_UNUSED(ignored)) { \ + return PyLong_FromLong(self->name); \ + } + +#define DEF_MEMBER_GET_OBJREF(name) \ + static PyObject *rabbitizer_type_Enum_member_get_##name(PyRabbitizerEnum *self, PyObject *Py_UNUSED(ignored)) { \ + Py_INCREF(self->name); \ + return self->name; \ + } + +DEF_MEMBER_GET_OBJREF(name) +DEF_MEMBER_GET_INT(value) + + +#define MEMBER_GET(name, docs, closure) { #name, (getter) rabbitizer_type_Enum_member_get_##name, (setter) NULL, PyDoc_STR(docs), closure } +#define MEMBER_SET(name, docs, closure) { #name, (getter) NULL, (setter) rabbitizer_type_Enum_member_set_##name, PyDoc_STR(docs), closure } +#define MEMBER_GET_SET(name, docs, closure) { #name, (getter) rabbitizer_type_Enum_member_get_##name, (setter) rabbitizer_type_Enum_member_set_##name, PyDoc_STR(docs), closure } + +static PyGetSetDef rabbitizer_type_Enum_getsetters[] = { + MEMBER_GET(name, "", NULL), + MEMBER_GET(value, "", NULL), + + { 0 }, +}; + + +// Crappy hash +Py_hash_t rabbitizer_type_Enum_hash(PyRabbitizerEnum *self) { + Py_hash_t hash = PyObject_Hash(self->enumType); + + if (hash == -1) { + return -1; + } + + return hash + self->value; +} + +// Checks for the 6 basic comparisons (==, !=, <, <=, >, >=) +PyObject *rabbitizer_type_Enum_richcompare(PyRabbitizerEnum *self, PyObject *other, int op) { + int isInstance = PyObject_IsInstance(other, (PyObject*)&rabbitizer_type_Enum_TypeObject); + int enumTypeCmp; + int otherValue; + + if (isInstance < 0) { + // An error happened + // PyObject_IsInstance already sets an exception, so nothing else to do here + return NULL; + } + + if (isInstance == 0) { + // `other` isn't an instance of the Enum type + Py_RETURN_FALSE; + } + + // Check if both enums have the same `enumType` + enumTypeCmp = PyUnicode_Compare(self->enumType, ((PyRabbitizerEnum*)other)->enumType); + if (enumTypeCmp < 0) { + // Negative could mean it isn't equal or an error occurred, so we need to check for errors + if (PyErr_Occurred() != NULL) { + return NULL; + } + Py_RETURN_FALSE; + } + if (enumTypeCmp != 0) { + Py_RETURN_FALSE; + } + + otherValue = ((PyRabbitizerEnum*)other)->value; + + // Fails to build on ci builds for some reason + // Py_RETURN_RICHCOMPARE(self->value, ((PyRabbitizerEnum*)other)->value, op); + + switch (op) { + case Py_EQ: if ((self->value) == (otherValue)) Py_RETURN_TRUE; Py_RETURN_FALSE; + case Py_NE: if ((self->value) != (otherValue)) Py_RETURN_TRUE; Py_RETURN_FALSE; + case Py_LT: if ((self->value) < (otherValue)) Py_RETURN_TRUE; Py_RETURN_FALSE; + case Py_GT: if ((self->value) > (otherValue)) Py_RETURN_TRUE; Py_RETURN_FALSE; + case Py_LE: if ((self->value) <= (otherValue)) Py_RETURN_TRUE; Py_RETURN_FALSE; + case Py_GE: if ((self->value) >= (otherValue)) Py_RETURN_TRUE; Py_RETURN_FALSE; + default: + //Py_UNREACHABLE(); + UNREACHABLE; + } +} + + +// To allow piclking the object +static PyObject *rabbitizer_type_Enum___reduce__(PyRabbitizerEnum *self, UNUSED PyObject *closure) { + PyObject *args; + PyObject *enumType; + PyObject *name; + PyObject *value; + + enumType = self->enumType; + Py_INCREF(enumType); + name = self->name; + Py_INCREF(name); + value = PyLong_FromLong(self->value); + + + args = PyTuple_Pack(3, enumType, name, value); + + return PyTuple_Pack(2, (PyObject*)&rabbitizer_type_Enum_TypeObject, args); +} + + +#define METHOD_NO_ARGS(name, docs) { #name, (PyCFunction)rabbitizer_type_Enum_##name, METH_NOARGS, PyDoc_STR(docs) } +#define METHOD_ARGS(name, docs) { #name, (PyCFunction)rabbitizer_type_Enum_##name, METH_VARARGS | METH_KEYWORDS, PyDoc_STR(docs) } + + +static PyMethodDef rabbitizer_type_Enum_methods[] = { + METHOD_ARGS(__reduce__, ""), + + { 0 }, +}; + +static PyObject *rabbitizer_type_Enum_repr(PyRabbitizerEnum *self) { + return PyUnicode_FromFormat("<%U: %U (%i)>", self->enumType, self->name, self->value); +} + +static PyObject *rabbitizer_type_Enum_str(PyRabbitizerEnum *self) { + return rabbitizer_type_Enum_repr(self); +} + +// TODO: implement hash and int + +PyTypeObject rabbitizer_type_Enum_TypeObject = { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name = "rabbitizer.Enum", + .tp_doc = PyDoc_STR("Enum"), + .tp_basicsize = sizeof(PyRabbitizerEnum), + .tp_itemsize = 0, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + .tp_new = rabbitizer_type_Enum_new, + .tp_init = (initproc) rabbitizer_type_Enum_init, + .tp_dealloc = (destructor) rabbitizer_type_Enum_dealloc, + .tp_hash = (hashfunc) rabbitizer_type_Enum_hash, + .tp_richcompare = (richcmpfunc) rabbitizer_type_Enum_richcompare, + .tp_repr = (reprfunc) rabbitizer_type_Enum_repr, + .tp_str = (reprfunc) rabbitizer_type_Enum_str, + //.tp_members = rabbitizer_type_Enum_members, + .tp_methods = rabbitizer_type_Enum_methods, + .tp_getset = rabbitizer_type_Enum_getsetters, +}; diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/registers/rabbitizer_enum_GprN32.c b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/registers/rabbitizer_enum_GprN32.c new file mode 100644 index 00000000..6027d78f --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/registers/rabbitizer_enum_GprN32.c @@ -0,0 +1,28 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "enums/enums_utils.h" +#include "instructions/RabbitizerRegister.h" + + +#define RABBITIZER_DEF_REG(prefix, name, numeric) \ + { "RegGprN32", #name, RABBITIZER_REG_##prefix##_##name, false, NULL } + +#define RABBITIZER_DEF_REG_NODOLLAR(prefix, name, numeric) \ + { "RegGprN32", #name, RABBITIZER_REG_##prefix##_##name, false, NULL } + +RabbitizerEnumMetadata rabbitizer_enum_RegGprN32_enumvalues[] = { + #include "instructions/registers/RabbitizerRegister_GprN32.inc" + + { 0 }, +}; + +#undef RABBITIZER_DEF_REG +#undef RABBITIZER_DEF_REG_NODOLLAR + + +static PyMethodDef rabbitizer_enum_RegGprN32_methods[] = { + { 0 }, +}; + +DEF_ENUM(RegGprN32, "") diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/registers/rabbitizer_enum_GprO32.c b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/registers/rabbitizer_enum_GprO32.c new file mode 100644 index 00000000..50cdabe7 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/enums/registers/rabbitizer_enum_GprO32.c @@ -0,0 +1,28 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "enums/enums_utils.h" +#include "instructions/RabbitizerRegister.h" + + +#define RABBITIZER_DEF_REG(prefix, name, numeric) \ + { "RegGprO32", #name, RABBITIZER_REG_##prefix##_##name, false, NULL } + +#define RABBITIZER_DEF_REG_NODOLLAR(prefix, name, numeric) \ + { "RegGprO32", #name, RABBITIZER_REG_##prefix##_##name, false, NULL } + +RabbitizerEnumMetadata rabbitizer_enum_RegGprO32_enumvalues[] = { + #include "instructions/registers/RabbitizerRegister_GprO32.inc" + + { 0 }, +}; + +#undef RABBITIZER_DEF_REG +#undef RABBITIZER_DEF_REG_NODOLLAR + + +static PyMethodDef rabbitizer_enum_RegGprO32_methods[] = { + { 0 }, +}; + +DEF_ENUM(RegGprO32, "") diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/py.typed b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/py.typed new file mode 100644 index 00000000..e69de29b diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer.pyi b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer.pyi new file mode 100644 index 00000000..0ff63fac --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer.pyi @@ -0,0 +1,99 @@ +#!/usr/bin/env python3 + +# SPDX-FileCopyrightText: © 2022 Decompollaborate +# SPDX-License-Identifier: MIT + +from __future__ import annotations + +from .Enum import Enum +from .InstrCategory import InstrCategory + + +class Instruction: + rs: Enum + """The value of the `rs` register for this instruction. + The type of this attribute will be either a `RegGprO32` or a `RegGprN32` depending on the current `config.regNames_gprAbiNames` value. + If the current instruction does not use the `rs` register, then a Runtime exception will be raised. + Read-only.""" + rt: Enum + """The value of the `rt` register for this instruction. + The type of this attribute will be either a `RegGprO32` or a `RegGprN32` depending on the current `config.regNames_gprAbiNames` value. + If the current instruction does not use the `rt` register, then a Runtime exception will be raised. + Read-only.""" + rd: Enum + """The value of the `rd` register for this instruction. + The type of this attribute will be either a `RegGprO32` or a `RegGprN32` depending on the current `config.regNames_gprAbiNames` value. + If the current instruction does not use the `rd` register, then a Runtime exception will be raised. + Read-only.""" + sa: int + """The value of the `sa` field for this instruction. + If the current instruction does not have a `sa` field, then a Runtime exception will be raised. + Read-only.""" + + uniqueId: Enum + """An unique identificator for the opcode of this instruction. + The type is an `InstrId` enum. + Read-only.""" + + vram: int = 0 + """The vram (virtual ram) address for this instruction""" + inHandwrittenFunction: bool = False + """Boolean value indicating if the current instruction is used on a handwritten function. This is intended to be determined by the user.""" + + + def __init__(self, word: int, vram: int=0, category: Enum=InstrCategory.CPU) -> None: ... + + def getRaw(self) -> int: ... + def getImmediate(self) -> int: ... + def getProcessedImmediate(self) -> int: ... + def getInstrIndexAsVram(self) -> int: ... + def getBranchOffset(self) -> int: ... + def getGenericBranchOffset(self, currentVram: int) -> int: ... + def getOpcodeName(self) -> str: ... + + def blankOut(self) -> None: ... + + def isImplemented(self) -> bool: ... + def isLikelyHandwritten(self) -> bool: ... + def isNop(self) -> bool: ... + def isUnconditionalBranch(self) -> bool: ... + def isJrRa(self) -> bool: ... + def isJrNotRa(self) -> bool: ... + def hasDelaySlot(self) -> bool: ... + def mapInstrToType(self) -> str|None: ... + + def sameOpcode(self, other: Instruction) -> bool: ... + def sameOpcodeButDifferentArguments(self, other: Instruction) -> bool: ... + + def isValid(self) -> bool: ... + + def isUnknownType(self) -> bool: ... + def isJType(self) -> bool: ... + def isIType(self) -> bool: ... + def isRType(self) -> bool: ... + def isRegimmType(self) -> bool: ... + def isBranch(self) -> bool: ... + def isBranchLikely(self) -> bool: ... + def isJump(self) -> bool: ... + def isTrap(self) -> bool: ... + def isFloat(self) -> bool: ... + def isDouble(self) -> bool: ... + def isUnsigned(self) -> bool: ... + def modifiesRt(self) -> bool: ... + def modifiesRd(self) -> bool: ... + def notEmitedByCompilers(self) -> bool: ... + def canBeHi(self) -> bool: ... + def canBeLo(self) -> bool: ... + def doesLink(self) -> bool: ... + def doesDereference(self) -> bool: ... + def doesLoad(self) -> bool: ... + def doesStore(self) -> bool: ... + def maybeIsMove(self) -> bool: ... + def isPseudo(self) -> bool: ... + + def disassemble(self, immOverride: str|None=None, extraLJust: int=0) -> str: ... + + def __reduce__(self) -> tuple: ... + + def __repr__(self) -> str: ... + def __str__(self) -> str: ... diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_global_config.c b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_global_config.c new file mode 100644 index 00000000..d02fce37 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_global_config.c @@ -0,0 +1,165 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/** + * Wrapper to expose rabbitizer's global configuration + */ + +#include "rabbitizer_module.h" +#include "common/RabbitizerConfig.h" +#include "common/Utils.h" + + +#define DEF_MEMBER_GET_BOOL(category, name) \ + static PyObject *rabbitizer_global_config_get_##category##_##name(UNUSED PyObject *self, UNUSED PyObject *closure) { \ + if (RabbitizerConfig_Cfg.category.name) { \ + Py_RETURN_TRUE; \ + } \ + Py_RETURN_FALSE; \ + } +#define DEF_MEMBER_SET_BOOL(category, name) \ + static int rabbitizer_global_config_set_##category##_##name(UNUSED PyObject *self, PyObject *value, UNUSED void *closure) { \ + if (value == NULL) { \ + PyErr_SetString(PyExc_TypeError, "Cannot delete '" #category "." #name "' attribute"); \ + return -1; \ + } \ + RabbitizerConfig_Cfg.category.name = PyObject_IsTrue(value); \ + return 0; \ + } + +#define DEF_MEMBER_GET_SET_BOOL(category, name) \ + DEF_MEMBER_GET_BOOL(category, name) \ + DEF_MEMBER_SET_BOOL(category, name) + + +#define DEF_MEMBER_GET_INT(category, name) \ + static PyObject *rabbitizer_global_config_get_##category##_##name(UNUSED PyObject *self, UNUSED PyObject *closure) { \ + return PyLong_FromLong(RabbitizerConfig_Cfg.category.name); \ + } +#define DEF_MEMBER_SET_INT(category, name, rangeCheck, minVal, maxVal) \ + static int rabbitizer_global_config_set_##category##_##name(UNUSED PyObject *self, PyObject *value, UNUSED void *closure) { \ + long val; \ + if (value == NULL) { \ + PyErr_SetString(PyExc_TypeError, "Cannot delete '" #category "_" #name "' attribute"); \ + return -1; \ + } \ + val = PyLong_AsLong(value); \ + if (val == -1) { \ + PyObject *err = PyErr_Occurred(); \ + if (err != NULL) { \ + return -1; \ + } \ + } \ + if (rangeCheck && (val < minVal || val > maxVal)) { \ + PyErr_SetString(PyExc_ValueError, "Invalid value for '" #category "_" #name "' attribute"); \ + return -1; \ + } \ + RabbitizerConfig_Cfg.category.name = val;\ + return 0; \ + } + +#define DEF_MEMBER_GET_SET_INT(category, name, rangeCheck, minVal, maxVal) \ + DEF_MEMBER_GET_INT(category, name) \ + DEF_MEMBER_SET_INT(category, name, rangeCheck, minVal, maxVal) + +#define DEF_MEMBER_GET_ABI(category, name) \ + static PyObject *rabbitizer_global_config_get_##category##_##name(UNUSED PyObject *self, UNUSED PyObject *ignored) { \ + PyObject *enumInstance = rabbitizer_enum_Abi_enumvalues[RabbitizerConfig_Cfg.category.name].instance; \ + if (enumInstance == NULL) { \ + PyErr_SetString(PyExc_RuntimeError, "Internal error: invalid enum value for '" #category "_" #name "'"); \ + return NULL; \ + } \ + Py_INCREF(enumInstance); \ + return enumInstance; \ + } +#define DEF_MEMBER_SET_ABI(category, name) \ + static int rabbitizer_global_config_set_##category##_##name(UNUSED PyObject *self, PyObject *value, UNUSED void *closure) { \ + int enumCheck; \ + if (value == NULL) { \ + PyErr_SetString(PyExc_TypeError, "Cannot delete '" #category "_" #name "' attribute"); \ + return -1; \ + } \ + enumCheck = rabbitizer_enum_Abi_Check(value); \ + if (enumCheck <= 0) { \ + if (enumCheck == 0) { \ + PyErr_SetString(PyExc_ValueError, "Invalid value for '" #category "_" #name "' attribute"); \ + } \ + return -1; \ + } \ + RabbitizerConfig_Cfg.category.name = ((PyRabbitizerEnum*)value)->value; \ + return 0; \ + } + +#define DEF_MEMBER_GET_SET_ABI(category, name) \ + DEF_MEMBER_GET_ABI(category, name) \ + DEF_MEMBER_SET_ABI(category, name) + + +#define MEMBER_GET(category, name, docs, closure) { #category "_" #name, (getter) rabbitizer_global_config_get_##category##_##name, (setter) NULL, PyDoc_STR(docs), closure } +#define MEMBER_SET(category, name, docs, closure) { #category "_" #name, (getter) NULL, (setter) rabbitizer_global_config_set_##category##_##name, PyDoc_STR(docs), closure } +#define MEMBER_GET_SET(category, name, docs, closure) { #category "_" #name, (getter) rabbitizer_global_config_get_##category##_##name, (setter) rabbitizer_global_config_set_##category##_##name, PyDoc_STR(docs), closure } + + +DEF_MEMBER_GET_SET_BOOL(regNames, namedRegisters) +DEF_MEMBER_GET_SET_ABI(regNames, gprAbiNames) +DEF_MEMBER_GET_SET_ABI(regNames, fprAbiNames) +DEF_MEMBER_GET_SET_BOOL(regNames, userFpcCsr) +DEF_MEMBER_GET_SET_BOOL(regNames, vr4300Cop0NamedRegisters) +DEF_MEMBER_GET_SET_BOOL(regNames, vr4300RspCop0NamedRegisters) + +DEF_MEMBER_GET_SET_BOOL(pseudos, enablePseudos) +DEF_MEMBER_GET_SET_BOOL(pseudos, pseudoBeqz) +DEF_MEMBER_GET_SET_BOOL(pseudos, pseudoBnez) +DEF_MEMBER_GET_SET_BOOL(pseudos, pseudoB) +DEF_MEMBER_GET_SET_BOOL(pseudos, pseudoMove) +DEF_MEMBER_GET_SET_BOOL(pseudos, pseudoNot) +DEF_MEMBER_GET_SET_BOOL(pseudos, pseudoNegu) +DEF_MEMBER_GET_SET_BOOL(pseudos, pseudoBal) + +DEF_MEMBER_GET_SET_BOOL(toolchainTweaks, treatJAsUnconditionalBranch) +DEF_MEMBER_GET_SET_BOOL(toolchainTweaks, sn64DivFix) + +DEF_MEMBER_GET_SET_INT(misc, opcodeLJust, false, 0, 0) +DEF_MEMBER_GET_SET_BOOL(misc, unknownInstrComment) +DEF_MEMBER_GET_SET_BOOL(misc, omit0XOnSmallImm) +DEF_MEMBER_GET_SET_BOOL(misc, upperCaseImm) + + +static PyGetSetDef rabbitizer_global_config_GetSets[] = { + MEMBER_GET_SET(regNames, namedRegisters, "", NULL), + MEMBER_GET_SET(regNames, gprAbiNames, "", NULL), + MEMBER_GET_SET(regNames, fprAbiNames, "", NULL), + MEMBER_GET_SET(regNames, userFpcCsr, "", NULL), + MEMBER_GET_SET(regNames, vr4300Cop0NamedRegisters, "", NULL), + MEMBER_GET_SET(regNames, vr4300RspCop0NamedRegisters, "", NULL), + + MEMBER_GET_SET(pseudos, enablePseudos, "", NULL), + MEMBER_GET_SET(pseudos, pseudoBeqz, "", NULL), + MEMBER_GET_SET(pseudos, pseudoBnez, "", NULL), + MEMBER_GET_SET(pseudos, pseudoB, "", NULL), + MEMBER_GET_SET(pseudos, pseudoMove, "", NULL), + MEMBER_GET_SET(pseudos, pseudoNot, "", NULL), + MEMBER_GET_SET(pseudos, pseudoNegu, "", NULL), + MEMBER_GET_SET(pseudos, pseudoBal, "", NULL), + + MEMBER_GET_SET(toolchainTweaks, treatJAsUnconditionalBranch, "", NULL), + MEMBER_GET_SET(toolchainTweaks, sn64DivFix, "", NULL), + + MEMBER_GET_SET(misc, opcodeLJust, "", NULL), + MEMBER_GET_SET(misc, unknownInstrComment, "", NULL), + MEMBER_GET_SET(misc, omit0XOnSmallImm, "", NULL), + MEMBER_GET_SET(misc, upperCaseImm, "", NULL), + + { 0 }, +}; + +PyTypeObject rabbitizer_global_config_TypeObject = { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name = "rabbitizer.config", + .tp_doc = PyDoc_STR(""), + .tp_basicsize = sizeof(PyObject), + .tp_itemsize = 0, + .tp_flags = Py_TPFLAGS_DEFAULT, + .tp_new = PyType_GenericNew, + .tp_getset = rabbitizer_global_config_GetSets, +}; diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_module.c b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_module.c new file mode 100644 index 00000000..66dec777 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_module.c @@ -0,0 +1,142 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "rabbitizer_module.h" + +#include + +#include "common/Utils.h" +#include "instructions/RabbitizerInstrId.h" + + +typedef enum ModuleAttributeCategory { + MODULE_ATTRIBUTE_CAT_TYPE, + MODULE_ATTRIBUTE_CAT_INIT, // submodules + MODULE_ATTRIBUTE_CAT_GLOBAL, +} ModuleAttributeCategory; + +typedef struct ModuleAttribute { + union { + PyTypeObject *type; + PyObject *(*init)(void); + PyTypeObject *global; + }; + ModuleAttributeCategory cat; + const char *name; + bool isInstanced; + PyObject *instance; +} ModuleAttributes; + +#define MODULE_ATTRIBUTE_TYPE(name) { {.type = &rabbitizer_type_##name##_TypeObject}, MODULE_ATTRIBUTE_CAT_TYPE, #name, false, NULL } +#define MODULE_ATTRIBUTE_INIT(name) { {.init = rabbitizer_submodule_##name##_Init}, MODULE_ATTRIBUTE_CAT_INIT, #name, false, NULL } +#define MODULE_ATTRIBUTE_ENUM(name) { {.init = rabbitizer_enum_##name##_Init}, MODULE_ATTRIBUTE_CAT_INIT, #name, false, NULL } +#define MODULE_ATTRIBUTE_GLOBAL(name) { {.global = &rabbitizer_global_##name##_TypeObject}, MODULE_ATTRIBUTE_CAT_GLOBAL, #name, false, NULL } + +static ModuleAttributes rabbitizer_module_attributes[] = { + MODULE_ATTRIBUTE_INIT(Utils), + MODULE_ATTRIBUTE_GLOBAL(config), + MODULE_ATTRIBUTE_TYPE(Enum), + MODULE_ATTRIBUTE_ENUM(Abi), + MODULE_ATTRIBUTE_ENUM(InstrCategory), + MODULE_ATTRIBUTE_ENUM(InstrId), + MODULE_ATTRIBUTE_ENUM(RegGprO32), + MODULE_ATTRIBUTE_ENUM(RegGprN32), + MODULE_ATTRIBUTE_TYPE(Instruction), + MODULE_ATTRIBUTE_TYPE(LoPairingInfo), + MODULE_ATTRIBUTE_TYPE(TrackedRegisterState), + MODULE_ATTRIBUTE_TYPE(RegistersTracker), +}; + +static int rabbitizer_module_attributes_Ready(void) { + // Sanity checks and PyType_Ready + for (size_t i = 0; i < ARRAY_COUNT(rabbitizer_module_attributes); i++) { + if (rabbitizer_module_attributes[i].global == NULL || rabbitizer_module_attributes[i].name == NULL) { + return -1; + } + switch (rabbitizer_module_attributes[i].cat) { + case MODULE_ATTRIBUTE_CAT_TYPE: + case MODULE_ATTRIBUTE_CAT_GLOBAL: + if (PyType_Ready(rabbitizer_module_attributes[i].type) < 0) { + return -1; + } + break; + + case MODULE_ATTRIBUTE_CAT_INIT: + break; + + default: + return -1; + } + } + + return 0; +} + +static int rabbitizer_module_attributes_Initialize(PyObject *module) { + for (size_t i = 0; i < ARRAY_COUNT(rabbitizer_module_attributes); i++) { + switch (rabbitizer_module_attributes[i].cat) { + case MODULE_ATTRIBUTE_CAT_TYPE: + rabbitizer_module_attributes[i].instance = (PyObject*) rabbitizer_module_attributes[i].type; + Py_INCREF(rabbitizer_module_attributes[i].instance); + break; + + case MODULE_ATTRIBUTE_CAT_INIT: + rabbitizer_module_attributes[i].instance = rabbitizer_module_attributes[i].init(); + if (rabbitizer_module_attributes[i].instance == NULL) { + goto error; + } + break; + + case MODULE_ATTRIBUTE_CAT_GLOBAL: + rabbitizer_module_attributes[i].instance = PyObject_CallObject((PyObject*)rabbitizer_module_attributes[i].global, NULL); + if (rabbitizer_module_attributes[i].instance == NULL) { + goto error; + } + break; + } + + rabbitizer_module_attributes[i].isInstanced = true; + if (PyModule_AddObject(module, rabbitizer_module_attributes[i].name, rabbitizer_module_attributes[i].instance) < 0) { + goto error; + } + } + + return 0; + +error: + for (size_t i = 0; i < ARRAY_COUNT(rabbitizer_module_attributes); i++) { + if (rabbitizer_module_attributes[i].isInstanced) { + Py_DECREF(rabbitizer_module_attributes[i].instance); + } + rabbitizer_module_attributes[i].isInstanced = false; + } + return -1; +} + + +static PyModuleDef rabbitizer_module = { + PyModuleDef_HEAD_INIT, + .m_name = "rabbitizer", + .m_doc = "", + .m_size = -1, +}; + +PyMODINIT_FUNC PyInit_rabbitizer(void) { + PyObject *module; + + if (rabbitizer_module_attributes_Ready() < 0) { + return NULL; + } + + module = PyModule_Create(&rabbitizer_module); + if (module == NULL) { + return NULL; + } + + if (rabbitizer_module_attributes_Initialize(module) < 0) { + Py_DECREF(module); + return NULL; + } + + return module; +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_module.h b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_module.h new file mode 100644 index 00000000..051ea67d --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_module.h @@ -0,0 +1,54 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_MODULE_H +#define RABBITIZER_MODULE_H +#pragma once + +#define PY_SSIZE_T_CLEAN +#include +#include "structmember.h" + +#include "enums/enums_utils.h" + +#include "instructions/RabbitizerInstruction.h" +#include "analysis/RabbitizerTrackedRegisterState.h" +#include "analysis/RabbitizerLoPairingInfo.h" + +// TODO: clean up this... + + +typedef struct PyRabbitizerInstruction { + PyObject_HEAD + RabbitizerInstruction instr; +} PyRabbitizerInstruction; + +typedef struct PyRabbitizerTrackedRegisterState { + PyObject_HEAD + RabbitizerTrackedRegisterState registerState; +} PyRabbitizerTrackedRegisterState; + +typedef struct PyRabbitizerLoPairingInfo { + PyObject_HEAD + RabbitizerLoPairingInfo pairingInfo; +} PyRabbitizerLoPairingInfo; + + +PyObject *rabbitizer_submodule_Utils_Init(void); + +extern PyTypeObject rabbitizer_global_config_TypeObject; + +extern PyTypeObject rabbitizer_type_Enum_TypeObject; +extern PyTypeObject rabbitizer_type_Instruction_TypeObject; +extern PyTypeObject rabbitizer_type_LoPairingInfo_TypeObject; +extern PyTypeObject rabbitizer_type_TrackedRegisterState_TypeObject; +extern PyTypeObject rabbitizer_type_RegistersTracker_TypeObject; + +DECL_ENUM(Abi) +DECL_ENUM(InstrCategory) +DECL_ENUM(InstrId) + +DECL_ENUM(RegGprO32) +DECL_ENUM(RegGprN32) + +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_submodule_Utils.c b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_submodule_Utils.c new file mode 100644 index 00000000..31b844a8 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_submodule_Utils.c @@ -0,0 +1,81 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "rabbitizer_module.h" + +#include "common/Utils.h" + + +static PyObject *rabbitizer_submodule_Utils_from2Complement(UNUSED PyObject *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = { "number", "bits", NULL }; + uint32_t number = 0; + int bits = 0; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "Ii", kwlist, &number, &bits)) { + return NULL; + } + + return PyLong_FromLong(RabbitizerUtils_From2Complement(number, bits)); +} + +static PyObject *rabbitizer_submodule_Utils_escapeString(UNUSED PyObject *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = { "src", NULL }; + const char *src = NULL; + Py_ssize_t srcSize = 0; + char *dst; + size_t dstSize; + size_t wroteBytes; + PyObject *ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "s#", kwlist, &src, &srcSize)) { + return NULL; + } + + dstSize = 2 * srcSize; + dst = malloc(dstSize * sizeof(char)); + if (dst == NULL) { + PyErr_SetString(PyExc_RuntimeError, "Internal error on 'escapeString'"); + return NULL; + } + + wroteBytes = RabbitizerUtils_escapeString(dst, dstSize, src, srcSize); + if (wroteBytes > dstSize) { + PyErr_SetString(PyExc_RuntimeError, "Internal error on 'escapeString'"); + return NULL; + } + + ret = PyUnicode_FromStringAndSize(dst, wroteBytes); + free(dst); + return ret; +} + + +#define METHOD_NO_ARGS(name, docs) { #name, (PyCFunction) rabbitizer_submodule_Utils_##name, METH_NOARGS, PyDoc_STR(docs) } +#define METHOD_ARGS(name, docs) { #name, (PyCFunction) rabbitizer_submodule_Utils_##name, METH_VARARGS | METH_KEYWORDS, PyDoc_STR(docs) } + +static PyMethodDef rabbitizer_submodule_Utils_methods[] = { + METHOD_ARGS(from2Complement, ""), + METHOD_ARGS(escapeString, ""), + + { 0 }, +}; + + +static PyModuleDef rabbitizer_submodule_Utils_module = { + PyModuleDef_HEAD_INIT, + .m_name = "rabbitizer.Utils", + .m_doc = "", + .m_size = -1, + .m_methods = rabbitizer_submodule_Utils_methods, +}; + +PyObject *rabbitizer_submodule_Utils_Init(void) { + PyObject *submodule; + + submodule = PyModule_Create(&rabbitizer_submodule_Utils_module); + if (submodule == NULL) { + return NULL; + } + + return submodule; +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_type_Instruction.c b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_type_Instruction.c new file mode 100644 index 00000000..5471408d --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_type_Instruction.c @@ -0,0 +1,436 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "rabbitizer_module.h" + +#include "instructions/RabbitizerInstructionRsp.h" +#include "instructions/RabbitizerInstructionR5900.h" +#include "common/RabbitizerConfig.h" + + +static void rabbitizer_type_Instruction_dealloc(PyRabbitizerInstruction *self) { + RabbitizerInstruction_destroy(&self->instr); + Py_TYPE(self)->tp_free((PyObject *) self); +} + +static int rabbitizer_type_Instruction_init(PyRabbitizerInstruction *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = { "word", "vram", "category", NULL }; + uint32_t word; + uint32_t vram; + PyObject *category = NULL; + int enumCheck; + RabbitizerInstrCategory instrCategory = RABBITIZER_INSTRCAT_CPU; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "I|IO!", kwlist, &word, &vram, &rabbitizer_type_Enum_TypeObject, &category)) { + return -1; + } + + if (category != NULL) { + enumCheck = rabbitizer_enum_InstrCategory_Check(category); + + if (enumCheck <= 0) { + if (enumCheck == 0) { + PyErr_SetString(PyExc_ValueError, "Invalid value for 'category' parameter"); + } + return -1; + } + + instrCategory = ((PyRabbitizerEnum*)category)->value; + } + + switch (instrCategory) { + case RABBITIZER_INSTRCAT_RSP: + RabbitizerInstructionRsp_init(&self->instr, word, vram); + RabbitizerInstructionRsp_processUniqueId(&self->instr); + break; + + case RABBITIZER_INSTRCAT_R5900: + RabbitizerInstructionR5900_init(&self->instr, word, vram); + RabbitizerInstructionR5900_processUniqueId(&self->instr); + break; + + case RABBITIZER_INSTRCAT_CPU: + case RABBITIZER_INSTRCAT_MAX: + RabbitizerInstruction_init(&self->instr, word, vram); + RabbitizerInstruction_processUniqueId(&self->instr); + break; + } + + return 0; +} + +static PyMemberDef rabbitizer_type_Instruction_members[] = { + { "vram", T_UINT, offsetof(PyRabbitizerInstruction, instr.vram), 0, "vram description" }, + { "inHandwrittenFunction", T_BOOL, offsetof(PyRabbitizerInstruction, instr.inHandwrittenFunction), 0, "inHandwrittenFunction description" }, + + { 0 } +}; + + +#define DEF_MEMBER_GET_UINT(name) \ + static PyObject *rabbitizer_type_Instruction_member_get_##name(PyRabbitizerInstruction *self, PyObject *Py_UNUSED(ignored)) { \ + return PyLong_FromUnsignedLong(RAB_INSTR_GET_##name(&self->instr)); \ + } + +#define DEF_MEMBER_GET_REGGPR(name) \ + static PyObject *rabbitizer_type_Instruction_member_get_##name(PyRabbitizerInstruction *self, UNUSED PyObject *closure) { \ + uint32_t reg; \ + PyObject *enumInstance = NULL; \ + \ + if (!RabbitizerInstruction_hasOperandAlias(&self->instr, RAB_OPERAND_cpu_##name)) { \ + PyErr_Format(PyExc_RuntimeError, "'%s' instruction does not reference register '" #name "'", RabbitizerInstrId_getOpcodeName(self->instr.uniqueId)); \ + return NULL; \ + } \ + \ + reg = RAB_INSTR_GET_##name(&self->instr); \ + switch (RabbitizerConfig_Cfg.regNames.gprAbiNames) { \ + case RABBITIZER_ABI_N32: \ + case RABBITIZER_ABI_N64: \ + enumInstance = rabbitizer_enum_RegGprN32_enumvalues[reg].instance; \ + break; \ + \ + default: \ + enumInstance = rabbitizer_enum_RegGprO32_enumvalues[reg].instance; \ + break; \ + } \ + \ + if (enumInstance == NULL) { \ + PyErr_SetString(PyExc_RuntimeError, "Internal error: invalid RegGpr enum value"); \ + return NULL; \ + } \ + \ + Py_INCREF(enumInstance); \ + return enumInstance; \ + } + +DEF_MEMBER_GET_REGGPR(rs) +DEF_MEMBER_GET_REGGPR(rt) +DEF_MEMBER_GET_REGGPR(rd) + +DEF_MEMBER_GET_UINT(sa) + +static PyObject *rabbitizer_type_Instruction_member_get_uniqueId(PyRabbitizerInstruction *self, PyObject *Py_UNUSED(ignored)) { + PyObject *enumInstance = rabbitizer_enum_InstrId_enumvalues[self->instr.uniqueId].instance; + + if (enumInstance == NULL) { + PyErr_SetString(PyExc_RuntimeError, "Internal error: invalid uniqueId enum value"); + return NULL; + } + + Py_INCREF(enumInstance); + return enumInstance; +} + +#define MEMBER_GET(name, docs, closure) { #name, (getter) rabbitizer_type_Instruction_member_get_##name, (setter) NULL, PyDoc_STR(docs), closure } +#define MEMBER_SET(name, docs, closure) { #name, (getter) NULL, (setter) rabbitizer_type_Instruction_member_set_##name, PyDoc_STR(docs), closure } +#define MEMBER_GET_SET(name, docs, closure) { #name, (getter) rabbitizer_type_Instruction_member_get_##name, (setter) rabbitizer_type_Instruction_member_set_##name, PyDoc_STR(docs), closure } + + +static PyGetSetDef rabbitizer_type_Instruction_getsetters[] = { + MEMBER_GET(rs, "", NULL), + MEMBER_GET(rt, "", NULL), + MEMBER_GET(rd, "", NULL), + MEMBER_GET(sa, "", NULL), + MEMBER_GET(uniqueId, "", NULL), + + { 0 } +}; + + +#define DEF_METHOD_GET_UINT(name) \ + static PyObject *rabbitizer_type_Instruction_##name(PyRabbitizerInstruction *self, PyObject *Py_UNUSED(ignored)) { \ + return PyLong_FromUnsignedLong(RabbitizerInstruction_##name(&self->instr)); \ + } + +#define DEF_METHOD_GET_INT(name) \ + static PyObject *rabbitizer_type_Instruction_##name(PyRabbitizerInstruction *self, PyObject *Py_UNUSED(ignored)) { \ + return PyLong_FromLong(RabbitizerInstruction_##name(&self->instr)); \ + } + +DEF_METHOD_GET_UINT(getRaw) +DEF_METHOD_GET_UINT(getImmediate) +DEF_METHOD_GET_INT(getProcessedImmediate) +DEF_METHOD_GET_UINT(getInstrIndexAsVram) +DEF_METHOD_GET_INT(getBranchOffset) + +static PyObject *rabbitizer_type_Instruction_getOpcodeName(PyRabbitizerInstruction *self, UNUSED PyObject *closure) { + return PyUnicode_FromString(RabbitizerInstrId_getOpcodeName(self->instr.uniqueId)); +} + +static PyObject *rabbitizer_type_Instruction_getGenericBranchOffset(PyRabbitizerInstruction *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = { "currentVram", NULL }; + uint32_t currentVram; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "I", kwlist, ¤tVram)) { + return NULL; + } + + return PyLong_FromLong(RabbitizerInstruction_getGenericBranchOffset(&self->instr, currentVram)); +} + +static PyObject *rabbitizer_type_Instruction_blankOut(PyRabbitizerInstruction *self, PyObject *Py_UNUSED(ignored)) { + RabbitizerInstruction_blankOut(&self->instr); + Py_RETURN_NONE; +} + + +#define DEF_METHOD_BOOL(name) \ + static PyObject *rabbitizer_type_Instruction_##name(PyRabbitizerInstruction *self, PyObject *Py_UNUSED(ignored)) { \ + if (RabbitizerInstruction_##name(&self->instr)) { \ + Py_RETURN_TRUE; \ + } \ + Py_RETURN_FALSE; \ + } + +DEF_METHOD_BOOL(isImplemented) +DEF_METHOD_BOOL(isLikelyHandwritten) +DEF_METHOD_BOOL(isNop) +DEF_METHOD_BOOL(isUnconditionalBranch) +DEF_METHOD_BOOL(isJrRa) +DEF_METHOD_BOOL(isJrNotRa) +DEF_METHOD_BOOL(hasDelaySlot) + +static PyObject *rabbitizer_type_Instruction_mapInstrToType(PyRabbitizerInstruction *self, PyObject *Py_UNUSED(ignored)) { + const char *type = RabbitizerInstruction_mapInstrToType(&self->instr); + + if (type != NULL) { + return PyUnicode_FromString(type); + } + Py_RETURN_NONE; +} + +static PyObject *rabbitizer_type_Instruction_sameOpcode(PyRabbitizerInstruction *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = { "other", NULL }; + PyRabbitizerInstruction *other; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!", kwlist, &rabbitizer_type_Instruction_TypeObject, &other)) { + return NULL; + } + + if (RabbitizerInstruction_sameOpcode(&self->instr, &other->instr)) { + Py_RETURN_TRUE; + } + Py_RETURN_FALSE; +} + +static PyObject *rabbitizer_type_Instruction_sameOpcodeButDifferentArguments(PyRabbitizerInstruction *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = { "other", NULL }; + PyRabbitizerInstruction *other; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!", kwlist, &rabbitizer_type_Instruction_TypeObject, &other)) { + return NULL; + } + + if (RabbitizerInstruction_sameOpcodeButDifferentArguments(&self->instr, &other->instr)) { + Py_RETURN_TRUE; + } + Py_RETURN_FALSE; +} + +DEF_METHOD_BOOL(isValid) + +#define DEF_DESCRIPTOR_METHOD_BOOL(name) \ + static PyObject *rabbitizer_type_Instruction_##name(PyRabbitizerInstruction *self, PyObject *Py_UNUSED(ignored)) { \ + if (RabbitizerInstrDescriptor_##name(self->instr.descriptor)) { \ + Py_RETURN_TRUE; \ + } \ + Py_RETURN_FALSE; \ + } + +DEF_DESCRIPTOR_METHOD_BOOL(isUnknownType) +DEF_DESCRIPTOR_METHOD_BOOL(isJType) +DEF_DESCRIPTOR_METHOD_BOOL(isIType) +DEF_DESCRIPTOR_METHOD_BOOL(isRType) +DEF_DESCRIPTOR_METHOD_BOOL(isRegimmType) +DEF_DESCRIPTOR_METHOD_BOOL(isBranch) +DEF_DESCRIPTOR_METHOD_BOOL(isBranchLikely) +DEF_DESCRIPTOR_METHOD_BOOL(isJump) +DEF_DESCRIPTOR_METHOD_BOOL(isTrap) +DEF_DESCRIPTOR_METHOD_BOOL(isFloat) +DEF_DESCRIPTOR_METHOD_BOOL(isDouble) +DEF_DESCRIPTOR_METHOD_BOOL(isUnsigned) +DEF_DESCRIPTOR_METHOD_BOOL(modifiesRt) +DEF_DESCRIPTOR_METHOD_BOOL(modifiesRd) +DEF_DESCRIPTOR_METHOD_BOOL(notEmitedByCompilers) +DEF_DESCRIPTOR_METHOD_BOOL(canBeHi) +DEF_DESCRIPTOR_METHOD_BOOL(canBeLo) +DEF_DESCRIPTOR_METHOD_BOOL(doesLink) +DEF_DESCRIPTOR_METHOD_BOOL(doesDereference) +DEF_DESCRIPTOR_METHOD_BOOL(doesLoad) +DEF_DESCRIPTOR_METHOD_BOOL(doesStore) +DEF_DESCRIPTOR_METHOD_BOOL(maybeIsMove) +DEF_DESCRIPTOR_METHOD_BOOL(isPseudo) +// TODO: create an enum type for architectureVersion +// architectureVersion + + +static PyObject *rabbitizer_type_Instruction_disassemble(PyRabbitizerInstruction *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = {"immOverride", "extraLJust", NULL}; + const char *immOverride = NULL; + size_t immOverrideLength = 0; + int extraLJust = 0; + size_t bufferSize; + char *buffer; + PyObject *ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "|zi", kwlist, &immOverride, &extraLJust)) { + return NULL; + } + + if (immOverride != NULL) { + immOverrideLength = strlen(immOverride); + } + + bufferSize = RabbitizerInstruction_getSizeForBuffer(&self->instr, immOverrideLength, extraLJust); + + buffer = malloc(bufferSize+1); + if (buffer == NULL) { + // TODO: signal an exception? + return NULL; + } + + RabbitizerInstruction_disassemble(&self->instr, buffer, immOverride, immOverrideLength, extraLJust); + + ret = PyUnicode_FromString(buffer); + free(buffer); + return ret; +} + + +// To allow piclking the object +static PyObject *rabbitizer_type_Instruction___reduce__(PyRabbitizerInstruction *self, UNUSED PyObject *closure) { + PyObject *args; + PyObject *word; + PyObject *vram; + PyObject *category; + + word = PyLong_FromUnsignedLong(RabbitizerInstruction_getRaw(&self->instr)); + vram = PyLong_FromUnsignedLong(self->instr.vram); + category = rabbitizer_enum_InstrCategory_enumvalues[self->instr.category].instance; + + args = PyTuple_Pack(3, word, vram, category); + + return PyTuple_Pack(2, (PyObject*)&rabbitizer_type_Instruction_TypeObject, args); +} + + +#define METHOD_NO_ARGS(name, docs) { #name, (PyCFunction)rabbitizer_type_Instruction_##name, METH_NOARGS, PyDoc_STR(docs) } +#define METHOD_ARGS(name, docs) { #name, (PyCFunction)rabbitizer_type_Instruction_##name, METH_VARARGS | METH_KEYWORDS, PyDoc_STR(docs) } + + +static PyMethodDef rabbitizer_type_Instruction_methods[] = { + METHOD_NO_ARGS(getRaw, ""), + METHOD_NO_ARGS(getImmediate, ""), + METHOD_NO_ARGS(getProcessedImmediate, ""), + METHOD_NO_ARGS(getInstrIndexAsVram, ""), + METHOD_NO_ARGS(getBranchOffset, ""), + METHOD_ARGS(getGenericBranchOffset, ""), + METHOD_NO_ARGS(getOpcodeName, ""), + + METHOD_NO_ARGS(blankOut, ""), + + METHOD_NO_ARGS(isImplemented, ""), + METHOD_NO_ARGS(isLikelyHandwritten, ""), + METHOD_NO_ARGS(isNop, ""), + METHOD_NO_ARGS(isUnconditionalBranch, ""), + METHOD_NO_ARGS(isJrRa, ""), + METHOD_NO_ARGS(isJrNotRa, ""), + METHOD_NO_ARGS(hasDelaySlot, ""), + METHOD_NO_ARGS(mapInstrToType, ""), + + METHOD_ARGS(sameOpcode, "description"), + METHOD_ARGS(sameOpcodeButDifferentArguments, "description"), + + METHOD_NO_ARGS(isValid, ""), + + METHOD_NO_ARGS(isUnknownType, ""), + METHOD_NO_ARGS(isJType, ""), + METHOD_NO_ARGS(isIType, ""), + METHOD_NO_ARGS(isRType, ""), + METHOD_NO_ARGS(isRegimmType, ""), + METHOD_NO_ARGS(isBranch, ""), + METHOD_NO_ARGS(isBranchLikely, ""), + METHOD_NO_ARGS(isJump, ""), + METHOD_NO_ARGS(isTrap, ""), + METHOD_NO_ARGS(isFloat, ""), + METHOD_NO_ARGS(isDouble, ""), + METHOD_NO_ARGS(isUnsigned, ""), + METHOD_NO_ARGS(modifiesRt, ""), + METHOD_NO_ARGS(modifiesRd, ""), + METHOD_NO_ARGS(notEmitedByCompilers, ""), + METHOD_NO_ARGS(canBeHi, ""), + METHOD_NO_ARGS(canBeLo, ""), + METHOD_NO_ARGS(doesLink, ""), + METHOD_NO_ARGS(doesDereference, ""), + METHOD_NO_ARGS(doesLoad, ""), + METHOD_NO_ARGS(doesStore, ""), + METHOD_NO_ARGS(maybeIsMove, ""), + METHOD_NO_ARGS(isPseudo, ""), + // METHOD_NO_ARGS(getArchitectureVersion, ""), + + METHOD_ARGS(disassemble, "description"), + + METHOD_ARGS(__reduce__, ""), + + { 0 }, +}; + + +static PyObject *rabbitizer_type_Instruction_repr(PyRabbitizerInstruction *self) { + PyObject *ret; + size_t disasmBufferSize; + char *bufferStart; + char *buffer; + size_t typeNameLength; + size_t extraSize = 3 + 8 + 4; // "(0x" + 32bits hex + ") # " + int len; + + typeNameLength = strlen("rabbitizer.Instruction"); + + disasmBufferSize = RabbitizerInstruction_getSizeForBuffer(&self->instr, 0, 0); + + buffer = bufferStart = malloc(disasmBufferSize+1 + typeNameLength + extraSize); + if (buffer == NULL) { + // TODO: signal an exception? + return NULL; + } + + memcpy(buffer, "rabbitizer.Instruction", typeNameLength); + buffer += typeNameLength; + + len = sprintf(buffer, "(0x%08X) # ", RabbitizerInstruction_getRaw(&self->instr)); + if (len != 15) { + // bad stuff + // TODO: exception? + } + assert(len == 15); + buffer += len; + + RabbitizerInstruction_disassemble(&self->instr, buffer, NULL, 0, 0); + + ret = PyUnicode_FromString(bufferStart); + free(bufferStart); + return ret; +} + +static PyObject *rabbitizer_type_Instruction_str(PyRabbitizerInstruction *self) { + return rabbitizer_type_Instruction_disassemble(self, Py_BuildValue("()"), Py_BuildValue("{}")); +} + + +PyTypeObject rabbitizer_type_Instruction_TypeObject = { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name = "rabbitizer.Instruction", + .tp_doc = PyDoc_STR("Instruction"), + .tp_basicsize = sizeof(PyRabbitizerInstruction), + .tp_itemsize = 0, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + .tp_new = PyType_GenericNew, + .tp_init = (initproc) rabbitizer_type_Instruction_init, + .tp_dealloc = (destructor) rabbitizer_type_Instruction_dealloc, + .tp_repr = (reprfunc) rabbitizer_type_Instruction_repr, + .tp_str = (reprfunc) rabbitizer_type_Instruction_str, + .tp_members = rabbitizer_type_Instruction_members, + .tp_methods = rabbitizer_type_Instruction_methods, + .tp_getset = rabbitizer_type_Instruction_getsetters, +}; diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_type_LoPairingInfo.c b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_type_LoPairingInfo.c new file mode 100644 index 00000000..5a9c62cf --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_type_LoPairingInfo.c @@ -0,0 +1,50 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "rabbitizer_module.h" + + +static void rabbitizer_type_LoPairingInfo_dealloc(PyRabbitizerLoPairingInfo *self) { + Py_TYPE(self)->tp_free((PyObject *) self); +} + +static int rabbitizer_type_LoPairingInfo_init(PyRabbitizerLoPairingInfo *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = { NULL }; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "", kwlist)) { + return -1; + } + + RabbitizerLoPairingInfo_Init(&self->pairingInfo); + + return 0; +} + + +static PyMemberDef rabbitizer_type_LoPairingInfo_members[] = { + { "instrOffset", T_INT, offsetof(PyRabbitizerLoPairingInfo, pairingInfo.instrOffset), 0, "" }, + { "value", T_LONG, offsetof(PyRabbitizerLoPairingInfo, pairingInfo.value), 0, "" }, + { "shouldProcess", T_BOOL, offsetof(PyRabbitizerLoPairingInfo, pairingInfo.shouldProcess), 0, "" }, + { "isGpRel", T_BOOL, offsetof(PyRabbitizerLoPairingInfo, pairingInfo.isGpRel), 0, "" }, + { "isGpGot", T_BOOL, offsetof(PyRabbitizerLoPairingInfo, pairingInfo.isGpGot), 0, "" }, + + { 0 } +}; + + +PyTypeObject rabbitizer_type_LoPairingInfo_TypeObject = { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name = "rabbitizer.LoPairingInfo", + .tp_doc = PyDoc_STR("LoPairingInfo"), + .tp_basicsize = sizeof(PyRabbitizerLoPairingInfo), + .tp_itemsize = 0, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + .tp_new = PyType_GenericNew, + .tp_init = (initproc) rabbitizer_type_LoPairingInfo_init, + .tp_dealloc = (destructor) rabbitizer_type_LoPairingInfo_dealloc, + // .tp_repr = (reprfunc) rabbitizer_type_LoPairingInfo_repr, + // .tp_str = (reprfunc) rabbitizer_type_LoPairingInfo_str, + .tp_members = rabbitizer_type_LoPairingInfo_members, + // .tp_methods = rabbitizer_type_Instr_methods, + // .tp_getset = Instr_getsetters, +}; diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_type_RegistersTracker.c b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_type_RegistersTracker.c new file mode 100644 index 00000000..ec8f3642 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_type_RegistersTracker.c @@ -0,0 +1,320 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "rabbitizer_module.h" + +#include "analysis/RabbitizerRegistersTracker.h" + + +typedef struct PyRabbitizerRegistersTracker { + PyObject_HEAD + RabbitizerRegistersTracker tracker; +} PyRabbitizerRegistersTracker; + + +static void rabbitizer_type_RegistersTracker_dealloc(PyRabbitizerRegistersTracker *self) { + RabbitizerRegistersTracker_destroy(&self->tracker); + Py_TYPE(self)->tp_free((PyObject *) self); +} + +static int rabbitizer_type_RegistersTracker_init(PyRabbitizerRegistersTracker *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = { "other", NULL }; + PyRabbitizerRegistersTracker *pyOther = NULL; + RabbitizerRegistersTracker *other = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O!", kwlist, &rabbitizer_type_RegistersTracker_TypeObject, &pyOther)) { + return -1; + } + + if (pyOther != NULL) { + other = &pyOther->tracker; + } + + RabbitizerRegistersTracker_init(&self->tracker, other); + + return 0; +} + + +static PyObject *rabbitizer_type_RegistersTracker_moveRegisters(PyRabbitizerRegistersTracker *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = { "instr", NULL }; + PyRabbitizerInstruction *instr; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!", kwlist, &rabbitizer_type_Instruction_TypeObject, &instr)) { + return NULL; + } + + if (RabbitizerRegistersTracker_moveRegisters(&self->tracker, &instr->instr)) { + Py_RETURN_TRUE; + } + Py_RETURN_FALSE; +} + +static PyObject *rabbitizer_type_RegistersTracker_overwriteRegisters(PyRabbitizerRegistersTracker *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = { "instr", "instrOffset", NULL }; + PyRabbitizerInstruction *instr; + int instrOffset; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!i", kwlist, &rabbitizer_type_Instruction_TypeObject, &instr, &instrOffset)) { + return NULL; + } + + RabbitizerRegistersTracker_overwriteRegisters(&self->tracker, &instr->instr, instrOffset); + + Py_RETURN_NONE; +} + +static PyObject *rabbitizer_type_RegistersTracker_unsetRegistersAfterFuncCall(PyRabbitizerRegistersTracker *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = { "instr", "prevInstr", NULL }; + PyRabbitizerInstruction *instr; + PyRabbitizerInstruction *prevInstr; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!O!", kwlist, &rabbitizer_type_Instruction_TypeObject, &instr, &rabbitizer_type_Instruction_TypeObject, &prevInstr)) { + return NULL; + } + + RabbitizerRegistersTracker_unsetRegistersAfterFuncCall(&self->tracker, &instr->instr, &prevInstr->instr); + + Py_RETURN_NONE; +} + +static PyObject *rabbitizer_type_RegistersTracker_getAddressIfCanSetType(PyRabbitizerRegistersTracker *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = { "instr", "instrOffset", NULL }; + PyRabbitizerInstruction *instr; + int instrOffset; + uint32_t dstAddress = 0; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!i", kwlist, &rabbitizer_type_Instruction_TypeObject, &instr, &instrOffset)) { + return NULL; + } + + if (RabbitizerRegistersTracker_getAddressIfCanSetType(&self->tracker, &instr->instr, instrOffset, &dstAddress)) { + return PyLong_FromLong(dstAddress); + } + + Py_RETURN_NONE; +} + +static PyObject *rabbitizer_type_RegistersTracker_getJrInfo(PyRabbitizerRegistersTracker *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = { "instr", NULL }; + PyRabbitizerInstruction *instr; + int dstOffset = 0; + uint32_t dstAddress = 0; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!", kwlist, &rabbitizer_type_Instruction_TypeObject, &instr)) { + return NULL; + } + + if (RabbitizerRegistersTracker_getJrInfo(&self->tracker, &instr->instr, &dstOffset, &dstAddress)) { + return PyTuple_Pack(2, PyLong_FromLong(dstOffset), PyLong_FromLong(dstAddress)); + } + + Py_RETURN_NONE; +} + +static PyObject *rabbitizer_type_RegistersTracker_processLui(PyRabbitizerRegistersTracker *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = { "instr", "instrOffset", "prevInstr", NULL }; + PyRabbitizerInstruction *instr; + int instrOffset; + PyRabbitizerInstruction *pyPrevInstr = NULL; + RabbitizerInstruction *prevInstr = NULL; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!i|O!", kwlist, &rabbitizer_type_Instruction_TypeObject, &instr, &instrOffset, &rabbitizer_type_Instruction_TypeObject, &pyPrevInstr)) { + return NULL; + } + + if (pyPrevInstr != NULL) { + prevInstr = &pyPrevInstr->instr; + } + + RabbitizerRegistersTracker_processLui(&self->tracker, &instr->instr, instrOffset, prevInstr); + + Py_RETURN_NONE; +} + +static PyObject *rabbitizer_type_RegistersTracker_processGpLoad(PyRabbitizerRegistersTracker *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = { "instr", "instrOffset", NULL }; + PyRabbitizerInstruction *instr; + int instrOffset; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!i", kwlist, &rabbitizer_type_Instruction_TypeObject, &instr, &instrOffset)) { + return NULL; + } + + RabbitizerRegistersTracker_processGpLoad(&self->tracker, &instr->instr, instrOffset); + + Py_RETURN_NONE; +} + +static PyObject *rabbitizer_type_RegistersTracker_getLuiOffsetForConstant(PyRabbitizerRegistersTracker *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = { "instr", NULL }; + PyRabbitizerInstruction *instr; + int dstOffset = 0; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!", kwlist, &rabbitizer_type_Instruction_TypeObject, &instr)) { + return NULL; + } + + if (RabbitizerRegistersTracker_getLuiOffsetForConstant(&self->tracker, &instr->instr, &dstOffset)) { + return PyLong_FromLong(dstOffset); + } + + Py_RETURN_NONE; +} + +static PyObject *rabbitizer_type_RegistersTracker_processConstant(PyRabbitizerRegistersTracker *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = { "instr", "value", "instrOffset", NULL }; + PyRabbitizerInstruction *instr; + uint32_t value; + int instrOffset; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!Ii", kwlist, &rabbitizer_type_Instruction_TypeObject, &instr, &value, &instrOffset)) { + return NULL; + } + + RabbitizerRegistersTracker_processConstant(&self->tracker, &instr->instr, value, instrOffset); + + Py_RETURN_NONE; +} + +static PyObject *rabbitizer_type_RegistersTracker_getLuiOffsetForLo(PyRabbitizerRegistersTracker *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = { "instr", "instrOffset", NULL }; + PyRabbitizerInstruction *instr; + int instrOffset; + int dstOffset = 0; + bool dstIsGp = false; + bool validResults = false; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!i", kwlist, &rabbitizer_type_Instruction_TypeObject, &instr, &instrOffset)) { + return NULL; + } + + validResults = RabbitizerRegistersTracker_getLuiOffsetForLo(&self->tracker, &instr->instr, instrOffset, &dstOffset, &dstIsGp); + + return PyTuple_Pack(3, PyLong_FromLong(dstOffset), PyBool_FromLong(dstIsGp), PyBool_FromLong(validResults)); +} + +static PyObject *rabbitizer_type_RegistersTracker_preprocessLoAndGetInfo(PyRabbitizerRegistersTracker *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = { "instr", "instrOffset", NULL }; + PyRabbitizerInstruction *instr; + int instrOffset; + PyRabbitizerLoPairingInfo *ret; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!i", kwlist, &rabbitizer_type_Instruction_TypeObject, &instr, &instrOffset)) { + return NULL; + } + + ret = PyObject_CallObject((PyObject*)&rabbitizer_type_LoPairingInfo_TypeObject, NULL); + if (ret == NULL) { + PyErr_SetString(PyExc_RuntimeError, "Internal error: not able to instance LoPairingInfo object"); + return NULL; + } + + ret->pairingInfo = RabbitizerRegistersTracker_preprocessLoAndGetInfo(&self->tracker, &instr->instr, instrOffset); + + return ret; +} + +static PyObject *rabbitizer_type_RegistersTracker_processLo(PyRabbitizerRegistersTracker *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = { "instr", "value", "instrOffset", NULL }; + PyRabbitizerInstruction *instr; + uint32_t value; + int instrOffset; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!Ii", kwlist, &rabbitizer_type_Instruction_TypeObject, &instr, &value, &instrOffset)) { + return NULL; + } + + RabbitizerRegistersTracker_processLo(&self->tracker, &instr->instr, value, instrOffset); + + Py_RETURN_NONE; +} + +static PyObject *rabbitizer_type_RegistersTracker_hasLoButNoHi(PyRabbitizerRegistersTracker *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = { "instr", NULL }; + PyRabbitizerInstruction *instr; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!", kwlist, &rabbitizer_type_Instruction_TypeObject, &instr)) { + return NULL; + } + + if (RabbitizerRegistersTracker_hasLoButNoHi(&self->tracker, &instr->instr)) { + Py_RETURN_TRUE; + } + Py_RETURN_FALSE; +} + + +#define METHOD_NO_ARGS(name, docs) { #name, (PyCFunction)rabbitizer_type_RegistersTracker_##name, METH_NOARGS, PyDoc_STR(docs) } +#define METHOD_ARGS(name, docs) { #name, (PyCFunction)rabbitizer_type_RegistersTracker_##name, METH_VARARGS | METH_KEYWORDS, PyDoc_STR(docs) } + +static PyMethodDef rabbitizer_type_RegistersTracker_methods[] = { + METHOD_ARGS(moveRegisters, ""), + METHOD_ARGS(overwriteRegisters, ""), + METHOD_ARGS(unsetRegistersAfterFuncCall, ""), + METHOD_ARGS(getAddressIfCanSetType, ""), + METHOD_ARGS(getJrInfo, ""), + METHOD_ARGS(processLui, ""), + METHOD_ARGS(processGpLoad, ""), + METHOD_ARGS(getLuiOffsetForConstant, ""), + METHOD_ARGS(processConstant, ""), + METHOD_ARGS(getLuiOffsetForLo, ""), + METHOD_ARGS(preprocessLoAndGetInfo, ""), + METHOD_ARGS(processLo, ""), + METHOD_ARGS(hasLoButNoHi, ""), + + { 0 }, +}; + + +PyObject *rabbitizer_type_RegistersTracker___getitem__(PyRabbitizerRegistersTracker* self, Py_ssize_t index) { + RabbitizerTrackedRegisterState *state; + PyObject *args; + PyRabbitizerTrackedRegisterState *pyState; + + if (index < 0 || index >= ARRAY_COUNT(self->tracker.registers)) { + PyErr_SetString(PyExc_IndexError, "Index must be a value between 0 and 31"); + return NULL; + } + + state = &self->tracker.registers[index]; + + args = Py_BuildValue("(i)", state->registerNum); + if (args == NULL) { + PyErr_SetString(PyExc_RuntimeError, "Internal error: not able to instance TrackedRegisterState parameters"); + return NULL; + } + + pyState = PyObject_CallObject((PyObject*)&rabbitizer_type_TrackedRegisterState_TypeObject, args); + Py_DECREF(args); + if (pyState == NULL) { + PyErr_SetString(PyExc_RuntimeError, "Internal error: not able to instance TrackedRegisterState object"); + return NULL; + } + + RabbitizerTrackedRegisterState_copyState(&pyState->registerState, state); + return pyState; +} + + +static PySequenceMethods example_classSeqMethods = { + .sq_item = (ssizeargfunc)rabbitizer_type_RegistersTracker___getitem__, // sq_item +}; + + +PyTypeObject rabbitizer_type_RegistersTracker_TypeObject = { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name = "rabbitizer.RegistersTracker", + .tp_doc = PyDoc_STR("RegistersTracker"), + .tp_basicsize = sizeof(PyRabbitizerRegistersTracker), + .tp_itemsize = 0, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + .tp_new = PyType_GenericNew, + .tp_init = (initproc) rabbitizer_type_RegistersTracker_init, + .tp_dealloc = (destructor) rabbitizer_type_RegistersTracker_dealloc, + // .tp_repr = (reprfunc) rabbitizer_type_RegistersTracker_repr, + .tp_as_sequence = &example_classSeqMethods, + // .tp_str = (reprfunc) rabbitizer_type_RegistersTracker_str, + .tp_methods = rabbitizer_type_RegistersTracker_methods, + // .tp_getset = rabbitizer_type_RegistersTracker_getsetters, +}; diff --git a/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_type_TrackedRegisterState.c b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_type_TrackedRegisterState.c new file mode 100644 index 00000000..1f52e4d0 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rabbitizer/rabbitizer_type_TrackedRegisterState.c @@ -0,0 +1,102 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "rabbitizer_module.h" + + +static void rabbitizer_type_TrackedRegisterState_dealloc(PyRabbitizerTrackedRegisterState *self) { + RabbitizerTrackedRegisterState_destroy(&self->registerState); + Py_TYPE(self)->tp_free((PyObject *) self); +} + +static int rabbitizer_type_TrackedRegisterState_init(PyRabbitizerTrackedRegisterState *self, PyObject *args, PyObject *kwds) { + static char *kwlist[] = { "registerNum", NULL }; + int registerNum; + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "i", kwlist, ®isterNum)) { + return -1; + } + + RabbitizerTrackedRegisterState_init(&self->registerState, registerNum); + + return 0; +} + + +#define DEF_MEMBER_GET_BOOL(name) \ + static PyObject *rabbitizer_type_TrackedRegisterState_member_get_##name(PyRabbitizerTrackedRegisterState *self, UNUSED PyObject *closure) { \ + if (self->registerState.name) { \ + Py_RETURN_TRUE; \ + } \ + Py_RETURN_FALSE; \ + } + +#define DEF_MEMBER_GET_INT(name) \ + static PyObject *rabbitizer_type_TrackedRegisterState_member_get_##name(PyRabbitizerTrackedRegisterState *self, UNUSED PyObject *closure) { \ + return PyLong_FromLong(self->registerState.name); \ + } + +#define DEF_MEMBER_GET_UINT(name) \ + static PyObject *rabbitizer_type_TrackedRegisterState_member_get_##name(PyRabbitizerTrackedRegisterState *self, UNUSED PyObject *closure) { \ + return PyLong_FromUnsignedLong(self->registerState.name); \ + } + + +DEF_MEMBER_GET_INT(registerNum) + +DEF_MEMBER_GET_BOOL(hasLuiValue) +DEF_MEMBER_GET_INT(luiOffset) +DEF_MEMBER_GET_BOOL(luiSetOnBranchLikely) + +DEF_MEMBER_GET_BOOL(hasGpGot) +DEF_MEMBER_GET_INT(gpGotOffset) + +DEF_MEMBER_GET_BOOL(hasLoValue) +DEF_MEMBER_GET_INT(loOffset) +DEF_MEMBER_GET_BOOL(dereferenced) +DEF_MEMBER_GET_INT(dereferenceOffset) + +DEF_MEMBER_GET_UINT(value) + + +#define MEMBER_GET(name, docs, closure) { #name, (getter) rabbitizer_type_TrackedRegisterState_member_get_##name, (setter) NULL, PyDoc_STR(docs), closure } +#define MEMBER_SET(name, docs, closure) { #name, (getter) NULL, (setter) rabbitizer_type_TrackedRegisterState_member_set_##name, PyDoc_STR(docs), closure } +#define MEMBER_GET_SET(name, docs, closure) { #name, (getter) rabbitizer_type_TrackedRegisterState_member_get_##name, (setter) rabbitizer_type_TrackedRegisterState_member_set_##name, PyDoc_STR(docs), closure } + + +static PyGetSetDef rabbitizer_type_TrackedRegisterState_getsetters[] = { + MEMBER_GET(registerNum, "", NULL), + + MEMBER_GET(hasLuiValue, "", NULL), + MEMBER_GET(luiOffset, "", NULL), + MEMBER_GET(luiSetOnBranchLikely, "", NULL), + + MEMBER_GET(hasGpGot, "", NULL), + MEMBER_GET(gpGotOffset, "", NULL), + + MEMBER_GET(hasLoValue, "", NULL), + MEMBER_GET(loOffset, "", NULL), + MEMBER_GET(dereferenced, "", NULL), + MEMBER_GET(dereferenceOffset, "", NULL), + + MEMBER_GET(value, "", NULL), + + { 0 } +}; + + +PyTypeObject rabbitizer_type_TrackedRegisterState_TypeObject = { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name = "rabbitizer.TrackedRegisterState", + .tp_doc = PyDoc_STR("TrackedRegisterState"), + .tp_basicsize = sizeof(PyRabbitizerTrackedRegisterState), + .tp_itemsize = 0, + .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + .tp_new = PyType_GenericNew, + .tp_init = (initproc) rabbitizer_type_TrackedRegisterState_init, + .tp_dealloc = (destructor) rabbitizer_type_TrackedRegisterState_dealloc, + // .tp_repr = (reprfunc) rabbitizer_type_TrackedRegisterState_repr, + // .tp_str = (reprfunc) rabbitizer_type_TrackedRegisterState_str, + // .tp_methods = rabbitizer_type_TrackedRegisterState_methods, + .tp_getset = rabbitizer_type_TrackedRegisterState_getsetters, +}; diff --git a/tools/ido-static-recomp/tools/rabbitizer/registersTrackerTest.c b/tools/ido-static-recomp/tools/rabbitizer/registersTrackerTest.c new file mode 100644 index 00000000..5aef0f83 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/registersTrackerTest.c @@ -0,0 +1,41 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerInstruction.h" +#include "analysis/RabbitizerRegistersTracker.h" + + +int main() { + RabbitizerRegistersTracker regsTracker; + RabbitizerInstruction instr; + uint32_t word = 0x002D0821; // addu $at, $at, $t5 + uint32_t vram = 0x0042F170; + int instrOffset = 220; + + RabbitizerRegistersTracker_init(®sTracker, NULL); + + RabbitizerInstruction_init(&instr, word, vram); + RabbitizerInstruction_processUniqueId(&instr); + + regsTracker.registers[1] = (RabbitizerTrackedRegisterState){ + .dereferenceOffset = 212, + .dereferenced = true, + .gpGotOffset = 212, + .hasGpGot = true, + .hasLoValue = true, + .hasLuiValue = false, + .loOffset = 212, + .luiOffset = 0, + .luiSetOnBranchLikely = false, + .value = 0x10010000, + .registerNum = regsTracker.registers[1].registerNum, + }; + + RabbitizerRegistersTracker_overwriteRegisters(®sTracker, &instr, instrOffset); + + RabbitizerInstruction_destroy(&instr); + + RabbitizerRegistersTracker_destroy(®sTracker); + + return 0; +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/rsptest.c b/tools/ido-static-recomp/tools/rabbitizer/rsptest.c new file mode 100644 index 00000000..7aa04eef --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/rsptest.c @@ -0,0 +1,44 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerInstructionRsp.h" + +#include +#include +#include +#include + + +int main() { + uint32_t word; + RabbitizerInstruction instr; + char *buffer; + int extraLJust = 5; + uint32_t validbits; + + //word = 0x4B01C8E8; // vand $v3, $v25, $v1[0] + word = 0x48952000; // mtc2 $21, $v4[0] + + RabbitizerInstructionRsp_init(&instr, word, 0x80000000); + + RabbitizerInstructionRsp_processUniqueId(&instr); + + buffer = malloc(RabbitizerInstruction_getSizeForBuffer(&instr, 0, extraLJust) + 1); + assert(buffer != NULL); + + RabbitizerInstruction_disassemble(&instr, buffer, NULL, 0, extraLJust); + + printf("%08X: %s\n", word, buffer); + + validbits = RabbitizerInstruction_getValidBits(&instr); + + printf("word: %08X\n", instr.word); + printf("mandatory bits: %08X\n", instr._mandatorybits); + printf("valid bits: %08X\n", validbits); + printf("invalid bits: %08X\n", (~validbits) & instr.word); + + free(buffer); + RabbitizerInstructionRsp_destroy(&instr); + + return 0; +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/setup.cfg b/tools/ido-static-recomp/tools/rabbitizer/setup.cfg new file mode 100644 index 00000000..e2bd449e --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/setup.cfg @@ -0,0 +1,24 @@ +# SPDX-FileCopyrightText: © 2022 Decompollaborate +# SPDX-License-Identifier: MIT + +[metadata] +name = rabbitizer +# Version should be synced with include/common/RabbitizerVersion.h +version = 1.2.3 +author = Decompollaborate +license = MIT +description = MIPS instruction decoder +url = https://github.com/Decompollaborate/rabbitizer +project_urls = + Source = https://github.com/Decompollaborate/rabbitizer + Bug Tracker = https://github.com/Decompollaborate/rabbitizer/issues +long_description = file: README.md +long_description_content_type = text/markdown + +[options] +packages = rabbitizer + +[options.package_data] +rabbitizer = + **/*.pyi + **/py.typed diff --git a/tools/ido-static-recomp/tools/rabbitizer/setup.py b/tools/ido-static-recomp/tools/rabbitizer/setup.py new file mode 100644 index 00000000..2e048e69 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/setup.py @@ -0,0 +1,28 @@ +# SPDX-FileCopyrightText: © 2022 Decompollaborate +# SPDX-License-Identifier: MIT + +from setuptools import setup, Extension + + +setup( + ext_modules=[ + Extension( + name="rabbitizer", + sources=["rabbitizer/rabbitizer_module.c", "rabbitizer/rabbitizer_submodule_Utils.c", "rabbitizer/rabbitizer_type_Instruction.c", "rabbitizer/rabbitizer_global_config.c", "rabbitizer/rabbitizer_type_TrackedRegisterState.c", "rabbitizer/rabbitizer_type_RegistersTracker.c", "rabbitizer/rabbitizer_type_LoPairingInfo.c", + "rabbitizer/enums/rabbitizer_type_Enum.c", "rabbitizer/enums/enums_utils.c", "rabbitizer/enums/rabbitizer_enum_InstrCategory.c", "rabbitizer/enums/rabbitizer_enum_InstrId.c", "rabbitizer/enums/rabbitizer_enum_Abi.c", + "rabbitizer/enums/registers/rabbitizer_enum_GprO32.c", "rabbitizer/enums/registers/rabbitizer_enum_GprN32.c", + "src/instructions/RabbitizerInstruction/RabbitizerInstruction_Disassemble.c", "src/instructions/RabbitizerInstruction/RabbitizerInstruction_ProcessUniqueId.c", "src/instructions/RabbitizerInstruction/RabbitizerInstruction.c", "src/instructions/RabbitizerInstruction/RabbitizerInstruction_Examination.c", + "src/instructions/RabbitizerInstructionRsp/RabbitizerInstructionRsp.c", "src/instructions/RabbitizerInstructionRsp/RabbitizerInstructionRsp_ProcessUniqueId.c", + "src/instructions/RabbitizerInstructionR5900/RabbitizerInstructionR5900.c", "src/instructions/RabbitizerInstructionR5900/RabbitizerInstructionR5900_ProcessUniqueId.c", + "src/instructions/RabbitizerInstrDescriptor.c", "src/instructions/RabbitizerInstrId.c", "src/instructions/RabbitizerRegister.c", "src/instructions/RabbitizerInstrSuffix.c", + "src/analysis/RabbitizerTrackedRegisterState.c", "src/analysis/RabbitizerRegistersTracker.c", "src/analysis/RabbitizerLoPairingInfo.c", + "src/common/Utils.c", "src/common/RabbitizerVersion.c", "src/common/RabbitizerConfig.c"], + include_dirs=["include", "rabbitizer"], + extra_compile_args = [ + "-std=c11", + "-Wall", + "-g", + ], + ), + ], +) diff --git a/tools/ido-static-recomp/tools/rabbitizer/src/analysis/RabbitizerLoPairingInfo.c b/tools/ido-static-recomp/tools/rabbitizer/src/analysis/RabbitizerLoPairingInfo.c new file mode 100644 index 00000000..0b4dc795 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/src/analysis/RabbitizerLoPairingInfo.c @@ -0,0 +1,14 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "analysis/RabbitizerLoPairingInfo.h" + +void RabbitizerLoPairingInfo_Init(RabbitizerLoPairingInfo *self) { + *self = (RabbitizerLoPairingInfo){ + .instrOffset = 0, + .value = 0, + .shouldProcess = false, + .isGpRel = false, + .isGpGot = false, + }; +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/src/analysis/RabbitizerRegistersTracker.c b/tools/ido-static-recomp/tools/rabbitizer/src/analysis/RabbitizerRegistersTracker.c new file mode 100644 index 00000000..82913688 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/src/analysis/RabbitizerRegistersTracker.c @@ -0,0 +1,425 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "analysis/RabbitizerRegistersTracker.h" + +#include + +#include "common/Utils.h" +#include "common/RabbitizerConfig.h" +#include "instructions/RabbitizerRegister.h" + +// TODO: abi checks + +void RabbitizerRegistersTracker_init(RabbitizerRegistersTracker *self, const RabbitizerRegistersTracker *other) { + size_t i; + + for (i = 0; i < ARRAY_COUNT(self->registers); i++) { + RabbitizerTrackedRegisterState_init(&self->registers[i], i); + if (other != NULL) { + RabbitizerTrackedRegisterState_copyState(&self->registers[i], &other->registers[i]); + } + } +} + +void RabbitizerRegistersTracker_destroy(RabbitizerRegistersTracker *self) { + for (size_t i = 0; i < ARRAY_COUNT(self->registers); i++) { + RabbitizerTrackedRegisterState_destroy(&self->registers[i]); + } +} + +// TODO: simplify logic +bool RabbitizerRegistersTracker_moveRegisters(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr) { + RabbitizerTrackedRegisterState *dstState; + RabbitizerTrackedRegisterState *srcState; + uint8_t reg; + uint8_t rd = RAB_INSTR_GET_rd(instr); + uint8_t rs = RAB_INSTR_GET_rs(instr); + uint8_t rt = RAB_INSTR_GET_rt(instr); + + if (!RabbitizerInstrDescriptor_maybeIsMove(instr->descriptor)) { + return false; + } + if (rt == 0 && rs == 0) { + // ? + // RabbitizerTrackedRegisterState_clear(dstState); + return false; + } + + if (rt == 0) { + reg = rs; + } else if (rs == 0) { + reg = rt; + } else { + if (RabbitizerTrackedRegisterState_hasAnyValue(&self->registers[rs]) && !RabbitizerTrackedRegisterState_hasAnyValue(&self->registers[rt])) { + reg = rs; + } else if (RabbitizerTrackedRegisterState_hasAnyValue(&self->registers[rt]) && !RabbitizerTrackedRegisterState_hasAnyValue(&self->registers[rs])) { + reg = rt; + } else if (rd == rs) { // Check stuff like `addu $3, $3, $2` + reg = rt; + if (self->registers[rs].hasLuiValue || self->registers[rs].hasGpGot) { + reg = rs; + } + } else if (rd == rt) { + reg = rs; + if (self->registers[rt].hasLuiValue || self->registers[rt].hasGpGot) { + reg = rt; + } + } else { + // ? + // RabbitizerTrackedRegisterState_clear(dstState); + return false; + } + + srcState = &self->registers[reg]; + RabbitizerTrackedRegisterState_copyState(&self->registers[rd], srcState); + return true; + } + + srcState = &self->registers[reg]; + dstState = &self->registers[rd]; + + if (RabbitizerTrackedRegisterState_hasAnyValue(srcState)) { + RabbitizerTrackedRegisterState_copyState(dstState, srcState); + return true; + } + + RabbitizerTrackedRegisterState_clear(dstState); + return false; +} + +void RabbitizerRegistersTracker_overwriteRegisters(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int instrOffset) { + bool shouldRemove = false; + uint8_t reg = 0; + RabbitizerTrackedRegisterState *state = NULL; + + if (RabbitizerRegistersTracker_moveRegisters(self, instr)) { + return; + } + + if (RabbitizerInstrDescriptor_isFloat(instr->descriptor)) { + switch (instr->uniqueId) { + case RABBITIZER_INSTR_ID_cpu_mtc1: + case RABBITIZER_INSTR_ID_cpu_dmtc1: + case RABBITIZER_INSTR_ID_cpu_ctc1: + // IDO usually use a reg as a temp when loading a constant value + // into the float coprocessor, after that IDO never re-uses the value + // in that reg for anything else + shouldRemove = true; + reg = RAB_INSTR_GET_rt(instr); + break; + + default: + break; + } + } else if (RabbitizerInstrDescriptor_isRType(instr->descriptor) || + (RabbitizerInstrDescriptor_isBranch(instr->descriptor) && RabbitizerInstrDescriptor_isIType(instr->descriptor))) { + // $at usually is a one-use reg + uint8_t at = 0; + + if (RAB_INSTR_GET_rs(instr) == 1) { + at = RAB_INSTR_GET_rs(instr); + } else if (RAB_INSTR_GET_rt(instr) == 1) { + at = RAB_INSTR_GET_rt(instr); + } + + state = &self->registers[at]; + if (state->hasLoValue || state->hasLuiValue || state->hasGpGot) { + shouldRemove = true; + reg = at; + } + } + + if (RabbitizerInstrDescriptor_modifiesRt(instr->descriptor)) { + shouldRemove = true; + reg = RAB_INSTR_GET_rt(instr); + if (RabbitizerInstrDescriptor_canBeHi(instr->descriptor)) { + RabbitizerTrackedRegisterState_clearLo(&self->registers[RAB_INSTR_GET_rt(instr)]); + shouldRemove = false; + } + } + if (RabbitizerInstrDescriptor_modifiesRd(instr->descriptor)) { + shouldRemove = true; + reg = RAB_INSTR_GET_rd(instr); + } + + if (shouldRemove) { + state = &self->registers[reg]; +#if 0 + if (state->hasLuiValue) { + self->_printDebugInfo_clearRegister(instr, reg) + } +#endif + + RabbitizerTrackedRegisterState_clearHi(state); + if (!RabbitizerTrackedRegisterState_wasSetInCurrentOffset(state, instrOffset)) { + RabbitizerTrackedRegisterState_clearGp(state); + RabbitizerTrackedRegisterState_clearLo(state); + } + } +} + +void RabbitizerRegistersTracker_unsetRegistersAfterFuncCall(RabbitizerRegistersTracker *self, UNUSED const RabbitizerInstruction *instr, + const RabbitizerInstruction *prevInstr) { + RabbitizerTrackedRegisterState *state = NULL; + + if (!RabbitizerInstrDescriptor_doesLink(prevInstr->descriptor)) { + return; + } + + if (RabbitizerConfig_Cfg.regNames.gprAbiNames == RABBITIZER_ABI_O32 || RabbitizerConfig_Cfg.regNames.gprAbiNames == RABBITIZER_ABI_NUMERIC) { + for (size_t reg = 0; reg < ARRAY_COUNT(self->registers); reg++) { + switch (reg) { + case RABBITIZER_REG_GPR_O32_at: + case RABBITIZER_REG_GPR_O32_v0: + case RABBITIZER_REG_GPR_O32_v1: + case RABBITIZER_REG_GPR_O32_a0: + case RABBITIZER_REG_GPR_O32_a1: + case RABBITIZER_REG_GPR_O32_a2: + case RABBITIZER_REG_GPR_O32_a3: + case RABBITIZER_REG_GPR_O32_t0: + case RABBITIZER_REG_GPR_O32_t1: + case RABBITIZER_REG_GPR_O32_t2: + case RABBITIZER_REG_GPR_O32_t3: + case RABBITIZER_REG_GPR_O32_t4: + case RABBITIZER_REG_GPR_O32_t5: + case RABBITIZER_REG_GPR_O32_t6: + case RABBITIZER_REG_GPR_O32_t7: + case RABBITIZER_REG_GPR_O32_t8: + case RABBITIZER_REG_GPR_O32_t9: + case RABBITIZER_REG_GPR_O32_ra: + state = &self->registers[reg]; +#if 0 + if (state.hasLuiValue) { + self->_printDebugInfo_clearRegister(instr, reg) + } +#endif + RabbitizerTrackedRegisterState_clear(state); + break; + + default: + break; + } + } + } else if (RabbitizerConfig_Cfg.regNames.gprAbiNames == RABBITIZER_ABI_N32 || RabbitizerConfig_Cfg.regNames.gprAbiNames == RABBITIZER_ABI_N64) { + for (size_t reg = 0; reg < ARRAY_COUNT(self->registers); reg++) { + switch (reg) { + case RABBITIZER_REG_GPR_N32_at: + case RABBITIZER_REG_GPR_N32_v0: + case RABBITIZER_REG_GPR_N32_v1: + case RABBITIZER_REG_GPR_N32_a0: + case RABBITIZER_REG_GPR_N32_a1: + case RABBITIZER_REG_GPR_N32_a2: + case RABBITIZER_REG_GPR_N32_a3: + case RABBITIZER_REG_GPR_N32_a4: + case RABBITIZER_REG_GPR_N32_a5: + case RABBITIZER_REG_GPR_N32_a6: + case RABBITIZER_REG_GPR_N32_a7: + case RABBITIZER_REG_GPR_N32_t0: + case RABBITIZER_REG_GPR_N32_t1: + case RABBITIZER_REG_GPR_N32_t2: + case RABBITIZER_REG_GPR_N32_t3: + case RABBITIZER_REG_GPR_N32_t8: + case RABBITIZER_REG_GPR_N32_t9: + case RABBITIZER_REG_GPR_N32_ra: + state = &self->registers[reg]; +#if 0 + if (state.hasLuiValue) { + self->_printDebugInfo_clearRegister(instr, reg) + } +#endif + RabbitizerTrackedRegisterState_clear(state); + break; + + default: + break; + } + } + } +} + +bool RabbitizerRegistersTracker_getAddressIfCanSetType(const RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int instrOffset, + uint32_t *dstAddress) { + const RabbitizerTrackedRegisterState *state = &self->registers[RAB_INSTR_GET_rs(instr)]; + + if (!state->hasLoValue) { + return false; + } + + if (!state->dereferenced || instrOffset == state->dereferenceOffset) { + *dstAddress = state->value; + return true; + } + + return false; +} + +bool RabbitizerRegistersTracker_getJrInfo(const RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int *dstOffset, uint32_t *dstAddress) { + const RabbitizerTrackedRegisterState *state = &self->registers[RAB_INSTR_GET_rs(instr)]; + + if (!state->hasLoValue || !state->dereferenced) { + return false; + } + + *dstOffset = state->loOffset; + *dstAddress = state->value; + return true; +} + +// prevInstr can be NULL +void RabbitizerRegistersTracker_processLui(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int instrOffset, + const RabbitizerInstruction *prevInstr) { + RabbitizerTrackedRegisterState *state = NULL; + + assert(RabbitizerInstrDescriptor_canBeHi(instr->descriptor)); + + state = &self->registers[RAB_INSTR_GET_rt(instr)]; + RabbitizerTrackedRegisterState_clear(state); + RabbitizerTrackedRegisterState_setHi(state, RabbitizerInstruction_getImmediate(instr), instrOffset); + + if (prevInstr != NULL) { + // If the previous instructions is a branch likely, then nulify + // the effects of this instruction for future analysis + state->luiSetOnBranchLikely = RabbitizerInstrDescriptor_isBranchLikely(prevInstr->descriptor) || RabbitizerInstruction_isUnconditionalBranch(prevInstr); + } +} + +void RabbitizerRegistersTracker_processGpLoad(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int instrOffset) { + RabbitizerTrackedRegisterState *state = NULL; + + assert(RabbitizerInstrDescriptor_canBeLo(instr->descriptor)); + + state = &self->registers[RAB_INSTR_GET_rt(instr)]; + + RabbitizerTrackedRegisterState_clear(state); + RabbitizerTrackedRegisterState_setGpLoad(state, RabbitizerInstruction_getImmediate(instr), instrOffset); +} + +bool RabbitizerRegistersTracker_getLuiOffsetForConstant(const RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int *dstOffset) { + const RabbitizerTrackedRegisterState *state = &self->registers[RAB_INSTR_GET_rs(instr)]; + + if (!state->hasLuiValue) { + return false; + } + + *dstOffset = state->luiOffset; + return true; +} + +void RabbitizerRegistersTracker_processConstant(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, uint32_t value, int offset) { + RabbitizerTrackedRegisterState *stateDst = &self->registers[RAB_INSTR_GET_rt(instr)]; + + RabbitizerTrackedRegisterState_setLo(stateDst, value, offset); +} + +// TODO: this function should not be changing the state of the tracker +bool RabbitizerRegistersTracker_getLuiOffsetForLo(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int instrOffset, int *dstOffset, + bool *dstIsGp) { + const RabbitizerTrackedRegisterState *state = &self->registers[RAB_INSTR_GET_rs(instr)]; + + if (state->hasLuiValue && !state->luiSetOnBranchLikely) { + *dstOffset = state->luiOffset; + *dstIsGp = false; + return true; + } + + // TODO: abi + if (RAB_INSTR_GET_rs(instr) == 28) { // $gp + *dstOffset = 0; + *dstIsGp = true; + return true; + } + + if (RabbitizerInstrDescriptor_modifiesRt(instr->descriptor) && RabbitizerInstrDescriptor_doesDereference(instr->descriptor)) { + if (state->hasLoValue && !state->dereferenced) { + // Simulate a dereference + RabbitizerTrackedRegisterState_dereferenceState(&self->registers[RAB_INSTR_GET_rt(instr)], state, instrOffset); + } + } + + return false; +} + +RabbitizerLoPairingInfo RabbitizerRegistersTracker_preprocessLoAndGetInfo(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, + int instrOffset) { + const RabbitizerTrackedRegisterState *state = &self->registers[RAB_INSTR_GET_rs(instr)]; + RabbitizerLoPairingInfo pairingInfo; + + RabbitizerLoPairingInfo_Init(&pairingInfo); + + if (state->hasLuiValue && !state->luiSetOnBranchLikely) { + pairingInfo.instrOffset = state->luiOffset; + pairingInfo.value = state->value; + pairingInfo.shouldProcess = true; + return pairingInfo; + } + + if ((RAB_INSTR_GET_rs(instr) == RABBITIZER_REG_GPR_O32_gp) || (RAB_INSTR_GET_rs(instr) == RABBITIZER_REG_GPR_N32_gp)) { + pairingInfo.value = state->value; + pairingInfo.isGpRel = true; + pairingInfo.shouldProcess = true; + return pairingInfo; + } + + if (state->hasGpGot) { + pairingInfo.instrOffset = state->gpGotOffset; + pairingInfo.value = state->value; + pairingInfo.shouldProcess = true; + pairingInfo.isGpGot = true; + return pairingInfo; + } + + if (RabbitizerInstrDescriptor_modifiesRt(instr->descriptor) && RabbitizerInstrDescriptor_doesDereference(instr->descriptor)) { + if (state->hasLoValue && !state->dereferenced) { + // Simulate a dereference + RabbitizerTrackedRegisterState_dereferenceState(&self->registers[RAB_INSTR_GET_rt(instr)], state, instrOffset); + } + } + + return pairingInfo; +} + +void RabbitizerRegistersTracker_processLo(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, uint32_t value, int offset) { + RabbitizerTrackedRegisterState *stateDst; + + if (!RabbitizerInstrDescriptor_modifiesRt(instr->descriptor)) { + return; + } + + stateDst = &self->registers[RAB_INSTR_GET_rt(instr)]; + RabbitizerTrackedRegisterState_setLo(stateDst, value, offset); + if (RabbitizerInstrDescriptor_doesDereference(instr->descriptor)) { + RabbitizerTrackedRegisterState_deref(stateDst, offset); + } + if (RAB_INSTR_GET_rt(instr) == RAB_INSTR_GET_rs(instr)) { + RabbitizerTrackedRegisterState_clearHi(stateDst); + RabbitizerTrackedRegisterState_clearGp(stateDst); + } +} + +bool RabbitizerRegistersTracker_hasLoButNoHi(const RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr) { + const RabbitizerTrackedRegisterState *state; + + assert(instr != NULL); + + state = &self->registers[RAB_INSTR_GET_rs(instr)]; + return state->hasLoValue && !state->hasLuiValue; +} + +#if 0 +def _printDebugInfo_clearRegister(self, instr: rabbitizer.Instruction, reg: int, currentVram: int|None=None) -> None: + if not common.GlobalConfig.PRINT_SYMBOL_FINDER_DEBUG_INFO: + return + + if currentVram is None: + return + + print("Clearing reg:") + // print() + print(f"vram: {currentVram:X}") + print(instr) + print(self->registers) + // TODO + // print(f"deleting {reg} / {instr->getRegisterName(reg)}") + print() +#endif diff --git a/tools/ido-static-recomp/tools/rabbitizer/src/analysis/RabbitizerTrackedRegisterState.c b/tools/ido-static-recomp/tools/rabbitizer/src/analysis/RabbitizerTrackedRegisterState.c new file mode 100644 index 00000000..91298945 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/src/analysis/RabbitizerTrackedRegisterState.c @@ -0,0 +1,142 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "analysis/RabbitizerTrackedRegisterState.h" + +#include + +#include "common/Utils.h" +#include "instructions/RabbitizerRegister.h" + +void RabbitizerTrackedRegisterState_init(RabbitizerTrackedRegisterState *self, int registerNum) { + self->registerNum = registerNum; + + self->hasLuiValue = false; + self->luiOffset = 0; + self->luiSetOnBranchLikely = false; + + self->hasGpGot = false; + self->gpGotOffset = 0; + + self->hasLoValue = false; + self->loOffset = 0; + self->dereferenced = false; + self->dereferenceOffset = 0; + + self->value = 0; +} + +void RabbitizerTrackedRegisterState_destroy(UNUSED RabbitizerTrackedRegisterState *self) { +} + +void RabbitizerTrackedRegisterState_clear(RabbitizerTrackedRegisterState *self) { + self->hasLuiValue = false; + self->luiOffset = 0; + self->luiSetOnBranchLikely = false; + + self->hasGpGot = false; + self->gpGotOffset = 0; + + self->hasLoValue = false; + self->loOffset = 0; + self->dereferenced = false; + self->dereferenceOffset = 0; + self->value = 0; +} + +void RabbitizerTrackedRegisterState_clearHi(RabbitizerTrackedRegisterState *self) { + self->hasLuiValue = false; + self->luiOffset = 0; + self->luiSetOnBranchLikely = false; +} + +void RabbitizerTrackedRegisterState_clearGp(RabbitizerTrackedRegisterState *self) { + self->hasGpGot = false; + self->gpGotOffset = 0; +} + +void RabbitizerTrackedRegisterState_clearLo(RabbitizerTrackedRegisterState *self) { + self->hasLoValue = false; + self->loOffset = 0; + self->dereferenced = false; + self->dereferenceOffset = 0; +} + +void RabbitizerTrackedRegisterState_copyState(RabbitizerTrackedRegisterState *self, const RabbitizerTrackedRegisterState *other) { + self->hasLuiValue = other->hasLuiValue; + self->luiOffset = other->luiOffset; + self->luiSetOnBranchLikely = other->luiSetOnBranchLikely; + + self->hasGpGot = other->hasGpGot; + self->gpGotOffset = other->gpGotOffset; + + self->hasLoValue = other->hasLoValue; + self->loOffset = other->loOffset; + self->dereferenced = other->dereferenced; + self->dereferenceOffset = other->dereferenceOffset; + + self->value = other->value; +} + +void RabbitizerTrackedRegisterState_setHi(RabbitizerTrackedRegisterState *self, uint32_t value, int offset) { + assert(!self->hasGpGot); + + self->hasLuiValue = true; + self->luiOffset = offset; + self->value = value << 16; +} + +void RabbitizerTrackedRegisterState_setGpLoad(RabbitizerTrackedRegisterState *self, uint32_t value, int offset) { + assert(!self->hasLuiValue); + + self->hasGpGot = true; + self->gpGotOffset = offset; + self->value = value; +} + +void RabbitizerTrackedRegisterState_setLo(RabbitizerTrackedRegisterState *self, uint32_t value, int offset) { + self->value = value; + self->loOffset = offset; + self->hasLoValue = true; + self->dereferenced = false; + self->dereferenceOffset = 0; +} + +void RabbitizerTrackedRegisterState_deref(RabbitizerTrackedRegisterState *self, int offset) { + self->dereferenced = true; + self->dereferenceOffset = offset; +} + +void RabbitizerTrackedRegisterState_dereferenceState(RabbitizerTrackedRegisterState *self, const RabbitizerTrackedRegisterState *other, int offset) { + assert(other->hasLoValue); + assert(!other->dereferenced); + + RabbitizerTrackedRegisterState_copyState(self, other); + RabbitizerTrackedRegisterState_deref(self, offset); +} + +bool RabbitizerTrackedRegisterState_hasAnyValue(const RabbitizerTrackedRegisterState *self) { + return self->hasLuiValue || self->hasLoValue || self->hasGpGot; +} + +bool RabbitizerTrackedRegisterState_wasSetInCurrentOffset(const RabbitizerTrackedRegisterState *self, int offset) { + return self->loOffset == offset || self->dereferenceOffset == offset; +} + +void RabbitizerTrackedRegisterState_fprint(const RabbitizerTrackedRegisterState *self, FILE *outFile) { + fprintf(outFile, "TrackedRegisterState(%i / %s)\n", self->registerNum, RabbitizerRegister_getNameGpr(self->registerNum)); + + fprintf(outFile, " hasLuiValue: %s\n", self->hasLuiValue ? "true" : "false"); + fprintf(outFile, " luiOffset: 0x%X\n", self->luiOffset); + fprintf(outFile, " luiSetOnBranchLikely: %s\n", self->luiSetOnBranchLikely ? "true" : "false"); + + fprintf(outFile, " hasGpGot: %s\n", self->hasGpGot ? "true" : "false"); + fprintf(outFile, " gpGotOffset: 0x%X\n", self->gpGotOffset); + + fprintf(outFile, " hasLoValue: %s\n", self->hasLoValue ? "true" : "false"); + fprintf(outFile, " loOffset: %X\n", self->loOffset); + fprintf(outFile, " dereferenced: %s\n", self->dereferenced ? "true" : "false"); + fprintf(outFile, " dereferenceOffset: %X\n", self->dereferenceOffset); + + fprintf(outFile, " value: %X\n", self->value); +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/src/common/RabbitizerConfig.c b/tools/ido-static-recomp/tools/rabbitizer/src/common/RabbitizerConfig.c new file mode 100644 index 00000000..88b554db --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/src/common/RabbitizerConfig.c @@ -0,0 +1,50 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "common/RabbitizerConfig.h" + +#include + +RabbitizerAbi RabbitizerAbi_fromStr(const char *name) { + if (name == NULL || strcmp(name, "32") == 0 || strcmp(name, "o32") == 0 || strcmp(name, "O32") == 0) { + return RABBITIZER_ABI_O32; + } + if (strcmp(name, "n32") == 0 || strcmp(name, "N32") == 0) { + return RABBITIZER_ABI_N32; + } + if (strcmp(name, "64") == 0 || strcmp(name, "n64") == 0 || strcmp(name, "N64") == 0) { + return RABBITIZER_ABI_N64; + } + return RABBITIZER_ABI_NUMERIC; +} + +RabbitizerConfig RabbitizerConfig_Cfg = { + .regNames = { + .namedRegisters = true, + .gprAbiNames = RABBITIZER_ABI_O32, + .fprAbiNames = RABBITIZER_ABI_NUMERIC, + .userFpcCsr = true, + .vr4300Cop0NamedRegisters = true, + .vr4300RspCop0NamedRegisters = true, + }, + .pseudos = { + .enablePseudos = true, + .pseudoBeqz = true, + .pseudoBnez = true, + .pseudoB = true, + .pseudoMove = true, + .pseudoNot = true, + .pseudoNegu = true, + .pseudoBal = true, + }, + .toolchainTweaks = { + .treatJAsUnconditionalBranch = false, + .sn64DivFix = false, + }, + .misc = { + .opcodeLJust = 7+4, + .unknownInstrComment = true, + .omit0XOnSmallImm = false, + .upperCaseImm = true, + } +}; diff --git a/tools/ido-static-recomp/tools/rabbitizer/src/common/RabbitizerVersion.c b/tools/ido-static-recomp/tools/rabbitizer/src/common/RabbitizerVersion.c new file mode 100644 index 00000000..f700fbfe --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/src/common/RabbitizerVersion.c @@ -0,0 +1,10 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "common/RabbitizerVersion.h" + +const int RabVersion_Major = RAB_VERSION_MAJOR; +const int RabVersion_Minor = RAB_VERSION_MINOR; +const int RabVersion_Patch = RAB_VERSION_PATCH; + +const char RabVersion_Str[] = RAB_VERSION_STR; diff --git a/tools/ido-static-recomp/tools/rabbitizer/src/common/Utils.c b/tools/ido-static-recomp/tools/rabbitizer/src/common/Utils.c new file mode 100644 index 00000000..7dd02622 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/src/common/Utils.c @@ -0,0 +1,78 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "common/Utils.h" + +#include +#include + +int32_t RabbitizerUtils_From2Complement(uint32_t number, int bits) { + bool isNegative = number & (1ULL << (bits - 1)); + + if (isNegative) { + return -((~number + 1) & ((1ULL << bits) - 1)); + } + + return number; +} + +size_t RabbitizerUtils_CharFill(char *dst, int count, char fillchar) { + if (count <= 0) { + return 0; + } + + memset(dst, fillchar, count); + + return count; +} + +size_t RabbitizerUtils_escapeString(char *dst, size_t dstSize, const char *src, size_t srcSize) { + size_t srcPos = 0; + size_t dstpos = 0; + + for (; srcPos < srcSize && dstpos < dstSize; srcPos++, src++) { + // The cases of this switch are sorted by ASCII order + switch (*src) { + case '\a': + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, '\\'); + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, 'a'); + break; + + case '\t': + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, '\\'); + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, 't'); + break; + + case '\n': + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, '\\'); + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, 'n'); + break; + + case '\f': + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, '\\'); + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, 'f'); + break; + + case '\r': + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, '\\'); + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, 'r'); + break; + + case '"': + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, '\\'); + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, '"'); + break; + + case '\\': + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, '\\'); + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, '\\'); + break; + + default: + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, *src); + break; + } + } + + return dstpos; +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstrDescriptor.c b/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstrDescriptor.c new file mode 100644 index 00000000..a6e143f9 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstrDescriptor.c @@ -0,0 +1,104 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerInstrDescriptor.h" + +#include "instructions/RabbitizerInstruction.h" + +#define RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, ...) [RABBITIZER_INSTR_ID_##prefix##_##name] = { __VA_ARGS__ }, + +#define RABBITIZER_DEF_INSTR_ID_ALTNAME(prefix, caseBits, name, altname, ...) RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, __VA_ARGS__) + +const RabbitizerInstrDescriptor RabbitizerInstrDescriptor_Descriptors[] = { +#include "instructions/instr_id/RabbitizerInstrId_cpu.inc" +#include "instructions/instr_id/RabbitizerInstrId_rsp.inc" +#include "instructions/instr_id/RabbitizerInstrId_r5900.inc" +}; + +#undef RABBITIZER_DEF_INSTR_ID +#undef RABBITIZER_DEF_INSTR_ID_ALTNAME + +bool RabbitizerInstrDescriptor_isUnknownType(const RabbitizerInstrDescriptor *self) { + return self->instrType == RABBITIZER_INSTR_TYPE_UNKNOWN; +} +bool RabbitizerInstrDescriptor_isJType(const RabbitizerInstrDescriptor *self) { + return self->instrType == RABBITIZER_INSTR_TYPE_J; +} +bool RabbitizerInstrDescriptor_isIType(const RabbitizerInstrDescriptor *self) { + return self->instrType == RABBITIZER_INSTR_TYPE_I; +} +bool RabbitizerInstrDescriptor_isRType(const RabbitizerInstrDescriptor *self) { + return self->instrType == RABBITIZER_INSTR_TYPE_R; +} +bool RabbitizerInstrDescriptor_isRegimmType(const RabbitizerInstrDescriptor *self) { + return self->instrType == RABBITIZER_INSTR_TYPE_REGIMM; +} + +RabbitizerInstrSuffix RabbitizerInstrDescriptor_instrSuffix(const RabbitizerInstrDescriptor *self) { + return self->instrSuffix; +} + +bool RabbitizerInstrDescriptor_isBranch(const RabbitizerInstrDescriptor *self) { + return self->isBranch; +} +bool RabbitizerInstrDescriptor_isBranchLikely(const RabbitizerInstrDescriptor *self) { + return self->isBranchLikely; +} +bool RabbitizerInstrDescriptor_isJump(const RabbitizerInstrDescriptor *self) { + return self->isJump; +} +bool RabbitizerInstrDescriptor_isTrap(const RabbitizerInstrDescriptor *self) { + return self->isTrap; +} + +bool RabbitizerInstrDescriptor_isFloat(const RabbitizerInstrDescriptor *self) { + return self->isFloat; +} +bool RabbitizerInstrDescriptor_isDouble(const RabbitizerInstrDescriptor *self) { + return self->isDouble; +} + +bool RabbitizerInstrDescriptor_isUnsigned(const RabbitizerInstrDescriptor *self) { + return self->isUnsigned; +} + +bool RabbitizerInstrDescriptor_modifiesRt(const RabbitizerInstrDescriptor *self) { + return self->modifiesRt; +} +bool RabbitizerInstrDescriptor_modifiesRd(const RabbitizerInstrDescriptor *self) { + return self->modifiesRd; +} + +bool RabbitizerInstrDescriptor_notEmitedByCompilers(const RabbitizerInstrDescriptor *self) { + return self->notEmitedByCompilers; +} + +bool RabbitizerInstrDescriptor_canBeHi(const RabbitizerInstrDescriptor *self) { + return self->canBeHi; +} +bool RabbitizerInstrDescriptor_canBeLo(const RabbitizerInstrDescriptor *self) { + return self->canBeLo; +} +bool RabbitizerInstrDescriptor_doesLink(const RabbitizerInstrDescriptor *self) { + return self->doesLink; +} +bool RabbitizerInstrDescriptor_doesDereference(const RabbitizerInstrDescriptor *self) { + return self->doesDereference; +} +bool RabbitizerInstrDescriptor_doesLoad(const RabbitizerInstrDescriptor *self) { + return self->doesLoad; +} +bool RabbitizerInstrDescriptor_doesStore(const RabbitizerInstrDescriptor *self) { + return self->doesStore; +} +bool RabbitizerInstrDescriptor_maybeIsMove(const RabbitizerInstrDescriptor *self) { + return self->maybeIsMove; +} + +bool RabbitizerInstrDescriptor_isPseudo(const RabbitizerInstrDescriptor *self) { + return self->isPseudo; +} + +RabbitizerArchitectureVersion RabbitizerInstrDescriptor_getArchitectureVersion(const RabbitizerInstrDescriptor *self) { + return self->architectureVersion; +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstrId.c b/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstrId.c new file mode 100644 index 00000000..b8643314 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstrId.c @@ -0,0 +1,28 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerInstrId.h" + +#include + +#define RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, ...) [RABBITIZER_INSTR_ID_##prefix##_##name] = #name, + +#define RABBITIZER_DEF_INSTR_ID_ALTNAME(prefix, caseBits, name, altname, ...) [RABBITIZER_INSTR_ID_##prefix##_##name] = #altname, + +const char *RabbitizerInstrId_Names[] = { +#include "instructions/instr_id/RabbitizerInstrId_cpu.inc" +#include "instructions/instr_id/RabbitizerInstrId_rsp.inc" +#include "instructions/instr_id/RabbitizerInstrId_r5900.inc" +}; + +#undef RABBITIZER_DEF_INSTR_ID +#undef RABBITIZER_DEF_INSTR_ID_ALTNAME + +const char *RabbitizerInstrId_getOpcodeName(RabbitizerInstrId uniqueId) { + assert(uniqueId >= RABBITIZER_INSTR_ID_cpu_INVALID && uniqueId < RABBITIZER_INSTR_ID_ALL_MAX); + assert(uniqueId != RABBITIZER_INSTR_ID_cpu_MAX); + assert(uniqueId != RABBITIZER_INSTR_ID_rsp_MAX); + assert(uniqueId != RABBITIZER_INSTR_ID_r5900_MAX); + + return RabbitizerInstrId_Names[uniqueId]; +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstrSuffix.c b/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstrSuffix.c new file mode 100644 index 00000000..cef16b30 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstrSuffix.c @@ -0,0 +1,62 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerInstrSuffix.h" + +#include + +#include "common/Utils.h" +#include "instructions/RabbitizerInstruction.h" +#include "instructions/RabbitizerInstructionRsp.h" +#include "instructions/RabbitizerInstructionR5900.h" + +typedef size_t (*InstrSuffixCallback)(const RabbitizerInstruction *self, char *dst); + +size_t RabbitizerInstrSuffix_None(UNUSED const RabbitizerInstruction *self, UNUSED char *dst) { + return 0; +} + +size_t RabbitizerInstrSuffixR5900_xyzw(const RabbitizerInstruction *self, char *dst) { + size_t totalSize = 0; + + if (RAB_INSTR_R5900_GET_xyzw_x(self) || RAB_INSTR_R5900_GET_xyzw_y(self) || RAB_INSTR_R5900_GET_xyzw_z(self) || RAB_INSTR_R5900_GET_xyzw_w(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '.'); + } + + if (RAB_INSTR_R5900_GET_xyzw_x(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'x'); + } + if (RAB_INSTR_R5900_GET_xyzw_y(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'y'); + } + if (RAB_INSTR_R5900_GET_xyzw_z(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'z'); + } + if (RAB_INSTR_R5900_GET_xyzw_w(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'w'); + } + + return totalSize; +} +const InstrSuffixCallback instrSuffixCallbacks[] = { + [RABINSTRSUFFIX_NONE] = RabbitizerInstrSuffix_None, + + [RABINSTRSUFFIX_R5900_xyzw] = RabbitizerInstrSuffixR5900_xyzw, +}; + +size_t RabbitizerInstrSuffix_getSizeForBuffer(UNUSED const RabbitizerInstruction *self, UNUSED RabbitizerInstrSuffix instrSuffix) { + // Just hardcode the size of the bigger possible suffix, faster than actually computing it. + return 5; +} + +size_t RabbitizerInstrSuffix_processSuffix(const RabbitizerInstruction *self, char *dst, RabbitizerInstrSuffix instrSuffix) { + InstrSuffixCallback callback; + + assert(instrSuffix >= RABINSTRSUFFIX_NONE); + assert(instrSuffix < RABINSTRSUFFIX_MAX); + + callback = instrSuffixCallbacks[instrSuffix]; + assert(callback != NULL); + + return callback(self, dst); +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction.c b/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction.c new file mode 100644 index 00000000..5e0bf056 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction.c @@ -0,0 +1,368 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerInstruction.h" + +#include + +#include "common/RabbitizerConfig.h" +#include "instructions/RabbitizerRegister.h" +#include "instructions/RabbitizerInstructionRsp.h" +#include "instructions/RabbitizerInstructionR5900.h" + +void RabbitizerInstruction_init(RabbitizerInstruction *self, uint32_t word, uint32_t vram) { + self->word = word; + self->_mandatorybits = 0; + + self->uniqueId = RABBITIZER_INSTR_ID_cpu_INVALID; + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; + + self->vram = vram; + self->_handwrittenCategory = false; + self->inHandwrittenFunction = false; + self->category = RABBITIZER_INSTRCAT_CPU; +} + +void RabbitizerInstruction_destroy(UNUSED RabbitizerInstruction *self) { +} + +/* General getters */ + +uint32_t RabbitizerInstruction_getRaw(const RabbitizerInstruction *self) { + return self->word; +} + +uint32_t RabbitizerInstruction_getImmediate(const RabbitizerInstruction *self) { + return RAB_INSTR_GET_immediate(self); +} +int32_t RabbitizerInstruction_getProcessedImmediate(const RabbitizerInstruction *self) { + if (RabbitizerInstrDescriptor_isUnsigned(self->descriptor)) { + return RAB_INSTR_GET_immediate(self); + } + return RabbitizerUtils_From2Complement(RAB_INSTR_GET_immediate(self), 16); +} + +uint32_t RabbitizerInstruction_getInstrIndex(const RabbitizerInstruction *self) { + return RAB_INSTR_GET_instr_index(self); +} + +uint32_t RabbitizerInstruction_getInstrIndexAsVram(const RabbitizerInstruction *self) { + uint32_t vram = RabbitizerInstruction_getInstrIndex(self) << 2; + + if (self->vram == 0) { + vram |= 0x80000000; + } else { + // Jumps are PC-region branches. The upper bits are filled with the address in the delay slot + vram |= (self->vram + 4) & 0xFF000000; + } + return vram; +} + +int32_t RabbitizerInstruction_getBranchOffset(const RabbitizerInstruction *self) { + int32_t diff = RabbitizerUtils_From2Complement(RabbitizerInstruction_getImmediate(self), 16); + + return diff * 4 + 4; +} + +int32_t RabbitizerInstruction_getGenericBranchOffset(const RabbitizerInstruction *self, uint32_t currentVram) { + if (self->uniqueId == RABBITIZER_INSTR_ID_cpu_j) { + return RabbitizerInstruction_getInstrIndexAsVram(self) - currentVram; + } + return RabbitizerInstruction_getBranchOffset(self); +} + +/* General getters */ + +void RabbitizerInstruction_blankOut(RabbitizerInstruction *self) { + size_t i; + + for (i = 0; i < ARRAY_COUNT(self->descriptor->operands) && self->descriptor->operands[i] != RAB_OPERAND_ALL_INVALID; i++) { + switch (self->descriptor->operands[i]) { + case RAB_OPERAND_cpu_rs: + self->word = RAB_INSTR_PACK_rs(self->word, 0); + break; + + case RAB_OPERAND_cpu_rt: + self->word = RAB_INSTR_PACK_rt(self->word, 0); + break; + + case RAB_OPERAND_cpu_rd: + self->word = RAB_INSTR_PACK_rd(self->word, 0); + break; + + case RAB_OPERAND_cpu_sa: + self->word = RAB_INSTR_PACK_sa(self->word, 0); + break; + + case RAB_OPERAND_cpu_zero: + break; + + case RAB_OPERAND_cpu_cop0d: + self->word = RAB_INSTR_PACK_cop0d(self->word, 0); + break; + + case RAB_OPERAND_cpu_fs: + self->word = RAB_INSTR_PACK_fs(self->word, 0); + break; + + case RAB_OPERAND_cpu_ft: + self->word = RAB_INSTR_PACK_ft(self->word, 0); + break; + + case RAB_OPERAND_cpu_fd: + self->word = RAB_INSTR_PACK_fd(self->word, 0); + break; + + case RAB_OPERAND_cpu_cop1cs: + self->word = RAB_INSTR_PACK_cop1cs(self->word, 0); + break; + + case RAB_OPERAND_cpu_cop2t: + self->word = RAB_INSTR_PACK_cop2t(self->word, 0); + break; + + case RAB_OPERAND_cpu_op: + self->word = RAB_INSTR_PACK_op(self->word, 0); + break; + + case RAB_OPERAND_cpu_code: + self->word = RAB_INSTR_PACK_code(self->word, 0); + break; + + case RAB_OPERAND_cpu_code_lower: + self->word = RAB_INSTR_PACK_code_lower(self->word, 0); + break; + + case RAB_OPERAND_cpu_copraw: + self->word = RAB_INSTR_PACK_copraw(self->word, 0); + break; + + case RAB_OPERAND_cpu_label: + self->word = RAB_INSTR_PACK_instr_index(self->word, 0); + break; + + case RAB_OPERAND_cpu_immediate: + self->word = RAB_INSTR_PACK_immediate(self->word, 0); + break; + + case RAB_OPERAND_cpu_branch_target_label: + self->word = RAB_INSTR_PACK_immediate(self->word, 0); + break; + + case RAB_OPERAND_cpu_immediate_base: + self->word = RAB_INSTR_PACK_rs(self->word, 0); + self->word = RAB_INSTR_PACK_immediate(self->word, 0); + break; + + /* rsp */ + case RAB_OPERAND_rsp_rs: + self->word = RAB_INSTR_PACK_rs(self->word, 0); + break; + + case RAB_OPERAND_rsp_rt: + self->word = RAB_INSTR_PACK_rt(self->word, 0); + break; + + case RAB_OPERAND_rsp_rd: + self->word = RAB_INSTR_PACK_rd(self->word, 0); + break; + + case RAB_OPERAND_rsp_cop0d: + self->word = RAB_INSTR_PACK_cop0d(self->word, 0); + break; + + case RAB_OPERAND_rsp_cop2t: + self->word = RAB_INSTR_RSP_PACK_cop2t(self->word, 0); + break; + + case RAB_OPERAND_rsp_cop2cd: + self->word = RAB_INSTR_RSP_PACK_cop2cd(self->word, 0); + break; + + case RAB_OPERAND_rsp_vs: + self->word = RAB_INSTR_RSP_PACK_vs(self->word, 0); + break; + + case RAB_OPERAND_rsp_vt: + self->word = RAB_INSTR_RSP_PACK_vt(self->word, 0); + break; + + case RAB_OPERAND_rsp_vd: + self->word = RAB_INSTR_RSP_PACK_vd(self->word, 0); + break; + + case RAB_OPERAND_rsp_vt_elementhigh: + self->word = RAB_INSTR_RSP_PACK_vt(self->word, 0); + self->word = RAB_INSTR_RSP_PACK_elementhigh(self->word, 0); + break; + + case RAB_OPERAND_rsp_vt_elementlow: + self->word = RAB_INSTR_RSP_PACK_vt(self->word, 0); + self->word = RAB_INSTR_RSP_PACK_elementlow(self->word, 0); + break; + + case RAB_OPERAND_rsp_vd_de: + self->word = RAB_INSTR_RSP_PACK_vd(self->word, 0); + self->word = RAB_INSTR_RSP_PACK_de(self->word, 0); + break; + + case RAB_OPERAND_rsp_vs_index: + self->word = RAB_INSTR_RSP_PACK_vs(self->word, 0); + self->word = RAB_INSTR_RSP_PACK_index(self->word, 0); + break; + + case RAB_OPERAND_rsp_offset_rs: + self->word = RAB_INSTR_RSP_PACK_offset(self->word, 0); + self->word = RAB_INSTR_PACK_rs(self->word, 0); + break; + + case RAB_OPERAND_rsp_immediate_base: + self->word = RAB_INSTR_PACK_rs(self->word, 0); + self->word = RAB_INSTR_PACK_immediate(self->word, 0); + break; + /* rsp */ + + /* r5900 */ + case RAB_OPERAND_r5900_I: + case RAB_OPERAND_r5900_Q: + case RAB_OPERAND_r5900_R: + case RAB_OPERAND_r5900_ACC: + // Not real registers encoded on the instruction itself + break; + + case RAB_OPERAND_r5900_ACCxyzw: + self->word = RAB_INSTR_R5900_PACK_xyzw_x(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_y(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_z(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_w(self->word, 0); + break; + + case RAB_OPERAND_r5900_vfs: + self->word = RAB_INSTR_R5900_PACK_vfs(self->word, 0); + break; + + case RAB_OPERAND_r5900_vft: + self->word = RAB_INSTR_R5900_PACK_vft(self->word, 0); + break; + + case RAB_OPERAND_r5900_vfd: + self->word = RAB_INSTR_R5900_PACK_vfd(self->word, 0); + break; + + case RAB_OPERAND_r5900_vfsxyzw: + self->word = RAB_INSTR_R5900_PACK_vfs(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_x(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_y(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_z(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_w(self->word, 0); + break; + + case RAB_OPERAND_r5900_vftxyzw: + self->word = RAB_INSTR_R5900_PACK_vft(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_x(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_y(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_z(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_w(self->word, 0); + break; + + case RAB_OPERAND_r5900_vfdxyzw: + self->word = RAB_INSTR_R5900_PACK_vfd(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_x(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_y(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_z(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_w(self->word, 0); + break; + + case RAB_OPERAND_r5900_vfsn: + self->word = RAB_INSTR_R5900_PACK_vfs(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_n(self->word, 0); + break; + + case RAB_OPERAND_r5900_vftn: + self->word = RAB_INSTR_R5900_PACK_vft(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_n(self->word, 0); + break; + + case RAB_OPERAND_r5900_vfdn: + self->word = RAB_INSTR_R5900_PACK_vfd(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_n(self->word, 0); + break; + + case RAB_OPERAND_r5900_vfsl: + self->word = RAB_INSTR_R5900_PACK_vfs(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_l(self->word, 0); + break; + + case RAB_OPERAND_r5900_vftl: + self->word = RAB_INSTR_R5900_PACK_vft(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_l(self->word, 0); + break; + + case RAB_OPERAND_r5900_vfdl: + self->word = RAB_INSTR_R5900_PACK_vfd(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_l(self->word, 0); + break; + + case RAB_OPERAND_r5900_vfsm: + self->word = RAB_INSTR_R5900_PACK_vfs(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_m(self->word, 0); + break; + + case RAB_OPERAND_r5900_vftm: + self->word = RAB_INSTR_R5900_PACK_vft(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_m(self->word, 0); + break; + + case RAB_OPERAND_r5900_vfdm: + self->word = RAB_INSTR_R5900_PACK_vfd(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_m(self->word, 0); + break; + + case RAB_OPERAND_r5900_vis: + self->word = RAB_INSTR_R5900_PACK_vis(self->word, 0); + break; + + case RAB_OPERAND_r5900_vit: + self->word = RAB_INSTR_R5900_PACK_vit(self->word, 0); + break; + + case RAB_OPERAND_r5900_vid: + self->word = RAB_INSTR_R5900_PACK_vid(self->word, 0); + break; + + case RAB_OPERAND_r5900_vis_predecr: + self->word = RAB_INSTR_R5900_PACK_vis(self->word, 0); + break; + + case RAB_OPERAND_r5900_vit_predecr: + self->word = RAB_INSTR_R5900_PACK_vit(self->word, 0); + break; + + case RAB_OPERAND_r5900_vid_predecr: + self->word = RAB_INSTR_R5900_PACK_vid(self->word, 0); + break; + + case RAB_OPERAND_r5900_vis_postincr: + self->word = RAB_INSTR_R5900_PACK_vis(self->word, 0); + break; + + case RAB_OPERAND_r5900_vit_postincr: + self->word = RAB_INSTR_R5900_PACK_vit(self->word, 0); + break; + + case RAB_OPERAND_r5900_vid_postincr: + self->word = RAB_INSTR_R5900_PACK_vid(self->word, 0); + break; + + case RAB_OPERAND_r5900_immediate5: + self->word = RAB_INSTR_R5900_PACK_imm5(self->word, 0); + break; + /* r5900 */ + + case RAB_OPERAND_ALL_INVALID: + case RAB_OPERAND_ALL_MAX: + assert(self->descriptor->operands[i] != RAB_OPERAND_ALL_INVALID && self->descriptor->operands[i] != RAB_OPERAND_ALL_MAX); + break; + } + } +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction_Disassemble.c b/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction_Disassemble.c new file mode 100644 index 00000000..3f94401c --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction_Disassemble.c @@ -0,0 +1,986 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerInstruction.h" +#include "instructions/RabbitizerInstructionRsp.h" +#include "instructions/RabbitizerInstructionR5900.h" + +#include +#include +#include + +#include "common/Utils.h" +#include "common/RabbitizerConfig.h" +#include "instructions/RabbitizerRegister.h" +#include "instructions/RabbitizerInstrSuffix.h" + +typedef size_t (*OperandCallback)(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength); + +size_t RabbitizerOperandType_process_cpu_rs(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameGpr(RAB_INSTR_GET_rs(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_rt(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameGpr(RAB_INSTR_GET_rt(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_rd(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameGpr(RAB_INSTR_GET_rd(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_zero(UNUSED const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, + UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameGpr(0); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_cop0d(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameCop0(RAB_INSTR_GET_cop0d(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_fs(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameCop1(RAB_INSTR_GET_fs(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_ft(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameCop1(RAB_INSTR_GET_ft(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_fd(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameCop1(RAB_INSTR_GET_fd(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_cop1cs(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameCop1Control(RAB_INSTR_GET_cop1cs(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_cop2t(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameCop2(RAB_INSTR_GET_cop2t(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_sa(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + +// TODO: consider making this a proper configuration +#if 0 + if (RAB_INSTR_GET_sa(self) < 10) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "%i", RAB_INSTR_GET_sa(self)); + } else { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "0x%x", RAB_INSTR_GET_sa(self)); + } +#endif + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "%i", RAB_INSTR_GET_sa(self)); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_op(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + +// TODO: consider making this a proper configuration +#if 0 + if (RAB_INSTR_GET_op(self) < 10) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "%i", RAB_INSTR_GET_op(self)); + } else { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "0x%x", RAB_INSTR_GET_op(self)); + } +#endif + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "0x%02X", RAB_INSTR_GET_op(self)); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_code(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + int code = RAB_INSTR_GET_code_upper(self); + int lower = RAB_INSTR_GET_code_lower(self); + + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "%i", code); + if (lower) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, ", %i", lower); + } + + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_code_lower(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, + UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + int code_lower = RAB_INSTR_GET_code_lower(self); + + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "%i", code_lower); + + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_copraw(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "0x%X", RAB_INSTR_GET_copraw(self)); + + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_label(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + if ((immOverride != NULL) && (immOverrideLength > 0)) { + memcpy(dst, immOverride, immOverrideLength); + return immOverrideLength; + } + + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "func_%06X", RabbitizerInstruction_getInstrIndexAsVram(self)); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_immediate(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + int32_t number; + + if ((immOverride != NULL) && (immOverrideLength > 0)) { + memcpy(dst, immOverride, immOverrideLength); + return immOverrideLength; + } + + number = RabbitizerInstruction_getProcessedImmediate(self); + if (RabbitizerConfig_Cfg.misc.omit0XOnSmallImm) { + if (number > -10 && number < 10) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "%i", number); + return totalSize; + } + } + if (number < 0) { + if (RabbitizerConfig_Cfg.misc.upperCaseImm) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "-0x%X", -number); + } else { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "-0x%x", -number); + } + } else { + if (RabbitizerConfig_Cfg.misc.upperCaseImm) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "0x%X", number); + } else { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "0x%x", number); + } + } + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_branch_target_label(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + if ((immOverride != NULL) && (immOverrideLength > 0)) { + memcpy(dst, immOverride, immOverrideLength); + return immOverrideLength; + } + + RABUTILS_BUFFER_CPY(dst, totalSize, ". + 4 + ("); + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_cpu_immediate(self, dst, NULL, 0)); + RABUTILS_BUFFER_CPY(dst, totalSize, " << 2)"); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_immediate_base(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + +// TODO: consider making this a proper configuration +#if 0 + if ((immOverride != NULL) && (immOverrideLength > 0) || RAB_INSTR_GET_immediate(self) != 0) { + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_cpu_immediate(self, dst, immOverride, immOverrideLength)); + } +#endif + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_cpu_immediate(self, dst, immOverride, immOverrideLength)); + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '('); + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_cpu_rs(self, dst, immOverride, immOverrideLength)); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ')'); + + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_rs(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameRspGpr(RAB_INSTR_GET_rs(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_rt(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameRspGpr(RAB_INSTR_GET_rt(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_rd(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameRspGpr(RAB_INSTR_GET_rd(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_cop0d(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameRspCop0(RAB_INSTR_GET_cop0d(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_cop2t(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameRspCop2(RAB_INSTR_RSP_GET_cop2t(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_cop2cd(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameRspCop2Control(RAB_INSTR_RSP_GET_cop2cd(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_vs(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameRspVector(RAB_INSTR_RSP_GET_vs(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_vt(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameRspVector(RAB_INSTR_RSP_GET_vt(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_vd(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameRspVector(RAB_INSTR_RSP_GET_vd(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_vt_elementhigh(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + uint8_t element; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_rsp_vt(self, dst, immOverride, immOverrideLength)); + + element = RAB_INSTR_RSP_GET_elementhigh(self); + if (element != 0) { + if ((element & 0x8) == 0x8) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "[%i]", element & 7); + } else if ((element & 0xC) == 0x4) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "[%ih]", element & (~0xC)); + } else if ((element & 0xE) == 0x2) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "[%iq]", element & (~0xE)); + } else { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "[%i]", element); + } + } + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_vt_elementlow(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_rsp_vt(self, dst, immOverride, immOverrideLength)); + + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "[%i]", RAB_INSTR_RSP_GET_elementlow(self)); + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_vd_de(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + uint8_t de; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_rsp_vd(self, dst, immOverride, immOverrideLength)); + + de = RAB_INSTR_RSP_GET_de(self); + if ((de & 0x8) == 0x8) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "[%i]", de & (~0x8)); + } else if ((de & 0xC) == 0x4) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "[%ih]", de & (~0xC)); + } else if ((de & 0xE) == 0x2) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "[%iq]", de & (~0xE)); + } else { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "[%i]", de); + } + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_vs_index(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_rsp_vs(self, dst, immOverride, immOverrideLength)); + + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "[%i]", RAB_INSTR_RSP_GET_index(self)); + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_offset_rs(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "0x%X", RabbitizerInstructionRsp_GetOffsetVector(self)); + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '('); + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_rsp_rs(self, dst, immOverride, immOverrideLength)); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ')'); + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_immediate_base(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + +// TODO: consider making this a proper configuration +#if 0 + if ((immOverride != NULL) && (immOverrideLength > 0) || RAB_INSTR_GET_immediate(self) != 0) { + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_cpu_immediate(self, dst, immOverride, immOverrideLength)); + } +#endif + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_cpu_immediate(self, dst, immOverride, immOverrideLength)); + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '('); + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_rsp_rs(self, dst, immOverride, immOverrideLength)); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ')'); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_I(UNUSED const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, + UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_CPY(dst, totalSize, "$I"); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_Q(UNUSED const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, + UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_CPY(dst, totalSize, "$Q"); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_R(UNUSED const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, + UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_CPY(dst, totalSize, "$R"); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_ACC(UNUSED const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, + UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_CPY(dst, totalSize, "$ACC"); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_ACCxyzw(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_ACC(self, dst, immOverride, immOverrideLength)); + +#if 0 + if (RAB_INSTR_R5900_GET_xyzw_x(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'x'); + } + if (RAB_INSTR_R5900_GET_xyzw_y(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'y'); + } + if (RAB_INSTR_R5900_GET_xyzw_z(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'z'); + } + if (RAB_INSTR_R5900_GET_xyzw_w(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'w'); + } +#endif + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vfs(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameR5900VF(RAB_INSTR_R5900_GET_vfs(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vft(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameR5900VF(RAB_INSTR_R5900_GET_vft(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vfd(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameR5900VF(RAB_INSTR_R5900_GET_vfd(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vfsxyzw(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vfs(self, dst, immOverride, immOverrideLength)); + +#if 0 + if (RAB_INSTR_R5900_GET_xyzw_x(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'x'); + } + if (RAB_INSTR_R5900_GET_xyzw_y(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'y'); + } + if (RAB_INSTR_R5900_GET_xyzw_z(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'z'); + } + if (RAB_INSTR_R5900_GET_xyzw_w(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'w'); + } +#endif + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vftxyzw(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vft(self, dst, immOverride, immOverrideLength)); + +#if 0 + if (RAB_INSTR_R5900_GET_xyzw_x(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'x'); + } + if (RAB_INSTR_R5900_GET_xyzw_y(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'y'); + } + if (RAB_INSTR_R5900_GET_xyzw_z(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'z'); + } + if (RAB_INSTR_R5900_GET_xyzw_w(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'w'); + } +#endif + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vfdxyzw(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vfd(self, dst, immOverride, immOverrideLength)); + +#if 0 + if (RAB_INSTR_R5900_GET_xyzw_x(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'x'); + } + if (RAB_INSTR_R5900_GET_xyzw_y(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'y'); + } + if (RAB_INSTR_R5900_GET_xyzw_z(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'z'); + } + if (RAB_INSTR_R5900_GET_xyzw_w(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'w'); + } +#endif + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vfsn(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + uint8_t n; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vfs(self, dst, immOverride, immOverrideLength)); + + n = RAB_INSTR_R5900_GET_n(self); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, "xyzw"[n]); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vftn(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + uint8_t n; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vft(self, dst, immOverride, immOverrideLength)); + + n = RAB_INSTR_R5900_GET_n(self); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, "xyzw"[n]); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vfdn(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + uint8_t n; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vfd(self, dst, immOverride, immOverrideLength)); + + n = RAB_INSTR_R5900_GET_n(self); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, "xyzw"[n]); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vfsl(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + uint8_t n; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vfs(self, dst, immOverride, immOverrideLength)); + + n = RAB_INSTR_R5900_GET_l(self); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, "xyzw"[n]); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vftl(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + uint8_t n; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vft(self, dst, immOverride, immOverrideLength)); + + n = RAB_INSTR_R5900_GET_l(self); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, "xyzw"[n]); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vfdl(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + uint8_t n; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vfd(self, dst, immOverride, immOverrideLength)); + + n = RAB_INSTR_R5900_GET_l(self); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, "xyzw"[n]); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vfsm(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + uint8_t n; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vfs(self, dst, immOverride, immOverrideLength)); + + n = RAB_INSTR_R5900_GET_m(self); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, "xyzw"[n]); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vftm(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + uint8_t n; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vft(self, dst, immOverride, immOverrideLength)); + + n = RAB_INSTR_R5900_GET_m(self); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, "xyzw"[n]); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vfdm(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + uint8_t n; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vfd(self, dst, immOverride, immOverrideLength)); + + n = RAB_INSTR_R5900_GET_m(self); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, "xyzw"[n]); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vis(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameR5900VI(RAB_INSTR_R5900_GET_vis(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vit(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameR5900VI(RAB_INSTR_R5900_GET_vit(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vid(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameR5900VI(RAB_INSTR_R5900_GET_vid(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vis_predecr(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '('); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '-'); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '-'); + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vis(self, dst, immOverride, immOverrideLength)); + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ')'); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vit_predecr(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '('); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '-'); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '-'); + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vit(self, dst, immOverride, immOverrideLength)); + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ')'); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vid_predecr(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '('); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '-'); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '-'); + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vid(self, dst, immOverride, immOverrideLength)); + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ')'); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vis_postincr(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '('); + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vis(self, dst, immOverride, immOverrideLength)); + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '+'); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '+'); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ')'); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vit_postincr(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '('); + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vit(self, dst, immOverride, immOverrideLength)); + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '+'); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '+'); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ')'); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vid_postincr(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '('); + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vid(self, dst, immOverride, immOverrideLength)); + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '+'); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '+'); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ')'); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_immediate5(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + int32_t number; + + if ((immOverride != NULL) && (immOverrideLength > 0)) { + memcpy(dst, immOverride, immOverrideLength); + return immOverrideLength; + } + + number = RAB_INSTR_R5900_GET_imm5(self); + if (RabbitizerConfig_Cfg.misc.omit0XOnSmallImm) { + if (number > -10 && number < 10) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "%i", number); + return totalSize; + } + } + if (number < 0) { + if (RabbitizerConfig_Cfg.misc.upperCaseImm) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "-0x%X", -number); + } else { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "-0x%x", -number); + } + } else { + if (RabbitizerConfig_Cfg.misc.upperCaseImm) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "0x%X", number); + } else { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "0x%x", number); + } + } + return totalSize; +} + +#define RAB_DEF_OPERAND(prefix, operand) [RAB_OPERAND_##prefix##_##operand] = RabbitizerOperandType_process_##prefix##_##operand, + +const OperandCallback instrOpercandCallbacks[] = { +#include "instructions/operands/RabbitizerOperandType_cpu.inc" +#include "instructions/operands/RabbitizerOperandType_rsp.inc" +#include "instructions/operands/RabbitizerOperandType_r5900.inc" +}; + +#undef RAB_DEF_OPERAND + +size_t RabbitizerInstruction_getSizeForBufferOperandsDisasm(const RabbitizerInstruction *self, size_t immOverrideLength) { + size_t totalSize = 0; + char auxBuffer[0x100] = { 0 }; + char immOverride[0x100] = { 0 }; + + for (size_t i = 0; i < ARRAY_COUNT(self->descriptor->operands) && self->descriptor->operands[i] != RAB_OPERAND_ALL_INVALID; i++) { + RabbitizerOperandType operand; + OperandCallback callback; + + if (i != 0) { + totalSize += 2; + } + + operand = self->descriptor->operands[i]; + assert(operand > RAB_OPERAND_ALL_INVALID); + assert(operand < RAB_OPERAND_ALL_MAX); + + callback = instrOpercandCallbacks[operand]; + assert(callback != NULL); + totalSize += callback(self, auxBuffer, immOverride, immOverrideLength); + } + + return totalSize; +} + +size_t RabbitizerInstruction_disassembleOperands(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + for (size_t i = 0; i < ARRAY_COUNT(self->descriptor->operands) && self->descriptor->operands[i] != RAB_OPERAND_ALL_INVALID; i++) { + RabbitizerOperandType operand; + OperandCallback callback; + + if (i != 0) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ','); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ' '); + } + + operand = self->descriptor->operands[i]; + assert(operand > RAB_OPERAND_ALL_INVALID); + assert(operand < RAB_OPERAND_ALL_MAX); + + callback = instrOpercandCallbacks[operand]; + assert(callback != NULL); + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, callback(self, dst, immOverride, immOverrideLength)); + } + + *dst = '\0'; + return totalSize; +} + +size_t RabbitizerInstruction_getSizeForBufferInstrDisasm(const RabbitizerInstruction *self, size_t immOverrideLength, int extraLJust) { + size_t totalSize = 0; + size_t opcodeNameLength; + + opcodeNameLength = strlen(RabbitizerInstrId_getOpcodeName(self->uniqueId)); + + totalSize += opcodeNameLength; + + totalSize += RabbitizerInstrSuffix_getSizeForBuffer(self, self->descriptor->instrSuffix); + + if (self->descriptor->operands[0] == RAB_OPERAND_ALL_INVALID) { + // There are no operands + return totalSize; + } + + if (RabbitizerConfig_Cfg.misc.opcodeLJust > 0) { + totalSize += RabbitizerConfig_Cfg.misc.opcodeLJust; + } + if (extraLJust > 0) { + totalSize += extraLJust; + } + totalSize++; + + totalSize += RabbitizerInstruction_getSizeForBufferOperandsDisasm(self, immOverrideLength); + + return totalSize; +} + +size_t RabbitizerInstruction_disassembleInstruction(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength, + int extraLJust) { + size_t totalSize = 0; + const char *opcodeName = RabbitizerInstrId_getOpcodeName(self->uniqueId); + + RABUTILS_BUFFER_CPY(dst, totalSize, opcodeName); + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerInstrSuffix_processSuffix(self, dst, self->descriptor->instrSuffix)); + + if (self->descriptor->operands[0] == RAB_OPERAND_ALL_INVALID) { + // There are no operands + *dst = '\0'; + return totalSize; + } + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerUtils_CharFill(dst, RabbitizerConfig_Cfg.misc.opcodeLJust + extraLJust - totalSize, ' ')); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ' '); + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerInstruction_disassembleOperands(self, dst, immOverride, immOverrideLength)); + + *dst = '\0'; + return totalSize; +} + +size_t RabbitizerInstruction_getSizeForBufferDataDisasm(UNUSED const RabbitizerInstruction *self, int extraLJust) { + size_t totalSize = 0; + + totalSize += strlen(".word"); + totalSize += RabbitizerConfig_Cfg.misc.opcodeLJust + extraLJust; + totalSize += 11; + return totalSize; +} + +size_t RabbitizerInstruction_disassembleAsData(const RabbitizerInstruction *self, char *dst, int extraLJust) { + size_t totalSize = 0; + + RABUTILS_BUFFER_CPY(dst, totalSize, ".word"); + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerUtils_CharFill(dst, RabbitizerConfig_Cfg.misc.opcodeLJust + extraLJust - totalSize, ' ')); + + RABUTILS_BUFFER_SPRINTF(dst, totalSize, " 0x%08X", RabbitizerInstruction_getRaw(self)); + return totalSize; +} + +bool RabbitizerInstruction_mustDisasmAsData(const RabbitizerInstruction *self) { + if (RabbitizerConfig_Cfg.toolchainTweaks.sn64DivFix) { + if (self->uniqueId == RABBITIZER_INSTR_ID_cpu_break) { + return true; + } + } + + if (!RabbitizerInstruction_isValid(self)) { + return true; + } + return false; +} + +size_t RabbitizerInstruction_getSizeForBuffer(const RabbitizerInstruction *self, size_t immOverrideLength, int extraLJust) { + if (!RabbitizerInstruction_isImplemented(self) || RabbitizerInstruction_mustDisasmAsData(self)) { + size_t totalSize = RabbitizerInstruction_getSizeForBufferDataDisasm(self, extraLJust); + + if (RabbitizerConfig_Cfg.misc.unknownInstrComment) { + totalSize += 40; + totalSize += 3; + totalSize += RabbitizerInstruction_getSizeForBufferInstrDisasm(self, immOverrideLength, extraLJust); + totalSize += 11; + } + return totalSize; + } + + return RabbitizerInstruction_getSizeForBufferInstrDisasm(self, immOverrideLength, extraLJust); +} + +size_t RabbitizerInstruction_disassemble(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength, int extraLJust) { + assert(dst != NULL); + + if (!RabbitizerInstruction_isImplemented(self) || RabbitizerInstruction_mustDisasmAsData(self)) { + size_t totalSize = 0; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerInstruction_disassembleAsData(self, dst, extraLJust)); + + if (RabbitizerConfig_Cfg.misc.unknownInstrComment) { + uint32_t validBits; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerUtils_CharFill(dst, 40 - totalSize, ' ')); + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ' '); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '#'); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ' '); + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerInstruction_disassembleInstruction(self, dst, immOverride, immOverrideLength, extraLJust)); + + validBits = RabbitizerInstruction_getValidBits(self); + + RABUTILS_BUFFER_SPRINTF(dst, totalSize, " # %08X", ((~validBits) & self->word)); + } + + return totalSize; + } + + return RabbitizerInstruction_disassembleInstruction(self, dst, immOverride, immOverrideLength, extraLJust); +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction_Examination.c b/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction_Examination.c new file mode 100644 index 00000000..136e4aa6 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction_Examination.c @@ -0,0 +1,840 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerInstruction.h" + +#include + +#include "common/RabbitizerConfig.h" +#include "instructions/RabbitizerInstructionRsp.h" +#include "instructions/RabbitizerInstructionR5900.h" +#include "instructions/RabbitizerRegister.h" + +bool RabbitizerInstruction_isImplemented(const RabbitizerInstruction *self) { + switch (self->uniqueId) { + case RABBITIZER_INSTR_ID_cpu_INVALID: + case RABBITIZER_INSTR_ID_rsp_INVALID: + case RABBITIZER_INSTR_ID_r5900_INVALID: + return false; + + default: + return true; + } +} + +bool RabbitizerInstruction_isLikelyHandwritten(const RabbitizerInstruction *self) { + if (self->_handwrittenCategory) { + return true; + } + + if (RabbitizerInstrDescriptor_isIType(self->descriptor) && !RabbitizerInstrDescriptor_isFloat(self->descriptor)) { + if (RAB_INSTR_GET_rs(self) == RABBITIZER_REG_GPR_O32_k0 || RAB_INSTR_GET_rs(self) == RABBITIZER_REG_GPR_O32_k1) { + return true; + } + if (RAB_INSTR_GET_rt(self) == RABBITIZER_REG_GPR_O32_k0 || RAB_INSTR_GET_rt(self) == RABBITIZER_REG_GPR_O32_k1) { + return true; + } + } + + if (RabbitizerInstrDescriptor_notEmitedByCompilers(self->descriptor)) { + return true; + } + + return false; +} + +bool RabbitizerInstruction_isNop(const RabbitizerInstruction *self) { + return self->word == 0; +} + +bool RabbitizerInstruction_isUnconditionalBranch(const RabbitizerInstruction *self) { + if (self->uniqueId == RABBITIZER_INSTR_ID_cpu_b) { + return true; + } + if (self->uniqueId == RABBITIZER_INSTR_ID_cpu_beq && RAB_INSTR_GET_rt(self) == 0 && RAB_INSTR_GET_rs(self) == 0) { + return true; + } + if (RabbitizerConfig_Cfg.toolchainTweaks.treatJAsUnconditionalBranch && self->uniqueId == RABBITIZER_INSTR_ID_cpu_j) { + return true; + } + return false; +} + +bool RabbitizerInstruction_isJrRa(const RabbitizerInstruction *self) { + if (self->uniqueId == RABBITIZER_INSTR_ID_cpu_jr) { + // TODO: abi stuffs + return RAB_INSTR_GET_rs(self) == RABBITIZER_REG_GPR_O32_ra; + } + return false; +} + +bool RabbitizerInstruction_isJrNotRa(const RabbitizerInstruction *self) { + if (self->uniqueId == RABBITIZER_INSTR_ID_cpu_jr) { + // TODO: abi stuffs + return RAB_INSTR_GET_rs(self) != RABBITIZER_REG_GPR_O32_ra; + } + return false; +} + +bool RabbitizerInstruction_hasDelaySlot(const RabbitizerInstruction *self) { + return RabbitizerInstrDescriptor_isBranch(self->descriptor) || RabbitizerInstrDescriptor_isJump(self->descriptor); +} + +const char *RabbitizerInstruction_mapInstrToType(const RabbitizerInstruction *self) { + if (RabbitizerInstrDescriptor_isDouble(self->descriptor)) { + return "f64"; + } + if (RabbitizerInstrDescriptor_isFloat(self->descriptor)) { + return "f32"; + } + if (self->uniqueId == RABBITIZER_INSTR_ID_cpu_lwu) { + return "u32"; + } + if (self->uniqueId == RABBITIZER_INSTR_ID_cpu_lh || self->uniqueId == RABBITIZER_INSTR_ID_cpu_sh) { + return "s16"; + } + if (self->uniqueId == RABBITIZER_INSTR_ID_cpu_lhu) { + return "u16"; + } + if (self->uniqueId == RABBITIZER_INSTR_ID_cpu_lb || self->uniqueId == RABBITIZER_INSTR_ID_cpu_sb) { + return "s8"; + } + if (self->uniqueId == RABBITIZER_INSTR_ID_cpu_lbu) { + return "u8"; + } + if (self->uniqueId == RABBITIZER_INSTR_ID_cpu_ld || self->uniqueId == RABBITIZER_INSTR_ID_cpu_sd) { + return "s64"; + } + return NULL; +} + +bool RabbitizerInstruction_sameOpcode(const RabbitizerInstruction *self, const RabbitizerInstruction *other) { + if (!RabbitizerInstruction_isImplemented(self) || !RabbitizerInstruction_isImplemented(other)) { + return false; + } + return self->uniqueId == other->uniqueId; +} + +bool RabbitizerInstruction_sameOpcodeButDifferentArguments(const RabbitizerInstruction *self, const RabbitizerInstruction *other) { + if (!RabbitizerInstruction_sameOpcode(self, other)) { + return false; + } + return RabbitizerInstruction_getRaw(self) != RabbitizerInstruction_getRaw(other); +} + +bool RabbitizerInstruction_hasOperand(const RabbitizerInstruction *self, RabbitizerOperandType operand) { + size_t i; + + for (i = 0; i < ARRAY_COUNT(self->descriptor->operands) && self->descriptor->operands[i] != RAB_OPERAND_ALL_INVALID; i++) { + if (self->descriptor->operands[i] == operand) { + return true; + } + } + + return false; +} + +bool RabbitizerInstruction_hasOperandAlias(const RabbitizerInstruction *self, RabbitizerOperandType operand) { + switch (operand) { + case RAB_OPERAND_cpu_rs: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_cpu_immediate_base)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_rsp_rs)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_rsp_offset_rs)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_rsp_immediate_base)) { + return true; + } + break; + + case RAB_OPERAND_cpu_immediate: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_cpu_immediate_base)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_cpu_branch_target_label)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_rsp_immediate_base)) { + return true; + } + break; + + case RAB_OPERAND_cpu_rt: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_rsp_rt)) { + return true; + } + break; + + case RAB_OPERAND_cpu_rd: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_rsp_rd)) { + return true; + } + break; + + case RAB_OPERAND_cpu_sa: + case RAB_OPERAND_cpu_zero: + // case RAB_OPERAND_cpu_function: + case RAB_OPERAND_cpu_cop0d: + case RAB_OPERAND_cpu_fs: + case RAB_OPERAND_cpu_ft: + case RAB_OPERAND_cpu_fd: + case RAB_OPERAND_cpu_cop1cs: + case RAB_OPERAND_cpu_cop2t: + case RAB_OPERAND_cpu_op: + case RAB_OPERAND_cpu_code: + case RAB_OPERAND_cpu_code_lower: + case RAB_OPERAND_cpu_copraw: + case RAB_OPERAND_cpu_label: + break; + + case RAB_OPERAND_cpu_branch_target_label: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_cpu_immediate)) { + return true; + } + break; + + case RAB_OPERAND_cpu_immediate_base: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_cpu_rs)) { + return true; + } + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_cpu_immediate)) { + return true; + } + break; + + /* rsp */ + case RAB_OPERAND_rsp_rs: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_cpu_rs)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_rsp_offset_rs)) { + return true; + } + break; + + case RAB_OPERAND_rsp_rt: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_cpu_rt)) { + return true; + } + break; + + case RAB_OPERAND_rsp_rd: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_cpu_rd)) { + return true; + } + break; + + case RAB_OPERAND_rsp_cop0d: + case RAB_OPERAND_rsp_cop2t: + case RAB_OPERAND_rsp_cop2cd: + break; + + // case RAB_OPERAND_rsp_elementhigh: + // case RAB_OPERAND_rsp_elementlow: + // case RAB_OPERAND_rsp_index: + // case RAB_OPERAND_rsp_offset: + + case RAB_OPERAND_rsp_vs: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_rsp_vs_index)) { + return true; + } + break; + + case RAB_OPERAND_rsp_vt: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_rsp_vt_elementhigh)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_rsp_vt_elementlow)) { + return true; + } + break; + + case RAB_OPERAND_rsp_vd: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_rsp_vd_de)) { + return true; + } + break; + + case RAB_OPERAND_rsp_vt_elementhigh: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_rsp_vt)) { + return true; + } + break; + + case RAB_OPERAND_rsp_vt_elementlow: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_rsp_vt)) { + return true; + } + break; + + case RAB_OPERAND_rsp_vd_de: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_rsp_vd)) { + return true; + } + break; + + case RAB_OPERAND_rsp_vs_index: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_rsp_vs)) { + return true; + } + break; + + case RAB_OPERAND_rsp_offset_rs: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_rsp_rs)) { + return true; + } + break; + + case RAB_OPERAND_rsp_immediate_base: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_rsp_rs)) { + return true; + } + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_cpu_rs)) { + return true; + } + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_cpu_immediate)) { + return true; + } + break; + /* rsp */ + + /* r5900 */ + case RAB_OPERAND_r5900_I: + case RAB_OPERAND_r5900_Q: + case RAB_OPERAND_r5900_R: + break; + + case RAB_OPERAND_r5900_ACC: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_ACCxyzw)) { + return true; + } + break; + + case RAB_OPERAND_r5900_ACCxyzw: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_ACC)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vfs: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfsxyzw)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfsn)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfsl)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfsm)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vft: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vftxyzw)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vftn)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vftl)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vftm)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vfd: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfdxyzw)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfdn)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfdl)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfdm)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vfsxyzw: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfs)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfsn)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vftxyzw: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vft)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vftn)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vfdxyzw: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfd)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfdn)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vfsn: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfs)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfsxyzw)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vftn: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vft)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vftxyzw)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vfdn: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfd)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfdxyzw)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vfsl: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_r5900_vfs)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vftl: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_r5900_vft)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vfdl: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_r5900_vfd)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vfsm: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_r5900_vfs)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vftm: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_r5900_vft)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vfdm: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_r5900_vfd)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vis: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vis_predecr)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vis_postincr)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vit: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vit_predecr)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vit_postincr)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vid: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vid_predecr)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vid_postincr)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vis_predecr: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_r5900_vis)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vit_predecr: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_r5900_vit)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vid_predecr: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_r5900_vid)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vis_postincr: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_r5900_vis)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vit_postincr: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_r5900_vit)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vid_postincr: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_r5900_vid)) { + return true; + } + break; + + case RAB_OPERAND_r5900_immediate5: + break; + /* r5900 */ + + case RAB_OPERAND_ALL_INVALID: + case RAB_OPERAND_ALL_MAX: + assert(operand != RAB_OPERAND_ALL_INVALID && operand != RAB_OPERAND_ALL_MAX); + break; + } + + return RabbitizerInstruction_hasOperand(self, operand); +} + +uint32_t RabbitizerInstruction_getValidBits(const RabbitizerInstruction *self) { + size_t i; + uint32_t validbits; + + validbits = self->_mandatorybits; + + for (i = 0; i < ARRAY_COUNT(self->descriptor->operands) && self->descriptor->operands[i] != RAB_OPERAND_ALL_INVALID; i++) { + + switch (self->descriptor->operands[i]) { + case RAB_OPERAND_cpu_rs: + validbits = RAB_INSTR_PACK_rs(validbits, ~0); + break; + + case RAB_OPERAND_cpu_rt: + validbits = RAB_INSTR_PACK_rt(validbits, ~0); + break; + + case RAB_OPERAND_cpu_rd: + validbits = RAB_INSTR_PACK_rd(validbits, ~0); + break; + + case RAB_OPERAND_cpu_sa: + validbits = RAB_INSTR_PACK_sa(validbits, ~0); + break; + + case RAB_OPERAND_cpu_zero: + break; + + case RAB_OPERAND_cpu_cop0d: + validbits = RAB_INSTR_PACK_cop0d(validbits, ~0); + break; + + case RAB_OPERAND_cpu_fs: + validbits = RAB_INSTR_PACK_fs(validbits, ~0); + break; + + case RAB_OPERAND_cpu_ft: + validbits = RAB_INSTR_PACK_ft(validbits, ~0); + break; + + case RAB_OPERAND_cpu_fd: + validbits = RAB_INSTR_PACK_fd(validbits, ~0); + break; + + case RAB_OPERAND_cpu_cop1cs: + validbits = RAB_INSTR_PACK_cop1cs(validbits, ~0); + break; + + case RAB_OPERAND_cpu_cop2t: + validbits = RAB_INSTR_PACK_cop2t(validbits, ~0); + break; + + case RAB_OPERAND_cpu_op: + validbits = RAB_INSTR_PACK_op(validbits, ~0); + break; + + case RAB_OPERAND_cpu_code: + validbits = RAB_INSTR_PACK_code(validbits, ~0); + break; + + case RAB_OPERAND_cpu_code_lower: + validbits = RAB_INSTR_PACK_code_lower(validbits, ~0); + break; + + case RAB_OPERAND_cpu_copraw: + validbits = RAB_INSTR_PACK_copraw(validbits, ~0); + break; + + case RAB_OPERAND_cpu_label: + validbits = RAB_INSTR_PACK_instr_index(validbits, ~0); + break; + + case RAB_OPERAND_cpu_immediate: + validbits = RAB_INSTR_PACK_immediate(validbits, ~0); + break; + + case RAB_OPERAND_cpu_branch_target_label: + validbits = RAB_INSTR_PACK_immediate(validbits, ~0); + break; + + case RAB_OPERAND_cpu_immediate_base: + validbits = RAB_INSTR_PACK_immediate(validbits, ~0); + validbits = RAB_INSTR_PACK_rs(validbits, ~0); + break; + + /* rsp */ + case RAB_OPERAND_rsp_rs: + validbits = RAB_INSTR_PACK_rs(validbits, ~0); + break; + + case RAB_OPERAND_rsp_rt: + validbits = RAB_INSTR_PACK_rt(validbits, ~0); + break; + + case RAB_OPERAND_rsp_rd: + validbits = RAB_INSTR_PACK_rd(validbits, ~0); + break; + + case RAB_OPERAND_rsp_cop0d: + validbits = RAB_INSTR_PACK_cop0d(validbits, ~0); + break; + + case RAB_OPERAND_rsp_cop2t: + validbits = RAB_INSTR_RSP_PACK_cop2t(validbits, ~0); + break; + + case RAB_OPERAND_rsp_cop2cd: + validbits = RAB_INSTR_RSP_PACK_cop2cd(validbits, ~0); + break; + + case RAB_OPERAND_rsp_vs: + validbits = RAB_INSTR_RSP_PACK_vs(validbits, ~0); + break; + + case RAB_OPERAND_rsp_vt: + validbits = RAB_INSTR_RSP_PACK_vt(validbits, ~0); + break; + + case RAB_OPERAND_rsp_vd: + validbits = RAB_INSTR_RSP_PACK_vd(validbits, ~0); + break; + + case RAB_OPERAND_rsp_vt_elementhigh: + validbits = RAB_INSTR_RSP_PACK_vt(validbits, ~0); + validbits = RAB_INSTR_RSP_PACK_elementhigh(validbits, ~0); + break; + + case RAB_OPERAND_rsp_vt_elementlow: + validbits = RAB_INSTR_RSP_PACK_vt(validbits, ~0); + validbits = RAB_INSTR_RSP_PACK_elementlow(validbits, ~0); + break; + + case RAB_OPERAND_rsp_vd_de: + validbits = RAB_INSTR_RSP_PACK_vd(validbits, ~0); + validbits = RAB_INSTR_RSP_PACK_de(validbits, ~0); + break; + + case RAB_OPERAND_rsp_vs_index: + validbits = RAB_INSTR_RSP_PACK_vs(validbits, ~0); + validbits = RAB_INSTR_RSP_PACK_index(validbits, ~0); + break; + + case RAB_OPERAND_rsp_offset_rs: + validbits = RAB_INSTR_RSP_PACK_offset(validbits, ~0); + validbits = RAB_INSTR_PACK_rs(validbits, ~0); + break; + + case RAB_OPERAND_rsp_immediate_base: + validbits = RAB_INSTR_PACK_immediate(validbits, ~0); + validbits = RAB_INSTR_PACK_rs(validbits, ~0); + break; + /* rsp */ + + /* r5900 */ + case RAB_OPERAND_r5900_I: + case RAB_OPERAND_r5900_Q: + case RAB_OPERAND_r5900_R: + case RAB_OPERAND_r5900_ACC: + // Not real registers encoded on the instruction itself + break; + + case RAB_OPERAND_r5900_ACCxyzw: + validbits = RAB_INSTR_R5900_PACK_xyzw_x(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_y(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_z(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_w(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vfs: + validbits = RAB_INSTR_R5900_PACK_vfs(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vft: + validbits = RAB_INSTR_R5900_PACK_vft(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vfd: + validbits = RAB_INSTR_R5900_PACK_vfd(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vfsxyzw: + validbits = RAB_INSTR_R5900_PACK_vfs(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_x(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_y(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_z(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_w(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vftxyzw: + validbits = RAB_INSTR_R5900_PACK_vft(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_x(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_y(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_z(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_w(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vfdxyzw: + validbits = RAB_INSTR_R5900_PACK_vfd(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_x(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_y(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_z(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_w(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vfsn: + validbits = RAB_INSTR_R5900_PACK_vfs(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_n(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vftn: + validbits = RAB_INSTR_R5900_PACK_vft(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_n(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vfdn: + validbits = RAB_INSTR_R5900_PACK_vfd(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_n(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vfsl: + validbits = RAB_INSTR_R5900_PACK_vfs(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_l(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vftl: + validbits = RAB_INSTR_R5900_PACK_vft(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_l(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vfdl: + validbits = RAB_INSTR_R5900_PACK_vfd(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_l(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vfsm: + validbits = RAB_INSTR_R5900_PACK_vfs(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_m(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vftm: + validbits = RAB_INSTR_R5900_PACK_vft(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_m(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vfdm: + validbits = RAB_INSTR_R5900_PACK_vfd(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_m(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vis: + validbits = RAB_INSTR_R5900_PACK_vis(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vit: + validbits = RAB_INSTR_R5900_PACK_vit(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vid: + validbits = RAB_INSTR_R5900_PACK_vid(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vis_predecr: + validbits = RAB_INSTR_R5900_PACK_vis(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vit_predecr: + validbits = RAB_INSTR_R5900_PACK_vit(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vid_predecr: + validbits = RAB_INSTR_R5900_PACK_vid(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vis_postincr: + validbits = RAB_INSTR_R5900_PACK_vis(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vit_postincr: + validbits = RAB_INSTR_R5900_PACK_vit(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vid_postincr: + validbits = RAB_INSTR_R5900_PACK_vid(validbits, ~0); + break; + + case RAB_OPERAND_r5900_immediate5: + validbits = RAB_INSTR_R5900_PACK_imm5(validbits, ~0); + break; + /* r5900 */ + + case RAB_OPERAND_ALL_INVALID: + case RAB_OPERAND_ALL_MAX: + assert(self->descriptor->operands[i] != RAB_OPERAND_ALL_INVALID && self->descriptor->operands[i] != RAB_OPERAND_ALL_MAX); + break; + } + } + + return validbits; +} + +bool RabbitizerInstruction_isValid(const RabbitizerInstruction *self) { + uint32_t validbits; + + validbits = RabbitizerInstruction_getValidBits(self); + + return ((~validbits) & self->word) == 0; +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction_ProcessUniqueId.c b/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction_ProcessUniqueId.c new file mode 100644 index 00000000..0d71c6dd --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction_ProcessUniqueId.c @@ -0,0 +1,319 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerInstruction.h" + +#include "common/RabbitizerConfig.h" +#include "instructions/RabbitizerRegister.h" + +#define RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, ...) \ + case (caseBits): \ + self->uniqueId = RABBITIZER_INSTR_ID_##prefix##_##name; \ + break; +#define RABBITIZER_DEF_INSTR_ID_ALTNAME(prefix, caseBits, name, altname, ...) RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, __VA_ARGS__) + +void RabbitizerInstruction_processUniqueId_Normal(RabbitizerInstruction *self) { + uint32_t opcode = RAB_INSTR_GET_opcode(self); + + self->_mandatorybits = RAB_INSTR_PACK_opcode(self->_mandatorybits, opcode); + + switch (opcode) { +#include "instructions/instr_id/cpu/cpu_normal.inc" + } + + if (RabbitizerConfig_Cfg.pseudos.enablePseudos) { + switch (self->uniqueId) { + case RABBITIZER_INSTR_ID_cpu_beq: + if (RAB_INSTR_GET_rt(self) == 0) { + if (RAB_INSTR_GET_rs(self) == 0) { + if (RabbitizerConfig_Cfg.pseudos.pseudoB) { + self->uniqueId = RABBITIZER_INSTR_ID_cpu_b; + } + } else { + if (RabbitizerConfig_Cfg.pseudos.pseudoBeqz) { + self->uniqueId = RABBITIZER_INSTR_ID_cpu_beqz; + } + } + } + break; + + case RABBITIZER_INSTR_ID_cpu_bne: + if (RAB_INSTR_GET_rt(self) == 0) { + if (RabbitizerConfig_Cfg.pseudos.pseudoBnez) { + self->uniqueId = RABBITIZER_INSTR_ID_cpu_bnez; + } + } + break; + + default: + break; + } + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; +} + +void RabbitizerInstruction_processUniqueId_Special(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_GET_function(self); + + self->_mandatorybits = RAB_INSTR_PACK_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/cpu/cpu_special.inc" + } + + if (RabbitizerInstruction_isNop(self)) { + // NOP is special enough + self->uniqueId = RABBITIZER_INSTR_ID_cpu_nop; + } else if (RabbitizerConfig_Cfg.pseudos.enablePseudos) { + switch (self->uniqueId) { + case RABBITIZER_INSTR_ID_cpu_or: + if (RAB_INSTR_GET_rt(self) == 0) { + if (RabbitizerConfig_Cfg.pseudos.pseudoMove) { + self->uniqueId = RABBITIZER_INSTR_ID_cpu_move; + } + } + break; + + case RABBITIZER_INSTR_ID_cpu_nor: + if (RAB_INSTR_GET_rt(self) == 0) { + if (RabbitizerConfig_Cfg.pseudos.pseudoNot) { + self->uniqueId = RABBITIZER_INSTR_ID_cpu_not; + } + } + break; + + case RABBITIZER_INSTR_ID_cpu_subu: + if (RAB_INSTR_GET_rs(self) == 0) { + if (RabbitizerConfig_Cfg.pseudos.pseudoNegu) { + self->uniqueId = RABBITIZER_INSTR_ID_cpu_negu; + } + } + break; + + default: + break; + } + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; + + switch (self->uniqueId) { + case RABBITIZER_INSTR_ID_cpu_jalr: + self->_mandatorybits = RAB_INSTR_PACK_rd(self->_mandatorybits, RAB_INSTR_GET_rd(self)); + + if (RabbitizerConfig_Cfg.regNames.gprAbiNames == RABBITIZER_ABI_NUMERIC || RabbitizerConfig_Cfg.regNames.gprAbiNames == RABBITIZER_ABI_O32) { + if (RAB_INSTR_GET_rd(self) != RABBITIZER_REG_GPR_O32_ra) { + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[RABBITIZER_INSTR_ID_cpu_jalr_rd]; + } + } else { + if (RAB_INSTR_GET_rd(self) != RABBITIZER_REG_GPR_N32_ra) { + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[RABBITIZER_INSTR_ID_cpu_jalr_rd]; + } + } + break; + + case RABBITIZER_INSTR_ID_cpu_div: + if (RabbitizerConfig_Cfg.toolchainTweaks.sn64DivFix && !self->inHandwrittenFunction) { + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[RABBITIZER_INSTR_ID_cpu_sn64_div]; + } + break; + + case RABBITIZER_INSTR_ID_cpu_divu: + if (RabbitizerConfig_Cfg.toolchainTweaks.sn64DivFix && !self->inHandwrittenFunction) { + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[RABBITIZER_INSTR_ID_cpu_sn64_divu]; + } + break; + + default: + break; + } +} + +void RabbitizerInstruction_processUniqueId_Regimm(RabbitizerInstruction *self) { + uint32_t rt = RAB_INSTR_GET_rt(self); + + self->_mandatorybits = RAB_INSTR_PACK_rt(self->_mandatorybits, rt); + + switch (rt) { +#include "instructions/instr_id/cpu/cpu_regimm.inc" + } + + if (RabbitizerConfig_Cfg.pseudos.enablePseudos) { + switch (self->uniqueId) { + case RABBITIZER_INSTR_ID_cpu_bgezal: + if (RAB_INSTR_GET_rs(self) == 0) { + if (RabbitizerConfig_Cfg.pseudos.pseudoBal) { + self->uniqueId = RABBITIZER_INSTR_ID_cpu_bal; + } + } + break; + + default: + break; + } + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; +} + +void RabbitizerInstruction_processUniqueId_Coprocessor0_BC0(RabbitizerInstruction *self) { + uint32_t fmt = RAB_INSTR_GET_bc_fmt(self); + + self->_mandatorybits = RAB_INSTR_PACK_bc_fmt(self->_mandatorybits, fmt); + + switch (fmt) { +#include "instructions/instr_id/cpu/cpu_cop0_bc0.inc" + } +} + +void RabbitizerInstruction_processUniqueId_Coprocessor0_Tlb(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_GET_function(self); + + self->_mandatorybits = RAB_INSTR_PACK_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/cpu/cpu_cop0_tlb.inc" + } +} + +void RabbitizerInstruction_processUniqueId_Coprocessor0(RabbitizerInstruction *self) { + uint32_t fmt = RAB_INSTR_GET_fmt(self); + + self->_mandatorybits = RAB_INSTR_PACK_fmt(self->_mandatorybits, fmt); + self->_handwrittenCategory = true; + + switch (fmt) { +#include "instructions/instr_id/cpu/cpu_cop0.inc" + + case 0x08: + RabbitizerInstruction_processUniqueId_Coprocessor0_BC0(self); + break; + + case 0x10: + RabbitizerInstruction_processUniqueId_Coprocessor0_Tlb(self); + break; + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; +} + +void RabbitizerInstruction_processUniqueId_Coprocessor1_BC1(RabbitizerInstruction *self) { + uint32_t fmt = RAB_INSTR_GET_bc_fmt(self); + + self->_mandatorybits = RAB_INSTR_PACK_bc_fmt(self->_mandatorybits, fmt); + + switch (fmt) { +#include "instructions/instr_id/cpu/cpu_cop1_bc1.inc" + } +} + +void RabbitizerInstruction_processUniqueId_Coprocessor1_FpuS(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_GET_function(self); + + self->_mandatorybits = RAB_INSTR_PACK_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/cpu/cpu_cop1_fpu_s.inc" + } +} + +void RabbitizerInstruction_processUniqueId_Coprocessor1_FpuD(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_GET_function(self); + + self->_mandatorybits = RAB_INSTR_PACK_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/cpu/cpu_cop1_fpu_d.inc" + } +} + +void RabbitizerInstruction_processUniqueId_Coprocessor1_FpuW(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_GET_function(self); + + self->_mandatorybits = RAB_INSTR_PACK_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/cpu/cpu_cop1_fpu_w.inc" + } +} + +void RabbitizerInstruction_processUniqueId_Coprocessor1_FpuL(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_GET_function(self); + + self->_mandatorybits = RAB_INSTR_PACK_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/cpu/cpu_cop1_fpu_l.inc" + } +} + +void RabbitizerInstruction_processUniqueId_Coprocessor1(RabbitizerInstruction *self) { + uint8_t fmt = RAB_INSTR_GET_fmt(self); + + self->_mandatorybits = RAB_INSTR_PACK_fmt(self->_mandatorybits, fmt); + + switch (fmt) { +#include "instructions/instr_id/cpu/cpu_cop1.inc" + + case 0x08: // fmt = BC + RabbitizerInstruction_processUniqueId_Coprocessor1_BC1(self); + break; + + case 0x10: + RabbitizerInstruction_processUniqueId_Coprocessor1_FpuS(self); + break; + + case 0x11: + RabbitizerInstruction_processUniqueId_Coprocessor1_FpuD(self); + break; + + case 0x14: + RabbitizerInstruction_processUniqueId_Coprocessor1_FpuW(self); + break; + + case 0x15: + RabbitizerInstruction_processUniqueId_Coprocessor1_FpuL(self); + break; + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; +} + +void RabbitizerInstruction_processUniqueId_Coprocessor2(RabbitizerInstruction *self) { + self->_handwrittenCategory = true; + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; +} + +#undef RABBITIZER_DEF_INSTR_ID +#undef RABBITIZER_DEF_INSTR_ID_ALTNAME + +void RabbitizerInstruction_processUniqueId(RabbitizerInstruction *self) { + uint32_t opcode = RAB_INSTR_GET_opcode(self); + + self->_mandatorybits = RAB_INSTR_PACK_opcode(self->_mandatorybits, opcode); + + self->uniqueId = RABBITIZER_INSTR_ID_cpu_INVALID; + + switch (opcode) { + default: + RabbitizerInstruction_processUniqueId_Normal(self); + break; + case 0x00: + RabbitizerInstruction_processUniqueId_Special(self); + break; + case 0x01: + RabbitizerInstruction_processUniqueId_Regimm(self); + break; + case 0x10: + RabbitizerInstruction_processUniqueId_Coprocessor0(self); + break; + case 0x11: + RabbitizerInstruction_processUniqueId_Coprocessor1(self); + break; + case 0x12: + RabbitizerInstruction_processUniqueId_Coprocessor2(self); + break; + } +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstructionR5900/RabbitizerInstructionR5900.c b/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstructionR5900/RabbitizerInstructionR5900.c new file mode 100644 index 00000000..3b9bd2ce --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstructionR5900/RabbitizerInstructionR5900.c @@ -0,0 +1,17 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerInstructionR5900.h" + +void RabbitizerInstructionR5900_init(RabbitizerInstruction *self, uint32_t word, uint32_t vram) { + RabbitizerInstruction_init(self, word, vram); + + self->uniqueId = RABBITIZER_INSTR_ID_r5900_INVALID; + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; + + self->category = RABBITIZER_INSTRCAT_R5900; +} + +void RabbitizerInstructionR5900_destroy(RabbitizerInstruction *self) { + RabbitizerInstruction_destroy(self); +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstructionR5900/RabbitizerInstructionR5900_ProcessUniqueId.c b/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstructionR5900/RabbitizerInstructionR5900_ProcessUniqueId.c new file mode 100644 index 00000000..1972f3fa --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstructionR5900/RabbitizerInstructionR5900_ProcessUniqueId.c @@ -0,0 +1,328 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerInstructionR5900.h" + +#define RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, ...) \ + case (caseBits): \ + self->uniqueId = RABBITIZER_INSTR_ID_##prefix##_##name; \ + break; +#define RABBITIZER_DEF_INSTR_ID_ALTNAME(prefix, caseBits, name, altname, ...) RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, __VA_ARGS__) + +void RabbitizerInstructionR5900_processUniqueId_Normal(RabbitizerInstruction *self) { + uint32_t opcode = RAB_INSTR_GET_opcode(self); + bool fetchDescriptor = true; + + self->_mandatorybits = RAB_INSTR_PACK_opcode(self->_mandatorybits, opcode); + + switch (opcode) { +#include "instructions/instr_id/r5900/r5900_normal.inc" + + default: + RabbitizerInstruction_processUniqueId_Normal(self); + fetchDescriptor = false; + break; + } + + if (fetchDescriptor) { + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; + } +} + +void RabbitizerInstructionR5900_processUniqueId_Special(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_GET_function(self); + bool fetchDescriptor = true; + uint32_t stype; + + self->_mandatorybits = RAB_INSTR_PACK_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/r5900/r5900_special.inc" + + default: + RabbitizerInstruction_processUniqueId_Special(self); + fetchDescriptor = false; + break; + } + + switch (self->uniqueId) { + case RABBITIZER_INSTR_ID_cpu_sync: + stype = RAB_INSTR_GET_stype(self); + self->_mandatorybits = RAB_INSTR_PACK_stype(self->_mandatorybits, stype); + if ((stype & 0x10) == 0x10) { + self->uniqueId = RABBITIZER_INSTR_ID_r5900_sync_p; + fetchDescriptor = true; + } + break; + + default: + break; + } + + if (fetchDescriptor) { + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; + } +} + +void RabbitizerInstructionR5900_processUniqueId_Regimm(RabbitizerInstruction *self) { + uint32_t rt = RAB_INSTR_GET_rt(self); + bool fetchDescriptor = true; + + self->_mandatorybits = RAB_INSTR_PACK_rt(self->_mandatorybits, rt); + + switch (rt) { +#include "instructions/instr_id/r5900/r5900_regimm.inc" + + default: + RabbitizerInstruction_processUniqueId_Regimm(self); + fetchDescriptor = false; + break; + } + + if (fetchDescriptor) { + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; + } +} + +void RabbitizerInstructionR5900_processUniqueId_Coprocessor0_Tlb(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_GET_function(self); + + self->_mandatorybits = RAB_INSTR_PACK_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/r5900/r5900_cop0_tlb.inc" + + default: + RabbitizerInstruction_processUniqueId_Coprocessor0_Tlb(self); + break; + } +} + +void RabbitizerInstructionR5900_processUniqueId_Coprocessor0(RabbitizerInstruction *self) { + uint32_t fmt = RAB_INSTR_GET_fmt(self); + + self->_mandatorybits = RAB_INSTR_PACK_fmt(self->_mandatorybits, fmt); + self->_handwrittenCategory = true; + + switch (fmt) { +#include "instructions/instr_id/cpu/cpu_cop0.inc" + + case 0x08: + RabbitizerInstruction_processUniqueId_Coprocessor0_BC0(self); + break; + + case 0x10: + RabbitizerInstructionR5900_processUniqueId_Coprocessor0_Tlb(self); + break; + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; +} + +void RabbitizerInstructionR5900_processUniqueId_Coprocessor1_FpuS(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_GET_function(self); + + self->_mandatorybits = RAB_INSTR_PACK_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/r5900/r5900_cop1_fpu_s.inc" + + default: + RabbitizerInstruction_processUniqueId_Coprocessor1_FpuS(self); + break; + } +} + +void RabbitizerInstructionR5900_processUniqueId_Coprocessor1(RabbitizerInstruction *self) { + uint8_t fmt = RAB_INSTR_GET_fmt(self); + + self->_mandatorybits = RAB_INSTR_PACK_fmt(self->_mandatorybits, fmt); + + switch (fmt) { +#include "instructions/instr_id/cpu/cpu_cop1.inc" + + case 0x08: // fmt = BC + RabbitizerInstruction_processUniqueId_Coprocessor1_BC1(self); + break; + + case 0x10: + RabbitizerInstructionR5900_processUniqueId_Coprocessor1_FpuS(self); + break; + + case 0x14: + RabbitizerInstruction_processUniqueId_Coprocessor1_FpuW(self); + break; + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; +} + +void RabbitizerInstruction_processUniqueId_Coprocessor2_BC2(RabbitizerInstruction *self) { + uint32_t fmt = RAB_INSTR_GET_bc_fmt(self); + + self->_mandatorybits = RAB_INSTR_PACK_bc_fmt(self->_mandatorybits, fmt); + + switch (fmt) { +#include "instructions/instr_id/r5900/r5900_cop2_bc2.inc" + } +} + +void RabbitizerInstructionR5900_processUniqueId_Coprocessor2_Special2(UNUSED RabbitizerInstruction *self) { + uint32_t fhiflo = RAB_INSTR_R5900_GET_fhi_flo(self); + + self->_mandatorybits = RAB_INSTR_R5900_PACK_fhi_flo(self->_mandatorybits, fhiflo); + + switch (fhiflo) { +#include "instructions/instr_id/r5900/r5900_cop2_special2.inc" + } +} + +void RabbitizerInstructionR5900_processUniqueId_Coprocessor2_Special1(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_GET_function(self); + + self->_mandatorybits = RAB_INSTR_PACK_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/r5900/r5900_cop2_special1.inc" + + case 0x3C: + case 0x3D: + case 0x3E: + case 0x3F: + RabbitizerInstructionR5900_processUniqueId_Coprocessor2_Special2(self); + break; + } +} + +void RabbitizerInstructionR5900_processUniqueId_Coprocessor2(RabbitizerInstruction *self) { + uint8_t fmt = RAB_INSTR_GET_fmt(self); + + self->_mandatorybits = RAB_INSTR_PACK_fmt(self->_mandatorybits, fmt); + + switch (fmt) { +#include "instructions/instr_id/r5900/r5900_cop2.inc" + + case 0x08: + RabbitizerInstruction_processUniqueId_Coprocessor2_BC2(self); + break; + + case 0x10: + case 0x11: + case 0x12: + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + case 0x18: + case 0x19: + case 0x1A: + case 0x1B: + case 0x1C: + case 0x1D: + case 0x1E: + case 0x1F: + RabbitizerInstructionR5900_processUniqueId_Coprocessor2_Special1(self); + break; + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; +} + +void RabbitizerInstructionR5900_processUniqueId_MMI_0(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_R5900_GET_mmi_function(self); + + self->_mandatorybits = RAB_INSTR_R5900_PACK_mmi_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/r5900/r5900_mmi_0.inc" + } +} + +void RabbitizerInstructionR5900_processUniqueId_MMI_1(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_R5900_GET_mmi_function(self); + + self->_mandatorybits = RAB_INSTR_R5900_PACK_mmi_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/r5900/r5900_mmi_1.inc" + } +} + +void RabbitizerInstructionR5900_processUniqueId_MMI_2(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_R5900_GET_mmi_function(self); + + self->_mandatorybits = RAB_INSTR_R5900_PACK_mmi_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/r5900/r5900_mmi_2.inc" + } +} + +void RabbitizerInstructionR5900_processUniqueId_MMI_3(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_R5900_GET_mmi_function(self); + + self->_mandatorybits = RAB_INSTR_R5900_PACK_mmi_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/r5900/r5900_mmi_3.inc" + } +} + +void RabbitizerInstructionR5900_processUniqueId_MMI(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_GET_function(self); + + self->_mandatorybits = RAB_INSTR_PACK_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/r5900/r5900_mmi.inc" + + case 0x08: + RabbitizerInstructionR5900_processUniqueId_MMI_0(self); + break; + case 0x09: + RabbitizerInstructionR5900_processUniqueId_MMI_2(self); + break; + case 0x28: + RabbitizerInstructionR5900_processUniqueId_MMI_1(self); + break; + case 0x29: + RabbitizerInstructionR5900_processUniqueId_MMI_3(self); + break; + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; +} + +#undef RABBITIZER_DEF_INSTR_ID +#undef RABBITIZER_DEF_INSTR_ID_ALTNAME + +void RabbitizerInstructionR5900_processUniqueId(RabbitizerInstruction *self) { + uint32_t opcode = RAB_INSTR_GET_opcode(self); + + self->_mandatorybits = RAB_INSTR_PACK_opcode(self->_mandatorybits, opcode); + + switch (opcode) { + default: + RabbitizerInstructionR5900_processUniqueId_Normal(self); + break; + case 0x00: + RabbitizerInstructionR5900_processUniqueId_Special(self); + break; + case 0x01: + RabbitizerInstructionR5900_processUniqueId_Regimm(self); + break; + case 0x10: + RabbitizerInstructionR5900_processUniqueId_Coprocessor0(self); + break; + case 0x11: + RabbitizerInstructionR5900_processUniqueId_Coprocessor1(self); + break; + case 0x12: + RabbitizerInstructionR5900_processUniqueId_Coprocessor2(self); + break; + case 0x1C: + RabbitizerInstructionR5900_processUniqueId_MMI(self); + break; + } +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstructionRsp/RabbitizerInstructionRsp.c b/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstructionRsp/RabbitizerInstructionRsp.c new file mode 100644 index 00000000..1e63453c --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstructionRsp/RabbitizerInstructionRsp.c @@ -0,0 +1,56 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerInstructionRsp.h" + +void RabbitizerInstructionRsp_init(RabbitizerInstruction *self, uint32_t word, uint32_t vram) { + RabbitizerInstruction_init(self, word, vram); + + self->uniqueId = RABBITIZER_INSTR_ID_rsp_INVALID; + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; + + self->_handwrittenCategory = true; + self->category = RABBITIZER_INSTRCAT_RSP; +} + +void RabbitizerInstructionRsp_destroy(RabbitizerInstruction *self) { + RabbitizerInstruction_destroy(self); +} + +uint16_t RabbitizerInstructionRsp_GetOffsetVector(const RabbitizerInstruction *self) { + uint16_t offset = RAB_INSTR_RSP_GET_OFFSET_VECTOR_RAW(self); + + switch (self->uniqueId) { + case RABBITIZER_INSTR_ID_rsp_lsv: + case RABBITIZER_INSTR_ID_rsp_ssv: + return offset << 1; + + case RABBITIZER_INSTR_ID_rsp_llv: + case RABBITIZER_INSTR_ID_rsp_slv: + return offset << 2; + + case RABBITIZER_INSTR_ID_rsp_ldv: + case RABBITIZER_INSTR_ID_rsp_sdv: + case RABBITIZER_INSTR_ID_rsp_lpv: + case RABBITIZER_INSTR_ID_rsp_spv: + case RABBITIZER_INSTR_ID_rsp_luv: + case RABBITIZER_INSTR_ID_rsp_suv: + return offset << 3; + + case RABBITIZER_INSTR_ID_rsp_lqv: + case RABBITIZER_INSTR_ID_rsp_sqv: + case RABBITIZER_INSTR_ID_rsp_lrv: + case RABBITIZER_INSTR_ID_rsp_srv: + case RABBITIZER_INSTR_ID_rsp_lhv: + case RABBITIZER_INSTR_ID_rsp_shv: + case RABBITIZER_INSTR_ID_rsp_lfv: + case RABBITIZER_INSTR_ID_rsp_sfv: + case RABBITIZER_INSTR_ID_rsp_ltv: + case RABBITIZER_INSTR_ID_rsp_stv: + case RABBITIZER_INSTR_ID_rsp_swv: + return offset << 4; + + default: + return offset; + } +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstructionRsp/RabbitizerInstructionRsp_ProcessUniqueId.c b/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstructionRsp/RabbitizerInstructionRsp_ProcessUniqueId.c new file mode 100644 index 00000000..e491f1be --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerInstructionRsp/RabbitizerInstructionRsp_ProcessUniqueId.c @@ -0,0 +1,233 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerInstructionRsp.h" + +#include "common/RabbitizerConfig.h" + +#define RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, ...) \ + case (caseBits): \ + self->uniqueId = RABBITIZER_INSTR_ID_##prefix##_##name; \ + break; +#define RABBITIZER_DEF_INSTR_ID_ALTNAME(prefix, caseBits, name, altname, ...) RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, __VA_ARGS__) + +void RabbitizerInstructionRsp_processUniqueId_Normal_Lwc2(RabbitizerInstruction *self) { + uint32_t rd = RAB_INSTR_GET_rd(self); + + self->_mandatorybits = RAB_INSTR_PACK_rd(self->_mandatorybits, rd); + + switch (rd) { +#include "instructions/instr_id/rsp/rsp_normal_lwc2.inc" + } +} + +void RabbitizerInstructionRsp_processUniqueId_Normal_Swc2(RabbitizerInstruction *self) { + uint32_t rd = RAB_INSTR_GET_rd(self); + uint32_t elementlow; + + self->_mandatorybits = RAB_INSTR_PACK_rd(self->_mandatorybits, rd); + + switch (rd) { +#include "instructions/instr_id/rsp/rsp_normal_swc2.inc" + } + + switch (self->uniqueId) { + case RABBITIZER_INSTR_ID_rsp_suv: + elementlow = RAB_INSTR_RSP_GET_elementlow(self); + self->_mandatorybits = RAB_INSTR_RSP_PACK_elementlow(self->_mandatorybits, elementlow); + if (elementlow != 0) { + self->uniqueId = RABBITIZER_INSTR_ID_rsp_swv; + } + break; + + default: + break; + } +} + +void RabbitizerInstructionRsp_processUniqueId_Normal(RabbitizerInstruction *self) { + uint32_t opcode = RAB_INSTR_GET_opcode(self); + + self->_mandatorybits = RAB_INSTR_PACK_opcode(self->_mandatorybits, opcode); + + switch (opcode) { +#include "instructions/instr_id/rsp/rsp_normal.inc" + + // new rsp stuff + case 0x32: + RabbitizerInstructionRsp_processUniqueId_Normal_Lwc2(self); + break; + + case 0x3A: + RabbitizerInstructionRsp_processUniqueId_Normal_Swc2(self); + break; + } + + if (RabbitizerConfig_Cfg.pseudos.enablePseudos) { + if (RAB_INSTR_GET_rt(self) == 0) { + if (self->uniqueId == RABBITIZER_INSTR_ID_rsp_beq) { + if (RAB_INSTR_GET_rs(self) == 0) { + if (RabbitizerConfig_Cfg.pseudos.pseudoB) { + self->uniqueId = RABBITIZER_INSTR_ID_rsp_b; + } + } else { + if (RabbitizerConfig_Cfg.pseudos.pseudoBeqz) { + self->uniqueId = RABBITIZER_INSTR_ID_rsp_beqz; + } + } + } else if (self->uniqueId == RABBITIZER_INSTR_ID_rsp_bne) { + if (RabbitizerConfig_Cfg.pseudos.pseudoBnez) { + self->uniqueId = RABBITIZER_INSTR_ID_rsp_bnez; + } + } + } + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; +} + +void RabbitizerInstructionRsp_processUniqueId_Special(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_GET_function(self); + + self->_mandatorybits = RAB_INSTR_PACK_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/rsp/rsp_special.inc" + } + + if (RabbitizerInstruction_isNop(self)) { + // NOP is special enough + self->uniqueId = RABBITIZER_INSTR_ID_rsp_nop; + } else if (RabbitizerConfig_Cfg.pseudos.enablePseudos) { + if (RAB_INSTR_GET_rt(self) == 0) { + if (self->uniqueId == RABBITIZER_INSTR_ID_rsp_or) { + if (RabbitizerConfig_Cfg.pseudos.pseudoMove) { + self->uniqueId = RABBITIZER_INSTR_ID_rsp_move; + } + } else if (self->uniqueId == RABBITIZER_INSTR_ID_rsp_nor) { + if (RabbitizerConfig_Cfg.pseudos.pseudoNot) { + self->uniqueId = RABBITIZER_INSTR_ID_rsp_not; + } + } + } else if (self->uniqueId == RABBITIZER_INSTR_ID_rsp_subu) { + if (RAB_INSTR_GET_rs(self) == 0) { + if (RabbitizerConfig_Cfg.pseudos.pseudoNegu) { + self->uniqueId = RABBITIZER_INSTR_ID_rsp_negu; + } + } + } + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; + + if (self->uniqueId == RABBITIZER_INSTR_ID_rsp_jalr) { + // $ra + if (RAB_INSTR_GET_rd(self) != 31) { + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[RABBITIZER_INSTR_ID_rsp_jalr_rd]; + } + } +} + +void RabbitizerInstructionRsp_processUniqueId_Regimm(RabbitizerInstruction *self) { + uint32_t rt = RAB_INSTR_GET_rt(self); + + self->_mandatorybits = RAB_INSTR_PACK_rt(self->_mandatorybits, rt); + + switch (rt) { +#include "instructions/instr_id/rsp/rsp_regimm.inc" + } + + if (RabbitizerConfig_Cfg.pseudos.enablePseudos) { + switch (self->uniqueId) { + case RABBITIZER_INSTR_ID_rsp_bgezal: + if (RAB_INSTR_GET_rs(self) == 0) { + if (RabbitizerConfig_Cfg.pseudos.pseudoBal) { + self->uniqueId = RABBITIZER_INSTR_ID_rsp_bal; + } + } + break; + + default: + break; + } + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; +} + +void RabbitizerInstructionRsp_processUniqueId_Coprocessor0(RabbitizerInstruction *self) { + uint32_t fmt = RAB_INSTR_GET_fmt(self); + + self->_mandatorybits = RAB_INSTR_PACK_fmt(self->_mandatorybits, fmt); + + switch (fmt) { +#include "instructions/instr_id/cpu/cpu_cop0.inc" + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; +} + +void RabbitizerInstructionRsp_processUniqueId_Coprocessor2_Vu(RabbitizerInstruction *self) { + uint32_t aux = SHIFTR(self->word, 25, 1); + uint32_t function = RAB_INSTR_GET_function(self); + + if (aux != 1) { + return; + } + + // TODO: name this bit range + self->_mandatorybits = BITREPACK(self->_mandatorybits, aux, 25, 1); + self->_mandatorybits = RAB_INSTR_PACK_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/rsp/rsp_cop2_vu.inc" + } +} + +void RabbitizerInstructionRsp_processUniqueId_Coprocessor2(RabbitizerInstruction *self) { + uint32_t fmt = RAB_INSTR_GET_fmt(self); + + self->_mandatorybits = RAB_INSTR_PACK_fmt(self->_mandatorybits, fmt); + + switch (fmt) { +#include "instructions/instr_id/cpu/cpu_cop0.inc" + + default: + RabbitizerInstructionRsp_processUniqueId_Coprocessor2_Vu(self); + break; + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; +} + +#undef RABBITIZER_DEF_INSTR_ID +#undef RABBITIZER_DEF_INSTR_ID_ALTNAME + +void RabbitizerInstructionRsp_processUniqueId(RabbitizerInstruction *self) { + uint32_t opcode = RAB_INSTR_GET_opcode(self); + + self->_mandatorybits = RAB_INSTR_PACK_opcode(self->_mandatorybits, opcode); + + self->uniqueId = RABBITIZER_INSTR_ID_rsp_INVALID; + + switch (opcode) { + default: + RabbitizerInstructionRsp_processUniqueId_Normal(self); + break; + case 0x00: + RabbitizerInstructionRsp_processUniqueId_Special(self); + break; + case 0x01: + RabbitizerInstructionRsp_processUniqueId_Regimm(self); + break; + case 0x10: + RabbitizerInstructionRsp_processUniqueId_Coprocessor0(self); + break; + // case 0x11: + // RabbitizerInstructionRsp_processUniqueId_Coprocessor1(self); + // break; + case 0x12: + RabbitizerInstructionRsp_processUniqueId_Coprocessor2(self); + break; + } +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerRegister.c b/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerRegister.c new file mode 100644 index 00000000..4d16024f --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/src/instructions/RabbitizerRegister.c @@ -0,0 +1,181 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerRegister.h" + +#include + +#include "common/Utils.h" +#include "common/RabbitizerConfig.h" + +#define RABBITIZER_DEF_REG(prefix, name, numeric) [RABBITIZER_REG_##prefix##_##name] = { "$" #numeric, "$" #name } + +#define RABBITIZER_DEF_REG_NODOLLAR(prefix, name, numeric) [RABBITIZER_REG_##prefix##_##name] = { "$" #numeric, #name } + +// numeric, named + +const char *RabbitizerRegister_GprO32_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_GprO32.inc" +}; + +const char *RabbitizerRegister_GprN32_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_GprN32.inc" +}; + +const char *RabbitizerRegister_Cop0_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_Cop0.inc" +}; + +const char *RabbitizerRegister_Cop1O32_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_Cop1O32.inc" +}; + +const char *RabbitizerRegister_Cop1N32_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_Cop1N32.inc" +}; + +const char *RabbitizerRegister_Cop1N64_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_Cop1N64.inc" +}; + +const char *RabbitizerRegister_Cop1Control_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_Cop1Control.inc" +}; + +const char *RabbitizerRegister_Cop2_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_Cop2.inc" +}; + +/* RSP */ + +const char *RabbitizerRegister_RspGpr_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_RspGpr.inc" +}; + +const char *RabbitizerRegister_RspCop0_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_RspCop0.inc" +}; + +const char *RabbitizerRegister_RspCop2_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_RspCop2.inc" +}; + +const char *RabbitizerRegister_RspCop2Control_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_RspCop2Control.inc" +}; + +const char *RabbitizerRegister_RspVector_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_RspVector.inc" +}; + +/* RSP */ + +/* R5900 */ + +const char *RabbitizerRegister_R5900VF_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_R5900VF.inc" +}; + +const char *RabbitizerRegister_R5900VI_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_R5900VI.inc" +}; + +/* R5900 */ + +const char *RabbitizerRegister_getNameGpr(uint8_t regValue) { + assert(regValue < ARRAY_COUNT(RabbitizerRegister_GprO32_Names)); + + switch (RabbitizerConfig_Cfg.regNames.gprAbiNames) { + case RABBITIZER_ABI_NUMERIC: + return RabbitizerRegister_GprO32_Names[regValue][0]; + + default: + case RABBITIZER_ABI_O32: + return RabbitizerRegister_GprO32_Names[regValue][RabbitizerConfig_Cfg.regNames.namedRegisters ? 1 : 0]; + + case RABBITIZER_ABI_N32: + case RABBITIZER_ABI_N64: + return RabbitizerRegister_GprN32_Names[regValue][RabbitizerConfig_Cfg.regNames.namedRegisters ? 1 : 0]; + } +} + +const char *RabbitizerRegister_getNameCop0(uint8_t regValue) { + assert(regValue < ARRAY_COUNT(RabbitizerRegister_Cop0_Names)); + + return RabbitizerRegister_Cop0_Names[regValue] + [RabbitizerConfig_Cfg.regNames.namedRegisters && RabbitizerConfig_Cfg.regNames.vr4300Cop0NamedRegisters ? 1 : 0]; +} + +const char *RabbitizerRegister_getNameCop1(uint8_t regValue) { + assert(regValue < ARRAY_COUNT(RabbitizerRegister_Cop1O32_Names)); + + switch (RabbitizerConfig_Cfg.regNames.fprAbiNames) { + default: + case RABBITIZER_ABI_NUMERIC: + return RabbitizerRegister_Cop1O32_Names[regValue][0]; + + case RABBITIZER_ABI_O32: + return RabbitizerRegister_Cop1O32_Names[regValue][RabbitizerConfig_Cfg.regNames.namedRegisters ? 1 : 0]; + + case RABBITIZER_ABI_N32: + return RabbitizerRegister_Cop1N32_Names[regValue][RabbitizerConfig_Cfg.regNames.namedRegisters ? 1 : 0]; + + case RABBITIZER_ABI_N64: + return RabbitizerRegister_Cop1N64_Names[regValue][RabbitizerConfig_Cfg.regNames.namedRegisters ? 1 : 0]; + } +} + +const char *RabbitizerRegister_getNameCop1Control(uint8_t regValue) { + assert(regValue < ARRAY_COUNT(RabbitizerRegister_Cop1Control_Names)); + + return RabbitizerRegister_Cop1Control_Names[regValue][RabbitizerConfig_Cfg.regNames.namedRegisters && RabbitizerConfig_Cfg.regNames.userFpcCsr ? 1 : 0]; +} + +const char *RabbitizerRegister_getNameCop2(uint8_t regValue) { + assert(regValue < ARRAY_COUNT(RabbitizerRegister_Cop2_Names)); + + return RabbitizerRegister_Cop2_Names[regValue][RabbitizerConfig_Cfg.regNames.namedRegisters ? 1 : 0]; +} + +const char *RabbitizerRegister_getNameRspGpr(uint8_t regValue) { + assert(regValue < ARRAY_COUNT(RabbitizerRegister_RspGpr_Names)); + + return RabbitizerRegister_RspGpr_Names[regValue][RabbitizerConfig_Cfg.regNames.namedRegisters ? 1 : 0]; +} + +const char *RabbitizerRegister_getNameRspCop0(uint8_t regValue) { + assert(regValue < ARRAY_COUNT(RabbitizerRegister_RspCop0_Names)); + + return RabbitizerRegister_RspCop0_Names[regValue] + [RabbitizerConfig_Cfg.regNames.namedRegisters && RabbitizerConfig_Cfg.regNames.vr4300RspCop0NamedRegisters ? 1 : 0]; +} + +const char *RabbitizerRegister_getNameRspCop2(uint8_t regValue) { + assert(regValue < ARRAY_COUNT(RabbitizerRegister_RspCop2_Names)); + + return RabbitizerRegister_RspCop2_Names[regValue][RabbitizerConfig_Cfg.regNames.namedRegisters ? 1 : 0]; +} + +const char *RabbitizerRegister_getNameRspCop2Control(uint8_t regValue) { + assert(regValue < ARRAY_COUNT(RabbitizerRegister_RspCop2Control_Names)); + + return RabbitizerRegister_RspCop2Control_Names[regValue][RabbitizerConfig_Cfg.regNames.namedRegisters ? 1 : 0]; +} + +const char *RabbitizerRegister_getNameRspVector(uint8_t regValue) { + assert(regValue < ARRAY_COUNT(RabbitizerRegister_RspVector_Names)); + + return RabbitizerRegister_RspVector_Names[regValue][RabbitizerConfig_Cfg.regNames.namedRegisters ? 1 : 0]; +} + +const char *RabbitizerRegister_getNameR5900VF(uint8_t regValue) { + assert(regValue < ARRAY_COUNT(RabbitizerRegister_R5900VF_Names)); + + return RabbitizerRegister_R5900VF_Names[regValue][RabbitizerConfig_Cfg.regNames.namedRegisters ? 1 : 0]; +} + +const char *RabbitizerRegister_getNameR5900VI(uint8_t regValue) { + assert(regValue < ARRAY_COUNT(RabbitizerRegister_R5900VI_Names)); + + return RabbitizerRegister_R5900VI_Names[regValue][RabbitizerConfig_Cfg.regNames.namedRegisters ? 1 : 0]; +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/test.c b/tools/ido-static-recomp/tools/rabbitizer/test.c new file mode 100644 index 00000000..e968dfaf --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/test.c @@ -0,0 +1,40 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerInstruction.h" + +#include +#include +#include +#include + + +int main() { + uint32_t word; + RabbitizerInstruction instr; + char *buffer; + int extraLJust = 5; + size_t bufferSize; + size_t disassembledSize; + + word = 0x8D4A7E18; // lw + //word = 0x00004010; // mfhi + + RabbitizerInstruction_init(&instr, word, 0x80000000); + + RabbitizerInstruction_processUniqueId(&instr); + + bufferSize = RabbitizerInstruction_getSizeForBuffer(&instr, 0, extraLJust); + buffer = malloc(bufferSize + 1); + assert(buffer != NULL); + + disassembledSize = RabbitizerInstruction_disassemble(&instr, buffer, NULL, 0, extraLJust); + assert(disassembledSize <= bufferSize); + + printf("%08X: %s\n", word, buffer); + + free(buffer); + RabbitizerInstruction_destroy(&instr); + + return 0; +} diff --git a/tools/ido-static-recomp/tools/rabbitizer/tests/cplusplus/test.cpp b/tools/ido-static-recomp/tools/rabbitizer/tests/cplusplus/test.cpp new file mode 100644 index 00000000..689e12b3 --- /dev/null +++ b/tools/ido-static-recomp/tools/rabbitizer/tests/cplusplus/test.cpp @@ -0,0 +1,16 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/InstructionCpu.hpp" + + +int main() { + uint32_t word = 0x8D4A7E18; // lw + uint32_t vram = 0x80000000; + int extraLJust = 5; + rabbitizer::InstructionCpu instr(word, vram); + + printf("%08X: %s\n", word, instr.disassemble(extraLJust).c_str()); + + return 0; +} diff --git a/tools/ido5.3_recomp/.gitignore b/tools/ido5.3_recomp/.gitignore deleted file mode 100644 index 6b747aba..00000000 --- a/tools/ido5.3_recomp/.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -/recomp -/recomp-conservative - -/cc* -/cfe* -/uopt* -/ugen* -/as1* -/acpp* -/copt* -/ujoin* -/uld* -/umerge* -/usplit* - -/err.english.cc diff --git a/tools/ido5.3_recomp/Makefile b/tools/ido5.3_recomp/Makefile deleted file mode 100644 index 84a5de31..00000000 --- a/tools/ido5.3_recomp/Makefile +++ /dev/null @@ -1,37 +0,0 @@ -IRIX_ROOT := ../ido5.3_compiler - -cc: OPT_CFLAGS := -O2 -cfe: OPT_CFLAGS := -O2 -uopt: OPT_CFLAGS := -O2 -ugen: OPT_CFLAGS := -O2 -as1: OPT_CFLAGS := -O2 -acpp: OPT_CFLAGS := -O2 - -RECOMP := recomp - -ugen_c.c: RECOMP_FLAGS := --conservative - -all: cc cfe uopt ugen as1 acpp copt ujoin uld umerge usplit err.english.cc - -clean: - $(RM) cc* cfe* uopt* ugen* as1* acpp* copt* ujoin* uld* umerge* usplit* err.english.cc $(RECOMP) libc_impl.o - -$(RECOMP): recomp.cpp - $(CXX) $^ -o $@ -std=c++11 -O2 -Wno-switch `pkg-config --cflags --libs capstone` - -libc_impl.o: libc_impl.c libc_impl.h - $(CC) $< -c -fno-strict-aliasing -O2 -DIDO53 - -err.english.cc: $(IRIX_ROOT)/usr/lib/err.english.cc - cp $^ $@ - -cc_c.c: $(IRIX_ROOT)/usr/bin/cc $(RECOMP) - ./$(RECOMP) $(RECOMP_FLAGS) $< > $@ - -%_c.c: $(IRIX_ROOT)/usr/lib/% $(RECOMP) - ./$(RECOMP) $(RECOMP_FLAGS) $< > $@ - -%: %_c.c libc_impl.o - $(CC) libc_impl.o $< -o $@ $(OPT_CFLAGS) -fno-strict-aliasing -lm -no-pie - -.PHONY: all clean diff --git a/tools/ido5.3_recomp/recomp.cpp b/tools/ido5.3_recomp/recomp.cpp deleted file mode 100644 index 2bf6e132..00000000 --- a/tools/ido5.3_recomp/recomp.cpp +++ /dev/null @@ -1,2938 +0,0 @@ -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include - -#include "elf.h" - -#define INSPECT_FUNCTION_POINTERS 0 // set this to 1 when testing a new program, to verify that no false function pointers are found - -#ifndef TRACE -#define TRACE 0 -#endif - -#define LABELS_64_BIT 1 - -#define u32be(x) (uint32_t)(((x & 0xff) << 24) + ((x & 0xff00) << 8) + ((x & 0xff0000) >> 8) + ((uint32_t)(x) >> 24)) -#define u16be(x) (uint16_t)(((x & 0xff) << 8) + ((x & 0xff00) >> 8)) -#define read_u32_be(buf) (uint32_t)(((buf)[0] << 24) + ((buf)[1] << 16) + ((buf)[2] << 8) + ((buf)[3])) - -using namespace std; - -struct Edge { - uint32_t i; - uint8_t function_entry: 1; - uint8_t function_exit: 1; - uint8_t extern_function: 1; - uint8_t function_pointer: 1; -}; - -struct Insn { - uint32_t id; - uint8_t op_count; - string mnemonic; - string op_str; - cs_mips_op operands[8]; - - uint8_t is_jump: 1; - uint8_t is_global_got_memop: 1; - uint8_t no_following_successor: 1; - int linked_insn; - union { - uint32_t linked_value; - float linked_float; - }; - uint32_t jtbl_addr; - uint32_t num_cases; - mips_reg index_reg; - vector successors; - vector predecessors; - uint64_t b_liveout; - uint64_t b_livein; - uint64_t f_livein; - uint64_t f_liveout; -}; - -struct Function { - vector returns; //points to delay slots - uint32_t end_addr; //address after end - uint32_t nargs; - uint32_t nret; - bool v0_in; - bool referenced_by_function_pointer; -}; - -static bool conservative; - -static csh handle; - -static const uint8_t *text_section; -static uint32_t text_section_len; -static uint32_t text_vaddr; - -static const uint8_t *rodata_section; -static uint32_t rodata_section_len; -static uint32_t rodata_vaddr; - -static const uint8_t *data_section; -static uint32_t data_section_len; -static uint32_t data_vaddr; - -static uint32_t bss_section_len; -static uint32_t bss_vaddr; - -static vector insns; -static set label_addresses; -static vector got_globals; -static vector got_locals; -static uint32_t gp_value; -static uint32_t gp_value_adj; - -static map symbol_names; - -static vector> data_function_pointers; -static set li_function_pointers; -static map functions; -static uint32_t main_addr; -static uint32_t mcount_addr; -static uint32_t procedure_table_start; -static uint32_t procedure_table_len; - -#define FLAG_NO_MEM 1 -#define FLAG_VARARG 2 - -static const struct { - const char *name; - const char *params; - int flags; -} extern_functions[] = { - {"exit", "vi"}, // override exit from application - {"abort", "v"}, - {"sbrk", "pi"}, - {"malloc", "pu"}, - {"calloc", "puu"}, - {"realloc", "ppu"}, - {"free", "vp"}, - {"fscanf", "ipp", FLAG_VARARG}, - {"printf", "ip", FLAG_VARARG}, - {"sprintf", "ipp", FLAG_VARARG}, - {"fprintf", "ipp", FLAG_VARARG}, - {"_doprnt", "ippp"}, - {"strlen", "up"}, - {"open", "ipii"}, - {"creat", "ipi"}, - {"access", "ipi"}, - {"rename", "ipp"}, - {"utime", "ipp"}, - {"flock", "iii"}, - {"chmod", "ipu"}, - {"umask", "ii", FLAG_NO_MEM}, - {"ecvt", "pdipp"}, - {"fcvt", "pdipp"}, - {"sqrt", "dd", FLAG_NO_MEM}, - {"sqrtf", "ff", FLAG_NO_MEM}, - {"atoi", "ip"}, - {"atol", "ip"}, - {"atof", "dp"}, - {"strtol", "ippi"}, - {"strtoul", "uppi"}, - {"strtod", "dpp"}, - {"strchr", "ppi"}, - {"strrchr", "ppi"}, - {"strcspn", "upp"}, - {"strpbrk", "ppp"}, - {"fstat", "iip"}, - {"stat", "ipp"}, - {"ftruncate", "iii"}, - {"bcopy", "vppu"}, - {"memcpy", "pppu"}, - {"memccpy", "pppiu"}, - {"read", "iipu"}, - {"write", "iipu"}, - {"fopen", "ppp"}, - {"freopen", "pppp"}, - {"fclose", "ip"}, - {"ftell", "ip"}, - {"rewind", "vp"}, - {"fseek", "ipii"}, - {"lseek", "iiii"}, - {"fflush", "ip"}, - {"dup", "ii"}, - {"dup2", "iii"}, - {"pipe", "ip"}, - {"perror", "vp"}, - {"fdopen", "iip"}, - {"memset", "ppiu"}, - {"bcmp", "ippu"}, - {"memcmp", "ippu"}, - {"getpid", "i", FLAG_NO_MEM}, - {"getpgrp", "i"}, - {"remove", "ip"}, - {"unlink", "ip"}, - {"close", "ii"}, - {"strcmp", "ipp"}, - {"strncmp", "ippu"}, - {"strcpy", "ppp"}, - {"strncpy", "pppu"}, - {"strcat", "ppp"}, - {"strncat", "pppu"}, - {"strtok", "ppp"}, - {"strstr", "ppp"}, - {"strdup", "pp"}, - {"toupper", "ii", FLAG_NO_MEM}, - {"tolower", "ii", FLAG_NO_MEM}, - {"gethostname", "ipu"}, - {"isatty", "ii"}, - {"strftime", "upupp"}, - {"times", "ip"}, - {"clock", "i", FLAG_NO_MEM}, - {"ctime", "pp"}, - {"localtime", "pp"}, - {"setvbuf", "ippiu"}, - {"__semgetc", "ip"}, - {"__semputc", "iip"}, - {"fgetc", "ip"}, - {"fgets", "ipip"}, - {"__filbuf", "ip"}, - {"__flsbuf", "iip"}, - {"ungetc", "iip"}, - {"gets", "pp"}, - {"fread", "upuup"}, - {"fwrite", "upuup"}, - {"fputs", "ipp"}, - {"puts", "ip"}, - {"getcwd", "ppu"}, - {"time", "ip"}, - {"bzero", "vpu"}, - {"fp_class_d", "id", FLAG_NO_MEM}, - {"ldexp", "ddi", FLAG_NO_MEM}, - {"__ll_mul", "lll", FLAG_NO_MEM}, - {"__ll_div", "lll", FLAG_NO_MEM}, - {"__ll_rem", "ljl", FLAG_NO_MEM}, - {"__ll_lshift", "llj", FLAG_NO_MEM}, - {"__ll_rshift", "llj", FLAG_NO_MEM}, - {"__ull_div", "jjj", FLAG_NO_MEM}, - {"__ull_rem", "jjj", FLAG_NO_MEM}, - {"__ull_rshift", "jjj", FLAG_NO_MEM}, - {"__d_to_ull", "jd", FLAG_NO_MEM}, - {"__d_to_ll", "ld", FLAG_NO_MEM}, - {"__f_to_ull", "jf", FLAG_NO_MEM}, - {"__f_to_ll", "lf", FLAG_NO_MEM}, - {"__ull_to_f", "fj", FLAG_NO_MEM}, - {"__ll_to_f", "fl", FLAG_NO_MEM}, - {"__ull_to_d", "dj", FLAG_NO_MEM}, - {"__ll_to_d", "dl", FLAG_NO_MEM}, - {"_exit", "vi"}, - {"_cleanup", "v"}, - {"_rld_new_interface", "pu", FLAG_VARARG}, - {"_exithandle", "v"}, - {"_prctl", "ii", FLAG_VARARG}, - {"_atod", "dpii"}, - {"pathconf", "ipi"}, - {"getenv", "pp"}, - {"gettxt", "ppp"}, - {"setlocale", "pip"}, - {"mmap", "ppuiiii"}, - {"munmap", "ipu"}, - {"mprotect", "ipui"}, - {"sysconf", "ii"}, - {"getpagesize", "i"}, - {"strerror", "pi"}, - {"ioctl", "iiu", FLAG_VARARG}, - {"fcntl", "iii", FLAG_VARARG}, - {"signal", "pit"}, - {"sigset", "pit"}, - {"get_fpc_csr", "i"}, - {"set_fpc_csr", "ii"}, - {"setjmp", "ip"}, - {"longjmp", "vpi"}, - {"tempnam", "ppp"}, - {"tmpnam", "pp"}, - {"mktemp", "pp"}, - {"mkstemp", "ip"}, - {"tmpfile", "p"}, - {"wait", "ip"}, - {"kill", "iii"}, - {"execlp", "ip", FLAG_VARARG}, - {"execv", "ipp"}, - {"execvp", "ipp"}, - {"fork", "i"}, - {"system", "ip"}, - {"tsearch", "pppp"}, - {"tfind", "pppp"}, - {"qsort", "vpuut"}, - {"regcmp", "pp", FLAG_VARARG}, - {"regex", "ppp", FLAG_VARARG}, - {"__assert", "vppi"}, -}; - -static void disassemble(void) { - csh handle; - cs_insn *disasm; - size_t disasm_size = 0; - assert(cs_open(CS_ARCH_MIPS, (cs_mode)(CS_MODE_MIPS64 | CS_MODE_BIG_ENDIAN), &handle) == CS_ERR_OK); - cs_option(handle, CS_OPT_DETAIL, CS_OPT_ON); - insns.reserve(1 + text_section_len / sizeof(uint32_t)); // +1 for dummy instruction - while (text_section_len > disasm_size * sizeof(uint32_t)) { - size_t disasm_len = disasm_size * sizeof(uint32_t); - size_t remaining = text_section_len - disasm_len; - size_t current_len = std::min(remaining, 1024); - size_t cur_disasm_size = cs_disasm(handle, &text_section[disasm_len], current_len, text_vaddr + disasm_len, 0, &disasm); - disasm_size += cur_disasm_size; - for (size_t i = 0; i < cur_disasm_size; i++) { - insns.push_back(Insn()); - Insn& insn = insns.back(); - insn.id = disasm[i].id; - insn.mnemonic = disasm[i].mnemonic; - insn.op_str = disasm[i].op_str; - if (disasm[i].detail != nullptr && disasm[i].detail->mips.op_count > 0) { - insn.op_count = disasm[i].detail->mips.op_count; - memcpy(insn.operands, disasm[i].detail->mips.operands, sizeof(insn.operands)); - } - insn.is_jump = cs_insn_group(handle, &disasm[i], MIPS_GRP_JUMP) || insn.id == MIPS_INS_JAL || insn.id == MIPS_INS_BAL || insn.id == MIPS_INS_JALR; - insn.linked_insn = -1; - } - cs_free(disasm, cur_disasm_size); - } - cs_close(&handle); - - { - // Add dummy instruction to avoid out of bounds - insns.push_back(Insn()); - Insn& insn = insns.back(); - insn.id = MIPS_INS_NOP; - insn.mnemonic = "nop"; - insn.no_following_successor = true; - } -} - -static void add_function(uint32_t addr) { - if (addr >= text_vaddr && addr < text_vaddr + text_section_len) { - functions[addr]; - } -} - -static map::iterator find_function(uint32_t addr) { - if (functions.size() == 0) { - return functions.end(); - } - auto it = functions.upper_bound(addr); - if (it == functions.begin()) { - return functions.end(); - } - --it; - return it; -} - -// try to find a matching LUI for a given register -static void link_with_lui(int offset, uint32_t reg, int mem_imm) -{ -#define MAX_LOOKBACK 128 - // don't attempt to compute addresses for zero offset - // end search after some sane max number of instructions - int end_search = std::max(0, offset - MAX_LOOKBACK); - for (int search = offset - 1; search >= end_search; search--) { - // use an `if` instead of `case` block to allow breaking out of the `for` loop - if (insns[search].id == MIPS_INS_LUI) { - uint32_t rd = insns[search].operands[0].reg; - if (reg == rd) { - break; - } - } else if (insns[search].id == MIPS_INS_LW || - insns[search].id == MIPS_INS_LD || - insns[search].id == MIPS_INS_ADDIU || - //insns[search].id == MIPS_INS_ADDU || used in jump tables for offset - insns[search].id == MIPS_INS_ADD || - insns[search].id == MIPS_INS_SUB || - insns[search].id == MIPS_INS_SUBU) { - uint32_t rd = insns[search].operands[0].reg; - if (reg == rd) { - if (insns[search].id == MIPS_INS_LW && insns[search].operands[1].mem.base == MIPS_REG_GP) { - int mem_imm0 = (int)insns[search].operands[1].mem.disp; - uint32_t got_entry = (mem_imm0 + gp_value_adj) / sizeof(uint32_t); - if (got_entry < got_locals.size()) { - // used for static functions - char buf[32]; - uint32_t addr = got_locals[got_entry] + mem_imm; - insns[search].linked_insn = offset; - insns[search].linked_value = addr; - insns[offset].linked_insn = search; - insns[offset].linked_value = addr; - - //vaddr_references[addr].insert(text_vaddr + offset * 4); - - insns[search].id = MIPS_INS_LI; - insns[search].mnemonic = "li"; - sprintf(buf, "$%s, 0x%x", cs_reg_name(handle, rd), addr); - insns[search].op_str = buf; - insns[search].operands[1].type = MIPS_OP_IMM; - insns[search].operands[1].imm = addr; - - switch (insns[offset].id) { - case MIPS_INS_ADDIU: - insns[offset].id = MIPS_INS_MOVE; - insns[offset].operands[1].type = MIPS_OP_REG; - insns[offset].mnemonic = "move"; - sprintf(buf, "$%s, $%s", cs_reg_name(handle, insns[offset].operands[0].reg), cs_reg_name(handle, rd)); - insns[offset].op_str = buf; - if (addr >= text_vaddr && addr < text_vaddr + text_section_len) { - add_function(addr); - } - break; - case MIPS_INS_LB: - case MIPS_INS_LBU: - case MIPS_INS_SB: - case MIPS_INS_LH: - case MIPS_INS_LHU: - case MIPS_INS_SH: - case MIPS_INS_LW: - case MIPS_INS_SW: - case MIPS_INS_LDC1: - case MIPS_INS_LWC1: - case MIPS_INS_SWC1: - insns[offset].operands[1].mem.disp = 0; - sprintf(buf, "$%s, ($%s)", cs_reg_name(handle, insns[offset].operands[0].reg), cs_reg_name(handle, rd)); - insns[offset].op_str = buf; - break; - default: - assert(0); - } - } - break; - } else { - // ignore: reg is pointer, offset is probably struct data member - break; - } - } - } else if (insns[search].id == MIPS_INS_JR && - insns[search].operands[0].reg == MIPS_REG_RA && offset - search >= 2) { - // stop looking when previous `jr ra` is hit, - // but ignore if `offset` is branch delay slot for this `jr ra` - break; - } - } -} - -// for a given `jalr t9`, find the matching t9 load -static void link_with_jalr(int offset) -{ - // end search after some sane max number of instructions - int end_search = std::max(0, offset - MAX_LOOKBACK); - for (int search = offset - 1; search >= end_search; search--) { - if (insns[search].operands[0].reg == MIPS_REG_T9) { - if (insns[search].id == MIPS_INS_LW || insns[search].id == MIPS_INS_LI) { - if (insns[search].is_global_got_memop || insns[search].id == MIPS_INS_LI) { - char buf[32]; - sprintf(buf, "0x%x", insns[search].linked_value); - insns[search].linked_insn = offset; - insns[offset].linked_insn = search; - insns[offset].linked_value = insns[search].linked_value; - //insns[offset].label = insns[search].label; - //function_entry_points.insert(insns[search].linked_value); - insns[offset].id = MIPS_INS_JAL; - insns[offset].mnemonic = "jal"; - insns[offset].op_str = buf; - insns[offset].operands[0].type = MIPS_OP_IMM; - insns[offset].operands[0].imm = insns[search].linked_value; - insns[search].id = MIPS_INS_NOP; - insns[search].mnemonic = "nop"; - insns[search].op_str = ""; - insns[search].is_global_got_memop = false; - add_function(insns[search].linked_value); - } - break; - } else if (insns[search].id == MIPS_INS_ADDIU) { - if (insns[search].linked_insn != -1) { - //function_entry_points.insert(insns[search].linked_value); - uint32_t first = insns[search].linked_insn; - insns[search].linked_insn = offset; - insns[offset].linked_insn = first; - insns[offset].linked_value = insns[search].linked_value; - } - break; - } else if (insns[search].id == MIPS_INS_LI) { - if (insns[search].linked_insn != -1) { - //function_entry_points.insert(insns[search].linked_value); - uint32_t first = insns[search].linked_insn; - insns[search].linked_insn = offset; - insns[offset].linked_insn = first; - insns[offset].linked_value = insns[search].linked_value; - insns[search].id = MIPS_INS_NOP; - insns[search].mnemonic = "nop"; - insns[search].op_str = ""; - } - break; - } else if (insns[search].id == MIPS_INS_LD || - insns[search].id == MIPS_INS_ADDU || - insns[search].id == MIPS_INS_ADD || - insns[search].id == MIPS_INS_SUB || - insns[search].id == MIPS_INS_SUBU) { - break; - } - } else if (insns[search].id == MIPS_INS_JR && - insns[search].operands[0].reg == MIPS_REG_RA) - { - // stop looking when previous `jr ra` is hit - break; - } - } -} - -static void pass1(void) { - for (size_t i = 0; i < insns.size(); i++) { - Insn& insn = insns[i]; - if (insn.id == MIPS_INS_BAL) { - insn.id = MIPS_INS_JAL; - insn.mnemonic = "jal"; - } - if (insn.is_jump) { - if (insn.id == MIPS_INS_JAL || insn.id == MIPS_INS_J) { - uint32_t target = (uint32_t)insn.operands[0].imm; - label_addresses.insert(target); - add_function(target); - } else if (insn.id == MIPS_INS_JR) { - // sltiu $at, $ty, z - // sw $reg, offset($sp) (very seldom, one or more, usually in func entry) - // lw $gp, offset($sp) (if PIC, and very seldom) - // beqz $at, .L - // some other instruction (not always) - // lui $at, %hi(jtbl) - // sll $tx, $ty, 2 - // addu $at, $at, $tx - // lw $tx, %lo(jtbl)($at) - // nop (code compiled with 5.3) - // addu $tx, $tx, $gp (if PIC) - // jr $tx - - // IDO 7.1: - //lw at,offset(gp) - //andi t9,t8,0x3f - //sll t9,t9,0x2 - //addu at,at,t9 - //lw t9,offset(at) - //addu t9,t9,gp - //jr t9 - - // IDO 5.3: - //lw at,offset(gp) - //andi t3,t2,0x3f - //sll t3,t3,0x2 - //addu at,at,t3 - //something - //lw t3,offset(at) - //something - //addu t3,t3,gp - //jr t3 - if (i >= 7 && rodata_section != NULL) { - bool is_pic = insns[i - 1].id == MIPS_INS_ADDU && insns[i - 1].operands[2].reg == MIPS_REG_GP; - bool has_nop = insns[i - is_pic - 1].id == MIPS_INS_NOP; - bool has_extra = insns[i - is_pic - has_nop - 5].id != MIPS_INS_BEQZ; - int lw = i - is_pic - has_nop - 1; - if (insns[lw].id != MIPS_INS_LW) { - --lw; - } - if (insns[lw].id == MIPS_INS_LW && insns[lw].linked_insn != -1) { - int sltiu_index = -1; - int andi_index = -1; - uint32_t addu_index = lw - 1; - uint32_t num_cases; - bool found = false; - bool and_variant = false; - int end = 14; - if (insns[addu_index].id != MIPS_INS_ADDU) { - --addu_index; - } - mips_reg index_reg = (mips_reg)insns[addu_index - 1].operands[1].reg; - if (insns[addu_index].id != MIPS_INS_ADDU) { - goto skip; - } - if (insns[addu_index - 1].id != MIPS_INS_SLL) { - goto skip; - } - if (insns[addu_index - 1].operands[0].reg != insn.operands[0].reg) { - goto skip; - } - for (int j = 3; j <= 4; j++) { - if (insns[lw - j].id == MIPS_INS_ANDI) { - andi_index = lw - j; - break; - } - } - if (i == 368393) { - // In copt - end = 18; - } - for (int j = 5; j <= end; j++) { - if (insns[lw - has_extra - j].id == MIPS_INS_SLTIU && - insns[lw - has_extra - j].operands[0].reg == MIPS_REG_AT) - { - sltiu_index = j; - break; - } - if (insns[lw - has_extra - j].id == MIPS_INS_JR) { - // Prevent going into a previous switch - break; - } - } - if (sltiu_index != -1) { - andi_index = -1; - } - if (sltiu_index != -1 && insns[lw - has_extra - sltiu_index].id == MIPS_INS_SLTIU) { - num_cases = insns[lw - has_extra - sltiu_index].operands[2].imm; - found = true; - } else if (andi_index != -1) { - num_cases = insns[andi_index].operands[2].imm + 1; - found = true; - and_variant = true; - } else if (i == 219382) { - // Special hard case in copt where the initial sltiu is in another basic block - found = true; - num_cases = 13; - } else if (i == 370995) { - // Special hard case in copt where the initial sltiu is in another basic block - found = true; - num_cases = 12; - } - if (found) { - uint32_t jtbl_addr = insns[lw].linked_value; - if (is_pic) { - insns[i - 1].id = MIPS_INS_NOP; - } - //printf("jump table at %08x, size %u\n", jtbl_addr, num_cases); - insn.jtbl_addr = jtbl_addr; - insn.num_cases = num_cases; - insn.index_reg = index_reg; - insns[lw].id = MIPS_INS_NOP; - insns[addu_index].id = MIPS_INS_NOP; - insns[addu_index - 1].id = MIPS_INS_NOP; - if (!and_variant) { - insns[addu_index - 2].id = MIPS_INS_NOP; - } - - if (jtbl_addr < rodata_vaddr || jtbl_addr + num_cases * sizeof(uint32_t) > rodata_vaddr + rodata_section_len) { - fprintf(stderr, "jump table outside rodata\n"); - exit(EXIT_FAILURE); - } - for (uint32_t i = 0; i < num_cases; i++) { - uint32_t target_addr = read_u32_be(rodata_section + (jtbl_addr - rodata_vaddr) + i * sizeof(uint32_t)); - target_addr += gp_value; - //printf("%08X\n", target_addr); - label_addresses.insert(target_addr); - } - } - skip:; - } - } - } else { - for (int j = 0; j < insn.op_count; j++) { - if (insn.operands[j].type == MIPS_OP_IMM) { - uint32_t target = (uint32_t)insn.operands[j].imm; - label_addresses.insert(target); - } - } - } - } - switch (insns[i].id) { - // find floating point LI - case MIPS_INS_MTC1: - { - unsigned int rt = insns[i].operands[0].reg; - for (int s = i - 1; s >= 0; s--) { - if (insns[s].id == MIPS_INS_LUI && insns[s].operands[0].reg == rt) { - float f; - uint32_t lui_imm = (uint32_t)(insns[s].operands[1].imm << 16); - memcpy(&f, &lui_imm, sizeof(f)); - insns[s].operands[1].imm <<= 16; - // link up the LUI with this instruction and the float - insns[s].linked_insn = i; - insns[s].linked_float = f; - // rewrite LUI instruction to be LI - insns[s].id = MIPS_INS_LI; - insns[s].mnemonic = "li"; - break; - } else if (insns[s].id == MIPS_INS_LW || - insns[s].id == MIPS_INS_LD || - insns[s].id == MIPS_INS_LH || - insns[s].id == MIPS_INS_LHU || - insns[s].id == MIPS_INS_LB || - insns[s].id == MIPS_INS_LBU || - insns[s].id == MIPS_INS_ADDIU || - insns[s].id == MIPS_INS_ADD || - insns[s].id == MIPS_INS_SUB || - insns[s].id == MIPS_INS_SUBU) { - unsigned int rd = insns[s].operands[0].reg; - if (rt == rd) { - break; - } - } else if (insns[s].id == MIPS_INS_JR && - insns[s].operands[0].reg == MIPS_REG_RA) { - // stop looking when previous `jr ra` is hit - break; - } - } - break; - } - case MIPS_INS_SD: - case MIPS_INS_SW: - case MIPS_INS_SH: - case MIPS_INS_SB: - case MIPS_INS_LB: - case MIPS_INS_LBU: - case MIPS_INS_LD: - case MIPS_INS_LDL: - case MIPS_INS_LDR: - case MIPS_INS_LH: - case MIPS_INS_LHU: - case MIPS_INS_LW: - case MIPS_INS_LWU: - case MIPS_INS_LDC1: - case MIPS_INS_LWC1: - case MIPS_INS_LWC2: - case MIPS_INS_LWC3: - case MIPS_INS_SWC1: - case MIPS_INS_SWC2: - case MIPS_INS_SWC3: - { - unsigned int mem_rs = insns[i].operands[1].mem.base; - int mem_imm = (int)insns[i].operands[1].mem.disp; - if (mem_rs == MIPS_REG_GP) { - unsigned int got_entry = (mem_imm + gp_value_adj) / sizeof(unsigned int); - if (got_entry >= got_locals.size()) { - got_entry -= got_locals.size(); - if (got_entry < got_globals.size()) { - assert(insn.id == MIPS_INS_LW); - //printf("gp 0x%08x %s\n", mem_imm, got_globals[got_entry].name); - unsigned int dest_vaddr = got_globals[got_entry]; - insns[i].is_global_got_memop = true; - insns[i].linked_value = dest_vaddr; - //insns[i].label = got_globals[got_entry].name; - - //vaddr_references[dest_vaddr].insert(vaddr + i * 4); - //disasm_add_data_addr(state, dest_vaddr); - insns[i].id = MIPS_INS_LI; - insns[i].operands[1].imm = dest_vaddr; - char buf[32]; - sprintf(buf, "$%s, 0x%x", cs_reg_name(handle, insn.operands[0].reg), dest_vaddr); - insns[i].op_str = buf; - } - } - } else { - link_with_lui(i, mem_rs, mem_imm); - } - break; - } - case MIPS_INS_ADDIU: - case MIPS_INS_ORI: - { - unsigned int rd = insns[i].operands[0].reg; - unsigned int rs = insns[i].operands[1].reg; - int64_t imm = insns[i].operands[2].imm; - if (rs == MIPS_REG_ZERO) { // becomes LI - char buf[32]; - insns[i].id = MIPS_INS_LI; - insns[i].operands[1].imm = imm; - insns[i].mnemonic = "li"; - sprintf(buf, "$%s, %" PRIi64, cs_reg_name(handle, rd), imm); - insns[i].op_str = buf; - } else if (/*rd == rs &&*/ rd != MIPS_REG_GP) { // only look for LUI if rd and rs are the same - link_with_lui(i, rs, (int)imm); - } - break; - } - case MIPS_INS_JALR: - { - unsigned int r = insn.operands[0].reg; - if (r == MIPS_REG_T9) { - link_with_jalr(i); - if (insn.linked_insn != -1) { - char buf[32]; - sprintf(buf, "0x%x", insn.linked_value); - insn.id = MIPS_INS_JAL; - insn.mnemonic = "jal"; - insn.op_str = buf; - insn.operands[0].type = MIPS_OP_IMM; - insn.operands[0].imm = insn.linked_value; - label_addresses.insert(insn.linked_value); - add_function(insn.linked_value); - } - } - break; - } - } - if (insn.id == MIPS_INS_ADDU && insn.operands[0].reg == MIPS_REG_GP && insn.operands[1].reg == MIPS_REG_GP && insn.operands[2].reg == MIPS_REG_T9 && i >= 2) { - //state->function_entry_points.insert(vaddr + (i - 2) * 4); - for (int j = i - 2; j <= i; j++) { - insns[j].id = MIPS_INS_NOP; - insns[j].mnemonic = "nop"; - insns[j].op_str = ""; - } - } - } -} - -static uint32_t addr_to_i(uint32_t addr) { - return (addr - text_vaddr) / 4; -} - -static void pass2(void) { - // Find returns in each function - for (size_t i = 0; i < insns.size(); i++) { - uint32_t addr = text_vaddr + i * 4; - Insn& insn = insns[i]; - if (insn.id == MIPS_INS_JR && insn.operands[0].reg == MIPS_REG_RA) { - auto it = find_function(addr); - assert(it != functions.end()); - it->second.returns.push_back(addr + 4); - } - if (insn.is_global_got_memop && text_vaddr <= insn.operands[1].imm && insn.operands[1].imm < text_vaddr + text_section_len) { - uint32_t faddr = insn.operands[1].imm; - li_function_pointers.insert(faddr); - functions[faddr].referenced_by_function_pointer = true; -#if INSPECT_FUNCTION_POINTERS - fprintf(stderr, "li function pointer: 0x%x at 0x%x\n", faddr, addr); -#endif - } - } - for (auto it = functions.begin(); it != functions.end(); ++it) { - if (it->second.returns.size() == 0) { - uint32_t i = addr_to_i(it->first); - auto str_it = symbol_names.find(it->first); - if (str_it != symbol_names.end() && str_it->second == "__start") { - - } else if (str_it != symbol_names.end() && str_it->second == "xmalloc") { - // orig 5.3: - /* - 496bf4: 3c1c0fb9 lui gp,0xfb9 - 496bf8: 279c366c addiu gp,gp,13932 - 496bfc: 0399e021 addu gp,gp,t9 - 496c00: 27bdffd8 addiu sp,sp,-40 - 496c04: 8f858de8 lw a1,-29208(gp) - 496c08: 10000006 b 496c24 - 496c0c: afbf0020 sw ra,32(sp) - */ - - // jal alloc_new - // lui $a1, malloc_scb - // jr $ra - // nop - uint32_t alloc_new_addr = text_vaddr + (i + 7) * 4; - insns[i].id = MIPS_INS_JAL; - insns[i].op_count = 1; - insns[i].mnemonic = "jal"; - insns[i].op_str = "alloc_new"; - insns[i].operands[0].imm = alloc_new_addr; - assert(symbol_names.count(alloc_new_addr) && symbol_names[alloc_new_addr] == "alloc_new"); - i++; - if (insns[i + 5].id == MIPS_INS_LI) { - // 7.1 - insns[i] = insns[i + 5]; - } else { - // 5.3 - insns[i] = insns[i + 3]; - } - i++; - insns[i].id = MIPS_INS_JR; - insns[i].op_count = 1; - insns[i].mnemonic = "jr"; - insns[i].op_str = "$ra"; - insns[i].operands[0].reg = MIPS_REG_RA; - it->second.returns.push_back(text_vaddr + i * 4 + 4); - i++; - for (uint32_t j = 0; j < 4; j++) { - insns[i].id = MIPS_INS_NOP; - insns[i].op_count = 0; - insns[i].mnemonic = "nop"; - i++; - } - } else if (str_it != symbol_names.end() && str_it->second == "xfree") { - // jal alloc_dispose - // lui $a1, malloc_scb - // jr $ra - // nop - uint32_t alloc_dispose_addr = text_vaddr + (i + 4) * 4; - if (symbol_names.count(alloc_dispose_addr + 4) && symbol_names[alloc_dispose_addr + 4] == "alloc_dispose") { - alloc_dispose_addr += 4; - } - insns[i].id = MIPS_INS_JAL; - insns[i].op_count = 1; - insns[i].mnemonic = "jal"; - insns[i].op_str = "alloc_dispose"; - insns[i].operands[0].imm = alloc_dispose_addr; - assert(symbol_names.count(alloc_dispose_addr) && symbol_names[alloc_dispose_addr] == "alloc_dispose"); - i++; - insns[i] = insns[i + 2]; - i++; - insns[i].id = MIPS_INS_JR; - insns[i].op_count = 1; - insns[i].mnemonic = "jr"; - insns[i].op_str = "$ra"; - insns[i].operands[0].reg = MIPS_REG_RA; - it->second.returns.push_back(text_vaddr + i * 4 + 4); - i++; - insns[i].id = MIPS_INS_NOP; - insns[i].op_count = 0; - insns[i].mnemonic = "nop"; - } else if (insns[i].id == MIPS_INS_LW && insns[i + 1].id == MIPS_INS_MOVE && insns[i + 2].id == MIPS_INS_JALR) { - /* - 408f50: 8f998010 lw t9,-32752(gp) - 408f54: 03e07821 move t7,ra - 408f58: 0320f809 jalr t9 - */ - } else if (it->first > mcount_addr) { - fprintf(stderr, "no ret: 0x%x\n", it->first); - abort(); - } - } - auto next = it; - ++next; - if (next == functions.end()) { - it->second.end_addr = text_vaddr + text_section_len; - } else { - it->second.end_addr = next->first; - } - } -} - -static void add_edge(uint32_t from, uint32_t to, bool function_entry = false, bool function_exit = false, bool extern_function = false, bool function_pointer = false) { - Edge fe = Edge(), be = Edge(); - fe.i = to; - be.i = from; - fe.function_entry = function_entry; - be.function_entry = function_entry; - fe.function_exit = function_exit; - be.function_exit = function_exit; - fe.extern_function = extern_function; - be.extern_function = extern_function; - fe.function_pointer = function_pointer; - be.function_pointer = function_pointer; - insns[from].successors.push_back(fe); - insns[to].predecessors.push_back(be); -} - -static void pass3(void) { - // Build graph - for (size_t i = 0; i < insns.size(); i++) { - uint32_t addr = text_vaddr + i * 4; - Insn& insn = insns[i]; - if (insn.no_following_successor) { - continue; - } - switch (insn.id) { - case MIPS_INS_BEQ: - case MIPS_INS_BGEZ: - case MIPS_INS_BGTZ: - case MIPS_INS_BLEZ: - case MIPS_INS_BLTZ: - case MIPS_INS_BNE: - case MIPS_INS_BEQZ: - case MIPS_INS_BNEZ: - case MIPS_INS_BC1F: - case MIPS_INS_BC1T: - add_edge(i, i + 1); - add_edge(i + 1, addr_to_i((uint32_t)insn.operands[insn.op_count - 1].imm)); - break; - - case MIPS_INS_BEQL: - case MIPS_INS_BGEZL: - case MIPS_INS_BGTZL: - case MIPS_INS_BLEZL: - case MIPS_INS_BLTZL: - case MIPS_INS_BNEL: - case MIPS_INS_BC1FL: - case MIPS_INS_BC1TL: - add_edge(i, i + 1); - add_edge(i, i + 2); - add_edge(i + 1, addr_to_i((uint32_t)insn.operands[insn.op_count - 1].imm)); - insns[i + 1].no_following_successor = true; // don't inspect delay slot - break; - - case MIPS_INS_B: - case MIPS_INS_J: - add_edge(i, i + 1); - add_edge(i + 1, addr_to_i((uint32_t)insn.operands[0].imm)); - insns[i + 1].no_following_successor = true; // don't inspect delay slot - break; - - case MIPS_INS_JR: { - add_edge(i, i + 1); - if (insn.jtbl_addr != 0) { - uint32_t jtbl_pos = insn.jtbl_addr - rodata_vaddr; - assert(jtbl_pos < rodata_section_len && jtbl_pos + insn.num_cases * 4 <= rodata_section_len); - for (uint32_t j = 0; j < insn.num_cases; j++) { - uint32_t dest_addr = read_u32_be(rodata_section + jtbl_pos + j * 4) + gp_value; - add_edge(i + 1, addr_to_i(dest_addr)); - } - } else { - assert(insn.operands[0].reg == MIPS_REG_RA && "jump to address in register not supported"); - } - insns[i + 1].no_following_successor = true; // don't inspect delay slot - break; - } - - case MIPS_INS_JAL: { - add_edge(i, i + 1); - uint32_t dest = (uint32_t)insn.operands[0].imm; - if (dest > mcount_addr && dest >= text_vaddr && dest < text_vaddr + text_section_len) { - add_edge(i + 1, addr_to_i(dest), true); - auto it = functions.find(dest); - assert(it != functions.end()); - for (uint32_t ret_instr : it->second.returns) { - add_edge(addr_to_i(ret_instr), i + 2, false, true); - } - } else { - add_edge(i + 1, i + 2, false, false, true); - } - insns[i + 1].no_following_successor = true; // don't inspect delay slot - break; - } - - case MIPS_INS_JALR: - // function pointer - add_edge(i, i + 1); - add_edge(i + 1, i + 2, false, false, false, true); - insns[i + 1].no_following_successor = true; // don't inspect delay slot - break; - - default: - add_edge(i, i + 1); - break; - } - } -} - -static uint64_t map_reg(int32_t reg) { - if (reg > MIPS_REG_31) { - if (reg == MIPS_REG_HI) { - reg = MIPS_REG_31 + 1; - } else if (reg == MIPS_REG_LO) { - reg = MIPS_REG_31 + 2; - } else { - return 0; - } - } - return (uint64_t)1 << (reg - MIPS_REG_0 + 1); -} - -static uint64_t temporary_regs(void) { - return - map_reg(MIPS_REG_T0) | - map_reg(MIPS_REG_T1) | - map_reg(MIPS_REG_T2) | - map_reg(MIPS_REG_T3) | - map_reg(MIPS_REG_T4) | - map_reg(MIPS_REG_T5) | - map_reg(MIPS_REG_T6) | - map_reg(MIPS_REG_T7) | - map_reg(MIPS_REG_T8) | - map_reg(MIPS_REG_T9); -} - -typedef enum { - TYPE_NOP, - TYPE_1S, - TYPE_2S, - TYPE_1D, - TYPE_1D_1S, - TYPE_1D_2S, - TYPE_D_LO_HI_2S, - TYPE_1S_POS1 -} TYPE; -static TYPE insn_to_type(Insn& i) { - switch (i.id) { - case MIPS_INS_ADD: - case MIPS_INS_ADDU: - if (i.mnemonic != "add.s" && i.mnemonic != "add.d") { - return TYPE_1D_2S; - } else { - return TYPE_NOP; - } - - case MIPS_INS_ADDI: - case MIPS_INS_ADDIU: - case MIPS_INS_ANDI: - case MIPS_INS_ORI: - case MIPS_INS_LB: - case MIPS_INS_LBU: - case MIPS_INS_LH: - case MIPS_INS_LHU: - case MIPS_INS_LW: - case MIPS_INS_LWL: - //case MIPS_INS_LWR: - case MIPS_INS_MOVE: - case MIPS_INS_NEGU: - case MIPS_INS_NOT: - case MIPS_INS_SLL: - case MIPS_INS_SLTI: - case MIPS_INS_SLTIU: - case MIPS_INS_SRA: - case MIPS_INS_SRL: - case MIPS_INS_XORI: - return TYPE_1D_1S; - - case MIPS_INS_MFHI: - i.operands[1].reg = MIPS_REG_HI; - return TYPE_1D_1S; - - case MIPS_INS_MFLO: - i.operands[1].reg = MIPS_REG_LO; - return TYPE_1D_1S; - - case MIPS_INS_AND: - case MIPS_INS_OR: - case MIPS_INS_NOR: - case MIPS_INS_SLLV: - case MIPS_INS_SLT: - case MIPS_INS_SLTU: - case MIPS_INS_SRAV: - case MIPS_INS_SRLV: - case MIPS_INS_SUBU: - case MIPS_INS_XOR: - return TYPE_1D_2S; - - case MIPS_INS_CFC1: - case MIPS_INS_MFC1: - case MIPS_INS_LI: - case MIPS_INS_LUI: - return TYPE_1D; - - case MIPS_INS_CTC1: - case MIPS_INS_BGEZ: - case MIPS_INS_BGEZL: - case MIPS_INS_BGTZ: - case MIPS_INS_BGTZL: - case MIPS_INS_BLEZ: - case MIPS_INS_BLEZL: - case MIPS_INS_BLTZ: - case MIPS_INS_BLTZL: - case MIPS_INS_BEQZ: - case MIPS_INS_BNEZ: - case MIPS_INS_MTC1: - return TYPE_1S; - - case MIPS_INS_BEQ: - case MIPS_INS_BEQL: - case MIPS_INS_BNE: - case MIPS_INS_BNEL: - case MIPS_INS_SB: - case MIPS_INS_SH: - case MIPS_INS_SW: - case MIPS_INS_SWL: - //case MIPS_INS_SWR: - case MIPS_INS_TNE: - case MIPS_INS_TEQ: - case MIPS_INS_TGE: - case MIPS_INS_TGEU: - case MIPS_INS_TLT: - return TYPE_2S; - - case MIPS_INS_DIV: - if (i.mnemonic != "div.s" && i.mnemonic != "div.d") { - return TYPE_D_LO_HI_2S; - } else { - return TYPE_NOP; - } - - case MIPS_INS_DIVU: - case MIPS_INS_MULT: - case MIPS_INS_MULTU: - return TYPE_D_LO_HI_2S; - - case MIPS_INS_NEG: - if (i.mnemonic != "neg.s" && i.mnemonic != "neg.d") { - return TYPE_1D_1S; - } else { - return TYPE_NOP; - } - - case MIPS_INS_JALR: - return TYPE_1S; - - case MIPS_INS_JR: - if (i.jtbl_addr != 0) { - i.operands[0].reg = i.index_reg; - } - if (i.operands[0].reg == MIPS_REG_RA) { - return TYPE_NOP; - } - return TYPE_1S; - - case MIPS_INS_LWC1: - case MIPS_INS_LDC1: - case MIPS_INS_SWC1: - case MIPS_INS_SDC1: - return TYPE_1S_POS1; - - default: - return TYPE_NOP; - } -} - -static void pass4(void) { - vector q; - uint64_t livein_func_start = 1U | map_reg(MIPS_REG_A0) | map_reg(MIPS_REG_A1) | map_reg(MIPS_REG_SP) | map_reg(MIPS_REG_ZERO); - - q.push_back(main_addr); - insns[addr_to_i(main_addr)].f_livein = livein_func_start; - - for (auto& it : data_function_pointers) { - q.push_back(it.second); - insns[addr_to_i(it.second)].f_livein = livein_func_start | map_reg(MIPS_REG_A2) | map_reg(MIPS_REG_A3); - } - for (auto& addr : li_function_pointers) { - q.push_back(addr); - insns[addr_to_i(addr)].f_livein = livein_func_start | map_reg(MIPS_REG_A2) | map_reg(MIPS_REG_A3); - } - - while (!q.empty()) { - uint32_t addr = q.back(); - q.pop_back(); - uint32_t idx = addr_to_i(addr); - Insn& i = insns[idx]; - uint64_t live = i.f_livein | 1; - switch (insn_to_type(i)) { - case TYPE_1D: - live |= map_reg(i.operands[0].reg); - break; - - case TYPE_1D_1S: - if (live & map_reg(i.operands[1].reg)) { - live |= map_reg(i.operands[0].reg); - } - break; - - case TYPE_1D_2S: - if ((live & map_reg(i.operands[1].reg)) && (live & map_reg(i.operands[2].reg))) { - live |= map_reg(i.operands[0].reg); - } - break; - - case TYPE_D_LO_HI_2S: - if ((live & map_reg(i.operands[0].reg)) && (live & map_reg(i.operands[1].reg))) { - live |= map_reg(MIPS_REG_LO); - live |= map_reg(MIPS_REG_HI); - } - break; - } - if ((i.f_liveout | live) == i.f_liveout) { - // No new bits - continue; - } - live |= i.f_liveout; - i.f_liveout = live; - - bool function_entry = false; - for (Edge& e : i.successors) { - uint64_t new_live = live; - if (e.function_exit) { - new_live &= 1U | map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_V1) | map_reg(MIPS_REG_ZERO); - } else if (e.function_entry) { - new_live &= 1U | map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_A0) | map_reg(MIPS_REG_A1) | - map_reg(MIPS_REG_A2) | map_reg(MIPS_REG_A3) | map_reg(MIPS_REG_SP) | map_reg(MIPS_REG_ZERO); - function_entry = true; - } else if (e.extern_function) { - string name; - bool is_extern_function = false; - size_t extern_function_id; - auto it = symbol_names.find(insns[idx - 1].operands[0].imm); - if (it != symbol_names.end()) { - name = it->second; - for (size_t i = 0; i < sizeof(extern_functions) / sizeof(extern_functions[0]); i++) { - if (name == extern_functions[i].name) { - is_extern_function = true; - extern_function_id = i; - break; - } - } - if (!is_extern_function) { - fprintf(stderr, "missing extern function: %s\n", name.c_str()); - } - } - assert(is_extern_function); - auto& fn = extern_functions[extern_function_id]; - char ret_type = fn.params[0]; - new_live &= ~(map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_A0) | map_reg(MIPS_REG_A1) | - map_reg(MIPS_REG_A2) | map_reg(MIPS_REG_A3) | map_reg(MIPS_REG_V1) | temporary_regs()); - switch (ret_type) { - case 'i': - case 'u': - case 'p': - new_live |= map_reg(MIPS_REG_V0); - break; - case 'f': - break; - case 'd': - break; - case 'v': - break; - case 'l': - case 'j': - new_live |= map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_V1); - break; - } - } else if (e.function_pointer) { - new_live &= ~(map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_A0) | map_reg(MIPS_REG_A1) | - map_reg(MIPS_REG_A2) | map_reg(MIPS_REG_A3) | map_reg(MIPS_REG_V1) | temporary_regs()); - new_live |= map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_V1); - } - if ((insns[e.i].f_livein | new_live) != insns[e.i].f_livein) { - insns[e.i].f_livein |= new_live; - q.push_back(text_vaddr + e.i * 4); - } - } - if (function_entry) { - // add one edge that skips the function call, for callee-saved register liveness propagation - live &= ~(map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_A0) | map_reg(MIPS_REG_A1) | - map_reg(MIPS_REG_A2) | map_reg(MIPS_REG_A3) | map_reg(MIPS_REG_V1) | temporary_regs()); - if ((insns[idx + 1].f_livein | live) != insns[idx + 1].f_livein) { - insns[idx + 1].f_livein |= live; - q.push_back(text_vaddr + (idx + 1) * 4); - } - } - } -} - -static void pass5(void) { - vector q; - - assert(functions.count(main_addr)); - - q = functions[main_addr].returns; - for (auto addr : q) { - insns[addr_to_i(addr)].b_liveout = 1U | map_reg(MIPS_REG_V0); - } - for (auto& it : data_function_pointers) { - for (auto addr : functions[it.second].returns) { - q.push_back(addr); - insns[addr_to_i(addr)].b_liveout = 1U | map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_V1); - } - } - for (auto& func_addr : li_function_pointers) { - for (auto addr : functions[func_addr].returns) { - q.push_back(addr); - insns[addr_to_i(addr)].b_liveout = 1U | map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_V1); - } - } - for (size_t i = 0; i < insns.size(); i++) { - if (insns[i].f_livein != 0) { - // Instruction is reachable - q.push_back(text_vaddr + i * 4); - } - } - - while (!q.empty()) { - uint32_t addr = q.back(); - q.pop_back(); - uint32_t idx = addr_to_i(addr); - Insn& i = insns[idx]; - uint64_t live = i.b_liveout | 1; - switch (insn_to_type(i)) { - case TYPE_1S: - live |= map_reg(i.operands[0].reg); - break; - - case TYPE_1S_POS1: - live |= map_reg(i.operands[1].reg); - break; - - case TYPE_2S: - live |= map_reg(i.operands[0].reg); - live |= map_reg(i.operands[1].reg); - break; - - case TYPE_1D: - live &= ~map_reg(i.operands[0].reg); - break; - - case TYPE_1D_1S: - if (live & map_reg(i.operands[0].reg)) { - live &= ~map_reg(i.operands[0].reg); - live |= map_reg(i.operands[1].reg); - } - break; - - case TYPE_1D_2S: - if (live & map_reg(i.operands[0].reg)) { - live &= ~map_reg(i.operands[0].reg); - live |= map_reg(i.operands[1].reg); - live |= map_reg(i.operands[2].reg); - } - break; - - case TYPE_D_LO_HI_2S: { - bool used = (live & map_reg(MIPS_REG_LO)) || (live & map_reg(MIPS_REG_HI)); - live &= ~map_reg(MIPS_REG_LO); - live &= ~map_reg(MIPS_REG_HI); - if (used) { - live |= map_reg(i.operands[0].reg); - live |= map_reg(i.operands[1].reg); - } - break; - } - } - if ((i.b_livein | live) == i.b_livein) { - // No new bits - continue; - } - live |= i.b_livein; - i.b_livein = live; - - bool function_exit = false; - for (Edge& e : i.predecessors) { - uint64_t new_live = live; - if (e.function_exit) { - new_live &= 1U | map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_V1); - function_exit = true; - } else if (e.function_entry) { - new_live &= 1U | map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_A0) | map_reg(MIPS_REG_A1) | - map_reg(MIPS_REG_A2) | map_reg(MIPS_REG_A3) | map_reg(MIPS_REG_SP); - } else if (e.extern_function) { - string name; - bool is_extern_function = false; - size_t extern_function_id; - auto it = symbol_names.find(insns[idx - 2].operands[0].imm); - if (it != symbol_names.end()) { - name = it->second; - for (size_t i = 0; i < sizeof(extern_functions) / sizeof(extern_functions[0]); i++) { - if (name == extern_functions[i].name) { - is_extern_function = true; - extern_function_id = i; - break; - } - } - } - assert(is_extern_function); - auto& fn = extern_functions[extern_function_id]; - uint64_t args = 1U; - if (fn.flags & FLAG_VARARG) { - // Assume the worst, that all four registers are used - for (int j = 0; j < 4; j++) { - args |= map_reg(MIPS_REG_A0 + j); - } - } - int pos = 0; - int pos_float = 0; - bool only_floats_so_far = true; - for (const char *p = fn.params + 1; *p != '\0'; ++p) { - switch (*p) { - case 'i': - case 'u': - case 'p': - case 't': - only_floats_so_far = false; - if (pos < 4) { - args |= map_reg(MIPS_REG_A0 + pos); - } - ++pos; - break; - case 'f': - if (only_floats_so_far && pos_float < 4) { - pos_float += 2; - } else if (pos < 4) { - args |= map_reg(MIPS_REG_A0 + pos); - } - ++pos; - break; - case 'd': - if (pos % 1 != 0) { - ++pos; - } - if (only_floats_so_far && pos_float < 4) { - pos_float += 2; - } else if (pos < 4) { - args |= map_reg(MIPS_REG_A0 + pos) | map_reg(MIPS_REG_A0 + pos + 1); - } - pos += 2; - break; - case 'l': - case 'j': - if (pos % 1 != 0) { - ++pos; - } - only_floats_so_far = false; - if (pos < 4) { - args |= map_reg(MIPS_REG_A0 + pos) | map_reg(MIPS_REG_A0 + pos + 1); - } - pos += 2; - break; - } - } - args |= map_reg(MIPS_REG_SP); - new_live &= ~(map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_A0) | map_reg(MIPS_REG_A1) | - map_reg(MIPS_REG_A2) | map_reg(MIPS_REG_A3) | map_reg(MIPS_REG_V1) | temporary_regs()); - new_live |= args; - } else if (e.function_pointer) { - new_live &= ~(map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_A0) | map_reg(MIPS_REG_A1) | - map_reg(MIPS_REG_A2) | map_reg(MIPS_REG_A3) | map_reg(MIPS_REG_V1) | temporary_regs()); - new_live |= map_reg(MIPS_REG_A0) | map_reg(MIPS_REG_A1) | map_reg(MIPS_REG_A2) | map_reg(MIPS_REG_A3); - } - if ((insns[e.i].b_liveout | new_live) != insns[e.i].b_liveout) { - insns[e.i].b_liveout |= new_live; - q.push_back(text_vaddr + e.i * 4); - } - } - if (function_exit) { - // add one edge that skips the function call, for callee-saved register liveness propagation - live &= ~(map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_A0) | map_reg(MIPS_REG_A1) | - map_reg(MIPS_REG_A2) | map_reg(MIPS_REG_A3) | map_reg(MIPS_REG_V1) | temporary_regs()); - if ((insns[idx - 1].b_liveout | live) != insns[idx - 1].b_liveout) { - insns[idx - 1].b_liveout |= live; - q.push_back(text_vaddr + (idx - 1) * 4); - } - } - } -} - -static void pass6(void) { - for (auto& it : functions) { - uint32_t addr = it.first; - Function& f = it.second; - for (uint32_t ret : f.returns) { - Insn& i = insns[addr_to_i(ret)]; - if (i.f_liveout & i.b_liveout & map_reg(MIPS_REG_V1)) { - f.nret = 2; - } else if ((i.f_liveout & i.b_liveout & map_reg(MIPS_REG_V0)) && f.nret == 0) { - f.nret = 1; - } - } - Insn& insn = insns.at(addr_to_i(addr)); - for (int i = 0; i < 4; i++) { - if (insn.f_livein & insn.b_livein & map_reg(MIPS_REG_A0 + i)) { - f.nargs = 1 + i; - } - } - f.v0_in = (insn.f_livein & insn.b_livein & map_reg(MIPS_REG_V0)) != 0 && !f.referenced_by_function_pointer; - } -} - -static void dump(void) { - for (size_t i = 0; i < insns.size(); i++) { - Insn& insn = insns[i]; - uint32_t vaddr = text_vaddr + i * 4; - if (label_addresses.count(vaddr)) { - if (symbol_names.count(vaddr)) { - printf("L%08x: //%s\n", vaddr, symbol_names[vaddr].c_str()); - } else { - printf("L%08x:\n", vaddr); - } - } - printf("\t%s %s\n", insn.mnemonic.c_str(), insn.op_str.c_str()); - } -} - -static const char *r(uint32_t reg) { - return cs_reg_name(handle, reg); -} - -static const char *wr(uint32_t reg) { - static const char *regs[] = { - "f0.w[0]", "f0.w[1]", - "f2.w[0]", "f2.w[1]", - "f4.w[0]", "f4.w[1]", - "f6.w[0]", "f6.w[1]", - "f8.w[0]", "f8.w[1]", - "f10.w[0]", "f10.w[1]", - "f12.w[0]", "f12.w[1]", - "f14.w[0]", "f14.w[1]", - "f16.w[0]", "f16.w[1]", - "f18.w[0]", "f18.w[1]", - "f20.w[0]", "f20.w[1]", - "f22.w[0]", "f22.w[1]", - "f24.w[0]", "f24.w[1]", - "f26.w[0]", "f26.w[1]", - "f28.w[0]", "f28.w[1]", - "f30.w[0]", "f30.w[1]" - }; - assert(reg >= MIPS_REG_F0 && reg <= MIPS_REG_F31); - return regs[reg - MIPS_REG_F0]; -} - -static const char *fr(uint32_t reg) { - static const char *regs[] = { - "f0.f[0]", "f0.f[1]", - "f2.f[0]", "f2.f[1]", - "f4.f[0]", "f4.f[1]", - "f6.f[0]", "f6.f[1]", - "f8.f[0]", "f8.f[1]", - "f10.f[0]", "f10.f[1]", - "f12.f[0]", "f12.f[1]", - "f14.f[0]", "f14.f[1]", - "f16.f[0]", "f16.f[1]", - "f18.f[0]", "f18.f[1]", - "f20.f[0]", "f20.f[1]", - "f22.f[0]", "f22.f[1]", - "f24.f[0]", "f24.f[1]", - "f26.f[0]", "f26.f[1]", - "f28.f[0]", "f28.f[1]", - "f30.f[0]", "f30.f[1]" - }; - assert(reg >= MIPS_REG_F0 && reg <= MIPS_REG_F31); - return regs[reg - MIPS_REG_F0]; -} - -static const char *dr(uint32_t reg) { - static const char *regs[] = { - "f0.d", - "f2.d", - "f4.d", - "f6.d", - "f8.d", - "f10.d", - "f12.d", - "f14.d", - "f16.d", - "f18.d", - "f20.d", - "f22.d", - "f24.d", - "f26.d", - "f28.d", - "f30.d" - }; - assert(reg >= MIPS_REG_F0 && reg <= MIPS_REG_F31 && (reg - MIPS_REG_F0) % 2 == 0); - return regs[(reg - MIPS_REG_F0) / 2]; -} - -static void dump_instr(int i); - -static void dump_cond_branch(int i, const char *lhs, const char *op, const char *rhs) { - Insn& insn = insns[i]; - const char *cast1 = ""; - const char *cast2 = ""; - if (strcmp(op, "==") && strcmp(op, "!=")) { - cast1 = "(int)"; - if (strcmp(rhs, "0")) { - cast2 = "(int)"; - } - } - printf("if (%s%s %s %s%s) {", cast1, lhs, op, cast2, rhs); - dump_instr(i + 1); - printf("goto L%x;}\n", (uint32_t)insn.operands[insn.op_count - 1].imm); -} - -static void dump_cond_branch_likely(int i, const char *lhs, const char *op, const char *rhs) { - uint32_t target = text_vaddr + (i + 2) * 4; - dump_cond_branch(i, lhs, op, rhs); - if (!TRACE) { - printf("else goto L%x;\n", target); - } else { - printf("else {printf(\"pc=0x%08x (ignored)\\n\"); goto L%x;}\n", text_vaddr + (i + 1) * 4, target); - } - label_addresses.insert(target); -} - -static void dump_instr(int i) { - const char *symbol_name = NULL; - if (symbol_names.count(text_vaddr + i * 4) != 0) { - symbol_name = symbol_names[text_vaddr + i * 4].c_str(); - printf("//%s:\n", symbol_name); - } - if (TRACE) { - printf("++cnt; printf(\"pc=0x%08x%s%s\\n\"); ", text_vaddr + i * 4, symbol_name ? " " : "", symbol_name ? symbol_name : ""); - } - Insn& insn = insns[i]; - if (!insn.is_jump && !conservative) { - switch (insn_to_type(insn)) { - case TYPE_1S: - if (!(insn.f_livein & map_reg(insn.operands[0].reg))) { - printf("// fdead %llx ", (unsigned long long)insn.f_livein); - } - break; - case TYPE_1S_POS1: - if (!(insn.f_livein & map_reg(insn.operands[1].reg))) { - printf("// fdead %llx ", (unsigned long long)insn.f_livein); - } - break; - case TYPE_2S: - if (!(insn.f_livein & map_reg(insn.operands[0].reg)) || !(insn.f_livein & map_reg(insn.operands[1].reg))) { - printf("// fdead %llx ", (unsigned long long)insn.f_livein); - } - break; - case TYPE_1D_2S: - if (!(insn.f_livein & map_reg(insn.operands[2].reg))) { - printf("// fdead %llx ", (unsigned long long)insn.f_livein); - break; - } - // fallthrough - case TYPE_1D_1S: - if (!(insn.f_livein & map_reg(insn.operands[1].reg))) { - printf("// fdead %llx ", (unsigned long long)insn.f_livein); - break; - } - // fallthrough - case TYPE_1D: - if (!(insn.b_liveout & map_reg(insn.operands[0].reg))) { - printf("// bdead %llx ", (unsigned long long)insn.b_liveout); - } - break; - case TYPE_D_LO_HI_2S: - if (!(insn.f_livein & map_reg(insn.operands[0].reg)) || !(insn.f_livein & map_reg(insn.operands[1].reg))) { - printf("// fdead %llx ", (unsigned long long)insn.f_livein); - break; - } - if (!(insn.b_liveout & (map_reg(MIPS_REG_LO) | map_reg(MIPS_REG_HI)))) { - printf("// bdead %llx ", (unsigned long long)insn.b_liveout); - } - break; - } - } - switch (insn.id) { - case MIPS_INS_ADD: - case MIPS_INS_ADDU: - if (insn.mnemonic == "add.s") { - printf("%s = %s + %s;\n", fr(insn.operands[0].reg), fr(insn.operands[1].reg), fr(insn.operands[2].reg)); - } else if (insn.mnemonic == "add.d") { - printf("%s = %s + %s;\n", dr(insn.operands[0].reg), dr(insn.operands[1].reg), dr(insn.operands[2].reg)); - } else { - printf("%s = %s + %s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), r(insn.operands[2].reg)); - } - break; - case MIPS_INS_ADDI: - case MIPS_INS_ADDIU: - printf("%s = %s + 0x%x;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (uint32_t)insn.operands[2].imm); - break; - case MIPS_INS_AND: - printf("%s = %s & %s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), r(insn.operands[2].reg)); - break; - case MIPS_INS_ANDI: - printf("%s = %s & 0x%x;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (uint32_t)insn.operands[2].imm); - break; - case MIPS_INS_BEQ: - dump_cond_branch(i, r(insn.operands[0].reg), "==", r(insn.operands[1].reg)); - break; - case MIPS_INS_BEQL: - dump_cond_branch_likely(i, r(insn.operands[0].reg), "==", r(insn.operands[1].reg)); - break; - case MIPS_INS_BGEZ: - dump_cond_branch(i, r(insn.operands[0].reg), ">=", "0"); - break; - case MIPS_INS_BGEZL: - dump_cond_branch_likely(i, r(insn.operands[0].reg), ">=", "0"); - break; - case MIPS_INS_BGTZ: - dump_cond_branch(i, r(insn.operands[0].reg), ">", "0"); - break; - case MIPS_INS_BGTZL: - dump_cond_branch_likely(i, r(insn.operands[0].reg), ">", "0"); - break; - case MIPS_INS_BLEZ: - dump_cond_branch(i, r(insn.operands[0].reg), "<=", "0"); - break; - case MIPS_INS_BLEZL: - dump_cond_branch_likely(i, r(insn.operands[0].reg), "<=", "0"); - break; - case MIPS_INS_BLTZ: - dump_cond_branch(i, r(insn.operands[0].reg), "<", "0"); - break; - case MIPS_INS_BLTZL: - dump_cond_branch_likely(i, r(insn.operands[0].reg), "<", "0"); - break; - case MIPS_INS_BNE: - dump_cond_branch(i, r(insn.operands[0].reg), "!=", r(insn.operands[1].reg)); - break; - case MIPS_INS_BNEL: - dump_cond_branch_likely(i, r(insn.operands[0].reg), "!=", insn.mnemonic == "bnezl" ? "0" : r(insn.operands[1].reg)); - break; - case MIPS_INS_BREAK: - printf("abort();\n"); - break; - case MIPS_INS_BEQZ: - dump_cond_branch(i, r(insn.operands[0].reg), "==", "0"); - break; - /*case MIPS_INS_BEQZL: - dump_cond_branch_likely(i, r(insn.operands[0].reg), "==", "0"); - break;*/ - case MIPS_INS_B: - dump_instr(i + 1); - printf("goto L%x;\n", (int32_t)insn.operands[0].imm); - break; - case MIPS_INS_BC1F: - case MIPS_INS_BC1T: - printf("if (%scf) {", insn.id == MIPS_INS_BC1F ? "!" : ""); - dump_instr(i + 1); - printf("goto L%x;}\n", (int32_t)insn.operands[0].imm); - break; - case MIPS_INS_BC1FL: - case MIPS_INS_BC1TL: - { - uint32_t target = text_vaddr + (i + 2) * 4; - printf("if (%scf) {", insn.id == MIPS_INS_BC1FL ? "!" : ""); - dump_instr(i + 1); - printf("goto L%x;}\n", (int32_t)insn.operands[0].imm); - if (!TRACE) { - printf("else goto L%x;\n", target); - } else { - printf("else {printf(\"pc=0x%08x (ignored)\\n\"); goto L%x;}\n", text_vaddr + (i + 1) * 4, target); - } - label_addresses.insert(target); - break; - } - case MIPS_INS_BNEZ: - dump_cond_branch(i, r(insn.operands[0].reg), "!=", "0"); - break; - /*case MIPS_INS_BNEZL: - dump_cond_branch_likely(i, r(insn.operands[0].reg), "!=", "0"); - break;*/ - case MIPS_INS_C: - if (insn.mnemonic == "c.lt.s") { - printf("cf = %s < %s;\n", fr(insn.operands[0].reg), fr(insn.operands[1].reg)); - } else if (insn.mnemonic == "c.le.s") { - printf("cf = %s <= %s;\n", fr(insn.operands[0].reg), fr(insn.operands[1].reg)); - } else if (insn.mnemonic == "c.eq.s") { - printf("cf = %s == %s;\n", fr(insn.operands[0].reg), fr(insn.operands[1].reg)); - } else if (insn.mnemonic == "c.lt.d") { - printf("cf = %s < %s;\n", dr(insn.operands[0].reg), dr(insn.operands[1].reg)); - } else if (insn.mnemonic == "c.le.d") { - printf("cf = %s <= %s;\n", dr(insn.operands[0].reg), dr(insn.operands[1].reg)); - } else if (insn.mnemonic == "c.eq.d") { - printf("cf = %s == %s;\n", dr(insn.operands[0].reg), dr(insn.operands[1].reg)); - } - break; - case MIPS_INS_CVT: - if (insn.mnemonic == "cvt.s.w") { - printf("%s = (int)%s;\n", fr(insn.operands[0].reg), wr(insn.operands[1].reg)); - } else if (insn.mnemonic == "cvt.d.w") { - printf("%s = (int)%s;\n", dr(insn.operands[0].reg), wr(insn.operands[1].reg)); - } else if (insn.mnemonic == "cvt.d.s") { - printf("%s = %s;\n", dr(insn.operands[0].reg), fr(insn.operands[1].reg)); - } else if (insn.mnemonic == "cvt.s.d") { - printf("%s = %s;\n", fr(insn.operands[0].reg), dr(insn.operands[1].reg)); - } else if (insn.mnemonic == "cvt.w.d") { - printf("%s = cvt_w_d(%s);\n", wr(insn.operands[0].reg), dr(insn.operands[1].reg)); - } else if (insn.mnemonic == "cvt.w.s") { - printf("%s = cvt_w_s(%s);\n", wr(insn.operands[0].reg), fr(insn.operands[1].reg)); - } else { - goto unimplemented; - } - break; - case MIPS_INS_CFC1: - assert(insn.operands[1].reg == MIPS_REG_31); - printf("%s = fcsr;\n", r(insn.operands[0].reg)); - break; - case MIPS_INS_CTC1: - assert(insn.operands[1].reg == MIPS_REG_31); - printf("fcsr = %s;\n", r(insn.operands[0].reg)); - break; - case MIPS_INS_DIV: - if (insn.mnemonic == "div.s") { - assert(insn.op_count == 3); - printf("%s = %s / %s;\n", fr(insn.operands[0].reg), fr(insn.operands[1].reg), fr(insn.operands[2].reg)); - } else if (insn.mnemonic == "div.d") { - assert(insn.op_count == 3); - printf("%s = %s / %s;\n", dr(insn.operands[0].reg), dr(insn.operands[1].reg), dr(insn.operands[2].reg)); - } else { - assert(insn.op_count == 2); - printf("lo = (int)%s / (int)%s; ", r(insn.operands[0].reg), r(insn.operands[1].reg)); - printf("hi = (int)%s %% (int)%s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg)); - } - break; - case MIPS_INS_DIVU: - assert(insn.op_count == 2); - printf("lo = %s / %s; ", r(insn.operands[0].reg), r(insn.operands[1].reg)); - printf("hi = %s %% %s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg)); - break; - case MIPS_INS_MOV: - if (insn.mnemonic == "mov.s") { - printf("%s = %s;\n", fr(insn.operands[0].reg), fr(insn.operands[1].reg)); - } else if (insn.mnemonic == "mov.d") { - printf("%s = %s;\n", dr(insn.operands[0].reg), dr(insn.operands[1].reg)); - } else { - goto unimplemented; - } - break; - case MIPS_INS_MUL: - if (insn.mnemonic == "mul.s") { - printf("%s = %s * %s;\n", fr(insn.operands[0].reg), fr(insn.operands[1].reg), fr(insn.operands[2].reg)); - } else if (insn.mnemonic == "mul.d") { - printf("%s = %s * %s;\n", dr(insn.operands[0].reg), dr(insn.operands[1].reg), dr(insn.operands[2].reg)); - } else { - goto unimplemented; - } - break; - case MIPS_INS_NEG: - if (insn.mnemonic == "neg.s") { - printf("%s = -%s;\n", fr(insn.operands[0].reg), fr(insn.operands[1].reg)); - } else if (insn.mnemonic == "neg.d") { - printf("%s = -%s;\n", dr(insn.operands[0].reg), dr(insn.operands[1].reg)); - } else { - printf("%s = -%s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg)); - } - break; - case MIPS_INS_SUB: - if (insn.mnemonic == "sub.s") { - printf("%s = %s - %s;\n", fr(insn.operands[0].reg), fr(insn.operands[1].reg), fr(insn.operands[2].reg)); - } else if (insn.mnemonic == "sub.d") { - printf("%s = %s - %s;\n", dr(insn.operands[0].reg), dr(insn.operands[1].reg), dr(insn.operands[2].reg)); - } else { - goto unimplemented; - } - break; - case MIPS_INS_J: - dump_instr(i + 1); - printf("goto L%x;\n", (uint32_t)insn.operands[0].imm); - break; - case MIPS_INS_JAL: - { - string name; - bool is_extern_function = false; - size_t extern_function_id; - auto it = symbol_names.find(insn.operands[0].imm); - if (it != symbol_names.end()) { - name = it->second; - for (size_t i = 0; i < sizeof(extern_functions) / sizeof(extern_functions[0]); i++) { - if (name == extern_functions[i].name) { - is_extern_function = true; - extern_function_id = i; - break; - } - } - } - dump_instr(i + 1); - if (is_extern_function) { - auto& fn = extern_functions[extern_function_id]; - if (fn.flags & FLAG_VARARG) { - for (int j = 0; j < 4; j++) { - printf("MEM_U32(sp + %d) = %s;\n", j * 4, r(MIPS_REG_A0 + j)); - } - } - char ret_type = fn.params[0]; - if (ret_type != 'v') { - switch (ret_type) { - case 'i': - case 'u': - case 'p': - printf("%s = ", r(MIPS_REG_V0)); - break; - case 'f': - printf("%s = ", fr(MIPS_REG_F0)); - break; - case 'd': - printf("%s = ", dr(MIPS_REG_F0)); - break; - case 'l': - case 'j': - printf("temp64 = "); - break; - } - } - printf("wrapper_%s(", name.c_str()); - bool first = true; - if (!(fn.flags & FLAG_NO_MEM)) { - printf("mem"); - first = false; - } - int pos = 0; - int pos_float = 0; - bool only_floats_so_far = true; - bool needs_sp = false; - for (const char *p = fn.params + 1; *p != '\0'; ++p) { - if (!first) { - printf(", "); - } - first = false; - switch (*p) { - case 't': - printf("trampoline, "); - needs_sp = true; - // fallthrough - case 'i': - case 'u': - case 'p': - only_floats_so_far = false; - if (pos < 4) { - printf("%s", r(MIPS_REG_A0 + pos)); - } else { - printf("MEM_%c32(sp + %d)", *p == 'i' ? 'S' : 'U', pos * 4); - } - ++pos; - break; - case 'f': - if (only_floats_so_far && pos_float < 4) { - printf("%s", fr(MIPS_REG_F12 + pos_float)); - pos_float += 2; - } else if (pos < 4) { - printf("BITCAST_U32_TO_F32(%s)", r(MIPS_REG_A0 + pos)); - } else { - printf("BITCAST_U32_TO_F32(MEM_U32(sp + %d))", pos * 4); - } - ++pos; - break; - case 'd': - if (pos % 1 != 0) { - ++pos; - } - if (only_floats_so_far && pos_float < 4) { - printf("%s", dr(MIPS_REG_F12 + pos_float)); - pos_float += 2; - } else if (pos < 4) { - printf("BITCAST_U64_TO_F64(((uint64_t)%s << 32) | (uint64_t)%s)", r(MIPS_REG_A0 + pos), r(MIPS_REG_A0 + pos + 1)); - } else { - printf("BITCAST_U64_TO_F64(((uint64_t)MEM_U32(sp + %d) << 32) | (uint64_t)MEM_U32(sp + %d))", pos * 4, (pos + 1) * 4); - } - pos += 2; - break; - case 'l': - case 'j': - if (pos % 1 != 0) { - ++pos; - } - only_floats_so_far = false; - if (*p == 'l') { - printf("(int64_t)"); - } - if (pos < 4) { - printf("(((uint64_t)%s << 32) | (uint64_t)%s)", r(MIPS_REG_A0 + pos), r(MIPS_REG_A0 + pos + 1)); - } else { - printf("(((uint64_t)MEM_U32(sp + %d) << 32) | (uint64_t)MEM_U32(sp + %d))", pos * 4, (pos + 1) * 4); - } - pos += 2; - break; - } - } - if ((fn.flags & FLAG_VARARG) || needs_sp) { - printf("%s%s", first ? "" : ", ", r(MIPS_REG_SP)); - } - printf(");\n"); - if (ret_type == 'l' || ret_type == 'j') { - printf("%s = (uint32_t)(temp64 >> 32);\n", r(MIPS_REG_V0)); - printf("%s = (uint32_t)temp64;\n", r(MIPS_REG_V1)); - } - if (!name.empty()) { - //printf("printf(\"%s %%x\\n\", %s);\n", name.c_str(), r(MIPS_REG_A0)); - } - } else { - Function& f = functions.find((uint32_t)insn.operands[0].imm)->second; - if (f.nret == 1) { - printf("v0 = "); - } else if (f.nret == 2) { - printf("temp64 = "); - } - if (!name.empty()) { - //printf("printf(\"%s %%x\\n\", %s);\n", name.c_str(), r(MIPS_REG_A0)); - printf("f_%s", name.c_str()); - } else { - printf("func_%x", (uint32_t)insn.operands[0].imm); - } - printf("(mem, sp"); - if (f.v0_in) { - printf(", %s", r(MIPS_REG_V0)); - } - for (uint32_t i = 0; i < f.nargs; i++) { - printf(", %s", r(MIPS_REG_A0 + i)); - } - printf(");\n"); - if (f.nret == 2) { - printf("%s = (uint32_t)(temp64 >> 32);\n", r(MIPS_REG_V0)); - printf("%s = (uint32_t)temp64;\n", r(MIPS_REG_V1)); - } - } - printf("goto L%x;\n", text_vaddr + (i + 2) * 4); - label_addresses.insert(text_vaddr + (i + 2) * 4); - break; - } - case MIPS_INS_JALR: - printf("fp_dest = %s;\n", r(insn.operands[0].reg)); - dump_instr(i + 1); - printf("temp64 = trampoline(mem, sp, %s, %s, %s, %s, fp_dest);\n", - r(MIPS_REG_A0), r(MIPS_REG_A1), r(MIPS_REG_A2), r(MIPS_REG_A3)); - printf("%s = (uint32_t)(temp64 >> 32);\n", r(MIPS_REG_V0)); - printf("%s = (uint32_t)temp64;\n", r(MIPS_REG_V1)); - printf("goto L%x;\n", text_vaddr + (i + 2) * 4); - label_addresses.insert(text_vaddr + (i + 2) * 4); - break; - case MIPS_INS_JR: - if (insn.jtbl_addr != 0) { - uint32_t jtbl_pos = insn.jtbl_addr - rodata_vaddr; - assert(jtbl_pos < rodata_section_len && jtbl_pos + insn.num_cases * 4 <= rodata_section_len); -#if 1 - printf(";static void *const Lswitch%x[] = {\n", insn.jtbl_addr); - for (uint32_t i = 0; i < insn.num_cases; i++) { - uint32_t dest_addr = read_u32_be(rodata_section + jtbl_pos + i * 4) + gp_value; - printf("&&L%x,\n", dest_addr); - label_addresses.insert(dest_addr); - } - printf("};\n"); - printf("dest = Lswitch%x[%s];\n", insn.jtbl_addr, r(insn.index_reg)); - dump_instr(i + 1); - printf("goto *dest;\n"); -#else - assert(insns[i + 1].id == MIPS_INS_NOP); - printf("switch (%s) {\n", r(insn.index_reg)); - for (uint32_t i = 0; i < insn.num_cases; i++) { - uint32_t dest_addr = read_u32_be(rodata_section + jtbl_pos + i * 4) + gp_value; - printf("case %u: goto L%x;\n", i, dest_addr); - label_addresses.insert(dest_addr); - } - printf("}\n"); -#endif - } else { - if (insn.operands[0].reg != MIPS_REG_RA) { - printf("UNSUPPORTED JR %s %s\n", insn.op_str.c_str(), r(insn.operands[0].reg)); - } else { - dump_instr(i + 1); - switch (find_function(text_vaddr + i * 4)->second.nret) { - case 0: - printf("return;\n"); - break; - case 1: - printf("return v0;\n"); - break; - case 2: - printf("return ((uint64_t)v0 << 32) | v1;\n"); - break; - } - } - } - break; - case MIPS_INS_LB: - printf("%s = MEM_S8(%s + %d);\n", r(insn.operands[0].reg), r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp); - break; - case MIPS_INS_LBU: - printf("%s = MEM_U8(%s + %d);\n", r(insn.operands[0].reg), r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp); - break; - case MIPS_INS_LH: - printf("%s = MEM_S16(%s + %d);\n", r(insn.operands[0].reg), r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp); - break; - case MIPS_INS_LHU: - printf("%s = MEM_U16(%s + %d);\n", r(insn.operands[0].reg), r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp); - break; - case MIPS_INS_LUI: - printf("%s = 0x%x;\n", r(insn.operands[0].reg), ((uint32_t)insn.operands[1].imm) << 16); - break; - case MIPS_INS_LW: - printf("%s = MEM_U32(%s + %d);\n", r(insn.operands[0].reg), r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp); - break; - case MIPS_INS_LWC1: - printf("%s = MEM_U32(%s + %d);\n", wr(insn.operands[0].reg), r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp); - break; - case MIPS_INS_LDC1: - assert((insn.operands[0].reg - MIPS_REG_F0) % 2 == 0); - printf("%s = MEM_U32(%s + %d);\n", wr(insn.operands[0].reg + 1), r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp); - printf("%s = MEM_U32(%s + %d + 4);\n", wr(insn.operands[0].reg), r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp); - break; - case MIPS_INS_LWL: - { - const char *reg = r(insn.operands[0].reg); - printf("%s = %s + %d; ", reg, r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp); - printf("%s = (MEM_U8(%s) << 24) | (MEM_U8(%s + 1) << 16) | (MEM_U8(%s + 2) << 8) | MEM_U8(%s + 3);\n", reg, reg, reg, reg, reg); - break; - } - case MIPS_INS_LWR: - printf("//lwr %s\n", insn.op_str.c_str()); - break; - case MIPS_INS_LI: - if (insn.is_global_got_memop && text_vaddr <= insn.operands[1].imm && insn.operands[1].imm < text_vaddr + text_section_len) { - printf("%s = 0x%x; // function pointer\n", r(insn.operands[0].reg), (uint32_t)insn.operands[1].imm); - label_addresses.insert((uint32_t)insn.operands[1].imm); - } else { - printf("%s = 0x%x;\n", r(insn.operands[0].reg), (uint32_t)insn.operands[1].imm); - } - break; - case MIPS_INS_MFC1: - printf("%s = %s;\n", r(insn.operands[0].reg), wr(insn.operands[1].reg)); - break; - case MIPS_INS_MFHI: - printf("%s = hi;\n", r(insn.operands[0].reg)); - break; - case MIPS_INS_MFLO: - printf("%s = lo;\n", r(insn.operands[0].reg)); - break; - case MIPS_INS_MOVE: - printf("%s = %s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg)); - break; - case MIPS_INS_MTC1: - printf("%s = %s;\n", wr(insn.operands[1].reg), r(insn.operands[0].reg)); - break; - case MIPS_INS_MULT: - printf("lo = %s * %s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg)); - printf("hi = (uint32_t)((int64_t)(int)%s * (int64_t)(int)%s >> 32);\n", r(insn.operands[0].reg), r(insn.operands[1].reg)); - break; - case MIPS_INS_MULTU: - printf("lo = %s * %s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg)); - printf("hi = (uint32_t)((uint64_t)%s * (uint64_t)%s >> 32);\n", r(insn.operands[0].reg), r(insn.operands[1].reg)); - break; - case MIPS_INS_NEGU: - printf("%s = -%s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg)); - break; - case MIPS_INS_NOR: - printf("%s = ~(%s | %s);\n", r(insn.operands[0].reg), r(insn.operands[1].reg), r(insn.operands[2].reg)); - break; - case MIPS_INS_NOT: - printf("%s = ~%s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg)); - break; - case MIPS_INS_OR: - printf("%s = %s | %s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), r(insn.operands[2].reg)); - break; - case MIPS_INS_ORI: - printf("%s = %s | 0x%x;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (uint32_t)insn.operands[2].imm); - break; - case MIPS_INS_SB: - printf("MEM_U8(%s + %d) = (uint8_t)%s;\n", r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp, r(insn.operands[0].reg)); - break; - case MIPS_INS_SH: - printf("MEM_U16(%s + %d) = (uint16_t)%s;\n", r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp, r(insn.operands[0].reg)); - break; - case MIPS_INS_SLL: - printf("%s = %s << %d;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (uint32_t)insn.operands[2].imm); - break; - case MIPS_INS_SLLV: - printf("%s = %s << (%s & 0x1f);\n", r(insn.operands[0].reg), r(insn.operands[1].reg), r(insn.operands[2].reg)); - break; - case MIPS_INS_SLT: - printf("%s = (int)%s < (int)%s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), r(insn.operands[2].reg)); - break; - case MIPS_INS_SLTI: - printf("%s = (int)%s < (int)0x%x;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (uint32_t)insn.operands[2].imm); - break; - case MIPS_INS_SLTIU: - printf("%s = %s < 0x%x;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (uint32_t)insn.operands[2].imm); - break; - case MIPS_INS_SLTU: - printf("%s = %s < %s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), r(insn.operands[2].reg)); - break; - case MIPS_INS_SRA: - printf("%s = (int)%s >> %d;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (uint32_t)insn.operands[2].imm); - break; - case MIPS_INS_SRAV: - printf("%s = (int)%s >> (%s & 0x1f);\n", r(insn.operands[0].reg), r(insn.operands[1].reg), r(insn.operands[2].reg)); - break; - case MIPS_INS_SRL: - printf("%s = %s >> %d;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (uint32_t)insn.operands[2].imm); - break; - case MIPS_INS_SRLV: - printf("%s = %s >> (%s & 0x1f);\n", r(insn.operands[0].reg), r(insn.operands[1].reg), r(insn.operands[2].reg)); - break; - case MIPS_INS_SUBU: - printf("%s = %s - %s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), r(insn.operands[2].reg)); - break; - case MIPS_INS_SW: - printf("MEM_U32(%s + %d) = %s;\n", r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp, r(insn.operands[0].reg)); - break; - case MIPS_INS_SWC1: - printf("MEM_U32(%s + %d) = %s;\n", r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp, wr(insn.operands[0].reg)); - break; - case MIPS_INS_SDC1: - assert((insn.operands[0].reg - MIPS_REG_F0) % 2 == 0); - printf("MEM_U32(%s + %d) = %s;\n", r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp, wr(insn.operands[0].reg + 1)); - printf("MEM_U32(%s + %d + 4) = %s;\n", r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp, wr(insn.operands[0].reg)); - break; - case MIPS_INS_SWL: - for (int i = 0; i < 4; i++) { - printf("MEM_U8(%s + %d + %d) = (uint8_t)(%s >> %d);\n", r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp, i, r(insn.operands[0].reg), (3 - i) * 8); - } - break; - case MIPS_INS_SWR: - printf("//swr %s\n", insn.op_str.c_str()); - break; - case MIPS_INS_TRUNC: - if (insn.mnemonic == "trunc.w.s") { - printf("%s = (int)%s;\n", wr(insn.operands[0].reg), fr(insn.operands[1].reg)); - } else if (insn.mnemonic == "trunc.w.d") { - printf("%s = (int)%s;\n", wr(insn.operands[0].reg), dr(insn.operands[1].reg)); - } else { - goto unimplemented; - } - break; - case MIPS_INS_XOR: - printf("%s = %s ^ %s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), r(insn.operands[2].reg)); - break; - case MIPS_INS_XORI: - printf("%s = %s ^ 0x%x;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (uint32_t)insn.operands[2].imm); - break; - case MIPS_INS_TNE: - printf("assert(%s == %s && \"tne %d\");\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (int)insn.operands[2].imm); - break; - case MIPS_INS_TEQ: - printf("assert(%s != %s && \"teq %d\");\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (int)insn.operands[2].imm); - break; - case MIPS_INS_TGE: - printf("assert((int)%s < (int)%s && \"tge %d\");\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (int)insn.operands[2].imm); - break; - case MIPS_INS_TGEU: - printf("assert(%s < %s && \"tgeu %d\");\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (int)insn.operands[2].imm); - break; - case MIPS_INS_TLT: - printf("assert((int)%s >= (int)%s && \"tlt %d\");\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (int)insn.operands[2].imm); - break; - case MIPS_INS_NOP: - printf("//nop;\n"); - break; - default: - unimplemented: - printf("UNIMPLEMENTED %s %s\n", insn.mnemonic.c_str(), insn.op_str.c_str()); - break; - } -} - -static void inspect_data_function_pointers(vector>& ret, const uint8_t *section, uint32_t section_vaddr, uint32_t len) { - for (uint32_t i = 0; i < len; i += 4) { - uint32_t addr = read_u32_be(section + i); - if (addr == 0x430b00 || addr == 0x433b00) { - // in as1, not function pointers (normal integers) - continue; - } - if (addr == 0x4a0000) { - // in copt - continue; - } - if (section_vaddr + i >= procedure_table_start && section_vaddr + i < procedure_table_start + procedure_table_len) { - // some linking table with a "all" functions, in as1 5.3 - continue; - } - if (addr >= text_vaddr && addr < text_vaddr + text_section_len && addr % 4 == 0) { -#if INSPECT_FUNCTION_POINTERS - fprintf(stderr, "assuming function pointer 0x%x at 0x%x\n", addr, section_vaddr + i); -#endif - ret.push_back(make_pair(section_vaddr + i, addr)); - label_addresses.insert(addr); - functions[addr].referenced_by_function_pointer = true; - } - } -} - -static void dump_function_signature(Function& f, uint32_t vaddr) { - printf("static "); - switch (f.nret) { - case 0: - printf("void "); - break; - case 1: - printf("uint32_t "); - break; - case 2: - printf("uint64_t "); - break; - } - auto name_it = symbol_names.find(vaddr); - if (name_it != symbol_names.end()) { - printf("f_%s", name_it->second.c_str()); - } else { - printf("func_%x", vaddr); - } - printf("(uint8_t *mem, uint32_t sp"); - if (f.v0_in) { - printf(", uint32_t %s", r(MIPS_REG_V0)); - } - for (uint32_t i = 0; i < f.nargs; i++) { - printf(", uint32_t %s", r(MIPS_REG_A0 + i)); - } - printf(")"); -} - -static void dump_c(void) { - map symbol_names_inv; - for (auto& it : symbol_names) { - symbol_names_inv[it.second] = it.first; - } - - uint32_t min_addr = ~0; - uint32_t max_addr = 0; - - if (data_section_len > 0) { - min_addr = std::min(min_addr, data_vaddr); - max_addr = std::max(max_addr, data_vaddr + data_section_len); - } - if (rodata_section_len > 0) { - min_addr = std::min(min_addr, rodata_vaddr); - max_addr = std::max(max_addr, rodata_vaddr + rodata_section_len); - } - if (bss_section_len) { - min_addr = std::min(min_addr, bss_vaddr); - max_addr = std::max(max_addr, bss_vaddr + bss_section_len); - } - - min_addr = min_addr & ~0xfff; - max_addr = (max_addr + 0xfff) & ~0xfff; - - uint32_t stack_bottom = min_addr; - min_addr -= 1 * 1024 * 1024; // 1 MB stack - stack_bottom -= 16; // for main's stack frame - - printf("#include \"header.h\"\n"); - if (conservative) { - printf("static uint32_t s0, s1, s2, s3, s4, s5, s6, s7, fp;\n"); - } - printf("static const uint32_t rodata[] = {\n"); - for (size_t i = 0; i < rodata_section_len; i += 4) { - printf("0x%x,%s", read_u32_be(rodata_section + i), i % 32 == 28 ? "\n" : ""); - } - printf("};\n"); - printf("static const uint32_t data[] = {\n"); - for (size_t i = 0; i < data_section_len; i += 4) { - printf("0x%x,%s", read_u32_be(data_section + i), i % 32 == 28 ? "\n" : ""); - } - printf("};\n"); - - /*if (!data_function_pointers.empty()) { - printf("static const struct { uint32_t orig_addr; void *recompiled_addr; } data_function_pointers[] = {\n"); - for (auto item : data_function_pointers) { - printf("{0x%x, &&L%x},\n", item.first, item.second); - } - printf("};\n"); - }*/ - - if (TRACE) { - printf("static unsigned long long int cnt = 0;\n"); - } - - for (auto& f_it : functions) { - if (insns[addr_to_i(f_it.first)].f_livein != 0) { - // Function is used - dump_function_signature(f_it.second, f_it.first); - printf(";\n"); - } - } - - if (!data_function_pointers.empty() || !li_function_pointers.empty()) { - printf("uint64_t trampoline(uint8_t *mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t fp_dest) {\n"); - printf("switch (fp_dest) {\n"); - for (auto& it : functions) { - Function& f = it.second; - if (f.referenced_by_function_pointer) { - printf("case 0x%x: ", it.first); - if (f.nret == 1) { - printf("return (uint64_t)"); - } else if (f.nret == 2) { - printf("return "); - } - auto name_it = symbol_names.find(it.first); - if (name_it != symbol_names.end()) { - printf("f_%s", name_it->second.c_str()); - } else { - printf("func_%x", it.first); - } - printf("(mem, sp"); - for (int i = 0; i < f.nargs; i++) { - printf(", a%d", i); - } - printf(")"); - if (f.nret == 1) { - printf(" << 32"); - } - printf(";"); - if (f.nret == 0) { - printf(" return 0;"); - } - printf("\n"); - } - } - printf("default: abort();"); - printf("}\n"); - printf("}\n"); - } - - printf("int run(uint8_t *mem, int argc, char *argv[]) {\n"); - printf("mmap_initial_data_range(mem, 0x%x, 0x%x);\n", min_addr, max_addr); - - printf("memcpy(mem + 0x%x, rodata, 0x%x);\n", rodata_vaddr, rodata_section_len); - printf("memcpy(mem + 0x%x, data, 0x%x);\n", data_vaddr, data_section_len); - - /*if (!data_function_pointers.empty()) { - if (!LABELS_64_BIT) { - printf("for (int i = 0; i < %d; i++) MEM_U32(data_function_pointers[i].orig_addr) = (uint32_t)(uintptr_t)data_function_pointers[i].recompiled_addr;\n", (int)data_function_pointers.size()); - } else { - printf("for (int i = 0; i < %d; i++) MEM_U32(data_function_pointers[i].orig_addr) = (uint32_t)((uintptr_t)data_function_pointers[i].recompiled_addr - (uintptr_t)&&Loffset);\n", (int)data_function_pointers.size()); - } - }*/ - - printf("MEM_S32(0x%x) = argc;\n", symbol_names_inv.at("__Argc")); - printf("MEM_S32(0x%x) = argc;\n", stack_bottom); - printf("uint32_t al = argc * 4; for (int i = 0; i < argc; i++) al += strlen(argv[i]) + 1;\n"); - printf("uint32_t arg_addr = wrapper_malloc(mem, al);\n"); - printf("MEM_U32(0x%x) = arg_addr;\n", symbol_names_inv.at("__Argv")); - printf("MEM_U32(0x%x) = arg_addr;\n", stack_bottom + 4); - printf("uint32_t arg_strpos = arg_addr + argc * 4;\n"); - printf("for (int i = 0; i < argc; i++) {MEM_U32(arg_addr + i * 4) = arg_strpos; uint32_t p = 0; do { MEM_S8(arg_strpos) = argv[i][p]; ++arg_strpos; } while (argv[i][p++] != '\\0');}\n"); - - printf("setup_libc_data(mem);\n"); - - //printf("gp = 0x%x;\n", gp_value); // only to recreate the outcome when ugen reads uninitialized stack memory - - printf("int ret = f_main(mem, 0x%x", stack_bottom); - Function& main_func = functions[main_addr]; - if (main_func.nargs >= 1) { - printf(", argc"); - } - if (main_func.nargs >= 2) { - printf(", arg_addr"); - } - printf(");\n"); - if (TRACE) { - printf("end: fprintf(stderr, \"cnt: %%llu\\n\", cnt);\n"); - } - printf("return ret;\n"); - printf("}\n"); - - for (auto& f_it : functions) { - Function& f = f_it.second; - uint32_t start_addr = f_it.first; - uint32_t end_addr = f.end_addr; - - if (insns[addr_to_i(start_addr)].f_livein == 0) { - // Non-used function, skip - continue; - } - - printf("\n"); - dump_function_signature(f, start_addr); - printf(" {\n"); - printf("const uint32_t zero = 0;\n"); - if (!conservative) { - printf("uint32_t at = 0, v1 = 0, t0 = 0, t1 = 0, t2 = 0,\n"); - printf("t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, s0 = 0, s1 = 0, s2 = 0, s3 = 0, s4 = 0, s5 = 0,\n"); - printf("s6 = 0, s7 = 0, t8 = 0, t9 = 0, gp = 0, fp = 0, s8 = 0, ra = 0;\n"); - } else { - printf("uint32_t at = 0, v1 = 0, t0 = 0, t1 = 0, t2 = 0,\n"); - printf("t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, t8 = 0, t9 = 0, gp = 0x10000, ra = 0x10000;\n"); - } - printf("uint32_t lo = 0, hi = 0;\n"); - printf("int cf = 0;\n"); - printf("uint64_t temp64;\n"); - printf("uint32_t fp_dest;\n"); - printf("void *dest;\n"); - if (!f.v0_in) { - printf("uint32_t v0 = 0;\n"); - } - for (uint32_t j = f.nargs; j < 4; j++) { - printf("uint32_t %s = 0;\n", r(MIPS_REG_A0 + j)); - } - - for (size_t i = addr_to_i(start_addr), end_i = addr_to_i(end_addr); i < end_i; i++) { - Insn& insn = insns[i]; - uint32_t vaddr = text_vaddr + i * 4; - if (label_addresses.count(vaddr)) { - printf("L%x:\n", vaddr); - } - dump_instr(i); - } - - printf("}\n"); - } - /*for (size_t i = 0; i < insns.size(); i++) { - Insn& insn = insns[i]; - uint32_t vaddr = text_vaddr + i * 4; - auto fn_it = functions.find(vaddr); - if (fn_it != functions.end()) { - Function& f = fn_it->second; - printf("}\n\n"); - switch (f.nret) { - case 0: - printf("void "); - break; - case 1: - printf("uint32_t "); - break; - case 2: - printf("uint64_t "); - break; - } - auto name_it = symbol_names.find(vaddr); - if (name_it != symbol_names.end()) { - printf("%s", name_it->second.c_str()); - } else { - printf("func_%x", vaddr); - } - printf("(uint8_t *mem, uint32_t sp"); - if (f.v0_in) { - printf(", uint32_t %s", r(MIPS_REG_V0)); - } - for (uint32_t i = 0; i < f.nargs; i++) { - printf(", uint32_t %s", r(MIPS_REG_A0 + i)); - } - printf(") {\n"); - printf("const uint32_t zero = 0;\n"); - printf("uint32_t at = 0, v1 = 0, t0 = 0, t1 = 0, t2 = 0,\n"); - printf("t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, s0 = 0, s1 = 0, s2 = 0, s3 = 0, s4 = 0, s5 = 0,\n"); - printf("s6 = 0, s7 = 0, t8 = 0, t9 = 0, gp = 0, fp = 0, s8 = 0, ra = 0;\n"); - printf("uint32_t lo = 0, hi = 0;\n"); - printf("int cf = 0;\n"); - if (!f.v0_in) { - printf("uint32_t v0 = 0;\n"); - } - for (uint32_t j = f.nargs; j < 4; j++) { - printf("uint32_t %s = 0;\n", r(MIPS_REG_A0 + j)); - } - } - if (label_addresses.count(vaddr)) { - printf("L%x:\n", vaddr); - } - dump_instr(i); - }*/ -} - -static void parse_elf(const uint8_t *data, size_t file_len) { - Elf32_Ehdr *ehdr; - Elf32_Shdr *shdr, *str_shdr, *sym_shdr = NULL, *dynsym_shdr, *dynamic_shdr, *reginfo_shdr, *got_shdr, *sym_strtab, *sym_dynstr; - int text_section_index = -1; - int symtab_section_index = -1; - int dynsym_section_index = -1; - int reginfo_section_index = -1; - int dynamic_section_index = -1; - int got_section_index = -1; - int rodata_section_index = -1; - int data_section_index = -1; - int bss_section_index = -1; - uint32_t text_offset = 0; - uint32_t vaddr_adj = 0; - - if (file_len < 4 || data[0] != 0x7f || data[1] != 'E' || data[2] != 'L' || data[3] != 'F') { - fprintf(stderr, "Not an ELF file.\n"); - exit(EXIT_FAILURE); - } - - ehdr = (Elf32_Ehdr *) data; - if (ehdr->e_ident[EI_DATA] != 2 || u16be(ehdr->e_machine) != 8) { - fprintf(stderr, "Not big-endian MIPS.\n"); - exit(EXIT_FAILURE); - } - - if (u16be(ehdr->e_shstrndx) == 0) { - // (We could look at program headers instead in this case.) - fprintf(stderr, "Missing section headers; stripped binaries are not yet supported.\n"); - exit(EXIT_FAILURE); - } - -#define SECTION(index) (Elf32_Shdr *)(data + u32be(ehdr->e_shoff) + (index) * u16be(ehdr->e_shentsize)) -#define STR(strtab, offset) (const char *)(data + u32be(strtab->sh_offset) + offset) - - str_shdr = SECTION(u16be(ehdr->e_shstrndx)); - for (int i = 0; i < u16be(ehdr->e_shnum); i++) { - shdr = SECTION(i); - const char *name = STR(str_shdr, u32be(shdr->sh_name)); - if (strcmp(name, ".text") == 0) { - text_offset = u32be(shdr->sh_offset); - text_vaddr = u32be(shdr->sh_addr); - vaddr_adj = text_vaddr - u32be(shdr->sh_addr); - text_section_len = u32be(shdr->sh_size); - text_section = data + text_offset; - text_section_index = i; - } - if (u32be(shdr->sh_type) == SHT_SYMTAB) { - symtab_section_index = i; - } - if (u32be(shdr->sh_type) == SHT_DYNSYM) { - dynsym_section_index = i; - } - if (u32be(shdr->sh_type) == SHT_MIPS_REGINFO) { - reginfo_section_index = i; - } - if (u32be(shdr->sh_type) == SHT_DYNAMIC) { - dynamic_section_index = i; - } - if (strcmp(name, ".got") == 0) { - got_section_index = i; - } - if (strcmp(name, ".rodata") == 0) { - rodata_section_index = i; - } - if (strcmp(name, ".data") == 0) { - data_section_index = i; - } - if (strcmp(name, ".bss") == 0) { - bss_section_index = i; - } - } - - if (text_section_index == -1) { - fprintf(stderr, "Missing .text section.\n"); - exit(EXIT_FAILURE); - } - - if (symtab_section_index == -1 && dynsym_section_index == -1) { - fprintf(stderr, "Missing .symtab or .dynsym section.\n"); - exit(EXIT_FAILURE); - } - - if (dynsym_section_index != -1) { - if (reginfo_section_index == -1) { - fprintf(stderr, "Missing .reginfo section.\n"); - exit(EXIT_FAILURE); - } - if (dynamic_section_index == -1) { - fprintf(stderr, "Missing .dynamic section.\n"); - exit(EXIT_FAILURE); - } - if (got_section_index == -1) { - fprintf(stderr, "Missing .got section.\n"); - exit(EXIT_FAILURE); - } - } - - if (rodata_section_index != -1) { - shdr = SECTION(rodata_section_index); - uint32_t size = u32be(shdr->sh_size); - rodata_section = data + u32be(shdr->sh_offset); - rodata_section_len = size; - rodata_vaddr = u32be(shdr->sh_addr); - } - - if (data_section_index != -1) { - shdr = SECTION(data_section_index); - uint32_t size = u32be(shdr->sh_size); - data_section = data + u32be(shdr->sh_offset); - data_section_len = size; - data_vaddr = u32be(shdr->sh_addr); - } - - if (bss_section_index != -1) { - shdr = SECTION(bss_section_index); - uint32_t size = u32be(shdr->sh_size); - bss_section_len = size; - bss_vaddr = u32be(shdr->sh_addr); - } - - - // add symbols - if (symtab_section_index != -1) { - sym_shdr = SECTION(symtab_section_index); - sym_strtab = SECTION(u32be(sym_shdr->sh_link)); - assert(0 && ".symtab not supported - use a program with .dynsym instead"); - - assert(u32be(sym_shdr->sh_entsize) == sizeof(Elf32_Sym)); - for (uint32_t i = 0; i < u32be(sym_shdr->sh_size); i += sizeof(Elf32_Sym)) { - Elf32_Sym *sym = (Elf32_Sym *)(data + u32be(sym_shdr->sh_offset) + i); - const char *name = STR(sym_strtab, u32be(sym->st_name)); - uint32_t addr = u32be(sym->st_value); - if (u16be(sym->st_shndx) != text_section_index || name[0] == '.') { - continue; - } - addr += vaddr_adj; - //disasm_label_add(state, name, addr, u32be(sym->st_size), true); - } - } - - if (dynsym_section_index != -1) { - dynsym_shdr = SECTION(dynsym_section_index); - sym_dynstr = SECTION(u32be(dynsym_shdr->sh_link)); - reginfo_shdr = SECTION(reginfo_section_index); - dynamic_shdr = SECTION(dynamic_section_index); - got_shdr = SECTION(got_section_index); - - Elf32_RegInfo *reg_info = (Elf32_RegInfo *)(data + u32be(reginfo_shdr->sh_offset)); - uint32_t gp_base = u32be(reg_info->ri_gp_value); // gp should have this value through the program run - uint32_t got_start = 0; - uint32_t local_got_no = 0; - uint32_t first_got_sym = 0; - uint32_t dynsym_no = 0; // section size can't be used due to alignment 16 padding - - assert(u32be(dynamic_shdr->sh_entsize) == sizeof(Elf32_Dyn)); - for (uint32_t i = 0; i < u32be(dynamic_shdr->sh_size); i += sizeof(Elf32_Dyn)) { - Elf32_Dyn *dyn = (Elf32_Dyn *)(data + u32be(dynamic_shdr->sh_offset) + i); - if (u32be(dyn->d_tag) == DT_PLTGOT) { - got_start = u32be(dyn->d_un.d_ptr); - } - if (u32be(dyn->d_tag) == DT_MIPS_LOCAL_GOTNO) { - local_got_no = u32be(dyn->d_un.d_val); - } - if (u32be(dyn->d_tag) == DT_MIPS_GOTSYM) { - first_got_sym = u32be(dyn->d_un.d_val); - } - if (u32be(dyn->d_tag) == DT_MIPS_SYMTABNO) { - dynsym_no = u32be(dyn->d_un.d_val); - } - } - - assert(got_start != 0); - - // value to add to asm gp offset, for example 32752, if -32752(gp) refers to the first entry in got. - uint32_t gp_adj = gp_base - got_start; - assert(gp_adj < 0x10000); - - assert(u32be(dynsym_shdr->sh_entsize) == sizeof(Elf32_Sym)); - uint32_t global_got_no = dynsym_no - first_got_sym; - //global_got_entry *global_entries = (global_got_entry *)calloc(global_got_no, sizeof(global_got_entry)); - got_globals.resize(global_got_no); - - uint32_t common_start = ~0U; - vector common_order; - - for (uint32_t i = 0; i < dynsym_no; i++) { - Elf32_Sym *sym = (Elf32_Sym *)(data + u32be(dynsym_shdr->sh_offset) + i * sizeof(Elf32_Sym)); - const char *name = STR(sym_dynstr, u32be(sym->st_name)); - uint32_t addr = u32be(sym->st_value); - addr += vaddr_adj; - uint8_t type = ELF32_ST_TYPE(sym->st_info); - if (!strcmp(name, "_procedure_table")) { - procedure_table_start = addr; - } else if (!strcmp(name, "_procedure_table_size")) { - procedure_table_len = 40 * u32be(sym->st_value); - } - if ((u16be(sym->st_shndx) == SHN_MIPS_TEXT && type == STT_FUNC) || - (type == STT_OBJECT && (u16be(sym->st_shndx) == SHN_MIPS_ACOMMON || u16be(sym->st_shndx) == SHN_MIPS_DATA))) - { - //disasm_label_add(state, name, addr, u32be(sym->st_size), true); - if (type == STT_OBJECT) { - } - if (u16be(sym->st_shndx) == SHN_MIPS_ACOMMON) { - if (addr < common_start) { - common_start = addr; - } - common_order.push_back(name); - } - if (type == STT_FUNC) { - add_function(addr); - if (strcmp(name, "main") == 0) { - main_addr = addr; - } - if (strcmp(name, "_mcount") == 0) { - mcount_addr = addr; - } - symbol_names[addr] = name; - } - } - if (i >= first_got_sym) { - uint32_t got_value = u32be(*(uint32_t *)(data + u32be(got_shdr->sh_offset) + (local_got_no + (i - first_got_sym)) * sizeof(uint32_t))); - if (u16be(sym->st_shndx) == SHN_MIPS_TEXT && type == STT_FUNC) { - //got_globals[i - first_got_sym] = got_value; - //label_addresses.insert(got_value); - got_globals[i - first_got_sym] = addr; // to include the 3 instr gp header thing - label_addresses.insert(addr); - } else if (type == STT_OBJECT && (u16be(sym->st_shndx) == SHN_UNDEF || u16be(sym->st_shndx) == SHN_COMMON)) { - // symbol defined externally (for example in libc) - got_globals[i - first_got_sym] = got_value; - } else { - got_globals[i - first_got_sym] = addr; - } - symbol_names[got_globals[i - first_got_sym]] = name; - } - } - - uint32_t *local_entries = (uint32_t *)calloc(local_got_no, sizeof(uint32_t)); - got_locals.resize(local_got_no); - for (uint32_t i = 0; i < local_got_no; i++) { - uint32_t *entry = (uint32_t *)(data + u32be(got_shdr->sh_offset) + i * sizeof(uint32_t)); - got_locals[i] = u32be(*entry); - } - - gp_value = gp_base; - gp_value_adj = gp_adj; - //disasm_got_entries_set(state, gp_base, gp_adj, local_entries, local_got_no, global_entries, global_got_no); - - //out_range.common_start = common_start; - //out_range.common_order.swap(common_order); - } - - // add relocations - for (int i = 0; i < u16be(ehdr->e_shnum); i++) { - Elf32_Rel *prevHi = NULL; - shdr = SECTION(i); - if (u32be(shdr->sh_type) != SHT_REL || u32be(shdr->sh_info) != (uint32_t) text_section_index) - continue; - - if (sym_shdr == NULL) { - fprintf(stderr, "Relocations without .symtab section\n"); - exit(EXIT_FAILURE); - } - - assert(u32be(shdr->sh_link) == (uint32_t) symtab_section_index); - assert(u32be(shdr->sh_entsize) == sizeof(Elf32_Rel)); - for (uint32_t i = 0; i < u32be(shdr->sh_size); i += sizeof(Elf32_Rel)) { - Elf32_Rel *rel = (Elf32_Rel *)(data + u32be(shdr->sh_offset) + i); - uint32_t offset = text_offset + u32be(rel->r_offset); - uint32_t symIndex = ELF32_R_SYM(u32be(rel->r_info)); - uint32_t rtype = ELF32_R_TYPE(u32be(rel->r_info)); - const char *symName = "0"; - if (symIndex != STN_UNDEF) { - Elf32_Sym *sym = (Elf32_Sym *)(data + u32be(sym_shdr->sh_offset) + symIndex * sizeof(Elf32_Sym)); - symName = STR(sym_strtab, u32be(sym->st_name)); - } - - if (rtype == R_MIPS_HI16) { - if (prevHi != NULL) { - fprintf(stderr, "Consecutive R_MIPS_HI16.\n"); - exit(EXIT_FAILURE); - } - prevHi = rel; - continue; - } - if (rtype == R_MIPS_LO16) { - int32_t addend = (int16_t)((data[offset + 2] << 8) + data[offset + 3]); - if (prevHi != NULL) { - uint32_t offset2 = text_offset + u32be(prevHi->r_offset); - addend += (uint32_t)((data[offset2 + 2] << 8) + data[offset2 + 3]) << 16; - //add_reloc(state, offset2, symName, addend, out_range.vaddr); - } - prevHi = NULL; - //add_reloc(state, offset, symName, addend, out_range.vaddr); - } - else if (rtype == R_MIPS_26) { - int32_t addend = (u32be(*(uint32_t*)(data + offset)) & ((1 << 26) - 1)) << 2; - if (addend >= (1 << 27)) { - addend -= 1 << 28; - } - //add_reloc(state, offset, symName, addend, out_range.vaddr); - } - else { - fprintf(stderr, "Bad relocation type %d.\n", rtype); - exit(EXIT_FAILURE); - } - } - if (prevHi != NULL) { - fprintf(stderr, "R_MIPS_HI16 without matching R_MIPS_LO16.\n"); - exit(EXIT_FAILURE); - } - } -} -#undef SECTION -#undef STR - -size_t read_file(const char *file_name, uint8_t **data) { - FILE *in; - uint8_t *in_buf = NULL; - long file_size; - long bytes_read; - in = fopen(file_name, "rb"); - assert(in != nullptr); - - // allocate buffer to read from offset to end of file - fseek(in, 0, SEEK_END); - file_size = ftell(in); - assert(file_size != -1L); - - in_buf = (uint8_t *)malloc(file_size); - fseek(in, 0, SEEK_SET); - - // read bytes - bytes_read = fread(in_buf, 1, file_size, in); - assert(bytes_read == file_size); - - fclose(in); - *data = in_buf; - return bytes_read; -} - -int main(int argc, char *argv[]) { - const char *filename = argv[1]; - if (strcmp(filename, "--conservative") == 0) { - conservative = true; - filename = argv[2]; - } - - uint8_t *data; - size_t len = read_file(filename, &data); - parse_elf(data, len); - assert(cs_open(CS_ARCH_MIPS, (cs_mode)(CS_MODE_MIPS64 | CS_MODE_BIG_ENDIAN), &handle) == CS_ERR_OK); - cs_option(handle, CS_OPT_DETAIL, CS_OPT_ON); - disassemble(); - inspect_data_function_pointers(data_function_pointers, rodata_section, rodata_vaddr, rodata_section_len); - inspect_data_function_pointers(data_function_pointers, data_section, data_vaddr, data_section_len); - pass1(); - pass2(); - pass3(); - pass4(); - pass5(); - pass6(); - //dump(); - dump_c(); - free(data); - cs_close(&handle); -} - diff --git a/tools/ique_egcs/as b/tools/ique_egcs/as new file mode 100755 index 0000000000000000000000000000000000000000..fac563c2eceee331b99d46d547bcbfd236625253 GIT binary patch literal 1148960 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 `s-fF=%8?|~)`3(o>HahUoFG;vsX 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

E6SmGySI2U9Is09E?P2StF6f&KV&LH+e z1DaPMWd~$9__#Q@kO3EGpk_6seDvt<1&e^rFFFC`dc_Rf_&9IM#_*zyAJj(zje>zoyv{=&o%cLC&qEs^ zS6-HY`$o|4Ag%0rs)ST_b%RDpp(Udf*i3NZhUH^kgb;F6L-H|rI;q#z5aizWUErJo zs`#M_@#I>NDnzaY@nHE6Id>&Mi#88pa_urm0$*yv#_;0zPPkjZhY(@OwO~6t!5J8o z)IBhAEw~IR5!|;HVy-X9+{Gy7V$HQsbJ21wRFvdgyA5Lb1!Fdb7iv2ZxweXgTJxnK;DJM5IARpa;+AU8o3ECjo3h)BpooR1|}82q!b%y)B{{_Ko(KKA_&^JDXsE= zT_^;pKOx!N#|u(vJV&ZDplu~jSX&9yb_a(NNCIXY=%P!AAb6K8xbT1&`O_0(^1_5VNk!Z7f46`id= zKqXc;lyZph=med)1K}QbhyXQFJRq{*48mMuhsW2&7E{9bRex&G~{<4E4)>8-} zusbcm?&NRXgd(otVc80DEr07Qh&aSwQ^BS~dYKRrXq5!2a=>!1$ObhyAOgr~N5BIT z(HkMP0z?7S2vBxHHnY^;qkAeu0NIGM?hqqD`?g-ocr=5<12oeC4lV0eP*CwVfjame zpu@xXTR(zBsdfWHi3oVXSm*H_$A>18c;L*Jm4hF3UNCKIa#e4e9kNbf9vUgkaaTrt>9r+n6Vrn zPeYC_h4{=t1|;$n5q98U=!T7|z_SHB9GUrBwj)%7Lz*~$S?2BH{B!ayBZkO1@|&(2l`Fb_iY z?f?yvgOq^MFepX!78H1N_k#3-=3gO7LDoR-+Ig|^4GTl-fs(`>pl&btlD`SBLnpir zn(*3x!fT%iuRSNccAN0pdBSUl39oG@ytbO~+I+%mlL@a4C%o31@LGGqYmEu7RVNU6 z{@n)1{3Cc{{{&v}lw=1)r~@=ESqm20`vBCvF9F3dhy{{J0ZY^(PhSS|LU$*4^rqeb z@Bepg4^&bbP4X}QDEc&N|^_Qp|cMgCIXMm0cF@388 zvAheR+50tg!So$ayA#tPeh7m=aSz@J(rdaAYLFuqgC=7)h!tTFl8f}UAujp>PQzgD zz+L2p-Jm_-18dQ}rU!M=dW1phFt0IUH>enF5G;&A%lg5~u|U}Yw3MLrK&cKyAj0E? z`xXWUk514*ps<*S94813y!qgw3LM5ES`Z(pAskZB9SS=7?gTV$fBy!>ZAla?ZjQTx zZ$kqIEn=A|_>h)T(C)nh9=*Od0)s%q%8-Et&(0e=!C}}dY7Y&+*9T!^3#DQ(Z*ws+ zFn|hZhL@ld5I_e?z&rP@H=0i|!JF2uH;#et4Ppd&7o1!{{rXVQzSslM361p*pxO}@ zR-g(F&AA?+GciDu^u4BApdq003!cOiuq4qhzrexZ3JV6%p8xI!P-BFD8>qT#1|9i{ zxW@5;M|THkUK(;}9B3C4XcyN1i=bKL*U&wt(qQkt235M?+<4r<0+eXMrItr`><`4c zV2|cED5oYseFMwCpmq5_JbF#rH6W2W>l?@`u8{K#N(J|6fX2vrZR0f97+!2y3u>T& zcNkcBG#>zM%6b7>-;B5$@&z;y?}G+0K;Z;h(p(C4GiYBs=(H)&-sc_QgTla9tAX$4 z109^^(F;C;4tmS|3xh?VH60+^KsR!MRekX24t?O!30^G%_9}`u6FfR=5nHi9J3Ju? z9CRqzkJpBvmGI!%UQ5>vpv9k{!$ceeJS<&Tz_$K?c85SzK{jhO*ZyDtr^^lS(Z&2* z;NXGY0S(O)Gaz|l17i9WoNPe-J=YcB)f1p5C}`{O2ISQn{zpK`0(6R6=mw8o&?z&} z6YK;))n@1M7gIo?*!)8Pwx`(uV$Tnc-T(!UUeM__t{b2ui=vakfdx9t!2oP8l4C$; zzkrsExo&_A5Qt0x<#5nFU!ZL!;KCkslqWRGwO)V@d4n7&0Fw^|9a$29vXKl@kC%eu zAJW1Br9V*Rq`wk0h~fIcqq+9Me^}f@&#(Z+9;k@~H5hVa2k69Ch&*Ug1awkb=nv5J z6eKD_H$YZ+fuakv!w$6m3#7)u!vj3J0Xnh}G(H4AVc!Be-tPLNBftVPg@88et?=k9 zUEt9PIyB7}wAX3@11$O#Aa&0I$iYOeE0E)A@gY!L!6M=tcn|=zc?Y!87IZ;9(lXn7 zdqBAabOa1|jV(+M_zG#zX<&$g54u+pv~5bk19Vt*>ncbL&w$=l0FnV6&9MOaC=o>W z#`OneM=|L5%?Z#L105F(DOnsiK^OGG*Y2!}Q0)LZbh6tQR8FjbBsS1lFrZ^?c6gu&zwny#|Nk-9_Y5y5GJubDcn?nc;M52{ z_>6yB=zGvcVAONeT|a;}=65rCbTaX8b0tZSBM0c(2i(S9@Hp-O%1aCluJ1u5KFq89 z+Z;G8T;KCIg@dM^n_Yi!Ao&?2$-nIaszV{y9RKjJc0It~bR4vZ^BpLUf_EP|fZ`5x z0MT(sQE9Bq#_*zZ1t<}K&k6#a4uKSr$Y-p8_eH~kg9$uq;0oO(4yq18aeCu*C6eR7 zqe7UGlmNaZqZ@Q4iYrAD7fsVnUC7*JJ-lIB4HasYPpaW{BlBWSmtIH*oW z6@JML$!MVSau8>Be1jxhxDk-UdO%y&H!zeIf=mGqM1wXCgHtgiMi20>KLi>yM4Xh! z49b7awQCqacL{`oY9-iMXy+Ah9@zle3*ZVqPUZq=Yyxy-EU3x?UBdx7&Wpdr4CEBh zX1NZ>g?ov?1oB%0T{0%y7g}-GhL>!}0_ap} zq~n+&R~ooNj(GzgYy>LUTz7!8Ca4_<^~(lu#RiJe&f_l@{{q=wVh0XF=rL1Jb)Z6f z0;sL$0jfj68%#mhxx84-02-Ti-SFBJ=iQwhASKPUA0Yjp4wX-uwgFx&-f91YN%jQve=K1nmz49dw8y2->L%I(_N~bUPqOYpEHizJr<#*Q$sv z2+|75yFWY-yZ&HiL$B3vg}Df+TKUC2pO^UrgN$b|Ylx3TROSsHJ!O z#e%;-AcsM{+yb!{bacXpmx2(^2c%kl1^fUKoBuyRi_O8CmtTYW*`Q+X0M! z7I^TlKLDyM6!}_QAv2bpwCXL-2qNsFFMWBJR(R z|F5$^XRd%k;5GPkWO%Ukvg*sSF?e*dfMN{PcmW@og(NKileTm{QKakvw+80fUeIlr9F1sDn!N&f_nh{r&+unhm*+)%fNEDBe2vf|jg%bZ!N&knWrc8m{c@Rr&Y- zzfWhY1eodt4Q_$9OM5^MhdA!~1Dd`Bz&Q>+q6RCyc7s+|cZ1iTgS#)#y_t}`kDwLC zphiqLIG2N}Q60Dtc)1B^MgkmWr2^19DPSdAGT2;Kn5_;Tosh$Yn)ia{YeBgQl(=8o zfR|f?{J>D+i?n;R+f~4$6Ec2bctC4Snl@QqXl90^qW$ zRB&Gz7ijsp?QTgnh8KeKLB~Mt1%*EYcndkqdjTHZ;8@uS@)WelKmMY54x-5a4{8R0 zjzl`Nj}Kg*)(X7X{sC0Q!9vUs>ga9<5zvAFa884)v+u4Ic+ribmKCHHI$&J_I>`~) zA)s`D>X2WvK@LIQ!}A|>egZ_G^Uywin2S_VY?%*QY}dROl(ZNyYypX)+A;-V3wSe2 z^Ii}Iu?58P=sdLV|NsB>9w5K$e~;{MONcF?l*>>8TDT5kf%+S-6Tz9g8+1b=+<&N6 zDnhIT@84?P3!)%af>FL9z0f5NNHrE6RCflVNGO6Fg(#0ZMkA;3Yz!P2nDp z#lGFGpri^}41Bzm2ee2M9CVPR2AcTph3M`C)dT|2BwDrrlte+Q5lPfp2(+c|0%-6R zW&&(4G_qkJ1(5Xq5|p7j&%e+F8wL_b81_vNmfj)PUbY@6fd(3c-yJI8(T(#|CWg5z z4DdNS$R?&{@G_GUu-8;W3{vQc zJ_a=zz{_4eU=zZE`~E`8xyvGK3@B^O9dAtnFM3Qn-kJhqq=6Y8$HCk8 zL_o28ytU%r|Nk-|W^?V2|0T*G%l`fU4+^>JI#BBny2TJwAAonIy#}wV1t|gf7`%f3 zw66wK_ktF@q3D4Zg&y5oL0ckF$H(}mffF`(g*#-Uz<*d$yTA)dE6}CU|3vlc+C&KQ46%U3*=2#=oal)9>>8)9YCA`siF~G`fl)5>!6#9K$FOz#)C)i zR?z1Eut3B}zE3Y}-9L5)$Y?%jg>9|C3x!qip?qlUo(Ij2c7yGLkKluO4bT2TyICIC zq>;z?!Rq1t95BxVbVfh;UOxyIYX1=pMh3*NLNE^lDEXkIBT#gJZ^MxQZA8+9qDBE(Bbs_+rg=>`2sXg(m~(Fsnxuem)SsTdL|IMT-BQb^2$j+X#M33!wb zx>*x!hl2*lXS_)13~VrHgCl5NFR0Y~2ibZIx+2T~XA!mVu}S@5aUBBCuC66M1JD#H%0|Y=D$hkmSqXS_aCd zVDEwk_93Mef9sz=|NlcOi$DMW=Yy-3O0VBF-Y!$>Fsn~@!GQ4b%{W; z>jF@(4RnVW==g^TuLVG&9^K$O06-_Xfrj2EFn}u&kRl84m9C((9ZC;$hb{pX$Dlat z46uOkz;;1~AKn}Q1sDFx16rIw*N20>02EeGIB>OZmW@;|`#M0vKM4b-VU}d+*4T37`SO&>0@xpxF;dctUC; zlM-+?oB`^|gPaSB{)U$zM}k+Bffn?19)BSQDlWP~`)xqM)!@-xpa5>qV-1D7eeh5~ z_tQMk`Z4h7`j9&VI>FOJka&XLBiG;o^9N|$49tUg7wq~5)S6NmQeJ{x4>1L_;0>}2 z$_5l@kQp3Aa^-J5{TEh@{DT!E4Ub^O$O2F?@*gIi0Tzc9BafiV|G*VGv=~{?IpG7O z7y+mFZg6w*MYIYdsNi~mXesjYKuVX_pwoXkAeH-iK1qRBx>Scp&A)u~(p0E4VL#NF6d^I!vPn6sE|&;s7lnfCd4~5#Z=!1YfY+A@K4whCc*KL8r<<${3J8 zz}r9|{^)>&BE$wp(5i(Oka^$#mtHQyFi4@)6eUPOQ}Ix@;4uhvw+X}oSh%2>f(RFU zra+HF3xovEE>=)usv8tM&;goma8iKo>4bDlOy9FX^2Wx?*z!g=#Hf6bQAfLwjdBP8 zbq-H-f|^ax6zyaIDXl>H8QgsAxC1V&pfe+w6B}<7JUVOPw?rU@Y@ipn@VD@TMv=Q+ zUx1dc{$K{*Dg|M)fG?PT0oBrcLJ*VzU0*=^M6c7qB{HbF0xi^A50rrJZ+ZbT1xeEGWT&*7SgK*$aDVP$!JP6?D`FXbKP1oPw?9nhGuy;K2cEQb2=)zZH@c zQSD&@Em7?Rr%}+HsssFx;MM~r(DU>WV({SLpL*amBCvWzuf1ny@UXl9Dp*jB2lnI~tU$)KLFX-_I0Y_L4tLO8Ampe~kR-(akOT~7vy=$#I{?XOY)otnFJjuk84Z+JK^qJ}vo)ak z*5)6~U`-Geqr>I4=)F@-xU3@S5Z>konMk z-Yo~fX9FX78JfmR4Sc#)OFKaO$v_rHaDeWWWCZUfYy8j3@InK8K<7Qg4tCJ;0Z;a|10r17T>T1d3;HVFry+@ET3fX-Y4UO0n0FdcdRkh(WYt z3}QvL2kNCk55TjXu(F@66k5=PfN~JnO`x~}&2hrAA-K2z4fTW8?t&Knad;qt@TDlI zR0Uta_yf}|h~(?h{05YE!FK_Jho!)`-?-jDB*Nwgpo9hLaiR!<3NKK>2U>Fit`16g zLF;Zkx*aM&14>+wgao-29286ph~6-`yV2?T<27`d0q77|P@ph>uBtN{?hfF!4Xwm?k&I+~C8j?6chi-$$8KA2gPrYUbFGVTsflzgj zU`5<&5xo)A9B_p${tyL8A9n!VxdUBT`~;E;LEf$K=my&kTBHc-wY~riHo@xH31HuW z?^^-2Vo|*gTGt3u0MfP30Ayu5ayzKU(aaR<=ZKhW@=2p+5eYeG(opkxP)=zN3572Ee zp!Hy&qn{^%dSg)AA&HZ}wT=Ze`h5men1SX!Ktnq>z-I!K@*H;s-Sfk z4K@el6Y#I-r3w2B^MQpmo@gv)7>GA)wiMP{6;8Vgubk-_rbo z5v&VpCg_NH$TmO77|oK~KmLOZo&mnFvKt}=K6wBp`p*L{3JDl7EHaQ=R=|_T@Bwz$ z3&$NyzyW(4ez`GdJQy^9UIMze6vF9rJpj6z2(+{eGFoTgF_jb0z6QX2&AcmMcxCkPaR|)toj8n zI7FFd<8L(w9bv@?I*AW_ntC_HE0CJ<)0)5k!8bf!0F^o`| z54{0hvJF~*3m!rQS1rdKKsOpg=9`W?fbJ~^vyVG~`kkN^HL#>}+!eGW3M2{ItttRo z{Ro=A%Q1cVn*@j4BB`AliNPq%Jt z1E^g94g;U=1kfNTBxFJ7pB?%i3|f9qUu5daE%2LTUIZ>a|)03U0IN`S_wp;anqXce5N;=x0;pmn63t}|ZS zgKx?PCwZ{{AQumT7QVsq73j1_s1$fPeFf+&E7uv2V1=AJUAharrIWwaA5xcs?1JPn zHDrNK*BP+=HZwrw7O0@m0^jNk=7L6yAqQZBS_UgTI$amMJO)Zu;OlTexgP2a&=weE z7xK5v2P=b0LtKdnFmP*QFyvE|Fyn9i3OcP6bc0E z3mEuYRwDZnnhrpBa=^VBx&X2b0vZsI5(;#{6SQx@c80fonF8#v`EC z0C;;Lq9Kdu0zsOQouE6NL9K4cVqnnnY)jV*;FXUjpzFIKx5Rb2z5&kzB1AzG(w(lL zEo2u!jV#a&vY?g9pi-q1G~oa$-@!Dj3cbG!ln+5y1v&+Q3mMSr5%86|AU&X50q(Yd z>qby-3e;DD0x5@?(m4aP z91|o0H^8S?g&8!9$_%pBqxmq0kLBZ{50DVV(hGp^O6d%p9yVWiIw4n2&7N~Z8lH<4~=GeKz1kubcg&;ch25?wU(x9cBk*E#%6TmJq3KVbr9 zk8f=7d0jphZtS9^GIIKs`LceI<}ccK*Q1@M2~uD3W1TvI zg_r_9tNnQE1n>+81B1tL@R{@=r+FL)-zNZNf^H^&GC>p8P$uYB3Mlgc!UWJ_2B;`# zr5%I`-Chd2H3##CN^m@PM`XN|1I_e0XMnW%bT0<&5r27%k%7Un+eHO5LR!KFWwDm> zbvtJ?A7Jcs&UgvhM*tOPhRK&JT=OGg0cEKyK`0$*KG zBGerWIuQwUG(fjQ2IGZJXBZcp-z;5k6oYnngXF;i;6>431Hof{X!4-0@D2EJ1mL+t zPz?+_pBB1rA7U6-7L-mOIDk4Ex52p;YBE?3S`fl-c~C<)7^Vt5F>vq&i$|yHhS#8@ zJdiAa8Unh&0AvAZiwtNLk+tiAGEf5xv?~4p)LhUQAn0rc(E41MJ3u>NJs{W3fH%2A z)(d-ByIv^c_JDFg&0EMp29T20()9#ry*Stih)AdF3EyrN72nn;{H=!n{{QcG&H!~T zyPYMPPq1`4OT6X;F(3Tybd~@!K%-;A{M(#mzyrCU75&c8CTg^RN9%3=)|=p*49=$D z0}PnK7rlWF^8}@&&I!<*1>$r&B(#Fg^11`b6}oR(8D2COfpW!EP%40DZ%{kz#k2X4 zv%+>Arti12~!Rx8#8eB#4MlcZS8wP;e@X&3I|U2-;K!aw<#90sa;ZusUZCk4{Km z9J02Sfxkt7k%0m1Iq;x66IdB|gE8n_GDukj>BB>6=T7iB=b*!@z;Xc}kuL!7tzXG%g6tcz@x<{(@0O(X1*9A!W8zB3TK=-UejhO@yLEN|w zF>OJo0I1X04UNy;|Nj5??OqE?ZN9B<`CAu(%2mkuH6Ea1VHyJ>@JiA=x*-AA>k$Eu zzFUyFuowTqLm2!mYe5T@q3RIs)rM*9?tr)pTswGl!gL>m>Mla)KHdNdU{HYs)qA`F z6q*nLsPhxS5d$^r_=}>WpkW0t_c(YNF+?#~0G1z{4^((`!ls8oX9pd3U;*!_hfY); zcK|K(0?j*vBtdIIpoT!X(C!<=gyRkhkfjq~?r{eP$eLUf3%eU4Kz%~!nuP9NQ0ERb zL-_yy|6Sm50mu-9!5nb?29*Wn5b#kZC7@xt1H$E?l~s_O3n?o=Ek}f%{4Ezj z1tVfTC&V&lsAb1p_kcp@WgjR7hVFr;H%Kr41$e&_s4-dsI!G2=+JNJ`vl*0Tx?T6A zb%LD=ZF_)=l2TTW*4w3^a0Iy>6se$abOzN{AOSQ#b>4*g$5RmEpZoj_43O2J$nnd+ z-N6NPhPLY-{-zLca&)}`niySQ2aX6(9S?4YcOHK+2OdTRx(5*Xc_=Kf&-0fABZrhl>ilH1*tZL2!mP-P+_nkau8uq>j7Dq9U=^BNqBUF zntbuFOJ==382>C} zasw!pzK(^O&VtlXQuXLYZb18VJ_MI{$6sjcf)Z4z=F0`(<;~a?O_~QfcZa{Fh?ju@ zUWbFrAXwQg4^C~+45a~@9L$ENcY)ReC9%iBN0@=a$OGa7P{H@_|NrByCg26&;KC9V zpx|~mcwHoDpAe{@(`&j8lzThRzsSi0?F0ddBRY4Ad;b8aNmEBcY1A?KVfBf@i+7D|8B5+T4$>i zxW)tNb^sLxkh79NT(Dst-3_2yXA$e9K+D%bn}BjV^)X4IJ>$LHL#kaMJ`;ywkPgr72h(y!R7y;v3|oCf5%BZ4Qfzt+V3h{yL_=C^ zt{q?j&@~=KFlq2T9$;%ZAjNKBHMoibFQtJlBLXi^1cwwP*x>=%3Q+}GkqMfyfpHx` zVF%fQssP%62|Jt$Y>kA6rR$7h(4xc+570;jcxftB23+KUQW?Goc;*j|fDXtw6ZBFq z@LFKd=sh^1K@I}D*8_CHIe7DDfB_<-K(YoX&7o!)XvPA^7g|PX1!dyS^DmsUF*6DS zXjOAJw71*ass%41@T-rxE;`Xpu`vEiEhw6Zs2SRX;(w?>f>6_ z`6Zx*KU2Y;f#~*tBy`SHP}vJxhhWVKE+`>3M`XO*3~G@$OEiPJZ2T>t#oy2dsz-MR zsOo_7x+j3zB2bP;ZvmpoeEbFfTTnuUG^P=aWPg}q*d@4N1<;{E$Vgl-4--^T_XJRD z7|QYJ-hk4qKK^3uoB#ihL;CZ`?R^(;p$ILXCBX9=urZ2h_aP%4E5Va#pvG0H;J!vs zyRp}{;65wEi(@IE&Ra9M(+gSz+&vl0>~^+*h^VEz`+=130+yFCx2*Y?l<|M~na6G4R@gxwwn5^w$?RBq|f{DXzR z$qmeZ!Q#>UgO9)60>tYTX@z83R?CO144_TUGdy}lbsw@acraeD`~Seh_5;{h(6Nax z*+4oVRgVWGy?8(-4_||>-+)wz4d88m5Mh+ee;ibl{Qv(S+byS=Dd2V4pzBd!ccbvP z%!bs0AVE+^{|7U;%?jtT@V8bXR6y3#Lk>5D-MkWE;L+{u0UB;n0^KSAF2>yzc>8^A@$~4Ro9MB9ke+&4YWypjtxDEajQdFukFoEhR{+5TJ)-vA-Oo znZNZbBm^J@1E>K3K3yGT5wyOz83(E__**~=D4>A~Yoz}JB?eeo1JdhI0E%Nxg&SPZV9S`UCvyacm5kH1(S1FCsp{WY)@xU1QD{6+XK@S1RFpA9Sp zW_KQcVFQtZ_S?WxV0P#67m5%mXx|Mi1!i|1f58Tkg7)9QQebxH@fWXmg6)F#;lNU0 zcIWXI7a&s5ejHc|%+T>+}F_JT*Z?+wr?h(6uEKOjfeI)cg~ zSmTWil!ZWtE|!1>%^pDJ-$9FAZ@`+fpr!Y&7r-~=F@Ulic(ENq)(*7t4ZLuvyA*Wk zD+2?xaeDkkSR^P7fZXl`T8Rx>O(p=or~$f#qYGTxfmXbMGB}6^4!foN`1`otH zA7X@z$b-{6Vy+Lq&=Rzd1vJM1Dt#eG6N8Ne1wObT3mz*4Evy4!P=N_@3uxsbr0Rlf zh3IzRKrS@9ia>>CDd?b_7tqBPFFd+IXAFbQ&hY5G2tHi^R66(Pf$DtF65yZ$=yja1 zDP_?5${!x!UJO_tQec3V8A^a-1$vV#n)e*TU@P^&ZSzj>!4MvuTfrmp(6M^ZrhU-r zD$rV1@L6K62f7_VS6G0C_d(zZDv~pcOih`BEY95kuV!-3}_C(1+ez1u_-fNMz)1Z2_kq@W4O9G2l)|Ne*;+ z0$Ch1bpu)(3$ntao582s1GHrXWS~bk_=+hAvj9}pgVaC|`~o)=L7hy{X{z8AW=N}J zU#@`kC?Q%wH#qIe;dn!7VJX2=uC|j#kjgfEd0}g`^?yEIBw_Acv4O zKj80xG_^yZTELOd1gcCtU(8ddxC7|Ud%@6pS4=6x&g7(~jltLGPgXIJua>!<~ zmn(OIE&_mcllrb8x=Bq}VBI8eM&8E&I^L$&w)!F~!wb3azyCdYSugKl2dz820NR%a zK0@XtC#XTy%eo6g0(|gOH`u-4nOg8HC1{$f-*O+EY(N5_tx=#%;=loIM+vNF zU`Xq1t%6+72%^$Ji@f7~x=nXQf|jVcUhwG#t?dOZbM)}(R)8b}(28@=Qnk9v;H7FC zFR(Jah*$+$s)p@eHrE5lDf}2@(JUwgA^8O4Fb4-n(;RgF55x*sJ{AI1C*9B$ykMoE zSs>*vLH8ws2mGPq%SeY)UI4X*9YUHx^UkG$`?MgzECO4CR)B}cKrseSl-pr@o?tm3 z9~zz@rQma}N@5`*phyJah8>`U1)VPUfewy<4wM5|`#V6h`k-B)U_V2qIzgouXow7> z^m@e#z8)5wj#>|tf^I?u#WNxxnje667sc^!182emFIa3COZbp@Or@Z`!RUHGW9yv9 zT|td~hS%)JUC)4~54&B@9DKmic?hbz`2j!U1(aL}@-V1zz~Ay7JnRBW_@Jdlpv4WK z8sH{a6c!5s9Q^`cxSfDd7Noq?oK0Yf2ZGa6JOWIZRu zItL7epaKD^5V{qz50c5&pJ8Qq5flWPk^>DWyUqX~M%es=19b2;G*BEs6Cd5K6FLN5 zLb{@GRRX1;O%}*bPe4xb;IpJBfbYdS|NqiUXtNJyg#!32d1TF?ZYn$)Q8m8?E!u(WBVZ<-glan;YDH~sC@2Vn+-oZbOh zIq?6|%X8pD4sN_csUMp09#Fo5M>pxlzXr`{Ai@;gY*0%R8YX0z4NYbfAffJYik0ET zYkzR4gUke-CBxtH58^$D0AvFjX2Qk)VMk@qnhQL7fATA2~dFd%;FS%A!BU3=H5V7IXtwIMf&p$j~czsUXd@R@3ePbr%kN1n-go?I%O7!(sc$8jpb5``~`2V;o{Nu1E75_<~aS zG3Uo!L9>mZ74@LSp`hbbFL)r%X9k@E4Jidd%YQ(npo0Qv?T;3;Vh78Cmhpm?YJ%6* zLI#y!t9xF&PDNG;t;AXnlz`G6!f@!K9nkz3!VYaLI?=5GkNktyt%8mPE*0GO1d{qr z9cN{Dq2LQneW0VVLHkBQE6+hErq4h*F&*RFXHeWh4^Iajv<=b)SuqPbu;_yaq^y3? z%>X@h2{hpB`rtKa=iv{?WE<$DS5VK81GG5-a>Olo;eLtWzRwWX>403< zstgXG5l7b_5}=c~K|K`E$>Jx97Q8M1*9)K%7@B{8juih5G3&uGR)!a5V6#B?A%JTV zkn6xVse{rY=puC{a3jw3#%o3J1|rn6*+1DMY`g)Qa)j7;71XZ;t*Zh@2sGdjCzM0h zP`&6BKw3HL(fCFIR6KTqFA(zR+zMT<2U!aUYTJTq9MF^|sACOn-ZVfCe*rg-JmAv| zAg!>KiLlP(Z_w^t=!!pRn-bhFhaSKOK1UQfCI(-zC<|I53vMDgNO(XNDE@$@@7JK) z+6y3(pkV93&3BU}-r}0vZB30p0fVQXXtJXxpfRR2ulG zuU^*v_24%Bj@Q*-joZO8;8QPe@Pjy@$#>A{&|n^T@*Qj~q^(j33>l3B9Tp9`!2qFt}9@aVE%H z{vMz+;Y+~PIR7>WndS#9pi7-WH34|w4Kh8@`V^FpklXGXRAcWZ^;cUeIy`_@=-WpiVuKJsQnFm`XuyD@ghP zHOoQA`SC7uApqUv^aCw05eg*9&1sV0?-h6P6 znG4cm22tQ1Gc?m20A0WU+PVjx6bA(s=T{*VR(sMEBC112oi*Hn868`T%^ArUK}EYz~iR*At+U z|AB`!I4|=zC4i=(UL3Q5&$R#PD zZ5ySab={zJ;MsWsoP0oSm%1t7VhQKuNPBMXXw86pG?E$*%62b)SnT8t(8M6Z! z*FG0~$`NS9!J~OEh++V5Muc1p0lQ-50K!lo(51()Bwqo#7!hK=flqfYNV`vWENI8c z0gvvfAg6=Y067MP`#?5V`gVerG&=sjvUftJt05z_9`Goc02)C7FJ44mcLYjepu7*-JL>>b+znnV z+<5>rJr3$Ef?F&LUJ8MG*`S^N30-sbV552&>{lEizo}{LDeFn&VUSmH}3_F9Wj)+c=WP1uLK<_170^@q7GXe z4~o>*10|p#c#ukPd!kn~0<81`XyvXeX!Mier98;JFw;N_fFY_OVc2@0RAfKsbnq8C zc7LH43hV%fD%duVp^z0dpb;`x$o@|LR?uM1zGz5zHSb|%cyZJ5@Bf$Ez*P;*!x7NX zfW=DlkN^CwWynexpzEAP_JbB2yjX1ubAUO-0nk<#XptUdB_}jUp%ocO43vl3KopCgAlieZr6$P93|0lsGs zv|pD4yiE>L!gL03fEGnHyRHCrI2M4aofRI|;4+85>F#fE;}2fwgZp`qJtdH$(xZDS zWWxxkTn5#|$6rkN2+{*p1RAY_szCG{Kx0ct8~vC)7@_MzL8TU?_XzDKqV8WQk@LW5 zs}$H)WCK8*T2OtL2r48YwHs(k6L#e;NU4JXs8tU-=K@sv8N3F09>lVM+^!eo;L&*z z!YuOe=myniwH=zpiQi`?u0c}tNC348Fv{Gk8xu*ac)@l8{UQG7)@EOgCuXIP5$Ukk1`Ki|ZI5jRtr_#LNz~M$Hv+fI&$DXtV*;3i-hd zzLW?w58nKPr4-as2Tihonm3>U0nlMXpxvLKN)C1z8_Xe~t-hdQ)dO-03`i-sP08r` z;&lc1kO9!0lAt3I;8hQ3#{L2**F&$c0S$XXa}Q|d5;Q=H@D^xJ4=jn~6KId}ILciA zO;CvlH4$`j8h8T@e@g-=oIp3!@V9_AkAY-BO{gDPfB%CQV}sJ?0g%X4(9j8JHW<`d zfh{0t0U6ruy90ERj7RrYP`JWOI8gQXf2Zq~=GrX`{4GlvK*L;H7)zidf|6q31C7nL zfhrSgP|Sh-0G^r!HR?bojDhE6K^}#s2+%RZATA_2L7fPO*Pz8QsA8af%HWG5JeuEd zWHCT428D!;N9Qp_D@_vIU+6sk!fhJtW}WSfpmsRu>jWP5_!=KotXM zyavjJWGZm^3TlzLt^hCj;w%Lng9N(k1~f(j>gYpvUOxa0KY>f}3m%=|F_jgNfhlC; zAejhxm}&;N+U`YPi`uITn!Ey~XYdVXu+kWpec(O`XmAKIF@xK7Y{O6sJi0>{z-O+& zAq*M+evz&Vt~?+?4-ON^(qZuO4NyS|UU-05z5zO4Ed%9h&raV3KA^?&h*3?@03L@2 zq#X-7_-6$}so=g;NRnKxDPylsdz$FII z)H!TKDuxNP1Ohx0Q~lt24ciuoU>H(-Z44NWh zU}!$fXdQc{2s9*x7JfH8dQD(AQ9bZr`~Ys4fCna+E~11cAH;493&7Qn>jubj5zq+> zkZ=JVufJ~|BqnceWMz1vZw@M4aEG7=sOT#d+_w~>XDLX}Z!@r-9s5ALdqG9t3eeha z(4At*03zEvg=^a#&g0`iBI!rS>z;_daxS+MEu24UpfSg5f;E3qT>nH#SPJw1JZQ}q6;lR zF$^hv;c@U8GfJxGIfok10uWQhK&IwEOoateEF?$#pi&Sa#ThfiWY9eepq35vEIiQU z?gr>uHP8eWXq?Ld6x5x^U(Bun7Z;$DI6!S#(BX0hkb8dx_bEfX5WJ3+;l)a0aBzZ5 z1~uk9pp79IAG+@eGD89$i@4D3D&a8$RGooNHaPD305p~kx$nUNF+J-FH2_jAz?zz! zC&2qdp_3ekp!YaZKNRY!zN5#ct9fsd?XJ@29#t#c?&iP0TP4Fk$`Lhj}G2=*#;_fz=bYo zjs&y~l>u~F4(zn`<1eN-fzuS|+!#>Mg6iiB3?-mb9XCKm5nT^J+qdBQ!om~W^HPI0 z(?Bk`0iP~u1dr>4zJN`a@W2ksxd1K~!0n7~(7A}v)+Z!zy20H9$Ic7jZUNM?<1Y+5 zL8FSGioJFL18AWiXpoxWWh=xeaLfdNR%(DMW28HkaSi1y0M(PAb_poGbh>_cDF8MI z)B<#Xl~vG9k}dDSITO{9V7J2Jhrb1M4k37e3$*eDG@{{p!vnM*3O-4E0Ga_L#sB|@ zuEPOO&6I)$?Le-FMmf9{7Wx6&qW9_U1vS5r25cSwUj$DQiG$tcI>AHR^#M{706aK{{tDPwa7Pw&`G>XZiz3jnO)6XPI*F)|dM^qpDo{eb7d#vc zJ^~Zc+rb$&9-y{D38-aq0x}%W(Q=?v+XHrvh3^U2DLRlzwe!%!eW3~Twde%U9h0Di zyr8QrXYe;Y`uqR?1gIWx*9~+=f$IWL^Q5Ko2j~5(>V9IIk0QYU3ZIatQVC zR?vcM@QJA}BO$Q}D!@Q{hCjU2g9v)iR4jNI_y^?j%Jl=>oBXYJ zL7BYU6{-O=sKMU~O`sq#UIqph@Ti;X2Th0-D1E zXIM}+0p|dZ?$Qq!S+%VdoK;^yT6fT9EO=c2s5=8KCA&dgMNnESz2O5|rT|_k*XjBM zY=?tE>w!{GSb~?LD|LW6bx#;dxj_{K!|Rd>pb;{#S)lDku8^vdzx6nHKMQC*IJimz zpV14t(wM(>4rpgNycz?Ay$ASqLC`I?psNKHL4NH#|3cb;g`qnX)MAFHNxtOK8Q=kK z_#wq4;#he2Il!Q17-$7ui7TjG3aU7ugBCBqY?e}CkT__~DLkIQh5Ca+%Oyq-qZ-55lK`sVQcYyZzzqEj)8Mq8+p(Aveq%1-Tyl=4eKnZwu z*rU4v%x`|d(#-(gKMytudRQmiB=BLO;Q72f$k04U2CT95Kq+X&8;B2S5>5aMgKnhm zL@=RiiXf~0L6PeLS@#b;=n6Df3ULQyA;|}i<`*oGMX+GSFzqlkkVFNpkPsGwrx2kR z{{8^1A#i;G@e=6xVW?rvuAohst{+%Dnsa|JLe>dfLyy_!Hv#a@E2vurwH*=8pmRSU zZ8nK!=!xf`3E<`*pcBu_CBRMC`%73EUYKfu+gzX~8>ngqwb4Lq&?(2DN^*xsH@JE8 z0#XfuQrrhv4FJkgV27brfCf$ATm`C;Z$Kv0HbDA$pcYd%!%Ia-JR^(&jnTkXtb*$E z50IV)XpIjM732+w%RmEcpgVqlyj%xLaiFu3yBRzzU0?9GgC;y6t7$+25BS^KAu2#M zFgPVZb~=OdBZG%FC}D$|ZXj9k{zS_|#h}J5c#RH77II%RXuu1k1Z+Te=mC#|k3ef> zK+##M3AXLH1L#;AP)81Qtv2*P9FQfTAx6*@fZ#)fnn4S8K(4iRJ;C1u+FA?_Qlwmr zR30C9eF94RkOT)0HvVl5mW&Jx%?~(QAosyvfR7nLR#!v%UC?Z%1qpu8z$CP60o_XG z(Q9fBnkw!*|6;#33q!Z-6L4ArwWnYHfCLw&j$F{bu+H-@deL=2PviuZP4MM9&_f^~ zJ#vs);93P-$HJ==@WKpG(XYzDzyMlStOOY`1Rvse0opP-{RKRW0lg0cwBZMIEVlsY z>R3ppVmCPWAtTH1vbA(NTBvz+Pj~_I7-UrA*AHZaAqT9Z!~-bLK@Q~a4Bg?;2|gnb zbj&2Qj|eVYAPa>+*$5^BYkYxrVS*2^geqSFvRxBYLm`VoTi2kxhkRW(QvL(AoPWIb zhIkURp#YN8N=!f=1efBFVdxuRHhAL$sPJ+y@UV0}0B#O|;zh&5(se_Lw@0(<571x& zXyw*}($zlQtW!0?n*^&zOxX@2y_gYg2S=D-Y7PBf_fkijKF<%P_~7LgF2wTAR|6N%XWqa(9Tz=E|9G22M_QO z^5EzL#RVwobsm4A4O;vI8uS5gzhv;}1)W9@y8ed?yiOGw``{~sCxBKogKGxx?A!;C zODbx9K*AFxAV3!>LBg{Ww4V}GSA!~9=#}@bAf5j&fnD_?4QvCb;sRB0kQPSh2ao1M zOdg%r|6hP90$;9xMHLIGDo~EcqKXYw6&oa5ft&;>7Q4YVa)4EVE6PqMP%#HH30z7+ z)bJpy0hK~n)CeG}kw9LY3%OGSOUQJ9>oCx8XSeGI{_PC>+Ydm7{Qh4=xODC^(Ekv*x7v0Fv4%&JIY)6V<1P1c5V|gTfw5h@m9&fl0#nf*0X2a3cuZ z%s`|{0az?xR|ZR!)J<-XxCECYkVt@+T*xH}k}9+^3DoSu5)mk65)~s061w=3H&S5( zPTu_69XPNT3`igY_j$f_)_dm!A%L^saFG55? zdKgQ%_Jca*FG59O-4;+H`GL|3fV8T*U4QH|0L`6r9)B?f3X09w1w;jblM)$)q$u3jWeBq48|*hIs~1EU$cAk%3hel z3L5FT;nSS~8jU{z+E?FedJ-hsYx{i)E5i%!Y|xsq62f)|-wfF74}0J@?9#D|_N09us=+9v_tmv;d&1HcHLu>|Xu@aXmh zbqQh9t!Kd-no4v*bBfxlAv$6pwM7iENA=yVD=?)nDQHHApCH2>fz5q=FFua{zG zU}*Gx13DcGBn@iLK+h2qY4&{s>ezu!B>`z+Y4&{sYHESPhokucBWRH)NDNdzLB&`= z>pIz*ecvd&=IeHS173Yl0#XB-;@z=}4b=JRH8q^f3O+~cPyskpK|8B=>|%w;$w1|n zLF8mWgRn3;HmF<|Sgw>EBve17`j8>poQ4i1n`6=G!R6Y z7#P6rWdzOng3tW}MI|KRLbq}~fF9KWzS;?NQzz*5ol>P{*E@`$9fKerB4r5&aF)1J zbQ#hg#+2c2hK?k{q|mH^9pdl+R8}?rVB~LwT%8PFvj@r}5GPn3;&0gt@;mreM9_ho zpakL|0LrlKOHd_1It;+mmEaT)UOfYfI0?`Yu;sy`3UCmBZsG(Dr96P9N{|W*56eU4 z&>Kp@+CWBWfLB<9t+N2lvVaYBkN}MySRN_@6#$_7Vn7M{0py@SkkcI`JTxIo(?Em7 z;1vH_1%DXwH-T>Pfh11Qr7{7~g`tqiAJ8yPHE>qxpyj>M|g3wd2uQ3d(+1>l^+SP&o-2OoWctKngyvdPq@g{u4aH z4;nUm!B7IaNEBue^dRp}*C)^=3$OjUUH>4>`9dqEZpgge3rGxH0F5qoUVl-P56Vxa z;#jr376jeD0=|0XNzp2B!HHCD!v;b?9rsS(2R@yyH+(vMA*C01$M6gAEF~j&9UW-< zAE*&00iGcR9We-M%z(Grg4W`LIN&jQP|X2dbOKtl!U4AQH7jT*1OuW~6YSCWh67Zr zcJ2jlJL}vE+1Ld+7!Ndcf7}(+f&?w!04qSrm5@N>Z)pS-t-Yp2{j8vy!jATVR=k2w z!UQF=8IWQeZ2ya#JkS^k^Z-O~D};Z$11P(8y7nA*1zjo0@KPOQ8mQCT&EV1egRQ*A z197;g$wb7dH5wCPr`CA%vT}gz?sUEJy2hiIl>x@d_vmH)(FZD(TyMNi^5|v#4C91) z^s>H%aXdVFS)al<)*ijA_h1}7a6hM8z@ry(fNrnp39!_0hU6y^0X%*K zy3MQCbQ!X`(p-?Y!RJ^BfL4k_SRMyoD1b)cAR3yHHMl@D%<$+uxC?ZSAKder;n8b)2U%quL?zf>AqEBpm@kg@vNF7Q2u=#%kO1%8gs@QU%||xP z0Le7uFzEuBHW^`>0o)e`sHQ0*oAxLh93~)NKI_I(wgBSTsD=|YNbs2uoQPxhVV zV7Z;Ba^O0beOD1!ZWmN;hGXXkk6zP1JxGC8jAWfh^MfCtx>_BQxEwgZ0`MTbgsjgR zqHl&r=dt}<3=9k}y0U)!Z+3kGs`g$ubh|#WcJ1MBIt!Zq>V{;iUejq11717`1vi5l zJeq4882DRwKpXRVO&dY7y|(h*tPC%V6G81dj9hvw3mi5L;N6p*$6q{=1seogsxu8V ze%bBX09mUPI>Dp66m-rnsC+ZASv@fC<8esznlYd zICAkEk8X(fdRsx03m(0uw>y!NumC72LZv!gPrL;0!Rlpo=>n;7J#pOi2&j;Hc>z?N z^s<^jgxq}(-5tHG zpJ9CPRo%U;uVH-9>EfVsjbVHPi2fTeKKSg0Ue>cPKIpn2k6zY8P(I9Cpp$GpdRaH2 z2|ofA6}_wrp~5dOLHM&^{6i3aAB?{V!f%1`7eV;dF#aS6zX--}g77n-{MV(Rv%z4T z43A#cSSSbT&etIxy{y4#Vh$d?tZq=T*Tx>btPU`anny3I6^tVZI!ge?0rhN+pd3)W z2I@P43V2Ph7_=&wn+94mbc6x4=pVN25Ts~vJ19*+6;-7D`2X6^qZ@ql1E`b(Z`cPF z(%>8f>5oqQ0BV*&7NWs#ZZZR9InXiv&=q!&7Mw;ZxO74kiREAcNIqu-tr~E>0N>2# z_2)l$;TUMC9q9bqmfh94kjv>qri0v#s{8a;p% zPTdUw5FO^I;vU@%pws?9`4)5x2dG#CRg>I}Amd@Z(GpNThnCnd;~);;Z;=M4P}38j zKIm$BosI~Z z!vIC-4*u;9Ed1L+&EpxKoj*On^;SB_-cD%b?M?v)HfULm1^7;e)&nK!;LVkt$M%D2 z;TJzaK?+{S;{Z_sx(f|-13PF%wE$RYucxJgpDNOt=tHB%FrZDlh-(Uu9aht+W!rfdug|S5O<#ABX05xC1^YftoA$a_y zE%C?ym#ZOi7eGx|&~9j0<4?DZmEpw`ND=_;Qi3#y!7M~`?Sery0#T$wks$aK$}58^Pu3i z1AJL|12{E7Hlw>9@acx|!DW#zXem7OR!&fj4;WHx0PdZ^ zO2tx1NWy~(!m?a7MD+~*?G6#3lXCypGca_z?rE;w!%!;V(aT!e01oC4FG0g6&9!?N z!J>98P*LzA1!T+KFf%Y%y6!1AMY7GKdjhBc?snbN{DQF)JbVE@&jGagff>|312+a; zKY*)77N~_N`XR+J=;$KQ!Xr?t9+X8NfUjGB0LhvMEM512mluJ?RzTOKe|QaAObX(G zavx*{q4Yeo!4ArOkiKu}I#8(v@_t(DfeJb3Y6VaX#~~-q()b_$Uk4(|dLYY&$AcpS zG)4d7cI=P;yFd+n%|o3RI$iI8ZlnN>MIPG^+Nt$ICjQ6&=G;4sp!3w~pMve)=HS_K zpairaV+Q{=2T%TOpwb-Vf>%wTV1}l#&v76-K>LYYL2}oS<*vv5K)DJQ<7jSBUlX3n zK?kBd*ayCCr1SWTRlk`*%ebI3ADp1+zn73>?O^9BfmU{a%E=db44}dow4$Q+2Lpc# zbgeRIeIe-F1JHHnAhrW^tQ5osEy;(82Ox<@AhE&AOF-7bZj6Vr3y{=+x^aAq|B=j|rUN(OEhHc2pX8 z4+VSyFsM-FfH()dZhi*DU$9-Vvfw72E2#Y|QVY&{FXG(50saEKNFQ7afl43H=`66b zcV9qCP>68n@fVeRU>(ra_AN``(x9`{z$^JdQ91*;pRM8p>1RU<5&-P&2GD9}NM{;c ztAgfTL5rh6N5F&T7@%hh9)PTH?ggDU3tl`m!v{3h5AFki>Qc}~AyC&Dl=Hx?5Ky`) z1C{3Bith%f*Wfw>to%jX6Hu4I71}gx0r!-;U1#hAUC;??a9`B~2jvEE^RfhVUVgL&Xu8xDw8HcNWQ8+iN&#F} zzYl{h#ColYdSe85y(J{2b{>Cm0;CL-nNf15zzfSCNJVD}=z#Mdkj3cW!lBpHq7ssb zK0wq#l0=CFXf@dX62W~|pb6ey+vrMGh8H@&|NIAwmqJo{=kXW)AYF*25K>VEIUK+F z4QLB_M`vjZ=%^=@G|_@I(gK;b?10IG4oBz)ZM}DZrwzzS&5-Fvm^#R)JE(Ql0g0J9Z%N={V0hWW1H0^F75Egz&=rs)*FdMXfQz~0$N&Go z>;ubzyajFFfUcCXbZvoU(maU#4aA;KaB}D0=D-RXVzN9`BDgOV5*=sCSs7l;{rLw} zZNWmLy8&b#_%7r$h^l2ERpn@^LR&f~fE1#{2dEZ>POx}Xcy!JH7v=CtmJaX={>~Yo zY6~&d(gDsroio5|2fJYtE|B$Zoio5SH+8`CN6=Y_Jl+VZg#^8J87sq!Ki|84ywEbXW&?*sF8K3Wz9l zQmg|!IMz7>)SW|2jdg&B&^l+F0ILPZ5qOXdoDsn()`JydH7K~@p#&-5iHRkQc<_Dj z|NqMh@F9sHBf$sv!>YMNh%jjA0J8L;g}-$_q{#$NGAN+}uI@W$fcC*6rUyGf+nqf+ zXF#?wz$OVhKx?KwI%j}8Ux<_oUOnGA1JrRv3Kj4`UFQr)#RCo%@K7E&RG{bdpoWES zi^su-%%CaK#zPQC34j8c;bk8OXrT5AsN8+Y0j|zaHHKb6DG@>aI?zD~8r`lf9+rpr zTS2kW9eM?nE+9ix6MrG6V}0l;jL`s2k9{J-4SbYRh zlsmv4gD#}Uo*-_3tm~Zd07M}?25t#;&Vbw=0rwdA49(6NkQEZ}q6{2KoihZ$aRr+} z?vMa+J7*|>D2T^2z)ZLUJy;=DgVHoYup3KZ_FAIZ^$Mto4@%~c>z%LgH$4G0k1DKMAZ`TzgrdC_Cb3*gfkS(-uTw4#^pxD|6lwx=F<1=S4Qk;2$DdK|yx}r3nc>!iNcT zrXN}eV^PLkDhgUfRl*6iyb{^1I?~SP{aO6O($3(A846FGN^-l!=n=%&IqS~ zS0-Tfbg3F-L4bn>xDnX_$)j(!&$ToDN*r16+l?+I{6Sn6bTJ`;b44y3jZ4d&TjsU*AYC*R{M(cr6PzQVg z>_|+=;YlZ62ZLM7(0yajgXF*!8WSjS^xB%_vogG3{RpY{_JKOkpeFJrIdBsh)KG() z2pXj7oB(MhfSU41EfA_M@c@;U&=L`&raA#>Pb}#60G&1fid4`^+&4VBqZA;EDZhV) zoW#AL6MP;4IGj$ffCGO4Xumb6A936Pp^3{8J8f zUTl8I$iHm@sP1Wg^pEpY2bc+RCaBGFf)Q*ws96K4G$K*UmTpk%05pOR(g61tQs8ww z0BPu)@d894ioFjYZs&|2APP~QGl1g1a|Q>9LX_tMAa3Uj2@r)S&lN!2&KVjY3R3JD zfSDMzdijn2|6eWwm%4}q4steV@DHc6!RO0#&ai+u5W2dj!vVzYoZ$hY5Y7$&aXV*# zrZ*8QeL4~#q8T6x;p_qsw{u1Xh=Mp9axxBvvkzSV|NrG{)D{Lfv_YegIGx=AGPiTa z1Q3M??HM3$=Zpm)3gK+<(LJ3rHb6vSZ86Az@QecxQRp(I4)6_^oiiY(Yk*rFH^2%o zoXvUt|NqzK;I#4@bj1W{x+4NK?Jo=3OY8%>kp-hFar}Q_0$2z51SH28$5^Bxj^;Pu zHMyOoUz%&bFqCjM)_(c_kAa~~aGxC{j|XJ4GQ3cH3(n)P(GKXMCQH{ZMbPmc@VE#( zfr1L~FG#JMZU+yPZYpS75qQlrXy|hvq#<_vg}pSm+&~>j0u8P{01p>+P5@OIARV9; zjnFXy=!U%mFPK2f7rR4$G(TYMJjlPT37p{`{Np^)0cL{zkL-pc4IZ7f;9;50&>rxJ zOgH2VOVC#33E&HJTMvLrXV9hXpp#BOw1b9+<)Jd@jT4Zeo=(><5Z#!|ic0ek9m&i* zSVz*MmsJMD0d35T^5|t1fpL62dRcj39MI${JB$OGTxEoDK$ELKb3vVW*B`GzldGR# z9MI(ID=23IBsM*ISs&!GLS`rIGFchAeS5%R*;~876LfKx>5*L6;C;I{Xw?zqV2su7 zAa($#x`Yk-+?4=F4rI^?R=>r85-E7t#TB+_{el~KNEkex1f8YGg>3DF4tGQAB4v

2mGfd!u^Z}%p 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¨U@#bq!s`EJN#r| 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

%4Z3Xy*}v%K6%c72zBC7NAE_9&Z-7*N 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
    |7p%b3ZDB1Esn4 z3qz?pR;Mn;;?!H-NKQR#BF^wa8tj@kFIRzs4s>=KR*g3eq6U%x0<>H=y6VKsCs7DJ7Y4OImj3SPtR`UYY&X!UyO!WZTIpc&&2 zSdHC<#n{_kNZvnZ407v-?ogi200r<|77yr1y@DC6kcqfb(-&u0LAePuv-Q7J03>;S z7FZGz880HvgCiKs6L`S`i4n{yOXtPLD?k3TI)77R01bJ?a&$X`M@m6MtxguuO6x+m zGx*{-kf1J1@JzR}Kz9KP|28*8{%t?_x49v=iNWLFC9K`90-ynL9?(3LGfTGv=KIl4=E__wpCHUF?FF@rF`SA~E?3`pF+CdDkb`S%s9mD`@2QjKkg&^h_mMTHaF)WentbNk?y}R@YG$yp# zz_A2ARyYSVYs1ibphN~dhuCcc4u{U;;LAd5p}b=+@}K?x4>MOCYHq1qSU6}ePN~2P z=Rh`4qJXY$1_k<)*AC#aSOK(izEt9Wsm%XUfw1rwNsB-hpzNB4A0i4m775feOog0H zix$?PiZtMbMl&d=CBCS^=19PeixZ#%VVeVoO2w91--X-?IRL8MYVXLE3WJY=e(3_9-`D{0d0oDsPW)GMNHU`4XE|ui5(hdbz64Z#x^9UDu`@u$Eoe2* zo)-a2VZ&vr(8JLgI$igGD)18a9jV}s*p5U728K@8EiVm0+G-y#l(6qegUBR7WyGN} zrI7CVo)^dA#=_2A2N`?Zbqh$xgqNVhaIxEQ7L>_qA27g8s>NkeJOcy6gqL%n>Py&n zK)Q`PK;1@=YeA=Yfm8dQ7uic-o>ap0B&xR8{!n)%LwpFbrPFl_TJ>Q9uIaXEW7c%D zU6IPqK0Q$R2}u!Bpd~mErevuyXb~J}PJd4)C?!1s1vw}_w!E0w1kIRRnrpYjf~Lf` z#6fSHb%p2-<8OTl3T}}4JueO~f_ja=DF}Gc5(^%M?hZY|zb%Lfe8>;S z|I!zrG4KDSM}o2fU$pH2b^8^-T@KJFFR1Bj=_&v^xCSz|aRgNM6s-U^lfkPbx5R-u zoCg?6ctFunY5^W?GJ;*=3u+BAL#%+!>4El`2K_HR0`B0}gIDB2>;n}ups;Fw!D#7v zr9=^2G@gKsQh>AtfOcF=<^~mx0uU#@yaZ}ff+G6PiziFK5}z%T6|Ta1seC^Zvi)0Lf;%ecmVAfif#r=R{{PO(6agF+AT?-#XI2f zv9bl=^w4^svr30j%%HiyXKzP-_Adja(3Apk~JrP%2>rw4az3`2=M zI9(Z{q$`k1&!8o%GvH*U;SST>?Rw_rI&kLZfn_Z%a69b?$dZSU)j+KWN=3nfA3%a< zV1gx*-L5>)ObBk?U%CPDnkx_3HK_Ne!3VKHDHYP8T9t3y6?|^-|3Rm5y~NRkOT@u$Kt1aWv`Q4F4&;oNn;94w zUU>axVgRj_1!aW<(79ruwKHfdnIYx1vkqo?{n{R>yuPOa+84Lw_yMRn;OPB==uylU zhxRBAFd(j%1Gxlsj2{*}N6tWl2iz6qhn&aK?aG7NO#?R|d0qrnfm$_AuhpP^Wk&GI zlB^VPvzp_D?o4o;gIy%?!r-V7sIdi(HZF*xU~5gG`yi0lnp?Z_AXcMekq5;e#1@F>5eh9MC zxCs5_aVM1_A#|IfAm>U${etzVN67O(43wkcX&4@(xK3 z1ZNtKfERMQps)v>s|^ce5{=;rcu{&4?77b4WE#N%j-O~q5P_E~GB=-K>2PBPMIJ*~ z_>1s~;HU$;StR_$jFd(rLs#s5@<+7gIn~VvjG@hazpHdE_Hm;IMP5_3{<;H!kUXPCE&fOP$ev&{FTM< zVjiT)-3b1D7ciPtg^rNJ+D!<9l8yk~cV)I9)O^E&Rh>kII` zpMub4=4%d!gzJRepk(^m7_Ihtz%!*oB$hxk%Tvt zfHJ~@r=Wf(_yQl$`7aEhQ1$2n=e4p4KV1k#+~d9i*9c<=)p$Dk3nwB{eS{4EXO zp+?B&C}=rS;s9z;l~}=YC|aq>3NAIl&gKYs(Ix{fjlgC9eH}3SwGL4_eIPo)&iukq zVvo4ugyVndmw*={$H3lz2}7!EGtkM2u&Yow!0ivF-C%W~*h0_dJ;k6fs(Avc#W?<# ziexdon0Xpf@+wuoJ*5 z?7+hi9|HcDD!j=54JsoQz#%Ci04^h6dl6;eWrzpRi5nZ@U7qKtqb0-Jl^r&>O-s-Wmay z&49CV;H&~TtK{E*FgV^?0~PCT&gcLgaeoKo^yU;W8?*uac&iLl1>&}PXm~I{E?GF< zssK}Q-~w#SjO%zS$nPLmbwfN|0onhN&)*sYDwIJNpM!kg4GshF0FP`5KO#h4nt_V( z1K{=0pqe-kc221!SVM^;T%#=b7TOX6h(I^EYEXuA__sMQH$QM_IRG*o6eyq|d)WvY zvj!Uk8rT9GP+9=d1G$%(qvb$}-|+(~?4T1%S`UB@T7^5s3~_8-9jIH;+gz>xa ztswurFkk|A7Qv?=fkMlH5*=g#ftCZM($JuTTrSaa zpoHsqD=0QWUO-a|k^)69NUC`+$RP}+M&0hv17x9>v4GFt1{r`X!P5MI5i9}H4$I|; zomrrp4PUc@kBfkv33mdtMjbRTnvU!~&{Zuir~)D-#;5|KB}%9QVkLs80>a>Kb#LC<0;1KU@1?8LOz2KBsqTCHm zl8_?Cx>N+h1uaHw1!cLHpq&QIdqFxFDp5~xodYg;jx%AFJV%U>N}lb~pc7m{?gVer z1kE;PDZYr=4Ry;4P|kwn1qT+;d74>_0WX>)!5-?K3X<(~g4~A=V!xOt1x+L%Ublk} z+@amAAQAp;0bI?e7&`)xa$56VPy%P*Z;57NV0ba*8xuok>ll)&H%a zaQVL#R1!fGX6QZ8(OC+etsg+Gn7ttKKYvRPD8GUWncjl`ujL>mh2^nY!EQ)7@dZi64Ue{klkkI-q04WZ(k)+Z?#S6%Kz3J6I6p zhtAd>a6SdGLEeln^@O;*`2Zt?FA3u_f%p}roXub@%&!$-5>SOu38vTV5EYEwV1*!E z#r&;b!4)6KGN{R^rJx>2Z!?PlxC#TwywHn+1!xI4$heW@gy3=!5QCxSWI`iG3Q6s= zNSHY~C~6a-QK5pQb{9-7dQ^ZS0Y!Hvf9p9=X#$E&9V8PfU?%Xlg2w)igCh-8AHJLq zF2F!u1BF6iDXMFVp)NN^GD`<$R*5CVZji>ZQfmkY>gBXjZE*0|BWe5`0rhez|M6Ck z)4>jqLvcV3nmPGUb6k|HE1kps7U2 z1w7s0Yk0toN?x=nen?%ukQuWs|DlCcm%kPU)#aeucfj>7i1Ff;^xyyBqWu3>5Wm-T zMZk;MpGCnVj(b71Dg%GZT5vBGa)JgZ--G7iy20%WNY!OlDvPKZOH^RT1bJA3)j$^R zfNSU%YLH&(Yc_~>$OSSGkAa&PJOM8_kAa&O;0gqEy-dK1|8GDuIReKI@qll208OTV z>-T`57Z0X@6~lTSpuPnt;Jf#N>VHt%hv7AA^D)M5`_})Z-#fR0E{TBI#?yMBL<7zN z_Y18jflccT_}|?MHtIrWD`+d_YaYn06%ZbToqfQkH-HD+glvAn$arBt;<&Nz$j6O6 z*Sy~Oiweh$fv;77TirbsbQc5YY=|s|pcl!Z;DmYH6?9%F!*SO+pvEKE_s79!$0LH| zc&iVzsDHU0G{Nl-NnR8F{r}(jA^U<4x#m!zWsqU}xucLezpu{%sCQ;L4#y2xbHiI01r;g^56RSgtD@bubR{o2xYr)F8!7`nUph0+u{sO3eu%BLvg7!mzncx5^ae+7wHV`OT zYJB`a0(8WczhyqSh5|VQe3Y_C>w!{XxQ1>A0b2(~28OztZgKQ=3yBB1))E|C z-~tSEttEnocCRGpM#-rlM>RiS1f8^pa;YR*Btsmv6{I@g#ilFZu_{P^5|jtPg$PIv zngq7K0GA}_DP!6}aFi2D8Mjx1m0_lgFsOd8kKlfWEUBFU=OZsxT9CyE*`+xF<}yie z)O5N|K=$CFZr25!P9kVR6FQw(y1^OQ8eBZ_&p80<>!PM>aB_wi{=akrxL6PS2rkyU zdqHxYjsnQWg68mB4}elJsDL2N+~}_;=1Mg01toOQS^D4>0*C|87SMqba7ZDta;rP2 z?Nd8Jj=$9f#DW-5;tL5oxaLwDL?ZQvl-00lp+=mWDK3Ee)u3DI5yJrBy$}2?t3eHq z+6i){aZneRc%xfrg|P76L~!h5S_qr80v&W_d8iILdd&(RS8jg5_}a8PbOL-)b+5=# zP{KsG1+)bObVjKIWC;prWWw?S|NH|jAVKiKr99xdkk_nW3dwqqFFn@O5 z%L}FKp!FXNuUSE7CNQAHaHoe13LjE#d7+Czs&ti7Lv)F52hhMvw*yP-fl`ztdEvMN z=vr3>NZ`R^wNwMm1ew+YC30wD;5mikt*~J~G$TL*K;T{(Xz3AB{RB;|=uVVqJy0s! zyccxdIzv6G6T2NiwkM<5-s@q2$`4TJ{E&UX2U0vhszPRPB?1mA{;8mB*8GMgFsL_l zMi8X;7y!>=FRY6}r6R}(SUuXy!_@6MqdRm?r=vz^pbpe!r9~*Vf?ZY`hbo5VvhDy0 z%oGDTUk^OH%D?^s4wr)tJM9cG=nkFH`62rRtbRYy?O?!oq0<#42y-msg>DCv)&nIW zs4j6Z0iR<4KCr+>vQ(fubOvN2BUt}ywQkortp`dux?QJqy3Tnm-VM4TgXMqelz=RY z7u?q1MLM0Xb1;gl3-Fi*6_Y`bPz(SUQ{1m0#fd%SW)j8^oyVHNr5$7IfBsg_@1U)C z;6Qa<&>6Y}Y(Ia?N>CFOK5&MVpuo-(?RK33t|>r+9iEn8SG`t67Bqnfc8AUZHL8NL zEME9oft7W-&Vjb8z+U6X;s|(A@f%zefNleUB(}P6$S@4tj;9u2&2Zy7nCy?_*=uk1A{Z5jkn{ibD%76EAJ%} zBLiw)?{<)AJy3_77D3S~(|Vwk=Xfi~6mX%T-nH_~CBbb&pB`{DFoFZ4`52=$ zxP4#C3k$TCm*C+CP*C-XFm$`lusl>F*zG!_^*|jLB84mF0WT6Em(#Q!D0P8*>NBWP1*d9muwKY)Hx~U20WTC``uSV-U?dS}JVFB* z+u(2{D`tmsxeQW=au%yN!;2NXe^ELQpr$vXEz)Zv2w931@FJB9v_?pv)13p^wTHUh zIXazqkcBREJ8*zw_#OwSNELYTkN5BY7k&Bv(Cl&GL29z~+6aO|jUnL0vK(+TkQjTQ zVF22&k5)diSRUeU0bN*#<}eXR?SLv;!O^)F)R90HMHqgfvzG;}i*=#fg9S->uMHEV z3-W&}$e{mQLFxlv{Hcd|1)je7dv=26vZ2X{vw1IQw1J_7^~J{TObp;e#ow|Q+}!}p zakU;O^#Yeli1FYhLg0i6=_`P`N$5QXSYN)gwE^6x01bLW`xM}GCk!gT-hftbzgW2z z+=qB=0v2Kc#dN@n7sjZCpT!F%Q?Ll^%(@s3a6$mP3sfTSUJvmlc&6{ABRGN2fL-7< z0o=c{Yz5uLRmXSy0GK}&!~+e&f{G{x{uW-49`LpC5QY4{VD+8g`9H|mK3#k3;5mfm zy`XtVh7$SisUQYqVxjpBOAzc*kK2>L7y3ZlX9;$Gi7tev4d!(o?4Asowd@A-7%z05 z0%->YS%E90%MbP@q(uq2TEwFh9Ez|w1T}t@L4gCR0KrlAZ8bQ`pm&#nhw?#VIxj(u zVbHEeL_(<+AU~mi1D^gt4hg)@Lx`{j1(vf5B(T7a0tFT*<#B*+4F%n)_Tq*h*q`7s z`Za2k5ZpK`kp%YwK-17KQaQnDA%Xmw8=fm`PBiZYDPZ7l0o_5=4UUA))&-yp)Vc&( zSwlo24QvZ4jotn>@38YFn6fK+@S)xJsh<&0BYDspt(%|l&W>Xqcor! z3?ZRz2)aKJ#08Hwas>R}3JUobhu=fT1y+EELSSueEbAd**Cc|p1!TFrSP4C5wiTok z+(ZCH_W!LQ?u#5`W6_+)g5+&T)dkTM@FE!!aGmZJs9K=a322xl1BZ-A30kbf^@w7$ zydX_14jZu&DIBH=23p>Xoa;S`Fq;`{QnQl)mUc*VN-x^kO?}-92jHE zfl@_qc>$Wwd|~kcTwcIbz^1n$eAooI4k*Sip;QkY+?D*v!|8NXj{&UE>$s$V!g4 z20$%`6lD26+&+NTLWDOv z)Bk}BrWftZfB(M_PepHb27nrFNPTH&CIfY32Suatcqybgh1$*r`3{mN&G=icV)WY_ zpo?kEv&-V0tfR?6176~yS=S^>(8j1#~Hfku*Q z4ndSK@OLzW8d9ww1=_73#mxs8A-6q3u5tuj0`La32!=7>Mbay9e(7vo18M<4*Vn@r zAR*t406r#q=J)@d2fL?26hl_ZPp~}5?{~2I1*0<9F3=L%<6zU|z%4b7|6uq2-wJ9& zykL3>%H^P)xdH#Tf=qeg^9fyqdoiS#17921yceWOj=vSOXbfB<|KAF_u`)~UMd&AR z>hA=vqU#2e{Ge5XkKTh<4Z;?)LI*C9y#g*Bz@{*~=wAr2?HIT$1TDyWA^s2Sr0}r+ zTS1o_2E34}1t-+kdSEpm2feUb2GIt#7Hl3!>Hn=@0}^I~)k7i`tquguN|j(6^RtEY ziNJ$*NOdmbDX{6F7={*C|F<%LmJfmhH0XuABgnA|;A8-rHmsQdw)UkV3-)453{zYN zRBZjjY`w97GED1J3<*#<(jB0J$Rf}n2B#3{{Z*D1_}f-v)d?=9Evuo)ZUZRUwQhly zxTskQG&WQsgf8~l9mC>X>EwZCkw>ph zE2s^QB;3ox)EiF6xl~6NgfBp&=m$zd5dyG4M;czW2K&9v07KC($f*4;(5O8mfDS%j z);!dCp%WbR$H9ZgAkV(M4I00LoH@Y&j;TOcZmhs;&T@bDqu4oS@deOXshHkC+$_b+>}eXKH@K0ozRl+Kd(Oe=A7*1>X#Cjym4D z1DaA^{savjOa*bf!F~V@^R}RSoacBeXp{o%doBnY90aZnNQ0W4t)MXsbgk_B!Ma%Y zW6^LBdfW-pF+4osfk6SF3%LJp1-a>eX~X}mpkR2BmI%t92B3Rb!6$iuc2Xgaoq&$H zZUHL?d-Sk3NV!6{YXc+LuiYq4{eFWH9K{%pMb3KGV2yRW&3i#Pfq}pODro8$9L0=i zq3>Y{7Uu8a1SvtZC=Y|qAca(TCFS7q7DX`dx3YjZpc`qSL!ApCcYMR< zrm$@00@)DsLh(1qF#^XAftQj9K?J*}LXse2nRN|p5do-i3Yysj2PUX70lI+K4B|@A zJ~WgIc)`UvXrXHs!wVs(nnTd`F~{)(5&WP<&tOHMY!wzB6bNyB7BeV$1-zIo1ah3g zap)zU&=yarG)w^G+FtOg@PHR@JHc-LzZKMWfeJ!u5lG|v#m2Kpt#)ukzkH9`t`+EP z&B4gh4icTM1)y_a_JZUX_**uEM~y*34E(K_%`8w6017A@xzZ%mbOVwBN2YQqxK@D0 z4`Qwqxqv68Xn)PS15`zVmhXVv)7e_`AGA^lsi03}f!qK+gyT34*R_^_U58R_ zbO&*S2L%1!3Nrac8e|akr8X$p?FCu+zf>L7Fwl50s5cK*Z#fwpJ1;>81fePO0F8%% zH|2oS6sTx^9fhXG1v)`~3RHkz=(gwvM-ph520U@zE5ZmZra-ql2L-(NJOi3-IKl&7 z?41O*yBTaej$)yv?{#wXUQhrsU~RFup*pAn)ZIXyrGt!(pZo$!uL9juL4NKIVhR7h z6%;f9K`+)+f!zRcH!NPHz)2sZ7MfmPWOjg+y$)-JhAE~J)^>;zV~7%l5{_aqs>-wMjvL69|SC^;?rG$^MTG(*P2`CC-Li3FsHfxiWG zR7E$qg9;4>{uWT#b-Z;Cw7P>zZgT*g4gk(8JE28KEBJzX*vfYB>=iF)-fQpF!TR|FM+<@%7hAh|utuWU?jZ_Do|64(h0M%_wFOuJZlTatvU6A$W z7a;PG@+6BPi|K_OvZ5D7$3aWXK{sN*nE#N80j3({aflP37gFw}Rwe?4Ju(365uoW5L3${os`LV#_g*w?H?IcZ07a?{<(0fauH; z%3^w9^%ktVdn!mpr<2T!Y_NLp734D>KphX}t%YoG?*?B14)J&MUeMZAh7x&@dw%}k z3SJDVe;aJ#@dJ0@D>R$;rht+MXxXL>_(BBGfJ5_M&{h(LQcjpG>x=ALU<4}pbIErRtZDQhFE3I-*OyuJULRz1r1Dq!y7cY8SujB3AEq<$5Idr|F$4S z{%w~)i8tuQvnk-VG6P!xWH%2fd;-0=>Egj1E8!AUQBWX#zG&xLGBcEPX${L#L^w4VtIkz{ZMCX z0N9)hP~A|U@wb8wXaV)>82)bs*_0*s;>`naPz{E>hKRrHmtaRBDn=W*k~{lZ zfQrC%@0J(p%#ouIzWVV3qV)ut2?fPuz>C)j;5dVn(}-Req;p<}5P){hk;fdmTS37I zIyU)2>w%IW47K|p{mp%#{w9Vb4ue3w_+yVENW6SQasB~c9hs5XOK z47It`9z!jvT@bbZv*fZE1E5*c0X9br$^+=yc_70YV4re9*bwi65Ww0f()5hK+_E72n?#XK@kJ?HaIXpzB3I#(MgWsGdI-Hnc%jQe`AuMpg3)-w`18F!w z7r#seEq&<}fG(Dp3R>>cDbNjGYyn+5(hAxx-U(jL@lp%i5eJP#Gw`>7ZhMCfj)Q{h zKxbi<@df)|@_p^FrCLo;>)$bh{dRdS#;2ON-L z@Bdpt;xCe0z(wTiIE-|PJOtm3Iz0ihH;dr~Qy0Vrq`~;EXJBW9hXp{*?@a}p4;icg z9e9G)VQ~O;of$AzkvTX(kCp0dO~D+?umLrA-++4NAjucoZ-Olax$6H`ut*uyWvv-t zzk|f&O3)VkIXFNxfRwz5X$Cvmw8E$+cgF0k!fO2-du0WV={Jy0SBPKU=2 z1aO&f1Y|M2kc4ES7jn=4{D-9T?%F4*#rVvvz`eLdOvchQR$Ru!>gDiU`oa&hb{z>qs!nkI+#MsBQrRm6ABhbPdu*tAd z15lv=5_r*^01oHY10|-2)WyKS2$~Cq8UfJ*S`rZenLB(TZVd7}XeXK^s5j356&AY; z&Z5u=m>!s{j&nDy67vaUlty9!mm{{s;;LXpPEuON;@R>1gg2pkbBQth+$@sQC>`SYWT~jDReLAkbd5DKFkSf`(KS z@Rym zJFE{>Iq|PQ1e*58kxVaWp6mS78Gt7qAVIB#$8`>%pyq^nwobL%cLqMi5{xH0U1uOC z?YbS{q|yv7@ff?ol(nk}e-AroDhsr?5>#To;5`FgfC1g@0^OJ~qZ!vG2T;)S`+_SV z(7uPz8PH|D43>xLxVvH8PJwRM8J*xkk#2BBWC>>T`+_NGjSF7WNmPYGt(~~w#$fYa zP|XNl+Y4eqsz^|U0vS6Ec=10CWo<7=5n^pGh=*9)3*sTK?VTbCu8)p`y$Q-4unh?w zo#0yiIJjXB%01x58lpCO?FXs0Ey2-LYXMt43`$?n<4j7FoA-ii`%)fAWJ1<;!q}j- zcA!OYU;|*$4UVUpB@m4a{2i0Py%3O6ZE(v0ybK1^YV8I$fsvQNL?4F^u7C!`F|q=3 z!xcQJ0$m0JQ4AhsU_n|219CTH84O4Pd>IT#7&_Sf`zW~G25RF$2Ekvro<|p9X@Io+ zT0yPq=DlE}_*+3Y^@1B`kXCw@+zY?+;DHe21wOc!!SEb!1uY(dH9kRXQ2qvwx`IL` zi{V9G9mHPHQR|SkHZRz2gB=H1coGh2hX=f1i2~PQ&{Z)Y_q|YQhUf)1&%lO)91k_c zs{*VZkqll=22C}7!cy^p?uhJc1)b&6iCx+Phqwa=boBvtZJ_%N8k+ZlCgvGH$5=No z@VER0broQU`Ws z7Q+kH8nC(G<}Ik;1&t^D|NkE}jtq*h|D_F}h82hlN*LiU(i%X<8X$sS0yX%LF)(5T z_TA$L7{Ciq!6)Q^n4JRfIs-Ib0NTX|DP+L4M;v$y3n&B`uq;FfhHR?>56?ci3l33m zNe9~h4%+wu+RhFhM1A484mA5G0O?~O<$!sh^^MpQAHF1B0_wqH*XF>}30_JAn+cU} z-V0h-!T>tjivv3M`eJ_xDCj_U{E-qE!Jw`$=)M}(7pts5t8_u-HK^Qw9f7a1<^WAM z;Z*=imA&8&U%(5iOt917kpi;A+Et`xE|!?<2J3+&PRIlrxQGWO5Af`i5IDsOyfB1r zr$7Fhbw9|xm=n8?H-VcEki)6KwK?cGDVQOkEf}Q&FMc+H4`6!D0n-m|(FeS^+6Kvq z#~>X^@K6Fzz>5q^urR0?EaiceosjdX!vAlDoNx7iE65hm$OgD^;;|N#NDN-=xc=uq z!naT+XcG~*(+eBY0db&RGsutz$fB)CmCUsL;1mf8T<9RigA?c?^DDu5t`lWg1JqN2 zl-d8cf(H~P6oKP};E)bVRSU8=i{XWS1;hr(kPgVvFScI+I|DqV12%tGFxY&gd;z|3 z5>I1S0W`?73Dj@IrwATApydSkQXsepg4WIP`@pUPIUl;NW94ylkqoG(zzbmT84M}| z1O9IXt)Y0~RS5PaddlYS5e9X}!3{@fTM;~h0U69gy%uuQ4(tOhpl$6hmdb$!TBi0x z2Uwy__#Ba5f@PH1jz=V0uZ#b4phJ$2Orx57HpJAv$CrIY+wfD2}q#{&TF8{6pQP?xe#3Frig<&U!cAD zsokL>@WTr_!H3W^gOAW-D3OJn_y*~;T9@)cxSe26zE(!o2X0sefGqh5y0*fZluntHy=-?vAB6aBgE!ZR<8@ODb?Q@ZgjL4e;QSgp4|9;0~>B@Tdd(eoz+`-ZVgo64;q3peR8a`w0h~X7yPg zRQM?1Gal6R(ZZ(y%cuu#-#|t^h>DT?<=_};2Ip=@=;$w~y$&Ac1u;OyKBzYC26qUN zg%P8_AbDuwhmQWjL@-8wAyGXEOH|9&71s4+tF1VNgbCHV)kid&pFK~$BC?-Hkpdke?A8H|{^Cdzhd`&9IN>Y~pjjF=`uiV}CcvY=I1EIL z{^C&pDb3MGe<2BA3zh^Rdm9u8(7Y~i1b1FXbMG2hA;g0-h#;fCxZK)Hjlu!{=ggej(O+CX1s7x`wYbBn8#MZhQ#Wy=zqqu+M}KiCfRw}3 zE(bx?4=ianECOdvXmQsKF7>QkCD2EI`L_+8(O+7h!${odFJmCtqrcOb!L3ZJqradY z2FB(VH z(O-~8_~3o`Tt2V}7N|5lKC_~t2gUU!^@SZfry0&Ps>G8}89xP|SnJ(t2Jv zW`h-X_kzTT8T}20E}6tJTnQd}$zpiHo(47-+-U_3Fa$s{3uw3(6s1U`zo3K>{vsm_ zl%61?zo6iI4Iljl@fa_FM}NUgL||hd{e>1Hh|yn=0J!#mjQ)Z`5ZmZ)Xe!jjJOMAB zL57Inqrae4E{M@z?-`(hJ^1J^$b3*i_;P?oe-Flif)4xWFUW0-kOgm$p>U7@I50q? zzlhum8uA56Vd>sN8<7ThS|gBcP`%(0r+^pkkl{b{+Ph{hd^7@dkTcR~L`yGtV+eFK z0<=vEvVR3U@(R8vVB1EB7Y~7Zb3!|5Lup9U z3Xs8I*c}j{5jJoQ1WLV7e}RVNc|fC06CsQ5I&qIrJI?_(a3FWSbo;D zXG6!tz@B$4fK+G4x?4fxXW&rb33zcs2`mgQm_h4*AO-sWtsobL!*(%&M)@GeKEa2j zH%QwL-m#@fy*0_7o`^vWfepz6I7`PR7EgE1;iHEf!WBrygI4vu*u4>5q$&xV(XkDZgUp8xl4nOld_ZX3BT9<|G!B);@PaE5VgqE5 z9AxN=NqfQ0Kn#*kwE>%t$bv5+gXFk#A<`f@9!2orfee!4RtYYtA*J#QtL0$Vft(K= zByZV(F5(RJ6m*arx53DR{y6xq`di!&x<;C&@g#k1$dae z+u*n>XxkXWan}=|BKf#0=*Bn({%vj?EeH5pSUDINUKH#FC2}6n>208ewY4G){H@HO z^O{^az?Y@)w|oUHGyw5H%Sa*JW0z79&{bp(AQ9+MS*}-JvmbW_t;b~mNd*{yE-b## z>3XBv^-8Dfh1YV>=}XrOu*L&Nx9bIKSDAXgX4eahVD^ogTcGJ;knj!umRgv-2FMe` z{g6ABJ6#`utO2_K98aYWUff@Yh@{d7FBZl#fzHndUyuGk4zgbwtOs(4cR-fhix2C- z?aS^^j!q{BkQ`{EEO@`1Pzfquq{IM4UbI93g)dejfWk*RwFx8_;DGzACQ$G?fCv2x zw}YL8-cIK{?z#osvSmN+x&_p%1)1moTSvPh7UI?8U{Q!c`n$lP@xOFS`2W%;0WXX# z!8z=;Cb(dE@FEP7?-70nt-9p^E3FF$D+L<{+Vw63WHu87Gi}wtJ%( z1M1%W51^`)Ig8;%Lo_s<96x}(YyUu}>lRQ5IIw^Ya)7S*0p+SJh8Mn2EeD~S_ysyc zH-ObzbO*2?ZRigR|6jT#@PFxsAlO#^3zxt(>q}*1FY&j4#-qUoAS|<)&{=y1k>bJo zjrd#oK@$b=pm6JUV`)85Qr7Lpf;fphquUK~FxGKXaP5y}Z#_8Eu)tUfd3dOVDld!mq1Qv!92wUHUR-r16q~ndIs!X z&_RP@U>3MC$zpi1JrW#|udQIB&_h2z-v@_7cPIzaQG#3#!Gf?O{8F|+lkyqOU!B*x z%UD3Fy})D;=**MqshxDi$;38T0XQs{yv@cfb7Xae4|o@MbO?E#7#4{QdzvD5X=YafvD6$Y@FzH1Ct zsCm5e7e)}H2A}JRUK^(7H#}i49xMeHg`KWQ#_f(2(r1UNW5552a5i9-W) z(LJzrpdbo@pUt=v;saQK3PT-x2%I)m4!&Rp<)<rrvwNxKuj05NzSXF5CD}+@2f;x|gD)-rIM)XUF!S`d^yfFIz{eR59D35TYT=?1d{dyj{6!nfX9BWZUhG{5whp9GJK#kDOmPR2V%Qb# zpfh%Yz}f;{v_Z55{4YI|#gL`_q71?Z*SX0v!A5qvUV&MMX@dI;7l@AIhjiwdaC8fS z%nizNd7%pth8rvk;e!q4f*E`RpTVyo$M>Qd?E2ygL>O-H5eOe_@J7gK7oDzmUZl?F zXE@%x0D4VycQYs;I-3`CF)(z4$x09nvt_eF4+AtSgQ^zy7at(UfIA!DGn#{fz|nweunffD&g00ou|ovIp|(juY=c-H{DK?81yyw*UuV9! z0m;b-U$4@G2T(7}H85YF096e9t*!t5|9@c(I=15t&;Qa3FTOH>3s}?@R0WeU`i0=D z;4^-LO7e&-HPGGJkZa_#++O%~Kx}pW(p>w6p;Ynsfh{JW6Jfyh3uylb59oIC7jpkW zwWk93PHmK1=E2oO%nNR?;lDH07`jVA^%t})TOyBHKZAEG^T0N%ftqHWu6w#&1!jJ) z-P7s11jY(o&|M2^HbYG+b?bKJfLyi|Fg?~GHTJsN! zl6MH#gWIDe4iFjZ5_A4-?o5as_$(7Z+lXEF)XAfZLz|Y}u6r~uFuE=Pr96iJr4lcC zc%h9OiQ@-yV7D4WZZMa4Q4bku=ya7ptlbisfN%_!_NL_p{(jJEL8t>uwYy!H9DKk$ z^ZUO}(6u|Q(?AVr_yRJX3Ei$T;O*J12TJRjYZow-Rv@f`_~uw?D#SAfEL}xPoFE39 zm5Tl^T@ntuV%*||1#}zy@z*Nd?x2$Tf9aBd7mU+DNkssX(nZ2w6qG`8&~ea!SgAz# z3l&eW*SlRMUM6ueFhC5p=5J{PAIt|H&SX$!fCM;ix9bAN50ua+P9dmmzprRG`@xe}D~WIA1MV5V1l2GAjvJLEwbRRsSD0+8O3>m5u( zkle$+-t`W6MI-2{<0{x)X(Gp6SAa&kUMhiVs@fZ%8-ZQ#XuGaxe!=*fx!ZL`r|W}e zkg!F!>k9C2HXbj7dSD+l4|bjaZ;k_(7_SuxIci0x>l0AQ*yh00asZONAggUa){8)L z#sg3(u(bdj_?@uh78yVVV5mU1>l4tviv@)3`J{=Z1BnzumKXT_4}ohbh5w~8f&WXF z{4ZS)5dOmM7pPyZ(CoT`vDV(4@|f}+Ls#PI_n zhe1_!rz>dO51?!jeALxTdOWyui!A5wJiw}MV&14XKhT!{jR1_vg1 z+=piZq|F6s3t1kl)8XId&V1knGx#d^3*D|V;Pw$u(ErjC0sl({!e02V2Q@?#I$d|X z=7N}Ypwo3nbL|cW{+2}0&`;L_jijD`{RyNt0l1zC z40tiSA6(o)^3sm*7hL&}oCKQH4}WoM8CbT{6?{ZUDJboON=;DNxgZSGa}tW>4jbqgrr z@ozg|>3X6>6qH`KfEtY!FOI?0!*bWb9|Fw}7+XM>dAsh>{Gjc+rqgu|a`eGMR-)5& z11R-E3L;C_6Z|c*pgI&(LxE1sfaPpxRa##RR}7OuPZqW2-L4xTfdk8K8(t*9hFLa% zoV@|!Y<`%tH@pPh4hF7+KvFN(KnE6GH@pOG`vX}C&b~JME#Ns%SiNjpQUaGVEXjbg zjY?wRY?G1zIJ>mO16JNCtft&2GuBMnSp0K zAZfsYzjYx414HXKwD1l9H_lzLg!i+JNa1~RmKZ~Kr~oslO$RHCu{A+1@b~7RG(oT^ z0u7IVLrUa-slfkIju-2gLFIwM%Xy$;#}#_MzICZ6$Rpbvm?4*&p{=a&rb|SJ131Xg=V7slbb{Rgi-3c`;Ea<@S zU+}UJoH;LayI!z#6{)f5b`_cVz4k)q!EV#|GJ}?X2K_IU2nc_%b_>YE3SgZg40W2|<`byZufzsQe~|W37DE8Y znyi2qqRKGkpac%{3ZkP~%G&M90i7KK7e5aeN^L-n6!>2%68<6z;+*4$z>X1uItDbP z_rH`QDEx&y%r!TV99Cy8eRsbPJ8!Sqd z5a|<3sQ_}RHeMCop%MolF@xL8ovv59T}2=zn@x!ioNWu56NZW#mYBfBjY>4&Y?Bfh zIJ*>7LPFJ7^S6Q)k-+5)ODYgUgB<@$MFL*j@_;6sH_f$g7{Ge1UEh>&bi2OkbQO7> z3DOJiRfs@a383wo;L-}(K@51|G#?bu0n@zYEV%L>WbW8yfE{7?G;d$2ALcBfk065Xouc_2IZG-*DKntA1qzJ z@cX%b>2&>q&(02XOdGPY9Zr3mSKxIqk!OPD&KY&W73!t#dVt5f{2aSk3FAsp5 zN#MY4IZ%paL<=;A^*SGX{p;%tkey(cmqb9BV0S%$G^Se*)JbCz2DPVuIMmBykwWTs z^1$Y{Ku+!sebISQ+n1+1^akTaSVRYa%8bDOrC&fri%8ImB2iF$Ds;NudHD-800c|X zhM=wzEIe-D4~YOl4Ox1L2pc8%>Kx07AhJzWX4+k2IgdA1P67awD38)Bro&XIg zxE@Hs_@LYM3IBT6D@b*EGpM;H@xS!W|I!ctOTU1|j9W*|AYy>sXwCQVh?}jm-`*s`4oKe7-$vGiz$ym1!GHy8bfz2q9C*;a@ZAo3>mm@ z1>W}92|kz_i9Z#zF0>o8nnI!ze73`J@D^TB0o+`x!B8RGc>#SCRRc7>%HMhxoKR#s zT@_v)VgQZExuFl1g4XVU7j9rmJn44hU1O&Y})BtJ1fUd534qhCC8oK(B z80i(kJQftWlVW+HMCj#mP@iWn$XW*e)>)uLh}BAeh?SkL4Uk|xVCmXW;sFUZvr-Aj zfi+>E1=$uaf}y9-AA7A1UVZ?&Qtki${{b%~>p_K!0AvKBA?!s*93=N2>vnChc9j8L zK+N*LR3z+wsltnCoZ!aI%Uk@QD~n!U<_C=&!Mq8HVRjVH{NV4s!Hi82$`C4Mh#()7 z3LQc{&|E9Q02zb?*M+dYy3C6R8;FZtCBP$u5?Kscx-T3ig9Slds2BcKVD@qFZhcU; ze+imEMnpO!`P+lq%V_QINMA!MMypA{%+8+x;xgcH=yn7JO4{>yjZ6XPJ+!~pEE*2*4p&|e~&KcVjR$t&z29M z41+!%L|~+sf4%Dg%R~HqYq05MnShxNkWZQd9Wv#5q}%lXnBrU#f*CX1k zpdJ3ulmcRQx`GxYG5#+-0g5(x=mafz841cFlK-V=UhL3=`WmE>5pv?Mwd;|ZY2B_8 zFMW7G^Q+s zALsAC2p#|j`xP_*4q{l8YC{Wj9(LG(HWtkX`THRU#DfZR$Vu*yT`rxj3tmX3fX2g@ zbb?Q^?*<)m3fkHNxuybg_%Gy?x=!%kG89`}S9F69bA$Bktod7yL8?B`crQbz>l(>nlJ*N8vBNP6ySF3XrA!uZ7{7Kuu4GVDnzk zqJ9ScmUK{$Z7PU^u*X$}zsDa_9MnAmw@Z*(dk4Ew_42Pj*y*|eNx@X`@vUG#!iK>Y z1iTQcKvaX^gM=Xg178saRu5|Kf+GuhOwXbTU`>z{1z%f3e1&A_-g1ciq2mXT$JW6{ zypV^kH3ORriLdU^HK5a?!BGURjrR?fb9QYy5fb33)D`KKy&Q|h7u)+0gxO78pPrOsZ)cw4Wtg5JsLo{7i3!L z3dn)vNCV_xO&^Vs4S&NCp2hIuw;n{ybqh!*_%Qe^h8Is^qB}r^7bC>D7m07cMbZD# z9ia7+;4~2M!g>pI@O)2m?H+~_6Yya9o)>cq!RA68?|v z8(X<~8mZhgz*=sCrXQirQGDel7R?9w`*T2Zhu|&`WIqqA+-!OAFb-61c65R-^8%Nf zpkte0l2AbU<1tdt|KWYI9 z5(24#OgbW0cc22Y2T^c=3rMJH>;+^Gq=39K30gpc_E3TfNT?=ICV`xk2t5svza;V;!c9`PujEhwM9qgWpq8D61wje2(3Oecw5=^kNtR>*Z$0Bf92JR<-FHD4P zCyIbJT)=mlfpY=K<C~l0um&LWau1-p`a0ClmZf@?8U!8a3+9ghPVe( zMu1C2kP=W7fCjr=d-z+O!KETt6kK$IOGPjjTzDL?bnStZiXgH7r9D{|FYNn}EWlSP zf&v7Z2tyH(3lCh_)oW;_A}CQp9E>Ox*XTp7grrgs3AvoF8@%}n;UQ3|h%f+LD#C0A zm5N{~u*YCEGic-s|I(fpeD+W~K?2RS6Tqb+hz&V^5Lznsybyr74I~FE z6+yWMWLjwt0of-G9#ndH8q#U7 z1`jKhazhHDms=sC@F-Q_Z<&uKB*WhVYB?hhD1g>~q=E$yGdvXOTtY7)z*7{g3SRf z?7=$EYV+d5`S1T54?l1K&$D*dO2G09uBlc?xo-h0_svROJAV-~E9wS{5>Sn%^1oC8 zv_dcJg%G47dfCVf>vC9^itul9gHCvILKlRCHtj*S2twBNb9B3^z=o$>1wd1XKfvkY zNFZq4g2;=+UPzG(nYb=h?nYJwvK@55T-Xax`yDjr$qXu9L$AQgTu}CRyp*#FWiS%EKH z*g;NJ=sec#dd1q6qeK{#vKhlbgU;69!3nVQST|A-Lu0S=2eYe)<)IQssEBG zrUH~!jtD?!__+ADg)xEeonwK_*vSNdcKcY&09*Rf8FYN`hnF@WJ#RQbE_(5(1tcW^ zcMtn9Tl5TG7E!tjA_$p2LGxEB zE;-FZpv!^4Tg4e(LZjqPb1m^v0$w7{_`mc4XnzhU4gy{rfMh1rfIj$uSsSz<0BqIN z7htPE(Z>MVKn3z%R^W?vh(@%TP4Jp*Bk3RiS&!JLF*Mim$kz*Zhw|(O9X8o{@$%!& zTb-dFKsggMD#OqXn&=T=Jk|V5zFuw@=%NqpP#*120hsdFoj1EfKPaB+4E@kt%cD@w zdEE62$fVaI-Jv|quM}YFz{Y+-n5Iyt0KPdJi)mj#rhNgq;0q{fLE``=Y~Mq_d=LEq zE&)0Imwx$Q`l0jii;q>1Lx*DjoPXk&;0YCIex(3W z0r4W56aBC{(d0$&DNy0;Yz?1TJ`P{#0-j`ptral?4WL4&f2cjr{PGEC>;N>@2%l`FMSd4;?NK96c}i(89WPys4F4muYI>G4`^Jo1Tu>Y&S?QJ zWS@fb9c&&DB+3XLvwISh74U)sw51)?`gro%w%hfFwd({At#Fi0Uoz>9lN@M%8@ zD)zwIK|4=CGx1M4UGKcsfi81Ex*#1~c!G-9JO4|c1O>eKF$q*if+k<#%cdZ6df>~l zYDGYI_`2SCIU8lp1Is|3wkr?Rr6!mzWdM8h4#=bOFqh(AG>tIs>0=C!!;K4kaRJh5 z>qgJj3dccNM!-T1w80p((gU>V9okp}mFmo(AmI34$^%*~67b^FL}(~{>301Bs=EY1 zZCg;$!SO;$5!c5DM}mOLVWVh4EBip`5Kuq|%p zY7F2ltj)C?0VQnBwH!gEXiM3TfCRx(!RS&4Kzn0BJ{EZ)Pzm-;=P^hN&al+G+l{63 zV0S1Fa?{81V39FM{1}=zXvr3MuK)W-aNPyEBJHXyBwHPOEetW!qLi!KjidEIDRXxj z3-VyM4m30 zplB8VZLdZ3FEr^^J_M&V@W4RnjThB7fBtVi0$Oeq@W1p%mgNf`K2Vzyv<5QZh1wS| z8?;OxG)*q>zm(@iK@HS=0r05<>^lNLK49Gu2y*`$4$#QWmH(jWbdc(R7s8-PjUx)6 zX4(;k5_Yh%*Q{VoAO|smV(bBUMH%R5BhV4};4BW!)C}O-;|zFqM&f_z6VRS6o);S6 z1-}X}K_kXsM{pfK5CT439<%^w2`HJOXbk&bDgfF<{o;Ke$n6T9$6NpNw}P@2Br*;8 zTMvW!HK0B1{Czt>Og|R1RAG6LzZZ0d60$I~5!CI*0&V7ilFBM+NK!cja~Z@vAeTYh zi0q{xn9D+8E_-bQZXKDybhDU(mT-Y|-vDKC?EVsm>2CdBn$lc*fT1)FYzhy^l+vK) z+A~b0KHaWoK+CW}Z7=rYt`|VN+CkDKT*nU}ELl+svJULT3y@HU2i~S$XyAbsxw@WU zZ2e!#)m(dmiN88)^pmj=}7dk-)BJAmI0dIHibiL3GT7P;0(u+Iuzx2Qh zJ#gL^=ypB8znx(QBUpu{>xE($&_p9>S>KUP*8|`!@khE{kMM7IV4Be#x~KDEcj%Fh z9wtzfL52DEU+8u{a@=JC3#hp4cD>N)Dgbvb_p1Xx0?w^drYwz^(@E;s*H!;cQT5gE;$jC06TSAgurK2h{Y!u)f#<9BMZ} z`@%t?c7sT(LG=p6YEX!Q?BNM`aXJzfp)WUsYnDCm&Dfn6Kxc=64)o!Hr0&uOkku-n zO^x7I-vj=(W#Ew51KO$%+Kk=|-t~N_+ZCJ|IvE%&5ApjQf+q>kI%>FK&2Lx&13;-m z0J}f=n{~l1Isk5aLW21TieK@k5LU3$Kq=%UXt`LoD~i`%FoM=Qxx!ro@!D#z9v*Ag z2mEc25iT5F>mtr;roXXAVI(*TU%;a91qt2)oeB<##@E8lxqBF!Yxgkn_dEal{~t05 z0*YL4?ri}r$_Md4UOm(8dgl8LMbMNy4`>#CS~x7;L6bH79bI6L!(t5)VaK{%d3po> zcf0O^WOdMamz2=(mnjJa}-0k`$)tD7}ZR(Q{&|Y+mwTo|<7#LpM*afO*PiTYcS)R^T zk-z`{ch?GZ?&Se7Ttzxt1^)j35378i7#`@{tMd2%f5`4Oqf$4>HnR)x1!c`Y7)uQi z{Y7v;s#Kxd9kfkWvfCZhg#xvcnuH+jq*jn&uT8o`IglIY%|8_C6uNssPT=3pnAZHm zuvDA8*z9 z3%Ow=?EhAfFaMWvWVyfi1=(H!YK>|Kyjc5=1r*?&tu`RvgO79Qyuf$>wE36G5-iB? z2d1DZz$Sy*OItx20(x6x{({z|8H2aA31IrFzJ`B0Sj`Mn(++im51jxtB)g}AT>JeN zC~AXxTNnHT8TbgiCRKocJD3luS-|QU55bK)RI3QFy>}`|%T7>(yz_YHwa-f-9tYKr zaK&IRzXv5waXqZ^IQsEbsdQYK^@CU3dhJjTcPk zAmfh*J9|N~1BrL*Qqkr&9D$&*jc@s&1}Nyh7Esi*CV*O<2TFCD-*6yzz`&;@2*H$^ zfa6^Q8t<<&yTRH(NmLEg`vqGJGW%g3)NF(XPH-P+@^g1zQ`MO-Pe*Dq&DsJ zR56C*tpkoxLzMT z<_3Vn5#-M97HGI|@VCEZW?(q@fT_DhLc#FIf5sbj|G{Ih4F9)+oojg+To{A03wVrT zE6Ay!oD}dv{R60&Rpdl82kMyzyy%CV*@?qRnh+Hk(xIslzj{P+KV zNJwpa2MsAu95n9*1rU~y0*5S8NO2-N>j&fzOk`(uPXz@J==>i@TM*(jJ~XEp;&+-f z8BTM3k(UCl6d)lMOTcL_7&{?OD+UdiAcfkr3y4qyjmp9O9`K^&Ei}YH$p>eMfh3XB z)^*4M6cA?}i-e3WA*FKU5Q8SJ`_SPKShiup?WPZJFx^xt0n5r9-QcADniqWFGbsIo zq8aKsuoNgQxV|t(cB2x0H)?~!4H9}-i#Sd2b-}1b+`)3BB5q597{d!`8zzR%)(CJZ z0wxP&z=bL(`D8J?Sil92%mC!dwij~FWmrHKYZlXsdI+z3DoA&ylT0(XWMkyt4k_y( z1s#9Seo&(mT*NV!8h@V)G9Kl0oc~)vEfh$QfQ$d1+d-u{v>l#>_@r&UB@U%6@iwU4>9glzqCtdGYyYkeb2IdTK z{aS~`Q!b@QfoUEG+M&$T?Rp1vIL8Cfq!x&&?J5AC?|tBa7FG~r+p!q?wgk!82eF`2 zi5|$;$#%OwXnvu9RAYcfwqKMzj#mv8d5cAu6-h3C)Vxy1l1l+*DJ3DyIr3knat^m!{i-dy`_7Q zOm2gi-0ixf^+1VpH)x|Dhovh=Ikq5Ph$So@79)kll^D>{^&QPW7|S`jT@N(>U@XIC z&SEU)%tSV)2V_p@fo|6wmWPUbx}mI6uI|ty-L88q4;5iEbr}{@osms71DWc22XvCL zSGVhdgAe3EgE&VnzTmvj>H4DEbq7>r4@Bfmx9baQ*Ehv#$6XJA`VHN#pq}?}SI|f= z19(H{p61*OjLo$d80t5G&ph7H9eSZtpc{06!yV8NBaeK&ezz+RQnWOKy4N4NUH2%v zegIj%1*CkBrRxX&X`pqTuerNJ_jJ30MR#=jenDitD0fiSL+*(+zY%z`>CgB7tS)k( zE*J-BTc+y|(6|j~2DwBS!{XPhJ3v#)ovwdg%YtSV*Smh%1!`b}8u0wN-L7BY6T;vr7nv82*MRcvWm(u_81Q&8`wkb#V7@Epu2|Ox=-n64 z=n;5=-Q*;sL;zK~pc)puxj!rLh3Yd%Rp$BxGy%l`J|pSLi~W|M;uw@U|CfRmQgHk) zeej|=23$Kp>eM30(e|JzebjCs+{QyE&}FsZn`9t6`btG0VF6zf0pUUxLx9)O+-R=7p@3GNtpS&3YFwCO z;3Wk}nJqmMl-WRg$3Y$AOlEMvfQCVk7Lq`=nbmW2gGcdStAq9um9l{r+dyaGyIny$ zp#GO$2?}`eG77v70A(i+xF24EvRB61^#*?*^)W28}@-1;`}u z9nkWPz!!{9pfPp_RQG{qimrfqV5$(KU&=6pj;<&LO+bN!ZP_8A0X`w2rCFhufdS+w zXORCvQx_M&RViqGQN&X)-XuN>ic@wEh$1Qj}uwSFsM@BHv`8)&Vi zD@QlP#O}}=&94}{r+^Q@WW2-(?GPV)zyt|`2$*dUJ3zKU?8RYQJCbeSCQ&KKF=xWT z>x4?c3RZOmz;o~l?K|?egzaSJ&*tZUz`g% zhLz*Ry#$co1Ug;MyaXM_25Vk)f(|Bvv@}3w!46$3(F7d4+|s-Ne1s$30OjukO)-F4TM!?}zs#tpA~L z1D>aR-)Tgrn5ERAIbpU@z$Jwkb$t{tp!jPWH`?d684>~C7`LBy&#gIM6cVO zr8}IZ`4yw$h1LTl5}*ZlrIOw5EZ=W*9s*GpK;mfg@vRmA{{M%K%YasXSROA`YOdvA z0Ieue!$lUw@v|cX{ zYzAjD)NN+XZ$KTSfB*l7{oe}G`r^$AaM{;-pwzkZ17tYRx|F{g90pKs3Fz34@NTgB zuot`G8iXK$U|kBG%00$@7fKs>tUm(f^jvts}44QR)&DIT8*xA|xiaXHF#2KLRedq3}AQ~bG zFAz#iVZvb5uO3Td0a{bU|ER$xGPu*tat$Be#_(hEkf#`gROa*UsyN) z;N)*Vtp*#2bb${y_yk%0mLs4|HtsB-I?44!^9x30*At*QY|yC;phQ-B z;>A51a5>xA+5mPb2SZ7DH<*puoCmFl$zpi%>L4s&0y7_gQmzyDi7?s)NWFW6O}+JG@E z0Aeh})U3c4cW*(e0B}M5G6FPExfhfd6!`l;sDk!Df;i1D7?FHn>3X8b98_sCf_5f= zvQ{|6(5&RJ7t#7qcY+H3=Di@2fxnf3nStTuMJ}+rdRtRK^9;SMpmA!@GzN(Ge=Eoy zC|P>q1ruz5w+0lFdqE@vf6HF*1l|eg;(_%L9%%8v3Gm+acx$jnA;I4b&eGc8;O}hp z0cG#0py23sJ<)mb@{7(x&2KnxI0d8_;*_8lmC)v9E654W5QmgF9Y4U6X3POPot39| z@)2;`dp7vyQ`CX1A1O#}@7KPdv3igbAcZ{0KnDI61<)KcI4nTT;VIxH4&BX5Iv5yW zjYH6!P-p8OkPpD6i8h$sd8oTJ1{64NID$ZHDp4Z##jMYeXmtgzsOE3+<^&zUeFYLv z(8zavk?9XkF`$&e5bz@06*Ali9#;VEl7F#%H#k5+@{or04XD<@7fWwIEw}@2&Rl^? zxV#WWF_Rf)=7VmSA3>%u1iXkwG8=qiHq?Z`7hX`KAxZKmD2Ic3f6&ydjHD0LAw()P zvI1Z5LG`+xfn+>TX9Kiu0Bkv^Q40#!3&ezG=^2QFUig24`t$;*+s@y@44Ur)n+NsD z#9fF`0{P?uL}OOqi-zkEtze(L2vY|YVr#(h2qLXpK?NFrOScjzU-10j3KD!Fc?wc0 zxE=wmnc{EBRRR@NN4gzYEWyU`w?>0RT0x4t3uK^K4{D{?i)p^#D1{Dtc0hRDQ$eab zon&6hgY>$ybhfsDodF_ec3v;@OoonYs^3svV9CD%N=T5N>Yf++ zmf$#s<|t6!2zbG>1ME0(k_08f15oP%U;GB^Re(m%B~YOW3umzEfEO3GBlKcssohZh zt{Wg0c25Nr)u0g|sP>5n?T}Jp1KjRU6ddOJ_QcGAK z;%~D8*EAsg@KO;Jlb~t`va$|d;SeeyA=9y-mLViMUT8xnyIhxmPLAepc?25t0N3-- zc+B03n#4+%Ky+pWzKFgAc6lf0mxou^JL;fiLF5^euqJg7*K?IsZ!+Kuvai z!2)+#SipwX1_o$XkH5tTbc#5vL9GhyK(t-~wcGZBNCy7C&EUKO;(%%$upFr30S|M5dEmBf zvjI5jI$J?EPJ(N(a>y0oNDcF5@EA6zxaxlk34}w(4Vf z?FQX8d;Gu?*qZn(CeZee|64)As12Imao~Eqv-JnKZADB$OSm`y*Qi@TCPH$_iv!Q0 z?qUGVaP9?>4E!yp;AJ~FE&^WsSr7Ld#0Zc=h!I(VFP@))8UniS7tM2FFu#H1U^SII z%x|FT>tzi1APC5S+7Cts2GnZN<%OU#I4eM%^4|hd7`5I257Z%!iiL(GNEkIFH^xFk z@(ws8QKL->;WJ2C2~q_2886IdpsR!-cmDq03b6syQ_XUHQR0N`xFne4o`CY?8}RjS z;jnvy!8)w77+(B*1r0CIwZhGNK_o*-E50 zIUb1NFACp5@;`V?5nNihLv%sLCCxy)iD7D8A!qb2Pu2FT6BpgWa(qroaVTXnFQiPlKp3R3eT3}PnI zDnQU^a{$EUFAPqCk_c#OEga&b7rRbCMR@*i1-bV{xh^>V!12M+4Iaq>1s5csI6!Bc zyy*J_j<}Zv;?Rf(CBYYq-hf3Rae&^>nBWHTh(IU!4(b=n_(9=ohVECg{HA7gb;;=wfDYEe28v4bvo)Fb#hZtqrmRd|c61kl9$3{oe|@`uc@F zMD6hdkRfT%KoMwvAh_Wh4p9TkBPS!l#&))<{Qv*I8%$b*YYR|X=J>xABn%DSM-RXw zpkRlBT>K*CFZkRGaOGI24G!2B;X2@Z2>*lK_<{q(1D$Tp0rL$szQE3uIgW@OaA*i4 z8K?j?kPT!6D7}Hg=EZi1DA*04u!M#}0?c^O=wblGhc7fCT~lI0;cx`ep>XFuS}4T* zL4-m!qyh3G5adjdqd{(b!35&r427y=XrXW!VhAzr<|f|VDlm7WM+GSDzxa9-;RtZt z`avA=vRV)}_BsLFjsnjT@wY4mRd&cD+Wf7PKtiB#4bbs3;0OXSUihlRYe9y97cW-8 zd6)yCSHO+{^~Jzx5u_c_p0a-e$$)6>DaI@Yw6@guFlbzY4s3zA160^Nd;!r9K7<97 zBj7`)XlVzeEi3l_R?uNLFZe+%$s-D#5M6sgVhp9_FAj5qvN-4n7qA5&1~esN6ovo) z|9>%G9qc45#TH0b^avvCK_kY=~M=nF&%2sY}3N04^nKAkq*wzs6lt zg+SCHi~%J=gfXTNX^82^4?yP5Ks6O3q+Ev-NYH*mz>Ce`I~2gT(obh#V0fX*1sV{S%I8m@Q&rI^}7(0Jj1RVU|RB0QjjinP@sAz#Y@T8E3ZE^+z>4%(M0 zpj-qh4?u2t5%vr$3JE3jy2Ql+yDpk6D1=|g--Z`nr7bU(d`FaA8zBvw7t_@s<#%br3vUn;Td@VU=s=o~)) znE(alDA2tFusQ~$23E(U27}$y>Dtll+5xRyKoe5`OFJMj`J(+6)LmE$r!NPoYb4{CWd7bN7)(t3cu170+Nj{F1}13r)Q#U>?qVZ;#d!gmRR zhtZL;1p5}W$P`>Ofz5$;^_JX+#3#X`DF!?qsnFSK0c-Gp(}NqdXak=O2?|JDMH5IH zsA#eQ6&odxlTAAzy1-{?gNh~%c2Lpe0J8wZfTkDpq6uW$3l_+w6_`bn3CNDB{qT_A z3Nq=1xe7SVL(UR~B;c13+@PWf69Y=o1aCx( zw}I0>yb;~W3W}ZtSoDAx(C|W!9+2~2q$+~7<7q^51b|g^wt|iz1-lc;Ow>js^cYY< zh?$sC4)W=X_Px+3hnIRcVIn;Lw}Q-mVWb3!S3Cuu=SOg8ztje0Qh31^`w%P&NjK;P zpSLy0BLa{!(Ox97fWpZGlnBGXOwdunFTBA_(21xo9KcM_nV~OC!A#KMm|*{dR6@fP z)&Joy#1uewKpN2?v!Tk+n~yFaYhQt{yHUW^3u$nU}Is2;Kuy_{~ub+iGzI! z5`dO;bFV^6I-dVqK`wqF{|QkD>nMN&_Jxolq!8W;a^s7`5K+wd0y*J@^&V(^@j#D& zJ@*k|;B9$`fd@fGfT95uHZO`mJW#>T^B;T$C^QsM1MB}*u<=jiz+NLJ6zY7zN{I=D z>5%n*;OGK}f+Uio)u4{%0XY-oXmEV*g^1z^g^Rn;LZJ_$oEUc>10SNHK#aTZUxvmW z)_TeZ$q`^*aY7vN(hNKy2W>iQfH|N66$So&Y0w-QsL?zJJj?8Q$ezw2QU8upI8DJs0(;8=Q211I$M{3O#+disjDo87pynIxegTAr3z@H zY%gxZ+T1I^gD>E5MbM7I7j|>OHiObHR2N7EG^qr>&;a`t)K&*ImHvU6Cy?=62w5Nl zUOC0S!wa&;*n@$A0oq=J7!mLy-vFF8p~Jk15FTQfml1S+SFHjAe+%e7g%^Pgpz`1Z z*paYt5x%=%kHLx)nDF;IP+?FBio5j)FQQ8t!0ER2KxsYp)(ogM0Ioykc!5>IEd)*a zheI+p#8)qRz-@Vj&ek*Ffj00dIt-vH9o#koIq3gZkQCfVPneM)IZ!?FKm3I$IL`@m zwq5{xmjk>IVBKt3e1L2X_`ek-39&UR@Wsp>px9S{Y2o?56%FXCasAZHLU{&c4f9NLh0!8Vcs4@4GEuu4R{Fl2#J8_0S{5WM&TZn-OTwr;_Q z7kI@Dl7bt#(F1BE$g$ATMbIJDATHF*ui(>S6*^mYKzt7xlm^=iPAk`8vU|X?kVt$v z6D<-!S|P?|1-!Vj4HWhYovjDJT6q3%1%)eAI_>{fkV*fyf+Sz~N`jq-*)BjG#eMA# zRt7NuU>rL0tyrXY(52<1T%vX*$kp=Jr5qVgNHT;#7&S^ z+>56WTfvDJ6bUcvB*CQ>xOZBk(%n6bx2c!uSUrjNF39or4 zAn)sk4?}+i^=81$;MM~rlBlE3$O~6%IT-j`K)VNzABX|1M-@1Jzz4j_9JHia0kUis zS`Y`p!Y-l`no2;48@jNqG#c!8a8h1&9h#rP@}Sj!T(Dvlv`!q}1_rO11gQb%0?^!a zzzgweu-UB#K+9`Ea*&l*U>4fqIZ;Tj|K)d(SD~w5p(|1$SBRIe?*!?7&AJn`0R|Km zr5uoDr>|K-US@#S_5!eCJn(<1LKwPlv%p8^Lu)R0_=1*zBYeE&8q~+2A_QEM;q)=6 zPyneyjGL=e!MyB@SbPn3tueX-L0bZ0krD=vj}zc?_+c&t$0%qk6J*>UfAm9E`;}T@ z#6B}PazJA?=;09svkep{ucJVL0IKj&>$NT5J^*xr5;=Pz%!T9})bc0W85|Ul-V!JX zN^s;I$*14|N7=V1D+Jm+g|crEyj{oUg>VIE^*i%RRR-`Ch@jJqI$aOIb|5|h9T^2W zg@}Lqf#w&6%|Dd*+keCNx#z%^mx4~~*yg|qS!vGI?Rucwfu;381v~g4oY$)IH$$iEjn2?JcU^DXjRl>j^uP29_-dRZFa9HIe3=8Wr`v%8 z)U5kodgKLY3at4E_&8XQ+hM{NL6yf50nk#NBUu(NG!KBS2e&4jmx1;p3cOUnFbmYA z#9~$}vRRfd?(RpJ^?fPCtSg|ob8z6n8~{pW;Ct>tSF|0;@_w=SAVS*#sJ6KVIQK-Zri0Nt(%T8Vb##i1)dpc|gT0$zX)YXFBHIP)BNu@oX19u|-l_+rIAsP943 zOGjRO?*yO02ab=;OCVu50aW6F!Vn%9pzXmR6OV)3QosT=H{~jlr7yu-i$Hh9KwRVw zk%U-kjB05UlBIS~OCfi-9^v2Sz+nSE+n5KGs2Cxpbh@4a-7k6soZ1h-6Wy5?#V}hz z4s!rqVjBQDYbXXH3<}vZS=KMMz}GtmfDC0uvVQ+!h@asDj7l&~_VvPZM5I z1oGdE$EpmlLw{YtcQCdbDB%ZfM}zCJsAXC9tA{dtHg3N)k6+st8f{I+8ZU+`c*oC2*u%)_R z(2h2^0$ver$&cCQdS)iZ&g+yTGKDqt^&|IyuN@I z^}jj{?(}!N3ZUYwrK<>k>re1eyx{%>cyCyztH^OzoBB_U)4?5%xQ+)zRJ?LU!m=x6f(lVF;!t8j^AO?JV z7HV*50H(rNkU|TXI831yOaNhG97v(igx3P-4Sw*EqYDg8IJ#LTbh^Gl)(Q4J_zH+x zo}?14=31V3{#H&<)e$Ozd>|KpD`>d}xMg&sJM;x~lNIQu7YQgEbooY|K4`Ro0hGYY zTEGds(^UYp15*IJQ}@M-#u+eC@D_Rr@Vf-3MG=fhG$6m)-!a!T@c*4195TIjE#p04F{P zYu6VgV#p4BFdgAQftPbR7#JFB-@IXDVBl|&1Fb=hYy12EMap+@Mg$GPFn}~mfDbz5 z0dH0pc%k|dRPZTux_;<(h3+3TEJc}DvvmDXV%=P;z*wRJ@=6Ks@dFIAKpXg8>Tn>o zG=kF3OKBtlP}INVLJ|N){mY;1poNeii}<%6uyo}?TS)f+TxQ+GQf3($A(dIG(x4MD z-W)%8AX0~;^8$F|GU&R96QH)_9Z0;tnDF?||JDPgn%$uwg}aQ<6oRV}&<%yK3sMBZ zO^iD)cAW$_#5-MYfOH;U*lYw!iD1baV6~mDUz%&bFz~m4Ry~5nzr2_W*|&|F*zO=F zwvg^n1RuJ+T^d7-5%r3A(3xo93mG_Gq_u+M8tgd%aC*E0YM;@d9l3^TKfpR1U3FKoTX47iy_8X>Iq5} z;4QQt&}EU5_8m{mqfyeI`9%P!Cf$wZ(lxsi5q zfHo$AGuxdPKMG*Z2WQbcCDP#34pzbOLI;w$yInb6R)Kd`2q13Zdh$Z)KRCLNA2`Db zO4O|fKt=frYgY--T^WeW>TiHEFZ2@G<{ymwttY_Y%M%AKhhq6#LHnU$J^-b4P+`@w z7+f494;?`+*bsr7ge>vG+Z5{b2cTo#K{13pT!f}r4n=W^E;!f}!1-AM*=o?W&fta( z$BO`P5GsILSG5lqO8LO)^~npJe_&sCyFPfC23imdDwz;lBUD$d6o~)5O-Atg8>;~!>95^vZy!dI19HJ%a zNM~zw? zGW`ESXhMI0=>u>QeE@cfBeGNAsY;XyRK_-d2C^8sLnYw*p+WwFh=N-7kaPmd%MveM zgRhqX#rR9mu>;2sTmf&qM$xPS6Ghj&4zBriI>N66uLP~Lf>)*5wcv89(-nS00qBf$ zP?Z|+!eAm)?!j@$jXw;Xt`eYhUlI*UU!}&F0fZLCkf0JXf<-ZCKRQa8aN~a|M9mZE zUR76c#^P@UwVA-l*BCAN^0z|TOt4hTQX+^*&&>R-lTnhynFZ)c0(+S%@gf=S0Bk8x z0On3FLzrK{0igj72qlzO1tiIW6A2&OP_SxWP)-76O9e()IgDuGfGQcJayY~VmOjHE zO^gSS?1qOH_0`D@Jm1=<n`F3bzflt*0o67NG7fi535~K^#W(Ri~4;%z5?{ozX zLcmHuXl2Cl;^{W9@4z(+D2JoAqwe0v(vAYV71a2CG35!U5%vY#woL$yMzc)7IOFUC zxbgE{0JFnps)^M2(GUVPen59SK+FM`=wHAs6RB1bO{D1v+EThcJJ8028bSFJTN# z#NBQzjG!C41F{%itk?l|z{?iU7_1vlr|Xq&Hv!O)cI}Pi)aRdat zm~01D(CK>M#ih7k|3M>~0W6)6v3&k*pmDmOfEON${Gc_e~COOcCr{=ByIyoML-xtWiUh~>{1_F*tLu{r7WEvUQ2^c z0RZivVF4>QdBFrZUi>vv=LeKw+uPqI7|;ea!Fhw{#r-ee|2G~xcutj}JC>t6l!t$t zGZX)|AN<>y)0%&jm8x_*gM1Mb@Zu!_p|w zL0cXi-L4n91wg7HH8$vkNtYKbzgR$N6Ffxsp!GnB9;o#K9vd_)Rq76X06N|aqzQI~ z?S+6BprvS_#T#qDT{GlCw+A4Lz$5y-p$~!rUKl}q4jO$2xd*fX8Z0ga6+aGE&tZAI zlncyau{>51*6jKZU>%DSDu$%pnT>E;eCORCoA!{s6!+m!LJA!W95Oc6-uF< zH92GzvL!Nb-Et+M8%ZFl<@sBef@=a$T?#7wyIR0Wx%B|7&vzY^(?Bi&t*QZ^_G(%O zQ^L{h%JXs?L;=J+xl(m-A_d4Ru;GvKIN$L{Kxvfu;F} zcYPRydHfK=QWFmTZ7fVJ2TGj4ozK^SC}*a$n1CwouMD7yI|EdS_f9SWQ2{TGfCj~3 zBjnpTK&uiMCv=0x$3Z<>27d4oFR+o_=uM}}C{PS!o(9DLsN@5;$&`A*Qxl!8pv%a> z^G%W^dSFj}d7%!ORc$>`B6Iuz0~crz0^BtE5|Cy7B6l%NBTSBen}Z_%wgXvg;KSm+ zyb$6Aw<3_;0nOp>BS9{?e+pdtL9TwX=5GNVfC%B(l$b#nwk5g{hGB^cgke-74Pls+ z2tgR7umY&MG!r6XQ{n(&*p`?>7=|T!5JqWw!`QP+bc;#tB42s++KY7ykr69U_6wW3Q_qhPc4o;0kktducqlHsJ|)!3occpi-A7 z;00)xDrnyDV7D8Km73ir!KEgotTZci?{;PZ4GBR`1q^0^*`>+=9v>-T-ysMZ z>}K5|$H2f~d4a!W1vtC#1ix6t2l4A+@Bw@f^Q^&#K?c9*gUP+Ffk=SE0aQAJ!vVx_ zFHHnl{e~ytMJPNRK;<@1zzfjYRY*8EL&Cus6b|s4DzJtFGyisQICOq~aTzk8*?GA0 z2DXr}c`-2@l)4&Es4}27tU7D=Ku+JXFJI%UH zBqRrz@wb9*YXqhFAKv`^+MFOe;Wq>`Ft#2jDFRC})^UJo_Bu~6El}bJrUgqZ!8Buu zVK?a7w-PNdR~9rnjyQo9G<+wBe9~+44-V9G4x1k^wjAJZ1zkY$ng?uzJb&994p7*z zfuod|A|V4UPQqTi*$wu1>w!|A;|C@j0~LX-2SCjmj{l_`VJ})|!lZSPLlJa&SBnw{ z0|RJvC|Ds&v?!!#;co@aJU{}kjK39hyD`FG{ua>CZMPpw=P7Vg@d)H(IWzv&4WK&3 z5mbrr_k+&CM6<1=pc^C!3S%O2trY63<=b>0aL`%)J~dIBB44hu{N@Hve_&9z5NN84tp5Epg;KJbiOR!bo!K^)?R@FgaSU0Ryft7&)vqX^t z>;3}PJrSmxC+vlBF1RQ`IGDd>1}MBi<18HEFVv@jEdq7#K%?IW-EJ)14&Yu0hym&!2K+C* z@Pd0Wcw`Tc&ml|F0t=`4jPI?#C#mU(w{o@oAI#@~7o zlzn}VfHSE#fBzIDZ^K#{C16QJ4)*CTJpwMGL0Q<1rTGUa3xjA-7N)ooC>42W3v!by z=un&HAM*U|dZ2-|+8u`cttwy%&=NM};Nb(0tAUdY1FopDTLX=%8+alE+@cnNsk{Rk zv~XZi1r-{gWS7P8LTowM6c7(IlcckdaP;2zUwQ--y&5aPS_A%<-pOLf(taTU;e)N* z`4TJ#weNpD=x_w^xm?SZfhF*ybC7vKSuQV5LR{8){3U206Xr)y3?j0>h{=!t0WU5* z1*dUHbHatc6}0Xbd62LZbjckDXecTCMHl#-N&!$OIP?s%BFjT1pzEZ-15F$+8u+0F z2zWF+iy{2QtIyz&={)}OB&g;qJp=BNJa{1t+UR~nfPY&!6aThLVF4hgANmXSBxoWL zRB(U?{Pi$QoB=m63X}+HAG{0#El1c6YK^&fS)Pz^dd z6IAGdD*fXJ5G~XN;93IYU^D&}(Bu!qWiF)(-Qg_94;*ka=IC{>usl>!g~T_oJXDee zi%+bnnX21<1Bs|^o$0iGv4BG7ppbb2rcD7I`qL1XJR;{?mvJ*6z2KVHW` z9A^gVGjL=vhQCOH7Ew~ ze?UW#0-Zm)YoDYV+d@YiCO*YJ;?U_0>IYQrQDuMyYNzW52otiB5L|(@H+WnC zHQ1IB|7SUL~#Z*yX9e(;|2M28bI#9-zFFPNGiFhbNo z?^uMW`i-iJ8A%oBWK#x+s_!sW-2oh+u?{c^TARtyi!yN+7W`t0Cn&U9c0oc5G9U*o zBWoc=A$Z{?XhMMF#ms+vkTy9u(}S-BD1Hw~$gUigr5q*v-~_@E_M&ArMEC=$b3Sw?V5ytWh^ ziEwA~y!iAN&6zwe&b))T$CU>(>;>_pr7H*MvKiPiPt@yNrhvzjx|lG>lS+7zW>V6> zi85H0@<2V#6ZWEe7Q`YnkAsJCWL{{19WSvH6xPu3IWy3u>pU+(-579*&GCX2>LJML zSf20~=1?<1SDQj|5NL$k6>0!zgd4^Njc~)*pb>5u8#KZVV}nMxVeIPCKyYjOYcV(s zTMv{tb~}KE7_7k47Fn!eFJAV5rNGw{Jz)S1-aP?bqa48UTCCem26Q($_&%)s?+|5f zG8ng#gayAaa0f-2!VZwXp{15}DK{jkGug;Nmgi_f`QVa(C*Z|jXoi9;9Oejnp+6IA z*oFnaxZnmd|G;)thUQuxh7v(gB!fqe%}QCjOL<;{Myo(;16QFNc?Y^I5G}fbo8Jh$ zxH6}42|pr*$Ike<}8Nehrl&qkU-G?QVs+sAn-*6cmNMHRtu{w1uR{^ zfL0Q4{4f0i7YleX8M1s4X{ISKplmb_X_B z*SdhhI(I90sW>RenrlBWg7PZIOC3;i$Q7E74NF~MHPi>j3(YSWXMV2*U#s+ifBhjy zWdO=ju3z|Dz^nK`4X!U)3@>cwKr)Og$IF}GTImDgbRb2D-0?%;2oySg5L{4lHa}!) zJz2tz8G+yf`ARv00$-c}k8&wMmOcD0{gB1*;>v8WMQGuP+QVak?7}VO2+9JTP8U4~ zR0pD%(no|TJaAK91a-hn00jFBdG!(Q3AKLM)JI$?U!Dm{(hT5b_@XZ$Z6DCJT0GsMFFFNYXMl^? z4=)zY2Zssx#x1CnFUU~PE`S%%SsTz=S=2gV1-MR_#*A4fB(NjZ3Beyk8JcSa7)lae zyaAo!QTu`c+JJcR0(uv2r|S#w)_-uea{#UNdeQCr1~CyX1=$P!Lhc!O6~>Eh(1tQl z$`Jr9_Tan)cKvH>P-wu7Zin1-OUUT`kp1K+Q|#dBrXI)d{~Hh2YywrxkjMZ9H>flP z2O7@{HJAlFVBdMZ-~;&%> zpiKU47x1*-EiYh9H=vE8WHJ6PhYZnJt|-+BNVF&rb22NGbDDBdueRT-dnTGXl05G$q)4 zL;zgzi6d2fkZCs10BF4y%pR=08J>U_lOP37C#ZQO&>O(sdVt^K(7_+fkZw26iyQO7 zDem|IhZ&#&T|8w8BshXz2*SeyoO(E3ynjK#hkNQIK_n#}8})PnUsjMgg6g zdHg^CmkCEe7SoGEknjV|8lo2@H|)OuZ#;ZrJtz%8t}X(nC60g>Z>ED?3@(7b@NWxX zZa&4)5diWKa;G`~l$~x&07o5q3R8Je1vWivJ-C>HG`tM?TS040KyGnhvHd@vfq}n& zKe+hjU}X>h-ROSfbqLrEH?kOBL{0-c0#9%Sz>=y!Kv0(J3r)z`nBe9&=!C%LBLa=C zH$VnMY_xQ}QL_+iJZOIQ#jQJ_QdWR?^G`w!%>XYhJITRy#U`B!#-DH3QB#Yt2uPI<>cDg=!!LS!p z!n}C#V-JXa^Wp=T{?P4u2NG{)pw{Lc@DR0kJ$&W?Yjyx_M+ zo&Tjz{+Hef2zv1ybiT?FP*bMc^^3LZ9klgoJHS=aWY9I;lToL=&oUrYNe5nvGJqZT z=7lrFsd!5S&@wQ_fGmcr6!37sRzuzstgQFpzD_;AjLmKA#@RV^ADDK zd4xhn@c2Lb4$$`e*E~BEAoIQ;UUw*{L!ijN?G#GWUIJMhY$mA5&s@g?7rz9ZrUvZ= z3Cc2i(K;FISCqj9{#MYa6=(;~HU}mfIsVp(pg{-Fu2_y28o7ui1Yf3`fYu~*y1sd> z&>i{)-T<<6{Zc0m5rAF!_@=q`jY8?I*NhXu4AfT58E_IhfF%ia{R7RxD1g?LE54|G zE(*SI^ia3!hmHWIZr2aU125pAo)sP6|Fc@HQf27&w!{f z(8kJ=NO0990g|$ZNtJ-RPYx{I49zc?K#5ro=8ZSqVCRE2n)AG1N`M*#TZaT5ipzb& z*j)RDq4ErB*cg`Tf{P517q+HgZQwO=L7)L}aLxk_1rxS zZK->~0O2Dvhk@4q3A|{Ao_Gn`X9voHXd&M1AOjWg<>>Zg>E>*H$=F@e1v)?A19+^& z8LHn+1{`RpLuBCcjKK_)PChIHjb}(Ol&FGY8GIx|i4=$lj&O@obr2i8Zd9P&JuhVhXClTtx}#Wix;gQz##`c zT!ZIDC?tD<64x7+|D|8D7_xL<*g_^)z%31*3t$asCVvTd@o^zo0-P#10$%vHgWU{D zXh;n`#5IwxOhBP>YbhvH6c|gmn`;%AK|{$3uUWx`H1wP*@ZDUXjqji~6GQWl0MG@b zJlzbB>{8jo8*)3R-juiTW3TR#4p{u(2OViyo4P!Gng-o!8(&Lns?O zXb5G42MwWY@Sq`-4IVUvva3tYUi@DP-lYiI(hj<`43tL&Ug%_im-sdRV5);0hzj1g z@#_`TQ37yBgIxmMuMKtylnr(Xlnr(Xlnr(Xlnr(XlwDnF|DqJ)60_#Lpd-W>z`N{W zP7--BGab!Ipu3k}q{Eyf@T2s=-_ex!w}wJ*YEpgRd_afLxf1 z+i36=gB%d&Kn^zox8Na0gWSka0x=rN)eSJCL1MU!24^|Y!Y!D2kOGY3g*kNo;Mj4< z_G@rT>t>k%3Tp7(3=kiNf%SE^f-bjc-U}ib_**~+8gzq&AQ?!sG!~poL4_rf-heR3 zbr>%ufJdklS`U<(f|Y=>^$Xs^;B*JFuN1Vu7BrP50;wfIvxw8c;}QxlC3Qh-0C=D# z&4kP?c7Axt2onbzb^vl25bUCAOIIHLR?yTaxNb;*w6{UiiJL)f_F5SR(4D%Fo2Nl% zi$Tf~NYfXjR-_9lcQz2I1=LAo_+Kgm^G86?i%Zar!JsR`ZNN@}R#VMC7)wD#F?g!3 zc@{VzUh0FcodDI;GGJl5aB!l0DFG7R3#!%_L6_5l7)&L+&0rBW{#IwuUNP_qmX;6} zBY%rNXy^dEt_$QFP_5|k@BjaoplxN{Q$b8nY{9ShjYA1F@G2OvBKUp3pnwDK!^ahH zy&yA>9|DInO4zl4N8|-MTR}JafXg7zZ92zWLEBS6EdkiBO;BO&2Rpk3#Bqe3#0TP- zz-mnpM;)oYEs;WUI%rok3;3EAP-!m=2_Qz$fp8$(z{Ni3m{$-7yqlZj|5lK*|8E7k z?S&X5i9%f3yceX3p+w~P0l10ihX(Kjpqc{m*ozBaL3OG^XDf(@lpvs&2!U(@?YIP6 z{9+5#N>J+Xg*q2>up@43O7wC4C0G*A)0j5RZ zVbKQJQ`+e&@j~|uBg64l(9L+DMD!ALKkWZf4$vjFATdxNJ)IBscPIFYCU6nM@qa5s zQsjj+bcN6{R0)9>Oc06VhrnZ&LLh1IIjW$T24BqtI_roh=*2JaAd~{+cG2d&pljY3 zO7gqGmRW-@ZH3-z0+RU;*7<^~1{`h8U}rOe3j=Wfm}Nq*2zY@2Vt@lWti00!)N5tk z3F>EeUYPm)rzKb~e-G$lme-6EUR>P-Iu#Xk-_r}Gvy2QBm|0o^iVV>B3#88_@?wrU zBmj?r3hYvW7d;SucPLM{5GWKlf?kL~29F@uWWMG)4!$lE6d@ojTS3=-ft$aeZR!8F zf?fIF5j_6~O1e(!pn-JAh3C*ThsbJzunW+^<#-0@j9yrpiw2)A0c~d*^0#_}_~4=r zR~i%mhaz}(!14lrs}y)mC^&){I?>YLKNgUqAnt%A0;HPYK3E#!W-QVNKntYsrQjow zJv*QjoPCm!q1#oY+kvIC6?FX;Qb7aWWPYF%eE%CFO)xNmmiA9Mz`yN)F<1(64G=Wh zgD$!OCHr^K`GQtZ5&?H&wZXRqft7(bx1WKj01sn>Y8wv7MK++mH`5YGq_=`DltI!C z$_S;9zQld#OnocpDjkILph5SePC$D- z_dvES!2%d$HzE^)TpjR#E69ESOL>A`6o6L+DRhGGWNh9Gx{3|dEeCV0TS2O!IT0lD ze=A7fMMDK7Cqh+gASJdEX+-gK{6GU}QUz3df;7KQhZ!G->21)3#SXGBR)H56qWXfrd?%UWaYhE1-BGZ@S{}>**#|o3jw9ej z<7IHF>ud#`s0%8RK{P0Y!9_BN15+&VA9B}Ojt#s>Uatr${X)Roh(JZM;PC@Xz{i?^ zOJPRPga@n?{sJm>T@j`56A+)2Qg}1C6o#ZhSRO$tX{UgtAqf+UG-zEvxFd_Jtq@fY z2?tk+7mP;`B`xSemE#BCK7^IDpi4*)2_L1T1xZ0JQUMpC|F?p!GXa&fEzo&P@VzL| zq7ovx4Xsf+uE%ljnEQL8K$k`-~a!w128p0Y=jn-NE%<2 zBiRRz4Ul9O!;6bB36P1{3KY<>&mc!auE~JhqY?0;8azy<(Af&Qmjs(ONJRhN3NrRT z_|U5 znd>sF9vXh{bWfH?8RmjZAS#pVfw-yumFloSG9)Wa+UZ868D z4U+a@eupG`h~HgcT0z&#Ko1}<325F6GKrzYy?HN4oS}q3bppy+kQ-|LZw2WL3V87v zawRt;6Tu8th1~mS4K5&1JPtD9#qWHu$6p982Nm(4TXkO8fsV$31RH+~X#W_vbZF%RItxuupd-OS#XN`xg*x6eX$?-yCEy`#@C8~(bphA`31;BB;5E4SxfLvQ7IN?g zsKq`(8dN=iSH3Yos|U!6KydYN5Y+gERS#Rh$DP48J!0z^qBhF=o53w>?2YntBsuW3 zMQtV2_YI&yQ0QVxP@kU*HZ%Y#K_Cw8Y|Q{&r3J5=Na$^Kw&s9Ju~yJceUQ-u4)Ev{ z$BP57OHe=;^?~wpDR}gHB}^D}y&kxFQbHPH76Wx>!5932*6K=Fw}Mo`JGU#LWs9o> zk`~D9y99XNru977)8GJ@0y)Owcx%l+(5@&3hL^$M6U<=cEw~0N5ro|Arwvxs{DKj5 z*Az$tA5n60!pv*N_wf zTYqU8%2Ud|D-GPg+m!-td$auC3W_gq72NW_v?u8QR*=pYZ@@P#D0H@hc+Go3;lRM( z2RhcYc`rx^v00C^YO_W;chHT>V&^6&ru|D`3~eFbjdLdqyC(x<`FkO6As04kM&O?)AX^0&+e ztB2(OgFghCA24>hPC--#-~s{K+I5`)O4Xok&NDz=ety_mtvN8^DInn=umvy+V8Sy% z^IQ*M!b@PnQ$WI}V8Sbow}S4{098ex;?7k7G%pUCK`Rjg7l^`$(hYRvqy$JIZ1xV> zMSgrGhML-U}ibz?<5jqn?`}8%SRZb-T{# zYz19{)$O{ZvvmsSP$YgB1=(wYtf_e~$TWr${JsULLALkfJ*aO%63~Rm z-|`1M6axwX2I#mp#BlzWM~n;%keau2#{aFLbo;`(6Pk)PAf*Y=srjJ78)WSN(gonk zvlV6+=!*E}y&#gI#2jCuDBbYCbOYo{`JjLouGsX;cejEJvUc520-BG4DE?o%;YD;R zxcG(Hql3k9AP<5wB~QSM7k8ln0WuAyi3G>3z@{IkJC45va*hO+`XmcfpMb*| z8rm%ooto zEeQs(Am*@^vhM^nNTD|rfotLipwVxZ383RhK@&xR0WaJ)LYE|NX|CNO2Rc82Ck?b6 z7j%HZS$J%uVH1~pd|4Vngn41XAAYfmWm_vO9Iu8qe0_>juTR~p^zZIkgYLgY=iKc_ktYC zz~7>Pde%SNkW&+p`$6Gb%Raj3WWTRwnFT+qNcB-FONkcC`# z-w97xkWek%@`4#A0}5tPQi1w^%Zr!bODY8*w_t*0KrRM(6(1fAnidx3$!g&%yLKcs67w+oaoN-z8` zJp&HfDyU{~e82B_5XJ7ywmdM`{%#Ii%fZO%IbPxEhDTv$mK{bON3U|8#lH1V}!i6}rgfQVHJIF@l z_|^sAh$(<2zJ*~jkobni2`D@vUP6vMC9H012etjd&czH@6NuYj8AT7p(~y(}u?7-y z2d_aw4s6G8suN+zZx7UO+Fp9>svY z0IBLw9kT~kHiAUft>ET<;5TH zIF~}F>xt&t6Ab(<#UQ=VV!3rC_|zOozZY3MBo}})8`uHcp@x93HO1p%P<8-oXoG10 z-A~%Q7j&g51AogS@Ol)G5Ceb9RdB}*epEeVEf)AbQ?LnU&^@@VAmuLuz|+!%9m)r_ z7jL+Nq7Q7xgGct%-kSK>+Rt(jE*J52baLD2M2_kTod#w&u3NAhn>LA%QHy%kLyzJlr&x(WE516I#vIvy21KAmS{)3DMxfSXR zGwjYlRtIs$vp8(dfGmN8I0L;DmWMb4QEI%7LOBx^()zv$-r0lN`rdE~sWrKHvna!a z*YXoy%S?DJIpMX~1gyvGyg1(n+FEzz#edK-N_#<#C5Dnha1*WdKnZL)&skE5jKSAOD}ct*%8=JDbAVP0 z3W5>?=sF`V&|U!kR?taw;N^dy%YQ*v8?=IM)qRl)>K;MXhnMKWdYGMHIT#N#q{8^W zR3zYqo*p=Ip|=dX3V_!4wj2QO#{n@xOMP8AKoc!2;HD^Kjk_*HkE;M^bjg*c+vNfW zcpwpEJ@hJG&`_8F=-yfm@HY7uNl!tCy&817-gr^c3kuphFP4DTg+X?DF(g7l2{cg8 z(+xWH9x^Eq@Pc&NVFYFqNo-La0Qs zxmJM%bbJHP|E*U*cb&h746B3BzkLb1pai50HiV}DsU5Md2fYl+AK;Nnl(nDWlMBJi zIzdSTHsD$+558WgwFaaKNfsQ5poKf2u9xcrP}I3TIo^5#I^O^ta0X8U(Qer$$Tm>B z9~^EV4me(6%Qj0Nyhu6&$(gPXn)ia_Nm{U3`s9TYO#c&bAq1^hK|4GjfC>r7Dowt# z5KBO-G~Hq0t_vE?giqeQi37(x$|_B1X>iKxc9j6_$Ke1k(VPY8J%g@dg00Wwfb2xZ zzdq9i)a?UhLU78s3fTkkk2Xj%lciK7#|9|M#l89>*FfbZjmT>%feZXPoF z3R=8<^E4#T4!7PeWoxcgVJKzqyzvrLMRZREnbZs3oML+A0%dz}|QFYR{a zINov;w7CBbC^>?8;HB@7nH^9TRe)Rqj%+E!DDbdwGLo&vU=M(9Z^EGulFvYn)j`q* zax4?rv8$oBG7|9WyHluMWh`asyz#mKoT5~)>P2$#Mug@PkTy%Ot04_=?3xkIE`{iY zUVDIYBE9EKjB~`m2Oasmu>b$ z=n43xB%Q9H#d)9>0ndx|BH)DG=?c1d7$hX{Vh&750AuGA&x`);pzsj@tLFhtE!4pT z5T~1i_Z?B?*d((Te@kFHpdfoHz=s)V8KZ4C;`v{C;>C}xFsFeAsK8r(z%GIArvmSQ zg0jIoprCB<4k#!ayaNi#2Je7^vO#;XiZNXx@M3`xno9&gF3E$rM4-7=gaLe@AZX4* zjQ*_BcNMrHDDT!KzF=gaVMxFReI-t=>hQG zmDU5`trj3|>75teo1t-j0Ed1^ssZn>KZ2?sY(Fb*6Hn-kZk7ok^T53|m?L0kgh_yE z($Xg{LLik6c-h%Y2~blF)V8_uqPicPvYKlzFoN!ryTAmxcJBfkf9pfg>^7)80PpYs zT^YLPru!4WAF7XH6<3%Gzc0G~Lb(0ZT*(zKTe2hBcifTVkHi3{2~Bk^J$L+C2>Xt;V2}-9dqH=0zDq8Mf*bbc$iXi$6a>Md+I>RfZS2 z&7eHB1u_C}V+^{(5_IY;WUHybixz&U=a9=q@Zy?MffwbQpa~I@D?l}(G0vNgnOI`)#s7}{4-~xrUyHo_e;mT4G?t~@oJ>czW9REw#K-7ZH-L5^tP?Fv4dIYu+%?s4L1)Zq@ zs+!h-Z+dwlcmU)8(DpMOa9Y^%Vj^Vo8<-~nQVF|MNeI-`I->Bh0yOy#N)Sh0s6i*U zKfFwa32u2205za?2RN(j0B4mQZ2YZkkSIb*Vk=(00B4mIAeSM^-6J4DP*Hi}_yNd} z1!z$fFYHn}(0V4`=Gq;MXnRlJfc70pfG@9D0jfFTz~e;V!5ENp!Jat*YQ2`Oc;N~@ z??j;!)O7U%nFZQiB!bvoWD)`iV9gAg>lNs7pDUm5!2wP$aGg59h%X7=P`&b!(awH2Ae?)e&JIKimoRwYCxTKP&O2J5%UR4bR7VVBOC$k zzy)6{BLJ$POP{=W!2?pO0E#ZqA(8N6pQH6aNzDs~soPoOFuW*K;WL(8)#Rq z7v&^i@VO%$A3<%7iX_l^YKR+Y8Nhi0R3UJ@i2M!>8i;Wm-L7w5@Z_OW%MMH=rs8ds7|MgK^~n75|`P zL?A5zvr-{Yjsf3RRmXnZ71YdScu`mY&K}@%65T*!I3*6yeh0Ya!%=Do;(~jE)}?$P z_BPPwpSe^w|3O>UVavme-x>ZZpH=sjP1zv(yt|HrE>H4Om zvfK3y|8@rc?H8aYi?K`qwYf1x!Oljy7xf~fO@Ma$ zvJ&WQD@gJN9m2`+q6)g>7IY9ID5jysJGf@t-~bM0h+AI#hByHd(%lTb0skRP(9yjD z$VW|qTJsJs^xlDTmRvmev?+L;fG%sCP!38fpve;A>c(rZ`^P}jV(4|_9dHnU?)2%M zj5_4McN0<&Y?uu?4-R~UFwYBDX0X3HU3rj(RUqk&=Y_>GP_6+DtGsw#26E^baH58F zBLrTs!*mNAKL9B*K=lfu{Rx@$L6PZny#VV_T)@(yxY7-}S8xy59@g$s0ceNf#EUnc zkhFiS+jS43Ljh)jv(*)7heG5(XeGdv7b#*;kAeCxptCkYF|7kv%vV4fP&yQQ{+C{P z(Y_e!ckKG19f}i>P6E6`apHvw%$=|f#RXW0Vh=MQr7Ky15%8LmWINE57w*L z1L{@Wc(EHi5&-H|7=e@CnHSa#;BbIx0E>dJY=soj+aP;YUuJ;jOF?z>jTfgNHB0A* zm%%W>GcUeCHm^ZST<9Ra>yDS8TfJaLcZcpkTCfVbpamQ^Um(>uxOcGQg_6w1ByN2U4eCM|15C2L4uia8J$i z^i(R2Dhl>S2dJI_W&ao8B=!QD#10FA6Go>iNEj3;FF;9bHn_;z*5?M0JUcrK}X{4{R=)b6Le%(DPquj zIZPCJa7VVeRwTVdyt!5+15`tStEavNp!6vKiZ{r~LZO(}ffN4+P`sg(b^@TgEoRQc ztG}B8aocbZq!?>G0J;kceukMGW0!FJ= z<;A9Fpomx$4xXigl(%N3JjV|>oCYmah1^aD9tm=90-O8t9k`{((dqi+wOzOC6Nnbs zQZZ0dks*uyf9aDKm$bo3ku-BbHE#rKegeL*^+|K>6NXaI;AN-llb7l@G{`D-JHIOrV4Q1A(f5Z7s!ilR$^ zOc7~zeZz>5V6b$3Q?n0rY&hBw@CR_a;V>s=)2Ve8QoEsIGHBuH3s9T%4d|Q(o)_g3 z&~PXPg;ci#s4vL}wveMc^h;*|Xs;9Ku2qia+Aj>CYiXarZzKWNTTfoxF9n+bx~0Sw z9A5mb*FiJW6?x#IsT7Si6cqPl^SVzq&7OLZ`PucV@nTRtTVriJ!c#1iOF- zd?XBS1jHkIzsC!J0*puz-nb|5r* zkW~wSRaYUaMtGpK5wYorhkqOR+(~#XRAK>6{5+sE8)pViv!HvJK<9a=b-O-*I7R}z znMfLD{DV#>nb#aI(sDr|@&I&DeJR%qdob?~Xu0tRaALdD?Rp2I{XrIc7V`^TnD#rM zW#cfT?_{xMF~1Om$$^XpS&MYwBB=CIcv1TplxcE9K$!-V6JD}|I_jX3@5zf}{NN}9 z=UhlS{s4+z{+7Go;v00HC?r*y@wc9W3xQJ24{!cHP=VR)`o!9mqofEltREl%I`I*F zS94Ini|4FhvqATZ_QSP;Mxp%?p!=f=RG|k5T3bc+tQE zlf#lqKR{FI2hgnvwI7gD>4(k$@G_3lCoe1^H>7mCet^z$@VCAPrP52;pg4H}T5IC^ zkj~knLta zCxZRe9r^~GTwgGha=lOoyXXNZUAzFNiwB_i1*h>h;B+AhIj^%j6cYDuU}*-FE>H}_ zEK6Bl95ML*pEWE9d;`hxL*RbiB+y_I=;n~l!!LS_!Cpc?OP%FK4@jRJsy+gUKGOw zctB^6g0nt&0v39O2Y3P&$_7usLfPO6SSTAj0Sje=Ct#uM>QbW@pTfXX!J43&+!-{} zuPll-`N{#>Y4~wE%vqqBN`xz@G9hjBA_vtKJTK;opt%Axl=UJT<_d6FfM-HMXZu2L zL4rg^0^@2L+kn6J{S7d)cx-pyczzeqK2aNondmE6|9B6*S5(Hks zmBRr}gq;UrI};)2ymKCRJpvx{XFu+G1a$iiWZ(ugy>$RGP6bzY0H*E$L>)(W1R#T=By5b#1~9jJ+IfU4&JX#D(znl(7j zg1Z68CPHM_ECDAH&`}VeddtQD>=g`iKqs^_Kn8b_2UP+iEbXK3sqBAgv2!~>hP zLz&R;<~V-rK%@>wH_H6^2XNmRG}89}BIIOCO;{TlRX1eo4@ba@-;=@N(&@?p>r{iL zpuwdq2YC7%9JY@j+qhq5foCKBVDY6rs10@iMW)mB!3zdtUz&Wv@TDS52=2=V$ZdIq zFOh}u_!3#!32o8G-FQILC6osHeS>fS{Eb{>*0}3nfGzBzBK??%FA&;!`1WYA( zuiw&1&`{-ph3W&?Pz9(#j0o7yGH{}ODG2I<*IogS)?WcnMqXj#Z`}>5s6i$=g9Y>%ctR_wfEOQUK466NPM8o6c%B|q4uQJ+ham$4ovs{UVNgK^5?%un<^eYl zKnv^sm!1I?M4hS{)z&C6`G7_liD}*Kl8tOU#nNtLh%R^kwk;N1M>W^P|@nt2b zoKQflLgfi~!DrU4@D8iE<{X0m>aOZ`R4zy%|m=5lm{4bS3EfYXBEa<+{7b_vN z7Oz8^Yp*bYJ2Ie7Ab14*#RQOFj|iX*rb5c<7;en6x_BN^S)JA{%7C^y@Wld+@Bdki zyi^&E9|8xgP`58fcgQK0#$TZ21+W7yrI61-?F{8;uH|4TJqv0aGQd01;7N(kH$V-5 z$DZJpC}`Y|f7=1jy_AriRCDbIp3*wdr8_TTn}4wKw^uMTFdTfq)ZHQ>WBTJi;|x-9Z;G%)S6vht&^FzRA1c2m0ha?|AP$CGEH-pH-^{avTC2+nNXh5y@ z10RYTzB9qxV1jT%0^APJZi3?nI^bqp0j?xf#gAl!5%;00C&SGu=*2l z{j+`#-ExS3{P{tCFf8koNUE-wb= zi@^N=S(pL3j|?`X`sU?glrrQEyeupgJ`S&nK%$@$BpY5lu6>PBJkEj%feJiOImhw8 z^v#Q!{|JRFAW~(HNj%V86QtOD z@dC7+w)qHZv3brAT5NtnDK?{LgR3}5vH9i2Ysk7jgc95>sV^^z!I#`BAkXH2FFHxQ z0xFRLT|v{N;6uC{B%Bx+U^kdxze63=(E-<|tp`d8UO>bV@Pexw>~2^mhT{dRvmog5 zRd74!VgcB%FSZvlGNAOeAbt0PmqG5^=mIJ+p@SFT{tlE4?(aa^;QkJj4eswi+2H;T zlnw6hK-tx$A@Jc7u$j=q`M_pE*=MsDML8 z24dKOPFI!V2OfY**HD#i(CW%JjkRw;RdOj8xY~W$4=&^31GWp zP=*O8fGTbHGGdMwzn;NLBIwd!l^5oE;G_z^7!Nd#^kV8ucn?zM#Yvb38ECPm@M0TG zNCDQNc!RyEjVugrYCnN>DAZsb3S?#ArZ!K&i$%InM?Jx6NAm#=M2j9-{|Ar^w4E&j zvkBhLMpk(OrV`X9dtuuS3qc(A@!+%%vV1oHw89^~U5{oTMCJcdg@6}l+o1M=ZXtk7 zLrMHE)d0`ofR={5_~iv|cfv28;@^G%v@8(yW+)wS!M`3$XpF zSG4P@U%1MB|Id2e9#rr`5;Dj_@Tyf;LAFLhuH<6k z-*yR98-uPfhjzHWU{7qw!tlh#0Zjt@EueWTSkxjb1$VdLT{dJHD%|;&9C*q&S>k4XSa$5g7Uf+y!I-Cl=5RK;Sq;omP3VSLXYF zR)0HCJix;f6p-Mk;GYUQw-YT2bkBmKKo+b8vRY}RL_r8R3jSb;0?mm?Q6N)AS`=7G zfB(;V#s(Ax@bJVJ1qv@#od!k0EE`a>0CYl4tl6nOmm4R~?Dhvt9sC2}y6x*Ps5Fff3V zMG5C|*C(K(t6$q3cYOlB+)b-H^a=FhI*|#TAE8W^4$DI&;t(lV;}kqIRC?hx=nA_h z=*Om{fJ0cD7qf+WydNoqcU6Ew7&hz2-vYVD5Y&VQ4Vx{7%;Ib7d>W--8XUr%0iC_`%z(DE?;Z4S%_UNAL30IkVwe!$qv(+Ub0{%uao z%@2Nap6GC52AKv{#R6A#@BvHbL5Q07sA`zuYI=FV=k`NXeFv)o&mn*u{vzNt7pNTs z7We@2#vLuFqj*3!!t%FX20Qx$r0rtO-wNJO;rao|8wZtOIv|%0!o9(R%Nrjco`rY= zqza2SplTrA0I9*{4N%+uMdvH9H(qOiJ;DL<$Q8)#YoPc5EvN-g;~jvB@xaqp=o4sC z?GAkb9mE1HPXk>#3R*k>n&*D4_97Wn*FcToc;O)j9y@ulKL<2<^W}w34(ROWFKA`l zO>xlu@0Q@}48d2Z9Vj*7IQWp2@l-F5Pj5oVQx^TD>rI+y{24vDZ3(%y8$Z=3!Vd#$K0gsqCgqm<1gc~UU zHWE6rBG>H;x@+?I0k9f0m%esBey9P|jTHi^LJY^KcZZ4`X98`21&M>#_z7bA^EK-Z zP^L#*NdID&*!TaeJ|GwRa)5(J!4y*)Ja|C$u)_#|*!~`>5jHQwzwLmf>xmN3DsGUQ-$Qfh zG0+J(CG5NMAjgsBfV20Jp#P;jVF52{z{i^jSeJ6}w_F6DT?1KK#qr|vJ+SdFcY_YV zLD^yjT1Lpg-+J}m|Nq^gSVl-!fwrpD3NY}uoMC2QcrnctlxH5iICmG)j0atR{elVR zMZ~qq?mz;$f*G_b3^tbw8ZibXrU20RdQ~6T5uL6tjvv?o zp8Nv!(ip*k4qAqn75L)aA81G74Q#VM)JX7(`8WSdUw}{3vv;27DHG-SP-aixY&a=u>L{zC%(v6fd`fg#7!@&LBrOtLd*F& zG_NAEuK`R5QE0)O587`4&W{cfmWOIVi=rT-i&<WjkKvgHEc(_W>syc`%J9NI0n`cvhadm83(zzQ zz6Teyu7D?tF#uFhf)<7^pARkcZoJs(4yp|9ym*-i(hN>M5G|nj)vTNsrjT8J0sl*H zgn{;m%>bW#2&$n=Oh5}Nq1IR&0&OXTYzy*$Y>j*^0?Oo|-I5$HOd+}PH6!Md9FZ57 z_ktQ#hxL%Ub&$0Ld!!)co9mb32f!^q0jO*+l;ZD~zkjVzn zCe$6hu1i3>ML;`vOEa*Q(CNCOv33QxA!YzI#L{&`i3+$CCI`|2swmfh&WpVb z-k<@}aoiO=(gW4V-vV+1xOxhEQG5wf3>^dU8Ny#AL;1&{PO@}eQvw-p3jbfa=7kM( z#PN8y>yp+3C49|qc*0-I0yTS%2y`Atau8%;@rD=4lF)#i0$Ooi!oDjX(iqDHH^x>3 zg?HCZ2@iPj4t%7SK<5w35Bx2~kmlI`Qi1TW7pYgl4tyC0ZjG%$nwDPET)T#Wzx6!0 zHMRjsVncK71_u7t>!){@5bH$*Jo?MtLbmNxSa#8&p;bsT&zJ^=*SBjFn!`h$z^EEGVH~w3*c}9 zos`Rw#Ss2t7L+Ir4|{O~smXQXg_b5lp*ck13)u+hg8CybE<%K0$6F&= z4&5PeAUr7G1z#)FZk8;DfUp;35F5H(_cXs?1kHmobRN9?s1tNP3h3Ie|AOEYc>K^4 zP(jWGDoOaaT>?3eIg2qYAS^KG#oiXMftDXictMk2VJ|*Fb|HcrDkol8!(0V9&KPO} zs4op}Mf0~Dg`7Yb7WQI0L}RDxnQqrJ-3~IHu2aBS`TPGrYT80=XQ(#6;mKlq@j?`A8rTUe zpv)BT!W+_Nd#TC{$`I~MHhlc8pl#S7(`?vE6~Ltk*YN{3;5lE=ogGV{b<>uYAEBw< zh6ACl1}qCww+C8#Z+UqVrj8S#E(Kgyfz(Zat6PZP`e*@nX07=d7|=Il>C_@sT=Hq6 z;PMjG^uXr!17I6Kb|rva*Xgx7M|b-auq?<;AHX_5ZVCj~BW_GK zNa4N!EDKUM0~{(Kb(+}S9*D*5TdI-VzB~o$c0vADP(L2*CZsf@0uN6QaOwfs1=_?4 zR)-YsGvIEY0(Kop-BbopdIY;&7M2Dp;OaKO+>X}LfdqOC7Ki_?LUQ=KWVDtJL|;4> zeTR|tZA%92ir>P3G;9&}!ud3$bcEHH#!x-M0n+3KY8HS)1f}L|e!~(T5cGl>QeFi72c1Ja z1=QS10Ux0#(Cs_L@?(h+q_}ZpvN%)<>J@oHfEqfl6~F=?j=Nl70kvA-JkYXHhGy3fjLo$ldh@NaXK=wN~x4BFy?y8f0Od^hTA)*YZVwcy6Um4GZ; zkf}wf;6fd=an$!gr^_jh=7Wr#zMysM)~*8leO&+l|DP}cZIxN`8;%#|OyB>ro>T@m zd_hM{`ht4)fk9cES!@9>KnIdGA5oZa^6+PVx!<9kPeD3ZK{}>m>JZH03wV(QYFi=e zfW}SHCQ#ByQU*=6Gzgk-fc6FPcDp_~&H#%1X4fYy#}9zSdm9)O7#J*FpAj-n7WmW)jyNE}(A>jQ8a6*+!jfuRXUcj$xTEE6COeZbgU`=Gk+ z*>Qvt$Sf+F68XAkpxV~u#cfC{1TyN-$pjK~eQ^vX2%2_+2)e)62onUIbPEw=crgbi z_`<}5118uG6TE;VSOgOUU6cY-84D8xT~GrN^myR`6Lcv>m}v|XoMH?U^m-u&6D&cp zh!ZCG1up3M;tQk&ar{sW+)VEm_hEuQyf8C8UYvpn?trUgc(D~G24kl;-H#6eJPMDw$ zT#(_#5||*UZ3(f6;YB}8@C@8ch8I;ZLC```n95X`AZT?hOfUc@2wI^I5p;WD4HE?I z=7$ItyikJ)f_AS$1pQwK!UREw1wjOhUi<;C4i-3m=nC9Pg)g4N1VMXrAu1VOT!IN& zAbE2yOi&>d7Do&(R=@;1z-Gd-n$PhA4Lr!X@%RA-bp8P}c?iFoXTtFV3n1)Ho(ava z;9M+Ux9&yRL_P-O(Np8z$x}>!{0|CvaRcgG=%sa_egQ)AEld)We?e={S+b0KC(nTB zoQF?xGfWbc$>BQZKy;?yldObEf^scf=K_dMEtn)IqrxSZKqPr#lAx>&ku>R@yb>b$ z0UFo`K)D$%xd9@1872wJ)euSJ-pM;4lG|XCpxh0Y+yjxE36lina=0Yawd-J#pxh3T zH0qsv5TbJ;OcIpqA(F{983~aI>2?_gGg?KNrLh|T=FqQatc04$a->t;|D+m1YGBH zh|VaOPHd9-FiB7;0@wK(qEi7T2`WwCk{=+F%rHq%W`{@`^-lf@k$eU|mqq|~><=i# zBP4&rBte-UuJb2E=NgzKs1SflGMRxhQa?-*R6fBa*&vcdFiB831()Q4NQS~BvFXf$ zNh0q%V&4U7KE7t%1!^Bb_r@DEzhUWZ<~RHCKOiW}_JwB*xS`b92I?cCwXXIrr|T84T_BGKglE~lxEl?&tK0WV zr^`7Ggh@;wlaQSX)+PdT;xdS~^~ovzGE(DuDfCPLx49;WXcXh83X!0|&lM5XIpFn!Zt`hE}fE7)&2%dlg}QaWH-NAcvM7KlFg8be#s%w+yBav|Wp^eR(i_c`$t$ zMCIEum_9R@KG4=K!uHj{^! z=?jDD18qGctZyDnpBzjdXp0(Qeam3_o&`bcKhQQc!ur<1^sR&G18rv`tZy4kUl~jv zXxkfMefwbg>|pvp+v5o9I|kFo2Ga-HMn_oRIhek4kkeC-9|CQ+BdqTlOy4w^KG2ps z!usyP^u@vSfwtxm*7ppiPYtFIw1tnbzIQNv?;yvQ9zO)y>PJ}LH<-R{FnypcfrRz_ zgXyb-=>u&YB&?6k0$Pu`!SsO^$`IBk1k=X{(+65bLs*|2Oy4!gd8Wq?ftJ`1)~5y2 zHxH%{v~Y&7J~NoUG?+fnsv5%joM8I&VERByZV2o1gX#O`2hH!Gg*1fqMZxs#gXsgU zvLUQ54W_RRrVq3Php@gPm_9$4KG4D%!usl9`ov)RK&x&D>+6E)yXOlH7toR%!uqDc z^euzw15L6L*0%trFAt^$?Qg7Y5S@nmi?}?+#3#984c*GL^8tXE1%wyrJ<9np`EU z?*mNVI+#AtL@8l?zhL^xVERB4r-b#fSVGG|JD5JuL@Hr@d@y}%Fnyrq0EG2P!}Oi= zf`$udc>rO38Zdp+VERDI1qkaih3Sif=>tvu6V~Sh)29a02U-e1Sf4*k-#f^mrN<9} zmIe^k7X#C`4W z?hAlrPr_wgV6r>FJrl6(Ex4>2Ox6V4&jriAg3EHiWY>W0h4r3Q86XFAxBO%UU99VJ z9JJOIbiv+BFdxq-C3yEAWR&tJ$QIBj<@$HvbwQnO6)^K52P>hBszH}SL9}vOL34Ep zaazIi4-l=AFs+uvX$24IL$qqbwElZbgoD8$X$jME8lvU+A>z8R9x#2AVfu*c#)iZ6 zMZ@$F*Nshs=~IU3Bd!};3e)%c4LC@SA0nqbh+&tbYvh|~>E%->NA8}(A`Y?TA zFnz?0S=hn!$-(pyH)i1r)A#HpG+c-qvxtG|TL;re+?Yi+OkWvHA8}(ARWN;aFnz@J zwR&Ot*kJk~ZD7nLHUclM-23*QHH`tZ#0I)D{y?YepXS;>@a_DN4fpU>HsF1b4*j4N zGX@}S%_n*p7@B{ul;|8kAi@r+S3qfR@&wSj$ll2_KvcjBg%I$vqT^u2pbL3W4mANA z`L+*a4r?O8zPb1z)HLuY#`?2b%O*%4a5zs3=F7;yMV*tX)h=ouKq)W13OyKZbk9d z(IBwbAx5%eHF6Tz$R;EsInazeg<@n8vXP)!N6e722OFu6WF#Y+k@r!Ilt(rav=}v-pOwvzWxEC z0$!X70QnlUoIOkN#a>I$!cQKCQqY#mZU>ic2NBRo z23q?FY6F5!AM0*DGM9m&)Ahz{#ctOd@Xg~qFP6d7l?Z?&KuVfxZ!nbJ1n;-xU?@?5 zdcsDwRP?y(15m*BHmlqI_}}Sz=jBAu*4bJPhLUQCD$eEy3M~gpa^XCImII~nphJQk zELsnggo0QBAn$`WBU&CR5d?`iSnzLi;B0=t)N-K22)wRT>iB^R&~#A>b%0#+1JLy< zLdRVnfYMiQvlhe+uLYn>bb6b0AR-|5^S8Ewoc4w%i|55mW$5b38{nn$JTE?-124;L zKEMcCU-_aEA`d#@(uoBW2;ifPLHmDR?5GBZB1kawL1zF*_he8ocDvpH-4b%66C9|p zA_=@Pf~R+~zAbp=0k1zO@&sPHfRlm($Os1x&^?u)i#U6meQbaH2c4h!f=d$YI+!Wo zb(K85lk*^^9QOm8a{Pb-2YB6Lx9bzwtwuaAwBY{ebbZt9`l1_j5;N$`V9i6F7c5=h z)Cq!jU4k}ozIb<5473y#tcs`G^$p`8(4j*CJYWMqbb}5Q-~gWo4LXb3()A1IM5Yh? z+X6J2Pcd}_Xn+;)fUZ^h(Cr`r(hQ=%Ur@XN7V88V^r0Iz7V&N`ztp^yd?)tI4-RRN+8>;K@Rvi6a%7Q1Nr*$wQv7fQ-7#{*A+4JHdKQWUKYa( z7sz5lgyP`lHz6VB5vM7#`?$-O}yg06yIwv|Xsv6||`Mf9aMN zSzo~^7*y1NvL;xa1&DVEylZhww}TI;C4U6Q(}0)(&Ww9rq@IRmMy}ofo*e?9T>FBN z@xo3JYZquC?Dvn^2Lw6~H9lha@c)13L(Pkwr!23O2sFN75MW?v?os)}58Ax-2BhLY zKLdm26&S1aQVFjrNT~S*3*&=k4u;ML%?J1ozF+~JcHw&D_<=9rEfxX)OZW6P_kx1u zf9a7IOTD2vj)enMF?G70=ypBP>3Rn2+#@fxodP?z)Aa&)FAYz3=!ND(jGzp0rW>5_ zMY~-ufJ+w8`TA#Gl%0a)yHKcl$RWo^0$$ub3^oX43MkuL02=|$M`yYnctE?@L(g=2 z@f>4d0Na11+x1Gf14pOp4KRbp()9)?i(Wy_qE|r2g&zXTgR|(BZU+fi7QF&C`U*IU zUV*rj2c!~|MN#CyS@Z_@P-RH?fUlzhF*^lbZUb-AxB^Z0{4L8s2R4FMyYG21_axXq z%?H@%8;=LNT@M^*NY2PEN;~er0!p_Bnh&so3%)%8FTR&Tij@Pf*aRK24?3?O6U)?$9UD*n9v9BhaM`@YsCtV#Nt)Y(mvTV)H=23;si3gFvQ$V)F?o zHXne4`~fUBAHZVsPABNxw-?~p1Q**5JfK^)c)ML+Ajc-CAO{t$FQ5f3h=#@H3$W2I zz_IxP;!+-P(GEUj599)<95^=LfH(NT@*(JQShR5+jD`Js0^8?UPpKb_OS%Z~>_iMax z-U==cJ6%73ZhELwIDX(k6zHN7OV*fzZdVR?lNG!vrlJv4oM(K3RGR!P znT!nJgWp$y4?|%ApK<~^DEh_yqu})0{DQI5^~-Ce?$9sYt{jXPK(^@DNg{JC>$#e9 zzc7OCi>SN-vA*R%i7A+`4=yA*UK~^gm!Xhz58Zan}x zh~~@7DWHnO73?nWx(&yn2J3=0>$Ds`pv3?^^pE4kR=7SMh~yD128P!W&8}YOpaGs%ZCt!UP;Jl*NKq}z2$w}V6Lff7y# ztGhs;xpv7v{?_N9fP|NCE4p1*fNpaJm2VSXa2$a|>j9=t*A3mSYrrkUHQf$8kQU+w zXbW)zXczUF!;rEKq>888bpxmfTLUgFi}48oFANI6kq!1axG}Mb z6I3rw0T(s0C3@YiAf{~d1D2KpB?`^8Oa7Nifn#w2B$lSUSj-E~lrM!qcU^*2bJ$?h z$WRHATy43%unwM+h%8bhq)u#qj*fG{DpL+yP5)2;pca z7+eC*#4QJ)#`?gFoeVXW3E5cw7ElF`Y&3t%5^%F^N;kLzrv&bu$#lC;IqqNqO{Trg zEg(Z*?1T99_@M)vOgOq-;T9`(gUh$p10@n*-9pW8czT;Rfc11i^gwLnYl_7(~s-PWUpas&fDiJi8#dra{Hy%yJPSD87Yu2406`dDm ze*gJ89IwGlpxUeizKIT`4b5Pv3JilgT^GETXwF^0*d4k69I)W>kmn``L-P@V=Gp}e z^^acLKt~8v3wPupKBAp~FsY>Y#nfh!#KS5*bLU;INV9Z(RsW2=n%WgM{wQ{~O(| zH&C1ZHz3Xbuz(l8GQqV5A~_&8{%^c^y$9@Mq8tCK_dt^aO5^`Vzzd;mV1ov00Xg|jnxu4?zRtI+=r2C`|5#-+%zyvW- z#^O+k7(@`hu3vfs z*jo?qdmK9WgBjccXy5}!!0|)ic{w4_0WQ7GiuRz%-4}fpAg>9adw}IdYB4CxLZ7HG zyzsri3-U3z5uIPk2_9Vp-MR*11c)GwNC)*!*0l$ZYMbLSmJe*~zsD*JFA|^r|Bs}( zcd`*kZ|`Ia5Eby^i#gb32o<0+ssmmqih+w7B;kN8t{3jF!HO}xF|P>ZjXscl^Pb?f zuLZk(8%43%cl{L(`}Dx}$vswKIDX)VET}u*dY~i?7JtnT1X>T2aP&6Y+5hh@gWDXtWk|ffASp8Sw?3BZAa1ew0jxRtb z5&!K6=acTxE1ga*;QH&zi^b2u+vY(hBCxzL=LRe2bbSN5LZwa)5j!mZOW*WP2IZ-s zfEQK}gO49j0S6lBN(a^#w}O}$5F(7FpyRAShn{e%Gl2r8+w}_nHdqU~MGHKB`UgDj z+OK7IhCuG96-YtG{bK7h^}039O&9+H8?!i8?v3yc>) z!%U#g{)ZRRTVPQEE*(6}!Jg_4z0=7Ax>*!70`kA~L%@s23E*ZC+_r|610~)tF9&3? zXEF9R=Yj(BMdw;@NW$d6A$lR;MVSyZ@qo)6kh!3&I_Ei9@oP_*@_;N3kWr;zqwKI7 zrH$37K!{N=gTM<8>OiFjybxJ$47LoRg5!Vbg@6}#1TkHv^WxA;G{r2vlUpFh^@6B? z7YP`~fqc}3t`A~KIjSWASxg{rP6T^1d=1zt)Y|J2JL*7QaN`>l(D^jCazVNH)ICTp zZhZneGtQN#v-QEh|NoKl^6>))!08Q?Ex`vtHlLWwz|eevu@lVb29uyD?`@s}azt>9$WdGxTU{L4b7hHy54`Wtd z53@lLfAJ331P)N$&VgRHFJS}cUL>;v;C1^Z159(nL4%7rFP`rD_Mf%z(CK;xdN}q=ZzcwY z=GqI^Wg6YJS73<%lGNMxfznmy?-yAs!R~-+>HPkhx%oJwb?upAcF3thAFXT8@Hd+< zGB9-h(EMNv8sg?}R|WMLYcDXAXmp378QcUh`0@)uRD(-TbjM!lya{!MK=T`x&YQiB z2SKjrZ9WO2f?mwi2fO7Zq$z!ce_M;h9s3{u`S*Qj{Z_)>{Ex9j;k9G8FWkn?TcCmD zpw81TmOxV3>%i_(m@LSO;NG_LV52)fzi@;Y{#vg)7N!JJ>czZBgXo634J;b=A`l`t zq1p8WW4G%G{%s8W+itYp=5I{`jR+$g0SV7Wh__F_kXixuL+8Jjpi7rQ=Y*GPBKsUP zh1+?vcj8q@HU#-RDB#5sJ+LnRZEXD8K$C+Aum5QMU&7w}pRq*cwI@<6!o2?b#mXmO ztr+kB=UJ()043IErgM`877h=o7PU?1jzzC}D9x%Fcbi3ZMcIDyku?H>M zL0{trO7;#fCS-szRKrb3N$Pq8x%7nQf&)LMns6KkWeA3D*CU`-KDe`B#@{*{+z~ng z>5?|I9N=$t1dlEs;ok=8u{LxBa3WRkCAyd7EZ|xnp@fOQ z^&1B$EAcS!x4hv1jaq|jg7%B~z)k^8mbYF2sd@u7=7I*;n3ucZ8f2RvFoK-61}*{` ze`#3&;dVPnv>qr0&5b~uae@PUCIt8jUuUo#AbCqLOQYLE0K@=|9v$g+;0f&Qe&7Hq zu>xM){`v#7XsFv2$?GrOAyyy-j~+|}7CbNfkMJ^pEh`3@>>vT|Qb_W*vV%PZzM?IQ z<3*e+*j3%3N4kSRODqC{vTR zq=TFQ+KB+7LC218fKFL|;S&yRmK_22DX)OS6Ew4N1QNL_ASZ!F7aTZjgi6IAJdmdy zR4iSu@H@L+>2$r)SbK$mfrX(=vH1;4215e_LvOPNEXaO;2S@I4SFjR9-vDdh^h%j0 z#0GFo3V}vbj(`Uw95`%5L8B>fo=7R-UM$FIVB6|=Ltah6OtnMTlRu$D-j0%*3Do!ND6(^?fM3^ zh@kcjLn%9SL0Yrx1NLs$2T1ie_+;G&h@yZIqqO+=A3W-YP{LHI2QE-FAn6NQN^n8K z2PKEEQvsI{DC&|CMKDY6TF_ws5pZeXpmOj9 zbLSzLd=R+bQwP!O1kwA_mIbuA1lFcw>7CpLl80L%4N(R&0(7xFMGjreW2)s1SEgU8c3G!b^sR$^B_F_Z4QuZ zU4qngLFxrHFTmoIB8XGa{59hiSm|qbm^exw$O@Z5nph3;hZqF%DRL4m6$goc)+h1= zyf_AGqJfULyz^QfEDTE3q7W9SJMco+7aUxju6Mvaw>zNaO>b^Mn!1cv|Nn12P{IpN zKmoGNrvy3zWFafFL3i`QySSK%*5)tSiT0-=B+-Hwty;Q%D1j_c1UoDk;;`o0D;#Bp zU{8Qz80?Q3zab?TwsEdys^Abm4zAw2Lyv&hk3jn)EWMLadySPa#jrFCN>nRAHz{Cr zR{F4{&|XM#hxQqDFbo5w>@b+VH}K{LqW@M}4fdEs>w%KO;|CxrKqJwx)B^74qIR;5 zsX+aQ?BuVIm9i~ubPZbtYT(h6&abYdsX1=|U# zfJ(i=mVi>0G^jF$HX1CN-*5y4ym;#kPGGOqK~fH&!#e|BT>b=3V6TNIycU@7niu6p z*>2>n)tMjS45&9YHNTN~p|bAVf7Wg1!3{Z36#$y^{UKIf-TXtOSgQF4e>r>e58h(V z*ICU!gh~QmCxhlB8D1xXhAbU;Kx=XQiylal z0kTAeq4X5^Ec(}yU~?crnhw$N8gqYy$cwtQ-~O`-fLsY#5X!&p((!|k72YC(4Zl+O zTU$V73s_RN`4MBwrIIqpGEc7NM;tAeN;1HUJAFDszjTLw;omNl*8I!5G#Io1CWr;X zwJmjla<>IBgI9`{8p8y3ba*jC_}yMCNZrIh(2W3{hhH2L69J7sp>#f999#44 zKWoG}6$Z3>uL5F0?PrH`pwUfm3SvMhxEg1J69gieLWXQXR~R9sAy9`Zi|fUdt6;?_ z7K2CYU&nwfxqTL43Ak9|2zUYNsUsPLk{DSbcB307@?s9yxSq41q{73$jRD#MyU^{* z10EGSegHOWSt1WQERD6dc_t`BfNo=%;0tbRwH^SioBF^CZm)fKQ4bk0gQf{k+4zNj zTL4${DVB}^$R&FWHd>$}ml5XcqGo54dXTbbW$Isu<0b5_wQaq6|ZYz6c6< zu>jONMU;rp)O_p`nre)eiV6<%0#MD%0;P`L$;~|IusBD301FgK73L1ijF1~>}`UThn zVA6r3v-J%Um&X#!Efwf)1<50oXkb2MMI)36T2l{WLW?#q7wiI%ZcqUS7J;nM5rUWr zD(1kVnCd{~9oYWP)(`&>c^O9;w-uxYRLn7RfQvbllB4cDYRLf_7ZZ3<5eh0dGLC@; znt3?*TQtDkSso7l{(le_3xCT&(8}3b9v1%oR}eAA67J?&9;T9rm!PZm5J?H#CAthw zN(GZaDFnF;1=odrZ+Jm%4wx2b5!!qftQg$vdT9^Y&kar2U?XpXjg-Z1q%~F}4Umm| z1HQ8Z)@%VA`50{EDew)+7_NNr8k;NcoC>sP)1a7Vtt5RDgqPC=`cbY6jow z$c3u;38XrL!~$sjOLHv`W2psbxdM0~)UZ?s)c6fxLBt+QQ19d~&fs}}dkLh_sRqwt zLRN^teE_SGK|TNt*Y*m52TXVlK41p9AAD5p?N8ud3aEqW3R=*@@H*&!=?Bn|08n8#IR>)AgdKB*3A;Eb+@Ndee*G6=04+#GTb}~a zZHqe z$bXb6MUbmoBmV#Y9{^F@dHKcMcOnd+ix!%XfI3OG&2Mwz zY*R#$0y+Gj2m`o+gc$YW(rd88QRj1oUSTV1c>+LX?Vkgn{e=QZw{A0*h<1k}3o!Gy zvVrmjNH76(p%?hxFG#AFuXh9OLU_Tr3$%Fva%GgVD@S+em*!WD`@musFF))2WO<}?H32M1l#}) zp|x0&pqmI%=ve**CEza#^`amnE7`$29H1TKPFL`S)eze%LG1sf(qLtv4X^)8IkFgD za4rXD@R!p;Bk``F9exbmn=kY-FuYdocH^;hixm>3v3-B>z5pk*%5u5M#LP{bnAAR|3yp^Sn6j0}AWydm(Nr5ZDh=$-m8w!$z%C zv)fIi+ra=lxFcCA4dHb=2p|o)Gam0Q6L?(>)}U2d(d{MzRn6D!#?tK|0O6sPzf-`8 zzlQ^}^!5})O8hpzL>M5ZfLe4QrwH(`KZI`iOMlR1Hy{UqMy_5+HvbSR&pY^lsk=qO zz~#q(#v6A3A9R=byzB>!54m!5Lr2ZDrv3)ayn&YRWie#gyr^Oa$2NFC9+YetF#30p z)w`fkxPwc;xvKNnYuoNJ9#F>sUi$S;hIkG%YlyzgJ4XP?bMZe#7$6rSqpzNX7_b3L z=x8GwAoo**p}UL)w3*2OL{zY#&(wlrSm(v(hu{7;9=p059K)TiS77<*3228gXsr|n z|F$2^|MU4<%t51^|MU6VjX@){|1HZ^n*U4kH-WB+>vew)x+k$+l9_=49JmHGpuqiL z_y0k!`}F1?O#JQtm>3vdUIVXrxYAo8aNHF%!OHMb89XO|EFuUI>8=m~uXhvZbiMHM zFGL?KcB~*nft`msFC2Wp)GH$ZRw)ARUdut`7;n6kgBk>#q!Z?Eg-kG90Ux)(6VUnj zg+?v30dxUnk=%YzQ3%=W{GAq?osWZyh6~~UORsc(e(~`j*by%!V4j37pf1%1dy7T& z|NsB?odDG%)_am;{QFEAcp1f>hc3%xRojgLX02XXKXkl&>se!p?>hdgN94H|-nJ8yIz z?z{oH5X=>{AsZBoFD^pP8h|7;X4HhX6(YxY4NN%KPU0j8IrxozYN zc&DuZ7jpWX3=F-~z%8KOX^{3$=jRtmJcyE@^Ye?~uObZHu@?vhj&<|Fl&5|B&$@LxsCeLMJ^;GV8hlI!FR0}WYMSy-J;1;1 z0K6^&mnt?d`rSbFMm<;?N2lu%P!Z&M0HtgJ%>#1qZ~M^gdZ0Ieu`~1lB&scsm2iQZ z)h{Q2X5#+k^S5NNFfcU#%ja*G28)0So_~`3O}wlO483lUf`^e6TJT6PxI#wv{fU=qb|F#2`hhVl!v4Yox^i~Lf`+zU+6RqI7A09ALF^kS0T?>w)Il0}Q3m5Y~gK69JF>9|(A122uA?1SSItAPyU0 z{? z6;DuY1qu~2aD8y3+W}Hh3ZcgJ9v=?XwNgup;rQ4 z%t1G00n`+PT{i+=l%cDtf~o?!7Fx3jm0Cl1;Ft+1gZk?Z!k{|=FLcojGDI?{K;-3D zQ2c_6ebsJIfe%SHYLG$>mTt@;IrAH6zyY$33&oC;#%KX^7F70w0tOtU#@%k9GtW3| zR7y2^-9Uqi;AjhYF%ezgRH(k!36RK8?FK1_IB7DZ0)aWn4&tO_P!G=aM(cqRUFbSX z6qo6v+h7c}0TjLbt<2zl`GJ?RAW>Ldb>zhd$mQ6*u6KGXSioaJua%IBD*^B|kNn#h zEa0UFXoY9Sas@Ma3%G(2;=*i2GqWM8mlxmOi7cYOgG83E1jfE2s{S?~ne0`SI!NSFmLKnh_N+z1MIvA-5- z!4uG+vMWS?X8;el*L&o}1W0WNvktT#3B1AdL$~W2@C4ll&;;EZq~UC^IB0_I4RnGI zL_Dlp!ckV;?L4>X7ko`vCPwYYHe|Ku8Ck-T=mKC>u0=APl+;p7H-ykeV0r&5)>p z%7f3#nF^BW^y2CK)FA+>zFWjVSGI%d@rfLu3LRFDH-q{z(0aU_16Gf>px5Iu91ILE zZ8<a4YGvpNhzY%rwX2Y<5*YAedKEOEAe+(|!1MAN z8v_GG3#=0t1L;n{1R<5OJ4Em$3uqlFI6@$C2X2CZZ|j8#g6q1Bd{|uv^T&qcu3I4f z*Z}s&7LY$SAp2v>|I!UF@*5yQ7rLd}bwfAA`Msfcf&yM#t%UjjSwB)yvZEWcV1G}y z>ke>s+yOtlV-Ixxe$W5X9WVHy=7Uu6bi3{Wxnc)6SKm2)2$X!ggLt}q?|i?>cnUPe z5cGd5D4o7|wi)c7m#j#k1qqma8DN=C@F?-|)`b86|AX5skl-i~c`Xd7DY+nW@RrL< zXuz~q{Qv*|cx%o7|Np_k1LlK52rLAeyaOqKgp)X^HMkX|^#4|n=nKbsNN7z3iFHG? zLc?q-Xw*6=;KjTONU%X9L6d?YwJ>u*K8Lsz+GG(a6@*1ROJ{2g=$IC+<6s)(E2x`Y z8;-lSfL-g_0CK8p3n&;HAdZA2%9j774KEheL7W%b((T#+i_EDYLxTcdutFV%Vgyor zb{u!@f!NUjwxb7RM+dSUJ^xEPUf99x=;?OtfZG9zhM<5K3(Fy%cSSY=!_Pvcm2f|U zQ}3!ANSwOffq8hsan~sj$4me_W(vqL6ObJ<<$vjf7aMD#9-h+eIsxVwaOxF@xdd51 z!X*VFFIzwjC2%`W5Zun=34mS3`Z@#Ja)P;L#&Op<5ZBBAyJil^H8YT1Gv|Nlj2Fr< z*Uag5oq^(-&N67YAnOOY2HYGhL^KD}U{)?T?z#kG;tsU{)gQ2NghFpk^1?UO{kUk|*HBEyx9!uZz0D`Kk3l33>>u zIPSUz;+z#==d1xaX9coz*8DGB@j?;moX|Dht}7sJ34)X+?WNEVK-Lcm0khU`{H-Pb z{{Md|32KK!+nkV6pz;-X$sROJS~I{oHwT_`L41&FT0ugf90nEu*ME?l3ljgo6(sti zy&4iwQ$b?gV51Q3Yd*vh6!79n3B-vINl?xOsfC$~$SJJ_;K~y;$^uTkHq~H#phj(L z2}lZ}0Av7&3o-z#1Ib|^@&8*vqA%W6K^)c#5(Br}Sh^twfD0B-RC>c42GRibFi0)T zTu_|e1H~z{T!D;Hu|qBbh2=9y+4<=kI6Pmj$54I)Dl-){0dfFonDzv?^?VRZ>-p#} z(Bu|$264w@5e8^9xnAk41#R~MIn?zAD4l=?ge(u0K?28Wa}r zBB>Z0lAysiP~#M$xif$Vd=ShN#O61x^BC>z7cDK{{O` zP>b}3B!AOyP&W`XSD?V({+(316Kwww}b2kg)7I4*&Yxf(2-Bz zjt0kz4ye#XP$>?w6_Ub*AVzl{L$dB4WGDw@T@VZST#=v`>w_UC2BB)d3{i@reLqAD zq#fC{VIa4Du7()H4KoIk`FgNx0X1*}gI?^0jJ3bK2I?z8Jh;mpY)+@^2e7*#e(~~x z3Vs14v(PV{0V3dY7v8*90QaUKb}7K@deiA701{__?iMe-1vU#hZdD3eR@~_d(+lda z1-y6yX=HYXzUg!V_p6Zgen6YBxdSc<+_^FP(YwDPl?3bVi=eHZ26w!CK>LcD3_(e+ zXc0K+b+&Fn+D`n$@WAobJ^x^hIgnJh18De(uN$nc+kxlh8_=ld8=n7LL9#Di$bhq8 zXX^n_2*8EapMlG`&V!JlZj536>zcCNW7U?=jo9tI8kK$pCNDuLeS9=9L=F_x`?mYW5NU?K2R%e zyob2)Sa%E9{!TV%+1YvoyaWtHcD9~?_^TJZI4$7CRY)z+*?I=71|$n!(gxx}m$X5| zKz&l_Zm=@=k~Waci{=tY@iY~rr5kKMtPTXPatjK0@gNsc0z)K0RTxMusHy>(0IIJc zGLVB{r-B6`XTgG<-r0Hq>^Lw9TGDm}iOXZz3gUv6w1MQ2#sDC?96-l7Lz&AVJL2d&xz}2cyH&`0f69F?Y)qzF`!1jY?)1lFB09&<8FbXxkfTQrmLY<%g zAqf()?GSXVAM1+{t)Kt9-B^wv0xvxhYJSAjdZ`5EQW{X!2i;)v@Bt*z9)lPH>C=Hm zyFm#s;6;BsSh{;ED20RaBrNSiP9XxHGXxcaEK)}8Oo3B_Z4b_b}PY8Tm&&yk=3T3eILCJCsbeDjE5B6C`+5w;O7v5h3my&dQeXzf|oI0 zKy5MbN>NZv4r`y3@;2`UEqrC*Z&?AUK(Yj0_#XwY27)Yueep;0=l>UbZ6HfgAcf^G zXmb#<2-S(@1&1~$A%m8rc25Nrpq&96u*}fw!Fc@83(&b9T-{LhJWxAJWV$DVnikL% zt^!cH86@`Fy?ZjK;RF?f%YnpRYhy7Slqddg1z8R)7D1`3`G^24Sa?vzSj~=NwE4hI zC_QaZogy~}T&I9zLl$w?5$No6P~!k}<{)Te@BdPsEbuwA_ve92;Fk+QDZ~|eMiSc5 z>DOof|NjznQO}EWbN~N;T?tx|2s%L+baFcU76ACk>0m>k*9=%glyZVszL)BP>tWDN zC1nr`dD~nGmXp&HL6-5nh@AcZ|7+G4L9_q=2kCMc&;y;;9|5N?q}@D-Lm&3O0~L)( zi&=U8mkRVw2GxfcXLn2ltA$>iz+oc;I^F@a)a11g#E+nI_{E$UaOMFm(giKPgr2{I z(vk&FuJXJv(gel5(k##!@;n)!{PJRS^9E2S;0;u?8zy>SE(1e1SZ*gsIe03$ z)1b42<4Lx}fF* zJlz2--3*Wz;tFzSTJsN=()4bSArL(v8@nAiAZtDh(N=uD0k^R?@?f^H!(W4P8ML?U zbwz{$WTXQJ$l$(gYEkGJ&fap7bMPEF!z96t81R!C@2v%W3>HEx6HrQ!;N~|bFFvV&66B+);JO28$rt!ii7Q~8poL#dpcQj( zSbBZ$fV%!#&`y)<74V<{ih>s)1)NX?pxL=MmWN8Ex&dvdW-H<%PKi`KA!C8$i4Fwt(D_2yp}A6xI{RUC%%UIZuGIKjipa+xn9)C%aq zyr2Vqdqa-|1-!6_S%It{#flrpUGIR_T7$MegGSNrfQI0pyBi@xaCiQf-gr?4v*Hd& zA!G=y7rfu_PCV2Xkd2WL{U}y|PH6&9>p~BlwRC*~n$~@Q)TMI;T`vJDB_2ShbwM<2 zS{HT!1;}|1AfD#|A5tsO?TR7?E`L#XBI@l%%_4}=1r7Kn&-sWL)jn**pE0Idaw4@t1R6a<|j@rDD^fCVKgXGk9G zJk&XL1E}u{ZfhKT#Kd@^+v2ra^Bb0Mgj(prIq*n>J4+|nfv?%R?OXqsUTfY98U$eA zZ@tX|S}ucRg8-y>={yc;$8`6C?CCrOv4f$L9U=@B=(GT>bjNlQ3TPShYvCQB#P}L? z+0gL=&?W!Sfrq`IzCA}B*Ku%%AEX*I%?)lm7c_udgW$0o$phAa}jyh4_LEVi?5z5O#0C|88*m zi}6Ayn1%?0>n|{05h{NCz!MG=j&1>1VPJWPzhyJ1Mg=D$NNO-Cf%cOjTtog=(8`n- zeKJ4)zhF}Zb*Dgq0g*H*4TGngZVwIwJAehk=7%Jwz@UIEmlxgV!1V#7+t0r(hzU9x z8kA-7!uJwb4l-KyS{9-k+|T3)$YOZmUxp<8!bld}>B~}haX=l?4nEdt2hq~$2D+aO zd@M4kZ`aMx=_UXPjZQZaNFa5(NgQ_r9ZAn{+zpg27`nkNTF^}votr_8zt@})k57eT^J2-ak5xA8BQ;%)`ICv-vGN1(+U}}ED0~;0Fp9n6j zI>AFb&_N&vp6;ojktXP<7-E!2x*MzvJ}L&1d65epKL=}pn*c6xVWVQFqQI6wB|#%k zAmc%!VjvR`V@=ReF|Z(XR17qH2HD}<4es@WicN5z9>(Rd1am>7VxZm5NJS`AJ$O_M zBn2r*p`x(+lfYcC3&2W1ZUZx5qherAfB?icOm(0F7HmJH^yvndL7na_5C&|)G`N`n zT5x^g;0qQ|`vA1gx)oIJfVL#@ya-l>B(~!aZJq3$LX< z|KAEK1wmU&SDXc>b5H{cRLrK8fVq$X56FlEWatVqL_egpMEBz-7V#>Pmo? zn1FYNFti>h^@rpQNS-w+b%1cYL3<6s`$HT!EDx1RcTWa&W*~Cl00ZUoPVjymh#+*B z1eCYIHkUq0H8zDd>FTzCnoTIp6i};9;66pLBt{+MpOPfXuXXJMh4#v_Q)KW_Ojt8$f+a_+o5u)7@MW6ng3)Syv8ltCOeG75Sjy z;|C0&hm%$a9zSpfdTC<`>x&XlFB#l5?{t0eQW?a9G*(<8tr;26k!+CLN1i|uh7IVd z$0v}nT4wN-6QJ%DSOC0oU#TRr+ZC$Tq%;P+WDeSba4GeLa6!7kifuq^R6%+{i}XQB z)B$QF=teJy7+kGVDL=|SFxMw9oH{|{K@UJ{cYiR}>492J&}F>mHi2tptYb8icR}$B zYF&ZPeTQsGZhiwgV-@Q-&C5F=^$K9qIY4`T9@rRjbhAuo{=v-O0$M--Vzh%U9&G-> zSW?scgNeTtw09033`S@jTM=;5v*W`|dUX)1AW5(AD5#hD1l}WeebE{E2I7jluAq%< z@U36dkAesAUdKXYL2iV$UqH)U83RDaD|a1)sIf%J1rVorVR6dm+hAWqobv352*U)h z;Vj@2)gCbLw_g4W+6xc57Ys5?fqldWbx&s92GsT{B=fhe1#LFUXjftAZUfb`r&w=?r^KXCle13Ty) zu9>C$-OiASK@ZUA@DYLTXr9*FrPq!hNC9m-l)$eCRAzxjV52!edR{Y5K;3l+?(oUH zIJpMo_|m;|Cr%f|FyX>jUsUyqBPj#-KCqJQzED zA3(NGG`}!t{^4F81=)pl1T-@A0kp-W0`#uk*+#Fzvww6 z!Z6`AlAv2T0IHyA(8u9Q;D;5jd9} zcl`odYxf#-#V%}RqbnqgK{Xp_6dp3I4XrphUBA3`1X&1O6d(y#`&tVm93k>ry4xAF z`$`Cw5}+5Yak_r#mTtXW`Vh3D!u1RCMP|?hDkTi69JpFk7(fRI*YY5B1H0Y86KDL} z4s;%D{mXxB~7bP$al<*kqQx1)G;$@-&MXbPz+>3+tnQK;14-iN_Eg@M6{;u+gmt zN+DNOJ#h!^j^DosTrYrPo8cws{0OiqQqb$HBs@TBW<%8Uvit>=H(>L!m;zoL*$8ge z-34ufV1XCCG6%rcKn(N%ZBYAh@P$0%kBdJ#4}n+Gf%bl8Lo!V#vJ`0jeo(-R0Jzi- z`GYUydqvorA2EVP$2yO{{0S-yK)Y(SL4M!}4|^dD8pS>$@bVK(MyAyGIAqHOXiN6- zI^J$K0nOu`KR~BI)d_UFfous6cu~6)?8@%iJ1;@YMvyb>WE*g14dchGjXqpOWYrgs z_lYoo0}Jk$Hc)|fMBrsAc={h{025+j92OJjA)7c6W};-NGAt6y4#OjnF+AYK)m>nB zzhr{>SDU}}90Ta2YP#+%0__B63IAXEAnZj{2RIe99zd(pA%4!n;^$RYkV0|pUeL(} z93Zn^yjTqO+-nU`53V@~oc81wfYaw|kqNE;>-fQWL<6dfaYDB%(y}k(l^9KFaE8x$ zp~(-*@RAKG4B%9G+;s^k9UpfE&5$x2cLlBb2hAaX8djhgJQ3)fA}rk%piVJNSg2GU zRPunP+CVE$pmS2-31SQI0l-VZ(juL%6JFi`?~VhlNbPh5Ewu*O2bKjFFE%2eqi8{` zdhn2lXen>E?}Tngkg3ewm8f=dLYA&}x^8K%-M~=d{+biK5?cU#G2#ZW{w&aCG!SMc zXmS(6%r2D%s{~zLst9I*iY?GxdlrXEb~o2~!7nS_|YT@ZAw%FD5R8#2!Cru>xrEcpGHH4P)twX4f5z z-L5;VU9Z%gdkNa_*ZRMNpMRUXEcog?{#H=NY5iX!-0g0Fx-lMpNW&hmgEheZ0PToJ zRR$VK1i4e&bqW9aL!GXBnrqiElxQNI&hfu=3j9zQtxKTvC(!J=f)N_|t>Dupwt#Pq z-(&5%0yOcuN85D;Xn5kq&IMq9b-V8AbX@_e6u?)qxl5EM4)E2ebnal*lx@T_I^m zvP7=i9dz$CsAJvRyat>jd*^_2w%dEU&%6FXnw%1d7;zw!E0Q}=<#_ZH-b$BpZLC_^gQ^yA8pqM zpk#SN+x39uA%4F@ouI3`VI!CfjG&{uTR`KQ-L4=d+K>zXYEQ`5%Xf#K=ypBAc%k`+ zLY)x!N+oUA6Pm7|ttSeg))`0?!oHp#EFc29@jLf~0@~s{NUBU0 zz^u{az@C7nO2HkV{?&=@&@-I}FaPRxJ+cqfX6rn7`B~=&&^axKpdLE{^4r17k2)`K zx=wky2Q&~0P6yqg2f!7z>xpKN8)@c|CM+HaJqL;ns7E}u6Yxm4>jTK~Gn}A{Y>zOy z9ysp02ISdp*8|qBH~4!%Yac-+FGHv6gx3EhEZyv|qUbo}DoHs|;RY&YlyHMpT4!K(J2OQ#bHq@xHL zmoMcBcroSYSCACQ@Dk9K!p9vzqvZ^*Ex=1?1zxnEnzRYYBo44ipgr#YO9cX6ctK18 ztv+oAxo5&_x#n69M$o;f91PHgNC=s=%pWqI*540QiT1$eaq|F$5=X|tu0 z&2Kn*C%p0a@jvK)DM#nw7gMK!^}jZOEDPpre$>!%sRW`-#1pP852}n8-1iBPYd+P` z5g-RH96{GYfy>%}ES4ATkftWOb3|VJU<1X#i*nF1aFCBWUBA4%3tDe=05Ud$a@&x! zD`=mn04PjABZCkXkb{O`BDg^))#aPvwO0|T;{ zLFXj8dV*T%lU?A(f>vuGyQ2nG8>lqT;(D>D4z2;bO1<_A1Ai;1qlGaSF7o0TD=0*+ zm4OEMSh5%)%cSnKf?Wd+SkNjp=rARCtrP6%a?tGs;AnsyR*rNY9r(<d+P%dNY2#|Zt2j_w^9Y#`8dGRyo+ke*X63`h;;8``H&d>+l zp$|GkpLBL*StwnXb-T(15w#9VXGsBiK<`~hjku)vBM1#Hf|iCMxz@~=P$+!pcy_lo=!Ioa3AQkc;}B^kyc2*h5L8TzG6 zsXO#TcaVT(=$B$~(7Xd^ivoBe0=!uUv~LI07yn=S<$vji&ciR3K;jcM!GOcY=Eai_ zKmIo!j3`oJ==41TN?)KAUN?H3?>GODFAoBb;c*-Z{_&sj1ZWJ;mE&b0_zVkh4+}i3 z?gBa_2*d?-=D;Ghpkvk{BCyp~pra@_UV@Il0FS@D;R${b38^7EkAp1T=D^h9&IDmG zA9%rnxOw#u|2B8#<_GUNFLbyw!xb}AFy>o zt=SJ&z`vcHfBS*%(j(n1Z4V3?7&=`KfLHargxt7(pf`fCGZuPS3}m#Eza2CN2MVp& zBi$_$E+Md?Bv+1ZmklhPF56i^+1zCV3uwHV8`Qjq$bh>+Sifw43>v$&b=%I85?^9Ixo)vxvRR<^~!PA8<52AqsnEoV1-C-w#Z_#Xrko&sV7ykI+wR5AQq4IPp`#t2Szpp$qIqteItdwT!=|KIro zt)KwsU6~hLzTf_{&dCE^?e?U*mczQ1rxVpF&84N%SOGLfbE5F@CX2Dy~M()B^jk=H38-5}#$N5ffxaF%;_>=TS6 z=KxM}pu=uJDGfczO+J8>O zzrX%(Jgl7q?mjV8$idS6|5DJgo4u1+!of!atAMS8^qT};gh6lHJp>-LgNQx=fL1+pR)Y{hQK-Ni6D(AenY0B}gYVPs(FoeU1g z-pSC6>kD=)v_#^C^KY(_)aKv+OCP+BYyPcY zS_<|*N9X4kOJT~Ie`|s6%VGIn$`PEU^&$w8vLKBRp635rrL4`r^-JVC@58lb!L+vC zF5v(feiJku2HpzU`T2zpLYBYP1~eVUIHB_fwz7xkh1~>@ZxymYy%ru&_ZWI4Xy@VX zT8`%53MEM(55zYA<}8V5{>@Vo-2B_BM6UU_W{G6;@7NNN=HE&s{2=FXHUHKqVQu~$ zT?%P~@&tE&e(}i`91^c(L90_4J8yMB5))77=NHS1z*3!uU(d9z&gGD|1XRomEJLS2K1o;@JhxQ&_2niAD{&8l?iV9ceXA; z-6shO#;qW+7fg_#?mX7~PoqQxWC>V2EKB3X8OSn=5e`3$8>FmHoa)kN=*Ks!Idq45Rc<<8^H|E)?xF?@a)67b+A)N94=mdy!4 zA?^-%Ve$g%-x99oV~oxJ{5 zl@OpMuAo2;dvVVS?C)l<0>&Mn145f$Fg70$K{@U2f z9z%EpnzlRLSeo~O9bC%MxfSH!*BsqoA9NaYZUspk2c1O=YLr3)@)E?GouG8b+59h- zzf~E0UIWOltp`d#H)IFAF!~7Y%tJ>55s}io7o?1Vzb}Oabb=4azD}@hkQAi^iG}Wv z9W33wAj`WQSvp-du{0lJ>}G^0wB8Cbq2}64CGeVFSoGS!T!j?96_8p7Tl78yT~q+x zl?=+hh*0_Z6YOqqVNfay*-Q-@@IEEnBOV8@C#3JjWOq5GI1wjY8L$4%WTX-~v0{iUGfqKT5UG+#JDjuwGt z4{+A#^x47kQVuki4l7q+b&ec79l}KTrhuyv*!on^cG2#spjDxrAv;)J-b5~(U|McM z90O`cLHEv|oD4PO1ZYh@xGL#}Y+eT$0-DJK^ z*G#(LOmZBhP5B2@^#{FJ22qSKh^KdQ0=Q8JI)@XzQC9(04Q2&bY$~*5tt&cMaD0ezR@6rbKI}bv;i=h`fc_x7FZEmi;P+fQFxa$Q_IRKSxIKjZcVCj0HuDaXx0&E6j zatCUx2(x%L8E-RtA7XF$d3>(Fl3Gu=~~6Ldk= zp8@$;hk>EnrS*p8p;`lwTubu<9R>!FzrRd3;Q-C3iFAO(L(gOPHE(%w=F`Jy2rZ z-F#;*0|VoMT?-f(7&H&{HZL$?U|>Ad-FyYS`4x0c%91E>Ur1szIO!e-YXy0*^;@YX zL|s4@E2t~7A__FcV4wp@(O`9;+T-PP4p29q4ZQ3w!QPmo8?@3NVg5RZ`8zg&&F9|+ z>Ou>&94L{38O{VUd=uF4%i3VWA&NLK6m117T8FF%bi4wpNjt!bI*}DQV3@QUtSAMp z2($q-gMT|)TJsO45>5z%xm1ULn;R4VwhPA(IJjW=Yahg44>p4R^;!$AHUYHs5H$>- zYPUetf_t+lYclz#fKG<)bln4%LSDXj;JE7%P;9)M0ct?H9_X!L?5u?k>1j3p@a1op zV1o=Rv`BPB!`PA^uP*^#QGU`thkm0!)7_0k47j@vnpf%>P@e16t2E85(5) zz0HR}p%e6i72;e-k^o0FKd99SGCC7xbOP9j_fVtWl?FgkT=M~@PH@ue2B(wO1EnI6 z=mzzEvlL!vrGO(Eycmop;Dsu*eGAso`~s@??6=yhr7HWorH`fcK!q+;OaR0O zZ6CSN%>Xw%ptt!Q#GPN(fV~b0O^}%{L3gor`yK&lYduh}3!*_==Z+tE;0#`Wjcmvl zh#~7ChP=j>ji3cj4@3!)J<~vAqL3(QJy7BX4=2=sxe^Zv7zbDabAX05Bm$wP>p@I^ zjaqH|0J-i(5cFnbaH$3MA!t21)HocajT}S|q0;6QKU!(?5wN`?ktnUu2Qi>| z0Uq$sq9aII@8kdw74YKIDv$%9tiK&qCW&EE6nUkMQ>d{QUnPk}r%( zqu_NTe3uAQi72KZTd6^>8~9KHhECTTouPN`y56`OdjXR8|CfR`KKD+phqxpI>=FTp z95}OSzPJ(#j(wHf+D)KyC%`3kr|TDpQJ{nX zI?e$s3Yr-O2R*2jU&`|$6WV)m{m=;xckmh*P^$}NCLer_@RBDWo2G<1W572u^J|6{4e|cthUNCm$(Y)}Q6}(yi zJo3!LP-zHq(V>H{A+}Irj}?bL|_3`p1wp^PQmi za}MwpGO#~CyfB6=zXvG+$l1o*xzuwTVM&RY?p!tk0CbTD2J zPiH6xXs2-rH<-&}8Ol@o3@jkk-EaZi8U;;ual8PnJ^`&)a^-lfiqvoVU&_w!v8HVAu>3GF_C zZ2~7mt{2|X;5h3p<7xd?y8ktFQ22!%MCohLz%KGJ3E%*0e*|)Oc`#OY!`&bTabsHZ z52aGj#m?OhAeYF2OTSS`L&#uQ?9~$L{NZ z&YQ;%fw%LRbb)T`gH8bTM*M%R(|LpO1L*$j)Kc)$E|(cB;C2)Aj7QMb6yTij8hS>= z1+a;|smNg;7W^XH;M;%Jzk!gIXW-!I4L;xe%eB1b;3KB)DNJu-e*9-VWcU9O*f8)` zBCtW==@ZyJVG@?193=)Yo&t!c1mkIdcp}FSD1h(7vUKGrfqF3qY|iUcNHzq!Jr$D8 zUI$Jf-QUn1OT_xSSpVC9R#uR|OF8(ri-D6t8Gj4t`jY0~W&G`@z%lE>-_i_aw1b@6 z{M(kl9dtfy^KYACeo$%%YyNFk!vAtM0|VriN6004(EHOQEU%U5!2&|T@>+=^j3Z!q ztwiMb0mwF54a;M&K#2j_!tgq@+YJ(%-p~+nfeAqGv}!$2%G2!zTe$(#EeFvp-tEQ# z4o_aFZng>F*h7!}<~IT_vh_gm?++?TIp7z*fDg^xFfL~N8(L{IJosdNf6k@uft&qT}vIH8@gU=f>I1 z(9|v1B^q#z(9|W@?D~ZfrVz9VxaK6}tdv%;`%r`8MXK(%|E%Brz{L+_SE~tZ6GW#g z2WUkLc+re&sSLIqqcpRlW7PK7_db0@V^d`%Du;MQPwBrW6i_xZ3pxc?n@))G!{?Z*H!N2`Lr|T2& zsZ+e=g`mX@Efy?sKmIfRu>1c2QhAt_igX9Fbi09C;?M-c#R$tc3~<&r@K#39aD*YI z2GEcu*dH&?!?PS{8Tkb8=)nQdSu4`bZ#aU(UZjeFH^CzkC-_=7-zS}?katLec(78n z;{WTC&L7OKpgoc{uBEn+{fx~o7&~2`yjBPEU>hGf0>WN^CjB7Su0qqCLv!vE#^%~5 z43(E(YrqXkEtLUj1=WsWFB(8|az{Y>_Mm!rAZyM#z{e?f;dm0 zbPCjWsC5sh`02X^s`%@?K|TbX&ILZWOa**!nJE)&WXA@SjKDWAy7F{8fYx1u?-ncO zg}MP&`hd=11NqJYy1m?vzeN+=cLJR`2FaPG{4HW=LT3Ce%xFRu{H1%)$mAp*1P6c)?C?Q8Yx zpll`%whmfNSeGbwH$Q;%J;1lXt8l@*z;(R&325Y;fq?;~^$gyfapxMys59N9?0M1}9UV<(b=nj3+?fQlB z0;El^4r(!kzJN4vpk@cW&_{3PRk1oS?=hqR?oBWV@H3DKFx}60~>=IaE?hRS+QnF*x7_=o|r*x;qC1`;)L_g>h6-b#1QLha;t_7qWApy#v zZ&(7dxIm>%yaYH)wH_z|olM*90NO^|4KV=R^qvPV`V>HeA+W|PsLOz&70k*C@O=Sa z7(iQMzrdRUOeLJ4T@0YMIp_*+aH9m2Ndx|uzIo9F8S8I707`goAb|`n`QCuS^@n#I zFQ_~VeF55C@aDA@I7z+$h4fU&QkT{PrHb9IFCe}JWxx{QZdZ_Z)0%%M^0zWV*8G7Y z6MYwj&I_LmP`#q(1nSQT!25HKph*)~P|D%oexv!f1%HbRXnDbJ3;uR<(ERRivl4~o z-)8*nnqZzbe@iInT!G)Z{4GA9`5@{(jK?$i2=Fnt#ZbMRvP_uJVS=DuU0W5t)F|Dgy7Z ze9a18t;KkuH{d^p3XFEs>o~jyGl8dr+3^?*Re@OfnhtX-eL0_+H=0tHv4yC7i!nu>81;co#iEPduTK&F)%pA5J0Bzd>g*-HRO4J~#k(BO- zDTQ?*K*#Mg|JDT^BOuUxfWy*N1UA$MI{O2xpQF=N;N`qO|Nn!kBha86czlj!LZ|B$ z5D(UwjQ9^;8`yb++4TyfO84p&0iSik_!BuB8zm-JsDBhTe+*ubn}>kQpq!ETE*t0Jld2Bo0#LvV#T5s=Zj+W)`w1(AM=$+H%HzF_2p8*xn`)xr5G^p}QYyM%0ZQ#U)zXf#W z1biUH78d(ZO@{m}E#Oie$~P*hfU7kr$$_&=OA_Gh>XHz6Bh#kD1J1TBv4OJ?%_~x}$H|XrI4@m7r9*~I31b9^z45ELZ2JLWv z&AJ=3<_t98@EcTdQX^aXo4E`Okdwfgj|ds2C@oP&y<1Nkf36ge>=RaKVW$b*6j;}%5Q_*?6A#&32}+I z70ASYW}sFRO9uc?deze;h1pi$iuLSk@f0X~hWULC_WLou80K z+@FAW(5kGr;Qz~X&<@NG%&t$sON$S{w(5d50)i(IBxK^D>-s=03fTa5lFJ5=n_57N zq#@4M1Eon@Q+rCS=-9mfJX{*VPS0BTVx-t7z>YBwu= z(d`TxDsTSbU4IuMUs7@f!YD2|4PjW89BO{U5ftpLEwuVBz1+p4R*W>=qD1w=|$To*Hfmhr0znchiMs=UMX`o)?b~ zf-?4HBT&YMmJD{V{Nn&lUQkgpv@@|DfMcuzON=dOLyED<`Jm$`c)AN%n*Vw8_k$J^ z_PW9P&9K{9@Ju$4Q745%iUS-?F7oRnM$mCdubDbObRO^g{8|<^Zmk5$ETC~~*jyA( z^I=BI-*xxFy&7x@Qs+hP0Z^#N8iJM$NgOue0Ij#=Z}k9&H%GUFOsDIGmj+Fb1}LTD=Ywvw=je33&|G_gfxq<_ zs9tjgRX?D5u2d0RXYyp}g4+4N*}-FF;CdfaV7&ALk0OCa3L$l*Hh=4PaJYhmK#eQc zE8VVFAaWM`t>C5=sP7B983Nxd85se240JUN_;_d>X_x$ln&mN22lfh@f6QPNGH81W z#PUv8)MNx&s*XrT(V(E9O&W^CYcv%T5a_@zYu5*`fgC^h$d?PGRniR`j8@@q)qx9v zG8qG?W*0;e0-ekNIzt?K61a8==xh~8V$tPqeFRQOpo70VU2k-|-hfEJQ_&4j-Ue?* zpyIG0=v0#%pwT57M3d!lP$~kMj_e;Z{?;F$4u>m5fd+u zo#81JYOWPvDB%FDOmP(`W$C=}nx`9lQ1@+cD+f+`h+ZO|G8-umHh1>KhiX#rWf3h?(l1x2$nOLqYaL=e&0gtU?%bxkCw{e&|n zh%UqSLrT#7uzvmj*Kv3aCOV2S4TkjV89!LM3e0+%3k7Sgf^!P$S_M#U zNnHlYEjQJ{lSwF3P8$3UU%4sGZ?==^|TFyjwUMu09;5a=%B zX#K|D3c67p9FnMc;l-k@po}m{4Lo5E>K}T^Se_^atsm@kl6f86T_p2bs5^|q@&ZK6 zjpMaF*u>ITC>=nC6wokh2P)LR4u7=j z1?GQdkpES|v4GA0ONP7unLz$mLHECTxj!WSc@k0L|1>DKx`Kx;TMqC~1?|(V+ke)dN}%Emu?G4Ds7OOvC)8Z~!JEGw+fb8Sn!k-3H?HppC~5?y4j zNr@aXx3q*GnOj{d0m-RM{M$|)KLp-+B+}LViwQPh0a|y9tiiC<8N%%jVrjipY6i*i zpesKhEYL+6I820gFF`qO0-=>oZ(cTmk`rj=3ck`w5foCe^)x&IFOpzmY$c&!yI&`Q z=Cxoeqg+ev!AFgO7d(R`K!#{rr_1|4b$UZJA|*9r|55pYAi@_O@OM(fxoHNBv? zW58Bg%DnLY_w_&PU3o~}C=mgrf$c(R&A*JmE6-nE0!Jr@btn&rF92RV3fkBN8z0>S zkq4Kvpo9q89&XbGF@=BoCHOix(2kZmn1@nJm7pF1w_QNX>H=Os_lAH@*>su3^4brk z*tHaN?km{8VBZ@;wSs&PO42^FSUP>5AQ>bB35{;wC!H=ESs)>C8eDDgcUFN8ym95g z78E)!9R7a&&w5D?5)>fsa=bhW>f%BRiCewFSDSwc^S85t7A}J~&&VW0i_&ga4)En7 zAP0d?2NkF*g)n=0K(!}BcPJ0zscxaxOC_<`#QDKNZc(a^O%ilbRp;Rsr&dD>86%LB zK=;Y8z|S}30o`u(G#ff#GX-x>xf>$-zjz-N~V@b`h%2SF_B4q`!f zB!7!4vIbOXh@lqzt)RhoP+Wj6j6icsC+Kj=2jC%=C!kq&@a)DDP#@po5GY`uyvzYv z0Lr*eIzf{V9N^1@AAlCm90Kh@1RbHu0p5AgTr0u=nyUd#w}WP2A&JEqQV@U=ixbQ1 zAc#*OF0+P~lu+MWmVz4@U`K+KMX?}E`3qTl*y+sj8dADK^^|}nia_l)gwjh8rCO5Hrg+fu&cI(^|Fb@pMwEc?<(($rWPTlVpd&b$=fILV zxEy&|3$F)3r)xrz0HpD6TPg_U!uPvDS5(^*@eFKg| zs9FX~*EcnX5$j8HVbvMxB1-L*pl*k>6jJ|Nj=xnM7R->V=089pNCnzEbNv7w#RF{u zhB&g@^$U32$&1%k;AN34AiubP=4BYtnt$kkt^fpUfjSMg1H-12{kSV=Q5*xznUx1X zi;MYNmxIC&ZfG+zW2&{MVM0?&aO z$>v%fhkD`eP@d*P4hJ7GLoO#|yzm;bMFzBZCd;t%@QcZb;DL3piO8ls`1bWbYmo%# zP-*Zz8A8pEm|8EDumcSi&Cua7kQxoa{nfA&|#A-kl}_b>(0Y3D50kV;W=S40gmvkO} zSpgnP;xNOiYzkaiAVirpR%N=7a-s9^OD&Kx*qNI_kQQ5+Whf&t|HNg|-qf`b7z1qwMa z7j(JD4amhkoyQ>k0MO(M*jAoy2GB9X;I=wP%}daszo`4@UM&Cg^*^g6PJ`>oHMseW z!i%?yK()tRVbJ_5xYPk%49s)<0BkN6ZLWI`I6eIZrKib|^fVcgo?dK8N2I0~%L7Ch z!08CwGX>q8%2pzXD!^J=2NAFZAEwgj`U1j*UA4+q%DxMHz8NcMSusPm>x+XAn88<@ z1O>d%bOPV|0$RHd%END7K=%iOcLVT%7U_#abGqvn@RB`HBxYH?PzVB-RWJ8|YRAb7 z%s}T4Mu6ASSRUeU1+AYvegMK}JOHkw%U45>XL|sX=sa}%0M9H?DGItIJK%rmgBO+$ zz$Z5%tAH5Nd9d5{0pkgf!Yqb>7Y`?aSAIbChd$^OfN6o+#);K74X^`2hJbB5eV;hn ziea{a^&{H`4oIGW7qeDDJ@*9W4rsPGet-qphfiLFquL2q2JvPu4`}%pL$~V_gkQf- zg!&b1Qs@(eUwcIuAl7vXbT@;d0Ca#2=+p|c7r&#x(bIVh>HrRi0?_Gp;K%}<-gBbU z06mKYH@{(dp|Sv!kVOQMnn6~OekN!hIe@wO6h}t@=<)*4=IU)Q{_9{+{{+1G+YENo z2UIEA9aAg7DIc_MxEC$u?@B>R`D=YeP)@UZ@#@{z|Ex6vpjscCY`8$ZkRTSuQ^%MX zL3MPA=FLa0UbO=m<&$7H&0W!f#0CW>HD7X+3{U8ZNki-Ord7vSR z5{d4PC1wl^-4j^mF)&zOEam8K0Li>&>uvyvBea4}*JFLg4>I%5Tm}ZX1b7TJ=Ee1S zpujv1k}pNRKlHfk98i-Ma=Og{&~i@p&JQm&xfnnML{C(emnQa8;W zhuDU1g#n31S{|>14&CH)f=U2zn~Fh|0eWj0=$LTAc0w9$;3cA#7i!Z{HQ3f`5X+8avJOyo(Yg!T#@EySSDB=tQ7|zP63)<<9Kle(guHNil!6Q{~&Gr zz1$!*VW1PlK-<3Guz+s43V2Z!0M6tuKeL06Rs?Mf;co@qsttBD*dYYA4Ow2ORX`}_ znErx#V^ZD6oHc*SmuXOFx$G&^e43j~_}nZo-j$ zz=!by;|cz43@ryrH6Q_YpgWA^_(7QL3GiNu7SLfPphE0r5$FU)a6HxrLQdrbou$cx zSY2Cc)!Pi}cUc}QG3adub)+nhm8kVLgE~!?$4X>CmnFN-VY~q8t8l#Fhs-^{lw@UK z_+L6F3{p&$V-i!)b7YlNH%K`q@KZt`eU>V+szZKLIK?E+#1W;}M z!@dqw5HA3&-~w3zPJU1+1z2I%gjKdw4N{aCmWXw`@qoON#qi?$2gqQfKMMmx=ZBXb zm^wRMS3vcZvUavh8HbREAN1AhW_yKD(IZ=1F(`AvQ&cS_<=ucpq5wbfs%4?5Ws_ysWc5N0QNY6 zBy4%1)Dq?ngKjsLPS*|KJ*697%sdN@s=KiVz~jjr|4WbjFFo+0%@YzDj#%6zfN&Fk z3+Ubvurm`+z+5i~cKw2G*98ZE z$alIfdCk)eiiHK;ZUUXIOVA1~(4D+X!1wCOQjY(nXa1L-c+u(s2>=Jsiu76zKJ@V00uH||FCx!C!|wtt{6NRry>NqSXJkUI zZ6R@r5`O)lS_%|Y@bF_q?=~=(=0bdLRGI<`4t~%Hws7T4rT*aX2PXrT3DB#l5CH+P zlYNH+B*a12japtPm4+B}AOJMpJ16W#I^@KPm!P2pbiF9<1@8(&b1!Dy%L+a~2Xx+z z5oCQB#5&MPxUkL+6MrlC!W)oTgxn6=)BKth>;+J20S&Z43_O55I>ZQ>vEtu$3RFg( z3dmvz3VYE9IRc{7bq6jTQx2i(h=J+Y(_FiQp~SY^bq8c5(XiAId=95}H|StrhP37% zhM@bS_kef7?f`Ay1YP<8T2r6r0!}=y*(QK`{tVrBJuCwW950fzLCeHE zSV3)h9{%kdY0W>aN=3RoSopVjGVyOaY3a*R$_hGc$q3!cpsQFQ4HXs0<`(cxz@RGr z#cfCz9^PYbe#7zNrxwVf`z!=3;&_e6BG9V#<|6_Ki&lYh$q@m#Md0p9>ts-ix)f{^ zXyqHI*@M=%-U04mtOf6{L+x8fL?HDryd6QSqCnFVtp_06Hjqae!3}ts7h+)R*g)2m zf(ms|UGzc%azr2K7^m7NptW?aPhNh7Cr-1{l;$@)VJ|E_|A8+~1uv-Lc<~r=>>gAT z+Cr`~U?(5P;^d{_NKT&N0CMt^mmP4+tod6-8KGM;5Lpb|z$!^W2*C0ysAz=l8Ry>? z2AT8*=M#}G%L|>?`F(%j)q|zIjZhD#S$N)VMy`8VGmk6gmSeMG~L{r07|Ck7(p9Ect{A6TF?oJ(9H|j8sun6{RTMQ zyusqm+)yNUCfJEEKtjW)G@!do0O25L+Xj4_GzZjPuo!r-2-NiGywLoD@ips?|NsC0 zSNs5N*T}yBmqjl_SYUk*!%{)WIDT&f1L!COE4Yj`f2$&nBw9KUNwl;O;eCQhw9W;g z7%4s=c?N&y)bavmT0NnQnpVvrM{|L%REI>6MQIqgkA*d&`M`T)P|LKIV5EpHw-I3g zwd|o~P6o7-xt0kQO=kS987Qp>NUr5M?h0DN!tfHjz8u_^=kL#l_RmK9WDE?iS$D!# z4gaK7pX|wNI*ooj0VRM_gW1(Q3Z2u5A43@NNkv83Sx0Z3_hvn94d^~I}Opz*&y%Aj!;$O;7u*rYUgDJ^8B z#4x(501KneRkNE3b^s0k15WzPKmuhVq{hB|ON`86w8 zNvG=;&~g&csh&$fi&6Nu9q4ow0SlqV_zQ6Ll#eCG&-o$6_(5~fNe3cwCHdW(e2998^DO^Ql$0*|N29n2N8yXhSOlZcvjF|86fN6ogT(gQ-o52_Jh{nEP1&f zG#KH!1k#o_<8K8Wzt!!!1k`T-;azWX{D2O4q8M~y;Sz9@o~M_G2|Cbn3~8VRI*wWZ zF%GKTy4w{LzRb-J&<9i$p;^>*Nr@OVkGd`?;f7{X*CnNLFq^>>%u52YEMDX~gEQqz z9;h9l^+G(L;}#)KglxT?@&KHfUp@zoRKWaYQK|#-6KF9J$oXJ43(SJRAduk#P{Y?F z>$57Yhxh<85c&Wzs)(7(_CaE7A1IfBliv~Wj=UqavLLG*kk|T%Kx;I2usuB5u17%I z`IdA$a6lIH1O>eK2w9l$QU$C88a3AZt)N5t2_zO*9;j)cvq6FaUP!8etLskJHQ-G% z-bmAVsxbdU23`VQq_A;Es$pt= zzz9(TonnHh`VCce;N=gLHUYS3;BN&TbqUT8@EpPfJ=qhKZNLQ>xT)Cu!-2nbK4{1R zmSBuv$G0qLJ^(waA9Qj1UDpS9V?jeAy{-=epkpG6Dd1#@7BirOfqA-JS|30goa^p_ zgXg6`*rAYf@j*9pO@5>pfE)QbZG*HI}|{t7DAJ=QK6cVvQ|Lg7m@H@@1$o^7c;!2PGpI)W|5=&gf2lwgBe+oIc+n0yy#{i{&qRP2ct=ko{7xe>}!O`jZ1;hyb0$z>!q&xIO zX8^}*KadVsTdM&y3op|3zw}8^7DJYE=iwKZK{u!#5dhyN0X@DCWIt#j!yAxxe()iG zphFY7LqP(VXRQ`Af}$tk6S%4TagJPe?=4F|k! z!vl&-&_-3z>e)_L0Yp7e%5(exY`I5?FF0v|R@T0#cjATC20qB^h$cgvaT$v<_P8QB zW4)dTXyq1Uh3boU8qlNxo!SPKiJ&C2dKWkWw;m_~-PQqhEod(vcx5f<{uhLUs&9hT zf+GmzF?jv*1y}t7RRyU#AgaL26Hx08s47S;1X6{i7D7*YEH7lwfBnz8{(~|@_XN;< zdaoB_CwRggvMwcy0SXm655L%A1}erBIu9RrmH2Wr$RaP!pZofsH4$u@fH?yL z*fbCW?0cX8r5^uFUH+Fk{4cfnUuyBc)Z~Au!T(a7|D_uLOI7}tD*P{%`ClplX+J=6 zb`}FDZ7O#jez6E_djdGvP`m-!u^A4s_vL$V2I`!^GY>Qe%+onRU>*a*@dl6sK<))C zbq@XWTA@4iPq!CK_XLo*|pc!6|ufYv*J)OHnss+tan4vx;Q5-=Cy za*oa}(9*!}4v_o7ifh2KKjwn`#nIW-06NI*kOrth%LSHi0n39t1m=Q9CA&LBz`?-L z+0_G%63BO*6QG{$o&@q;CpdVHgO_hWqoaEg$e*wXqBU0QGh^)R!P{Lv(jR zdn;kYYk8k6C*PXE^n0?x??$Bhd>UPku4E|Fyug|)-Z#%8kd@Z z5Ao&+c;O4G!j1@ZItz3=%YavJS;ItRx}7D!BAPG}iSB67RR}ANAMoG?O(}w9xgoL> zFt*4xztMSdxEfSgZ+@f9&|S)L+!Zv}$I$u>)@KJD77Dqd0Ce~U=!zX>{`RGeup{m> zQlW<&b$)nx0JKrV4SINq3x8`9D8adb>Ip~{V9VbM9l`=FRRXu)4Eb9@SEF}+c-hPZ zo{_CVHp8YQ6SUj`tkSk57S1*-352stOI+b>lT!KP2QILJyxn@BL>Dxw@`fkiMdw2y zNZDT^)g8vt+x)|f0d#^AFPQTI%qa!UGK0oR;byr&4&?=%JIUzea;F?M-!EK%kFD%L-)z9(nP{a+i%?B6{ zK41bZTMG++VY36g9Ix}=an}c+O<-U%z-EKBfH#JK4i7y8Sw{@sWb1kcbWytR8R(H% zKU_=Xn}4M8w}S4n>vq`(*;NSL9@6QukL7haNVN4pNgjyqW&lsdJYXnM09{5=Cj}C0 zJ^w%PX`(EjG>0s#&*~iiudIB6^Qh&ipyF*WO zgLaX0u{0lK?DPd4^J4A#q~_EF(0ztT9tSN4wg)W-{(x-Iu0!RU9J>H}H9RbXs0VQ~lJpk!vc%2Sf z;_SiL=?l8IgMZ(F<{z#lQq4b7OT9shKwx_Viy#X=Uz4$ThRHZ(ClIeI{y^PHUgc03T2ys&Oe2+OF`$KLfO?w2Ys4>dOuKc@Q4V=$)E!j zO8p`3YyRO~2U&*!I_><$-kIPu(R!dn9~?EH<9#5DVGmyh%Yga~Z#clK1HQcYbmBK? zwy@jv%WLrBN~Bf)FWw*h`k%G&xiUj{1E{KoFEV^_4J45PmH<`Sa0&2CX>=JVbiF~c zplv=ptq0JW#0uahaT_~mgFI^Y!N3}+Evl>n>OOFEHiN7{X?uez;9!swo<0M$WqU+X@Vwu76%jcf0=Sc3^2eP{ILWy%qt}Je{tPmd|}~Hw`}5`{MVJ zum4$lLFR&6QgE-mcm$Ftc?QWEC6=J13%X{G1C&!rv_K&ZP7Sh<+rD5Y?}&mIr9#hH z2PGv?6B%J>FUU}Nn4unELpeHKA%=qNfYd0mpdB%wQ=A}NQJ5W|O+cXWX8}+*NvQc1 zBk1-3$c0DpMo*ANP&X9GMx3qtTY8^iWUR^KLdZ|PO)N%_FfJo^; zw=P1ty3kOai{h7Ahra%2)j?Rz0lRyU_EyV-tlsz-UrJDfhCgabcy{pXf7S|wMtJxm zA`YuYaChIk2viHPe2uPx9bC_=Grd|{4H^y)|cxSh$>P3R?ux9@UmI1G#<2-$pLm|;hWc< zP(EZsJ4BaUsXmHmcPLMHkV0pG0=RrtXgyHE4`Fo&NPxOX0TQr1>XjS8eZ3F=OTWD6 z;skXV1wgxHKzkZ^UZ^yHFI5HA@g;oV_Q;DD_aN(WxG9W&V7oa$c1uDw7q=cLVeNM1 zc^v?9E@&_Wbi&hd2NBR5I(S7FXp8`)J_ceeXn3InaslLn7txTm#B0cK(T5io{(x%> zP_@8=-1Q9$e$mDbYA0koRA%UI12z6z50q#imR**}bk75cLgYYk1y+=HoLQFPwP5ob zo-EnU&oAcXf{pJy+}#H1$$|C=Oan1GomoJ$N6rGrox$#gcE681%Ya%!oi|Y1_F=&< zezJiabNhiZ1ITE(&d)EL$uj!5GiWY~0gDaO!8TMvZIJK${NiB_IgZC+!;AKPU;nd8 zK7e#4!QJ3aFOK6*JRlE4y2Y(0OE@8{&On~-4p42}da{%a(wBsEArbvka2w}p9w^rx zy${WGJe{r|jvp|nhTg602Ff9@REJhQ8-T0lU{1{Hd7?2=_1q!@uAad|Z9JfgE0m`* zfCGHPh%+d8hjMg+CT^g6I%WA=H-NejpmYyC5K5H46?EJ_NUa0t763?P))~O@vJIpX zT=mHYZ)hj_P-LTpi z>?|IX<_kD}Omji;qk0b-KcL%eiHsiyaQrl5asEd`B zCJTx&29OFa5G$0UQ{Xi}hy`ksyaC75T`-9{n+x&qd@LSjK=$xwNsxyj@x=j3-_Z6L z~qz_G)D5<4$`?)v(lwfhdFp;yXt9NhK=WyRN^VHjAp4CO%2b}tTq zGzQ&)WaA)?)=SXl07thkPq!yerxy>nV&Q>E@N@_9bo+92dvbJoadd+R??BfMgWL}q z?gk5Vg9rC4Lpe&JS|J&}J5-=M2xJTogw^fK12Q92pc`xj*dmT@Uje9~F9%2jY@lVR zKq)6EC4hN|BI5-M$nDc^gPQsr^T7A9sDT^CNS9`U@ATz>-02HBCIHq9D7_87ml@G? z1Z^hWwDaqKR+rnLnG22=Q^EZ3V1P%1zgX9F0lh0Eb*lqq~Z&t*8E?}6BO{G1ft?KBVs@bx;#!6 zuJ7lVjlOnJ4T8E5r=Yt~Zn=dtt#ZdUt&N z&nkZlR0u#EBaqhoOSDuFvSiQ!98LnAhhIyBd;1(ep|uW3I{3xf-w-Zlm1qVs_QXvb z#=ZmxHON@djSm4Ygi(zRgBY83oLL^DG6V-B&x^MIU;j5A%K%wW3)+>RrO^5L#o1Jd zbFftC&2KougJ1lGT%QE0V9~?D6l|dQO-LQC)cN^EJ#N#EJA)S7gV&fiLng9#f?q5^ z7>+!P26nK_3)Ssk|FdqtfhFGEA@ME)ic6$;-w2JwQXZtJzYS7^FY0eWE=li%M|~F5 z81(TLPzIT}?dyM5SO3c&%-^CIRiD5cne%toY?#mNvYI8%x-!c3Hu0$TFT1~T!`n`;o)g1YvlYTZqs zmLq6Pt_#EfmFiB=EDS1JozvXCF8JiZy&H}f zw_t0{zkmh4ypRGLC(!Ns1=Wop7f##^O8-}t8IHSxPHkg&4L)KA)D-vwinROS#qMB_ zyZ-2Q{R15pDZSP0`U4(~pnT*BGUxUckU5}b1Prg$z|Q3X)+-7+Not zvUFZ}ZQOb7HFI|vPq!aW>&en@-4#5Y0X&^f9G!JMt^Z4yJIgt`Cxc?i@keRcwo4FF&Csc--`2xjE8;F_EngY3x_#)xw*Z+-&+#sfc2jEH-u;x-wRDS`R z3W{oYRD=b;Py`uqjQKJoe}Zb5?08V(6u{PH1p9Ff*c<`${0J&FR5pJ7&${iBGQ;sh z1)%vNUye?$;|I2Yn4vtKpj%a-#Vjji3JKXEU5TLdP<08^BIIGH^92o+m6&!ngXY>= z50q#_Sdhtaju&f!z#HdVK@%6vpxHT4dlz~xaxp0Vf%SE}@^pe_yNM|utRdw?b{xe2 z1j`4WuonwHLe!!a4xq4**zol~>#B>&496Ql?t=^tfQF7iad84t+Qa?-;?;W4{4a`X zM7uHg#c7aq>_u>1fsBGFmU8V-WME);DGM5z0Uy4W*8EGalxv4PNECcK4NO$Olxqj* zcvy|4x8VR}+6t-)ycG{Ls0=O0;D&;ZvD+aFGJXZJK`PLV)1Wa@ zmTsZmsQ<4)hgN__OG9Qs4-3;PWd}R#HE4N0ii~zC@V8>{Qv(tsPn^XzvkL6^6(<%Dnv8dCY2O$@n^(?S^O0! zBNcziJfQW|$Q5HS=t?@9IFKiG&MPx?H-qMw!K+BXEN~U|1vFj+=Dr3MY*_*?Zlpp_ zx%dL@OM}&=ZH=+3m3nI3_{wM(}O#vyDg(`LZ@)~mOD7fya z{lZYf1s+!f)gaHoSs&(NuoEUU9}z(_R32<7|2a@)20F2v;l;s!|Nle1!O-dY0n}dx zog5AB6M+VGKux{U*C1;cAYE<{(}4vtU;<`yz`cNE8>r$GSo8Hi>!P!8yC91Vx`jGJ zLDqzRfLw*#4O%7g0cs6+or5=eLGA5i}_^iSsm5Eo(33xAL$ z56>twzyhchdH^nb4g(xhr=mfTx(lSv6&$FLk%~^&H?Mh{!8hK%0VO(D$Oy#S=Grfe zr6mwGpsSghA2hTaC{2b6Kn4{+g+3@QAvs8{LRiGtEC zI3;#AgSb#B2LbS%M9sBdSn8EQk=D`-YFBlF4qke}0J@3c%W;ShDA~R?cyS}*$Nv`r zi9h~>bNQDSHsRpX9yFz$#gHZXqK^;UNA7fe@#1dekN?n1h9S0r{4EO}O=js1{m||E zrqgEv3t|+;^#fxwXyoiJND0zxAUG)Nqd-BKe_ELVTYfqY&MP1%9tSsWL8JA@!AHad zfEJQ~>pO@nsOki1EusWMT3xkd~GeFmoK%(Wh9yBjn(9PlC|8C;e?)&q4iLC&%1WJCgf24kbt5}=A&;YCF_C>vy) zP-Z~d;sRW>efbLf+<%Y6D?{o?vDkY={+8Yja2aX?Lm}SCo{E)&d6OP_V9H2#7kWRsa z-sX<9AO8bhT#yA9smBi_%rN1&D*+zdd(hk51(w_llMFzS>;X$ogGqXzNcMpxD`Aob zV9DdIH$Vm0%QWy3L`0~+1RYHc>IE3RNDTs)^_{LydR<>YlaT{x3kySY?G1(!spi@n zjG&_;!A@a#Ep+?<*j|R$pnbL=OBn9PzUX#+((A#~4O#2V*cr$I5}16#jDZ2Xg8B|< zKgyGi048u;gO^VG-Z=P>mGL5IxKpG9ES!K6#r&<{6R<%&?i*PQFG|;dU3vTvTr)f4 zDNtbq@e>OuB^h^@-T{XrNP`Q823E$8oh)5gtSUVY%P>3`#{7lMgd*9C#~5h*Gx7IL z05`KBZW90*st&dnSDTSY(0y-@8KneQ}r1H13`3aH|tY$m{DQJFU21-!` zta}Ak`o)Za!3SJtLUycRHT4r%=^rx&2GD{{y#Dufx(}U zQZA5EXwYDBA*iVE4#+Zlk;?uo}ma z#T4-3^GaxXwg72hI(`5|gA7ms@d+6q6Yyda%m4+D2Brz!u3u7(S)toM#9xasV2+UG zFZlYOmGKa0jT2}Pu`~3~@dgkBx+KlFsdgagz#f6yHY+9=iO`=UGaNw=2(hz#P@^YDw`Q$#^4H9-3wngKxPeP3Hn0a|pd8ddffvv#!AWyrcc=t7)KHyj1Ty)^ zewg2XLPqjPGa1G259faU&sq#MkmJP)5)4E!XC}xTZKyc{FA_*F2OcTdy=)IM`Qkp9 zm)XcM8O5pZ=6wCn+5k0>E-ON|5>Y{R`9&o02vb^DiGj~M+uD?AOp3a26DWJC&54za{@r- zJlX^CJI4!ga?RlYnKKJ&j=+oakfAivJcvC(uABAsKdS@OWS$qLs$2nQm9q zq}4a`>wi`SsO>5*Lg{O}0Lb=5yC8w7^5Qylu9kLw?+(=gFDgV0gw7dX|FcR%ogwfd zfFft0q!xXU$p?2rJgD&E8+2BcS{_8P>+tli|5-z!c7?p?qOx7x7zqg;nBAcUodGJ~ zG-lEXYF~Wm4z=hE&;g6sbOsoJ84jHRCSZn3XMhEm;n5jj17`Si1~`Bj0i6LZU`9x1 zfCrcn(HYTEN+IYZeLjp^sxn&Ay{2OXA&x>jjOh$2G4#=E;TVXymCTtFh zc3qJ6{ZQ>ZFTOw~Y)Ok#6a()}{`#La4{qRM5)4E!X9~z1HK;iPFQUmc#|LE2y)BUN z5qKd?f;r$AtMNopsMSG=RR*#P9`Lz^IhpaVM-m$bxBEjOb$ zZ2E++|5-Jm4ik702RS*HOoySEYzs2^{6>hEd0w!PV=~-8@QhEd18Atbb|Yw#4KgSM zJz9gm1w6m+D$x9br}+mffBQAieNzvZx?3ccq(e8$cDr&k9{_Dv)&ZK`2P^pi=5pcC0m{2j9iYv)NIKYX=wJcO zSAy(-$wMq)f^m_Y6#50UL_^?Z5O^RK>EIWIY|w!Yzd%zdlXE~b;k}bfKvcksA{M0C z@6@-#4Bd#pxeO1SJt%<#4-JS*;9-U263}T=po#|SRd{GXbil(3O$Sooz(WI~10Ggr zI^coRd;lIGARV{^2W?#dBxKZ>K%mK# zI$gJPgRT|Y(CsSH>AD7Kk_9&02u*~gBF%3&dR;FB{4d?`;<_z(yzjM3x9bMb#B8VQ zyKdJF5Z|PMho&|(9{~A2t<&`tSOyd_X`oqFh#|eMF9KdngqVWeqB{ZqOV_-}gD3%6 zv<7a`8f1&sAX~Ji`2dPVcLKl`X+TT?ohIaZA>aj^)TXTJyli|0ec`M0~i1C4BLN$V8g-wwLRb4&99CJ5(Mx9gVX11u2E3owT* ztyAEo9M~wx0n#lBVB_(+;!eN|Mu=@MAA?qt!d!7D;KfTXuy%4>0Xm-ml;vEHbh{pD zeqqu4LzKTAbVnh0zp=y>Shi_?!vYFEkf*^%UTYbFt$Yc(3>;lf6>`GM%Zs2@F=+ap zTR`+}#Ul5_6e0(ibm0Km1G4W$o845Ig z1oAK_hF)B^1e*fRP%i>r?1Y39XzTA?*9|YH!{Qkf6-OW;5)Zk`0vt%7P(Kpz;;bLo z5cDhvaV|6j`-Fy9VY!!}bc80}9)_ zt|yR!m;LUI7hIRI1Td>5D1g7NBrkyXKoa|F$^y6yVhSvPBV@qAfG>c*Vg|4!5dpl& z4Qw)M0QW)!sSv;`FJc6+%ZnxEpa7n-0vflNXw1prDsr4h{MX;KJhy zQUqXkF(`yD1iW|vDXc+h`vRmke%9-H0bUzF0dt^*$0INYT6lnVA43X{2LUf;K}>jv137yVno1u)1fN3$`L~BY>vg>WDF&YOy54{n1CPKQXff~r%z+dG zH_(a!=JQyB>YoWHsNO9lF{nUg-i3e{TTQ^eLJF#P-~a)&_dqQqFb5h`ufQB=P`v=B zB9JLB0$$`pOaTWKsG@@eRqKHgNsv&pO9p7UME;5IpmQZ4XW>b~D`rs8-3fT{4AM^M zcD>OZ`X$v^6gmwma1M)?xxrrky@Wh3A2Ozfmun!Vfcyu#W+P4&uc{6yQ=~2oT!7(Wk+p-U;Qr3(0l~6;VVn= z#fb;P498tBfaa0GdF=$awSA`B^-Sx5O3mZ07eFibx?RtFztHJ=rrY&I>jBV8))U`v zbh@4ZEpa^q+P~s@1{|w*0VrcN ztP&)2BH)Drno5Z37hW0=m9-ZbO8CJM@FL)aktkRY`EbXB514I1S8MRMEMs6`fH3WKN9%+!A-p%3ME|4KO9O7UV_xY9q=OHg+3(ff`y=#|A5qZFE@kC0kv~M zZhaB(g3$qNKeEzDXj>C>xF=W~s#F)&%;$iVHFpAD9EGGNcu5bEc(D%B1_En^+8zf! z1Wo|0n+1vEFf4KW@hegsKe;E&fL?q-nutfh_SxBkz3>{+M1(eCG$Dfg+g)#gnutdr z<<|{RiyYRAxCZ7x%dab74ygP>UC-ct3QMYXG61D&qlM6nOnj=g0H^9qEI$7K1lh=7Yu#;Y*r^LmWDa;y@Xi-z53MA3PgXvDdi!0C+ zi@Grz5-&Yi;wAkvQoKan!JiVhK$|KkDRDkTkm8iM_c%sM40*9b7nBlL%!8)HE#N|M z1Go@eL2$?c(iH&pAXWstNY(|1HK;~i0cm`^>vdfLZ+yG~a}YJ^3bdgBkSQ+$UdTdB z0hew^0$%(V02|tRphOcS1g%kJ4}zx?MLw7%%UDR!q4b02SvT^{z(( zUf95m5Q7Q*gWOMY-1PvcbO)#S3rJ;mQViHqusA5mgPe9D;KfZfgfOTTxdGIIeIbjK z89<6bnc+gfi^-a(ino9je{g|_)*fIeG3j>Q(9Q52yw+y}Xz|UKZidzapcU?0x*5LT z02Ml0It5o-DcVu zdL^|Rd~0&2?-#?9*c}W_0zq2vu%w_h&I2(89F{KvUd)DESAueT^OM73h})Y%?sf#Z z`|>O@-8~DEbU|r=0(XZ%Oo6%E42!#UP~9!@qO$@t{||DvE9evuaMJw(9`XC~zx2Zk zIml&Z$fNQuFTQJl();t7p!CiIKD%9@)0OD-z7Eo)0{NAK^qv7R1?<;50WZ8Dt1V&a zJsvzV$OEoTg&|%54d%aKYyQE_-+mrG9NvP`jRqy6I{_~iL8>Kq4fG=5MG&Njd^ro& z5`!u|2dSBmm8L-w&+8(%;GKXM{*d|;F7zVc#d38>QuTrh-U)c21<6}*p%(!!K11r$ z*GhL?L3cUzrl|b5E2Hw_?;G%n(7UlG?z*0MU3Ay=!0TM>Sp%Av&p^7E(EcK{#kCzG zNQJz7`2cEO29L{~Qv)TGebb={1>cAqsBs7?m;RS-dC>zY^+6-tTc9N(crXywQ3P{f z)f$+Ct)u7$F$I=Fu0jsTYCTY@3lkEB9Ea63E19U3C>k&}J2RhvD2>*5$*E?yT-U@hM{Y%g~{$|%BjLo%2nCtF? ztF{*b(9R0jmf!N=B!D;CL?PW>)M#UX2$B7({ddLe?a79n(o;|4hOL5HuefjNl2$(H5=puWitP=g1h@>sqXBd@r;SfmWfE0d;x z@(KsIP~|}_R6#N4dJQy`2D(+W8*)J*;+S=gfL_;Y0WW^XfF`>HP&-6sXcmGhtO-S5 z|FbHAtPADngjKYlg({(Eh^}rQD}f^clrAW!w&p@ifhUz00WaiXJs_4W!T+Uaz~%Up zhu{(q)n_q#(CXoxgR(+6hFiicyhQC@Zu{ZIiL&{Ki-a7hJ%V!+uX1JST6bTD+_Ke=xmWaAoYH|-~~va=8Xx&_n z34Xx_vSJ3r3P?!ub{^_=VoEy>S{eb00G7IU{M!Z68c+SN2L%u!DuQ2}%=-GDH5#90 z=DK%q;|_F(@*I4`kHsX=)?$Gd)gaS&L8irmj_Bwu-~!#x*?ORor}IW{1Sm=T|Noi` z#s=Lb&|B~i+#+NK3xZww2<*yUXOIN{_5(=491Dt+`QU9!phL0s!Fs^y?6~U}&@m3L zMLIwA7X1T@L(`D!7slq=FC2BxUI!j`{lWygdYca{57r0Wf6r0(=Cu(*6t-C(muW0@ z&(grx4yPg?5CRE;ip;P7S-HBw7e|2Z+ADx~7wk#bPif7ypBPHS!B+8a7XT&pe`$@U zzzO%YK*Oxki&r0BU;SB1T9ua6gPy#!)Y9d4ga)J-f3ng&y z2)s4}Yv6ft6|#@$wOaFGCWODxEP@6DOWiZneSE<$R%U$t&uZNTE|Xx13pIChpyux2 z7iAzV93U;A49W!4g_wU;ndC?1UUYV*@^X5OgRLXzKDf!~c44&Se8>JAgQZ1C&FLgY-p$>;*d) zvS17;(diy{{R2*0a^0?fdO@djaxj7mSa7ibE=pjTlcVkqYUX^A1v30k2RQqKk^sgT zA1^#WDsFW^oSh1BHrQlvzYtR3fI6vvglrEd|8{}qQ;cby0*tqtUm$Ebjb;lZH?KlEm`2lfE8=(!Ft8c~Nq%=QDB{h$rz1uSN#9efQk{NN)rvq8?r zWj6RMrq3x~|FgD2jP8wKX+FRPiwO~M#DfbOQ0#YdL4%ncTBKnK>SZ9qEFgw89}wt` zV1gMY01Cj@Od$Vv3d0S0)%=*e@W>+2o=<#{5F!h97MZmuu zw2T6h6+xS9fAq>Qb>4t3n=Iix?)n3q@7STbJ8yNn@}zYNH0N?KHRtj$L5nkvx{Z*K zN2=rnUR+Q9`kyruw-Z43Qh;r~0CUR$%|o3Rv|WF6y8h{Q{e#mLpkw|H;c&?635Y@m z6#EV@0zl4q)B=iqP)8lyG(LdTC>lJ2Dg;w6} z3N4XJ1)Fm(Fg3qs>UI7HD(e_thj+VP=neSS846Otzx_aW=nek$hdN#Fbi3Z+-+qCA zJ2U_G1HC3ppepHK=clwzfrIY^IzM&0-Z}U}fbkGQ{zFlMc4+AAD& z&BtA@fU8xhZr3Z|^6>yD%C3NhvmT{&GQkx-K3R*SpO4vYZ85y7_f4r6j9b5vcBf)9l2LJXJu$ACs06wjRqwX&M zcGpWN9g6F#(9aJ5_aQF`fclUJ8gV9sZfK9N8RRQ4$AKxWvpEQKlN>Yw2zI;PNITx* z3{t_s0C)ULkgFLOU>WI3Z*u}DNx9xR?s|h6l%q1cK`{qvfS0m0=U!oYZ2?N$ployn zTs9m4N9m)W|D^{4UZ_AuK|%2bc1l36>!W}dtdQ^pXETO0P|&^M>4nI@m+=7zcGVn@hlpgWDjQx|>0&ntv3QR5kx7 zthWJOmD{oi)EE2VP_Nhg!-Bu%ESP6euh9I%l)vRGm}goq)ciw&za;?FApW7i-y#Uw z{m`5;kAVSnRdU+#=8Sm^4FCV99dFJ8oz>OQ4VG(u!PwbcFpq&D?Ray}Jka4LFCE|- zxfsCWV2$-KjSf(i3{Vpw+Fx?Pb+IGqBEmY*0`KEsw}1{>fw>dp9*{d5Kn#$>7#JZA zhFUipH13U|iyh`j7MLSBkafMzfLO$e)rC+kj0_Mh@Q`_J1knXLr-w-AP3Q)PDgXA# zAg8BwPH_fBF(hU?!SN5e`Mf>|BGUXLpu`=>H#CC zD-XCp<9Lw|OFf_%2UkSkhPnX%c5uWiUPuG&seq;}|9S_gCl4@!PA1gpcKv|R1IqX% ztZB`@?--H9!4+yV_=vd=9Cha)`jIqs9)eo+{et2ls4NfYq;E#ZifVAOOH+1z2b!G- z`h?OF4R>nPx5|$3iX) z0|%-DEcgOI2fae_5=x-TqX#PFf)|b#vmiS(!F?rA{ReWWI5c<#Aac#FB8(8bz^Vkm zfdVZ>>iocB;C_Dnan}#vIv8{UKFmvC#n2FBuX}dUU5wIU$z ziZE32!p&r0039I7(R_fZJ5(gCQvh^sKhl{gVZkrva)AoH-fBp1s`MRb#2++LAPhdL zpW{W@^q2@F_?PbSd(S60idVUdtVC?f{oP3=BwD z-Eh44406U10n}c3Sn!K2oFI=bse*X42W&gCM<;@(cM%@VLQ}!>A|I*($)lgZLdYI{ z02hIIbRk3p?oo(E0+z>0P(2zAnE{1+v>WUIxJNw z7$|moUMz*ky_^mcn(*QkM5y&Zi5Sd`2`}s+f-eie>Nt8`_XU8AhR&md>VEJ>t_d$* zLtFr}tb~hyyX(I1pu%S#|8`J|AnD{+*#c|gK;1I4|!BC>rT)SdDf6pS&dB(0Q z;1`>Njk^Vz(&=~Yl0SuUI+k7t$Ys-vrgA7&9z$?_*+3uTK?^!AU|A4vpiG+ zspxxNe0d30_Y!n8KgbQBl1i3;yX&>I)&mtHpj-{wALa8!`N862Gkg-a{)(Y&x;ulvq1p}Dv2PaRL_e~5MijIFRvgDxDLuHu1gr3 zYnQOsEdiAcu4~ddT`#>{36iMY!cYg-3a=R_KoT5S5SlW< zK0#VSwsJmdYY)_G3V5-Y6_iURmqBw0@}fZG9f+Xi5%*qz0*s~e7--w!MF_|6L#OKr zkfb9xY@tQT8jy$^SOv$+7$#7ex#5L8nu-lCRG=!XpjiX55CWw4w*+{$sP#apBq-Ei z5*uDTf=QI9fTMBCi&C&5pu)!nEVAK6GF(IpRE)6qHeUpnp$zcFF#k(WfOa(MgIy%> zau+xW^MJgi4%Z7wr)yrEg^0X_F6{xijtL^vdH|Z3*St`F4hkB9msVht!0`xDC;_nm zi~yIuD{I>W68N+3DnQNW8l z$mE))>yg)T&8~YGn``&5*IfmBea(yc&misqO}|V4SpqUJ0^LAx#(@}kA>f59%)kS$ z^)U=Q5Ahf%9GPI@xC62ZD&y(fw zzw}HN!~fDfAk{DWz{eFRfK%)mu*hdffHv2jU?`F7c3lIW@DPA7;G^8)5I%U`2Badb z5i;P9w1I^6#gRGaT|!7Q-@^n-=4*;`B(Pzp=t*TBhK623O(#@`D23A1~ zd>w?6es{s@trOj$d%9f@FkaC8hna#;fYa+4a9T%B!G@49Xs$g%X$oeVg`R@J7j)RX z5RLf%zw!9X0%#IG0&dU1NB*7|9_Wrea@_RuV^IVzLADSQVH=htl>vX-A*7)p0eOlwc5B2=5pwq+AO^E;xfq>?*!M!Q| z)&r&LU?FJhzf=;;1CRc+9w_Ao514^_M`fUNk_Ma42mlSLEeA&k$IC8oQ{xD9pyUC_ zP%RW=WWYR_6?|YG$PJ*lm%}vIA8M`LdRWCfC^+#sK537Ub^gt6QplJZuG#d^+s5t%&j^sc{eF!c&LAQT{1-&J~g$Std ztvwS^2fBO`EI#Q8$kPI^1wdnq-JxeRFEk%u1dTOJpCFFv%$W{K zl_=K|fmd1{^7;CoH6%|Nd@oMu7SJVYp&L@WWkFlpI%B^W-tG?F(iwW7H}pbh=#k^D zXF#d*wNQ8H5zvgi?-9sUv+Ehg=Grq1buVB?AvZn(4X3nT;%^1*ZGvf&>GnO)8_3id zdH|$9im5a92y7|>YyeB$JH8)>bV_&Y$W(LwnaTwm3I zW10iRe{maJ)Ish}+5i?w1g8&ym%BkHUW8s~KE%}-dIZ(}e@ONpV8Y=@WJO>{GS}Vf zg_{?8gnzpb+`WyzKx+c{TX{j_LC}+4p_2xsnK1JsnrqK6mk4*eo&oobx4@( zrKV^Spky(Oq+&k!9~crrPtNX5Yt)f4ngahpLfCO5X#GesDnDP^+2U3 zRKoclSlMgKUe^oY@%#;)t|wsOAOlJRPE26&6TKcxoxUgdw+n$X8_c$QV22?!fLBbx zYydmF*f0?^Z7?Ytd$Ib(@IbfgkxthO$6Z1DO&Gw5LmZrRFiKXIX4eaR;29N(wBxRi zKvNB{()H2*|7nen|JSEA{{COj-+B%-1cw&GZm^+TQ`k`W5m?-ofXX&d1;;=20ROfF z;4-rq95@^=K_}ruhlAPbj=pv|?s@}MR=p<96kVt(@4$%wJkZWwcNA1WhTZ`MKDewr z4UR5QSqXMS3uwy?NXcS|l9!+>PSZMLpY*yuYCgc$>3RjdIMjxDO$s#01RfA)>I}Wo z4VqelL>bs-wz>zP7U%`g`R3qqLZ& zv4P|eaD7|fdY}|i{XuKkk|4M`tJwO`%@Q2Icx{Y+k@ef#pi@o-o=GK=m}Fb9e(>Bwl&Z0oE+gdH{6U z3TS|~)Ai1A@W^x_CoZ6@>KVuqwz7M#wJ_8|7iM9q?M=l@R{UQ; z$?AU!-eh&*IyfD{l9eNb3yK5*aI%7K(M3sC9XCLFFq4%bSTnX{1-gs^I_iW-R%gL& zL{gHKZZFnk<>U=YR$?iTWVHaC=;6ugBZLd{5zmX8kbN94i$KW=v{ndO_LbtCmY51I zssy@Av82IRXc~;*fHu4t(y*j6D^Qez(ivoRDI`t8)0qHz(F88Kz>^h-6o;e}ImLbI zEdm#6(3H`9j0ruBBT^hpEwnp;mWr6m?!8U~7Z4mT?!gL(5>=2}z-u`g;4JXs2e23e zctHqKLWNlYbq=N#*b-{mM^HiyOTwE_)vtmQ9Vl8M<=+)B7Zk1h;DpMg3@)!<*C3aF zU_G#es>@&l8cKo{g3VwPu%%X0P>F_K2+D(7Yow&s`YzPe3Z56Q`T+84Rw5*=egWqg zkf*>!pes0Ifr~(pr+8lILbh_eJOfFqovvTdVz-o~*_8)W2!c}!=&DfA;@vOMk`S~2 z4g(?9mIdgx8xydUa8i%dXkn9$AF1TAO+tttX9r_SYJ!p4570~*|M z1xxmV9KZvzl>t;XUL?N*C5zyAyjeiy5;)Dn%Ic{X!CX)l-~(rY|BxYA zlq_%utOuS28o*;wuq@C3HUV1}kieD&WWW_FDOsSV9ZMD{e+%+!dK@GRd<17hcouL1 zXIXF-0C|e%g%-q9FSYPy0eG^6$0ku(fT7G4nr?U-aApBPNLqlT>6hSzAfTk+3Kf`$ znvmH+DVC8PDIv3ix)K~9;a6;6VPrRg6LLLi30Vl@Af&_zTFc0UoLrIblLa@vd|t#^ zfBnz;AqJYlpffbEM&=X41OH36yf}0ooTOS0l=6e7F*d`vC0slH{r~^}CFms1URO}p zam$OQ3m~-|y|LgCACU3_s7UQ4{_Vp2+u1?$bT0eA{YY{C?JlJUKtryQAQq^bP%6}X zjIsG2d)*Vrs^6*!uNfzRZj=Y_a|G*3hn#?v02Sqg%|Ngpcir><|NsB{KnrU?)e>k8 zXy=dK3UF0!d8m}H`5j~Hw|c0_3Xt{0pp~M+&F`5YE-Pd0cHQ$DM0~%|?fWFv7`#Wn zg!RRV7K~OpXm^af)z|;58>6AYhuKC4w}oB68H%Ob^$O@@hDsqY19bAw4NzD9|Nqw< zV3AJO8{Muq4!!`5kv;=05$kk)k#^km37-Ra!tznTi}S4Dl+x*Xr@8hHZ0zk(z>CM= zAQpJd3mP2n4!xrZD*K**yQYxV_3f2+KjYi2IQF_%dh`gpG4vJOgY#th-V19 zSQdwi4Z)`1aj`8n7ds=n7`zS3bnE1CJ zfR4dmX|BD(P_NMKdH__Lfz~>3z-E)Sp985Ec$o#N$!f32*M;$KcLfbplyJk8H-JuW zIsiU4q#hjNS3s7%5QS}Jg)JuGZ#fMqJ$sw)fTvOx)PNV1yae5-*j#%>psupp^-A*t zeo*X!uKcs8Ugrp?q<#jT^|;aPdPftqc#{V#JqJ>dgVGIXNhqjg#lQUk=Y>w! z8_l^_1i(JK+#PzO+w}nG^iqi1UAtWmz>Wqv&?)fR6v^GO$o5@8(Z+|W4U~34>(E@E z{IiF2NnpuT1LF5iS5U|zB~u$nXu^`|6{KVenY{A=M-OVJ(Z3O+vT%9f^&AxKRuRyo zN+{ajo(4rD2Wqt60Nw3|J=zbP0jY=1xYpiKsB;3xHmGm`2Nh@qbifNEP@*^@fLJfY z-!c~##SEFC6WjJyL87<~BwTw#pf0J~^#(>1zXHi3Me!AI6oYDGa1`%^WR-5$E8tbX zNKt&HIroMD*cX>UQ4@NlQvh^TImiD}hyy`&P&3S6)VSmXdk8cThC3P)A^rm;rP>=v z(O3!z9auEpz=+01aB!nWV@Ew|G=er~JTd|8{|$p&0uDQr;3cTyJns4nv=Ek~`G7#D z>mSfMH2zM|J|M0aEL;?S{3;f$% ze}UV9V3j+-$q%HGqq&xcz5WJh=N!nW<_C=6suo!-I3fj3UC7=#;TJ_75;28>L&=l5fh*SCD$~Yja z=v5j1GcdFsD0%c+59AeHsGA`>)B@^2Q^;8?y=~gy1T6)b7VdWa^12Y}j8h;^3b-ys zHP98>YjgygDA1hyh2ym$R4fvbgqm}~8%8$Nf^A`j*|J3hT+M+D=7!i(dK}a`LfP0B z-1ue+0|Ubg`^TW7KtBXh6ttFr*NgLXwif*V{~y+l0S&Z+$EZ48mvn<=I$am^HZK4# zub$KGy5JZnwaq!k!0>-7$bc6Yj)4jQQ1ep`)NyP!2KgSMA>f7X3eZVh0xzREK=R6#olUAMgkO^h~x7PQX* zWy9WP0Siz+bOqR)eXt`nUc{mpRH}O1736D%*Mi-yQ$TawYe20hp=Q@9jLo%ESn6KB zY+zwvfV7!hw}Ch5Ij1$(HZYVxJYtFLk(A{Sk4yr!OW$zxHoGFrx;gt{{Ju zSo3dp-2z%e1zN|J#n{^%0MhY-89o-?+Z+xOfdv&4)C>ct4X$h89xH_`jO}#oX|C;I z;BPqssx)eQ{*|I0h~@!4sBW4N<_YLw%RsJ&9>3_>FU$Zor!xaoYQdI_tqFJ`a|9d{ zX~$h}`8o79KLB0T>)Mib+_gynw5k!bA__ER_rJ8|g#%vo+03jIfEmWN8!nq4O_HrGyIse1_43SFzV_%PUF{_UH0aOb-LaH>s|v{W|s=l4HiPA27ibs$n^{Y zz0C~}&%BNSD+3+b-ts~gvLd$iK)o?&JAf<5H4vFZ@R*kXSQNC94766T<%JP=fEAQd zLC%D`kH5tX)Dm!Q;engI;>AJm;u?Y019g2bB_M~#fRaV2)@#Udq#(D0){m`taR)q# zE6|)fgAtl!D(}Ah531-uQ3DFxH32WeAW?JNwFi^~UP2c0xqbq7e%M;&2j@&LrJ;@>{m%p9EjFM&22>Vm@p8d%U#Bp9`2WARSpl5eTVQe60agn#c}>8J%!6Q; zfrSup9}E$FoeCBQt@vtrVF0<`r1e0B5ja{w27qKbUPQyvG7BVygCe`*g)2m~+jR<~ z>x^#KDV>K7zLICWaPdc{>y+l&DGVhl&7c@}?SRDkBY18-4p}qUdZ4}$l#)TGuEAXf zvfu>^c#ui}$>Sim>p(XZSAY}1nt&IDu;c+v0BZtX7{LsI#JN9A1%&GW<8pu;0ZtW9AgKcE zHmI#S*lYzwds_2ekOLS>A!RH0EP0SYFJ^+5@CbmCaKe93Y(r}rNJ-4s?K-D7fUz@l z&M^kv*E~o(1<+FZO7`Qf0-y}hTq_`62jYl>nnV!0xJpfs)EgqP^+0;-1dv1wnsWsh zn_XuxzERu2ZaC1^D}l|AQ(`lnn72|0#Z2* zs?q_fG76i@TN+>gv*tim7D81TU{kpPq|ynhG61R)v_A>Oov@~%%1uzyP{fNs(-71q zg*5w`WkI_?1)2{q_6G3m0A<4F7mSP-c7j--+KJ)&$Ls?ForfA9feP`?hv3V6uapQh zzF`0z4%(yghaa?0?+r-Be|`oA%_}fg>!lK2Rgh5g3l_!)%^VD!51J3~AAG@b@BvGw z>xOP{yS3AG4Jc;UFm}7HfyON8uuj(%6S_m!fa7;fx9f^tQ2eeyj$g2%HIV%^ovvFT zbGD#1DKt-~9dE7r|NlRztqEH4#Bkgd6k!aFz|O2fLdC$GdTJCL079c*G^z46#z9gOS!=EEl1E{49+F1bd=?cbf*A*b2>eq2WS(bG#AS{q&59&cX18R4qmS{BB?r<$p zYOdYEP$JV@yMwDlthsgvZ;3#2?GDiC)3rNv_*+9k7Ur&C1eK{PdISDUL8kgDFIRx9g0wPS<*8<(HGdMvt zasxvtOLJ}qBdCS>612At;&xEj{HWq@0Xz9eRefgjk4*lSV37BJWY$MF|M0ArXgyF7 z)cnJ<+!u1ULP93&ZiOGIC9$u~K|U?jYIbd4eC-BJAOHV1*S0W}N;JE+Fupbfv-!bn z)d@&V8Xj;FDg*Ju%T8ucZ-WI~X1cCne0llr|Nr2=;Bi+_q=Wk@Ge9lneW3OfKd5MI zuARYA_wuDbNatsMx!=cIYySWL4~iIQN(61XfcVo!x0DYe4IX-Nh35?IQag~U*B0HO zJ)j-WOpF&84|KZrbi1wr*Q}uI0}7-U28^yfjkP^7!VC;`+|7GIHZfEhybgw%4^DR= z#Wt38TVT@6-(x{~TtIphU=13Gx2tx8<2voQ>w*9EFMF667#eGPmc04@zgA)bIC}R5 zyaq5Ybt&jkPahJik(5B43 zfEQk{gaxU2TOcZ6ZB`v{G67Z8psMdezzYkg`L!Jkb)eQgIFYx2$^mc#4&t9W*t%p; zmJXg}Vq{?0;pf1>pzS)N({%xKvVH+*x&0JyI*WKn%LcU2oh5W_q|q! zDr7|U$YMx-2Pw>509p{x0$HEM7 zEX)Kq$`ra?w?JA9{M*3=ep;vNzUEqi!jf_j$=?q?=(ScLpro$3Rv>`CAH2)1R=}ae zp}AJTp&leEQ6dX=1L&aF|64(0C}0Z$z|-6UucJZ3p9o9QOZcFOTaUN0fy0kYGrdPC#v?L}a73Qa}S_1}_paKm%k>PLLYi72A9Z=tS)+FVwbx zA__F(3+hgGx<2W4eF9!^3LWzYO`tH;^MaO0o!AUg%JSN02dK)_cD>W-dgp)X1@Q5B z_rY=;&9!$J>gu{Ra3nSTHbvw)8T0yMlHSRC*tG zeE_OIUt4y&J^&3Iyy$j)&VIqf9VB~m2Hqa9}YsA-LH9@T^}$u z*FIpWJBYsA)G`Y+9fiE85Hx`^QU2?HR%J&-=zz}SKpF%CX+x3IB z>zCR-P}ng1FZ}>o1qa$vD-X`<3h0;bmAqJS4&?C}_F#{9x=ulg1<-(U9UEu}8q~Yv z0i};_SDx;cW(P|K2GIV^-sWFfKmG^wx-JQLabPmIGk}<6fZo`#B;ZAS5_on2bd}Np z#?EG+c?=Awc}OG!H4lMfgdgm%|8^jU!7rKw&EP`X2^`tbcEWMj51@Hew3Qzve7((2 zz(W^bUV?6?>}~!6<$?Bw9C!TyYK&vi!(s^<-24KbC+}?*fbu{?na5o}fOhbs>*4Ng zmVu~xUD(^K0%fK__itlStpio!+}msbWulHG27pHrEhI2U5_u+p!WcS|_`gb+0o{1J zZdaaz5BNI|f<~c1Yga%^X*dspM(061j?Pn{<)jiw>peKY>p(al>p(yWsJZq7L+L#< zgG(i#1|I^?(lc;^5Ag?`tAw7QOkRYa0VODRTV)2Mq=aT3Xz4!3!5^RrlC=_dI4!q9sAuIFY;0`QmM;}%+ny>M%sW< zDF^D2!DwzRG3s_b(#-(z8|Yeqdmwjer+NAVZ31u0RbjQ^-O&)DTmE2vQ-$Y*H{n%;bgnDNu;1TT?fEc!8HL z2;lXtJ9Ov|)CvHd9R#j9jUa+l@U34mhHqV7c%B6L*3xS5rH>_$QE0p&CJJ8QCxDth z7$AaF2r-!?j1XgaA$|fBV(gaS-Bia9B-k2rbhAu=UGY?61is#>-l+LULWz9ykA!-S z<{t_r?4WC%IA6=`0ImFb?YjfC2J*Gr4$#8g*Y-O=%fiuaQi=f=vh`A!h3xVkq(XL9 zsW8fgm!Q_2z>AXOASb3+fG$S9GS!5m8?^C@e_Id}|F%orE*DrjUB5Keet84xw6~lB zZDKfhV3!d`cjy;r7x3T%X2uiU9LJ9xh}1z7{?HBDx)Jcdl;i)!X3$BMkk0dQY$kwm zK6XPuGEj4Ppyrgg;4p&&heMhVaKPLm05t=4fV=GR0}PwN9_nV9fP4_e{|gwWP=Myo z7m0rT&uU^0j!{re)BMW}c64j#@k1x(nQ(LqfzGn^Wa$p+;^_{OXuVVkJ=)c@d%}-- zprII!ZU>fw511G)bTfcw+W#R(AAk5;vLRAn z?r;8<7#0SG;|F-yL1_zeM-J3fdHxm~h*HSrwBv^!*co&1Z)0Jy$>eY42AvlLT9b3; zf2qKWhj0IZ?%@NC?(-l?@Vq#IkoXKbR|@0|(3wDK%|CQX6~L|ng%9LVRDl=EzQfG{ zPkz2(`Cs}bi}8QynHMfx;A$DvPOkmJz~7P!HttKe0}KDQ0H$tN0sd_cOcsauTSJ&Z zqk1<$fe&rHLwg*@U7tV%Uw|lZgO=mPI)A9K7hWy^FPyy4?H~YijyT*oE#MU?wQs!Z zRl8jgN_bvueFk-L2@iBD*vtK(VOo&OFMu1}0xwdEc^Hs#7$~0WC6SF0c(L{y)R@vt zkaV5i@dMz*%FrG9rrTu#Pj`VpclQ_2foZ7Xn&&z{bp{B46O9)_&j%cOz~a3ke4POT zucg7+=>qt~9iA5liokA!`T^3*y21b&_`Ac{?Rvr5^-PHrc&{BpTJsP2Qod%_7ocMW z!784BS*1Z>13!SG>%xnv9MEtDEqG!mF#|2jnN+PtZZSwKo{}TR}UaK%vLq2U_NX2n|RG zI)KLiLeND6B;X>xZ@OJNc(g+wbRr2tgWo}-`3GaY7+ftx__zaT%9jC6v^zisE&?<2 zMQ4Bv*mqw*&VR=Zc7C@jM|Xe>=(hL(4iG!^3rJP%6$btm(AHT{?f^+&=>$oi=?=XD zmj2*fmjO3F6da@7V83aii+UjZ22~e&hw&7O?;zSe5DtbZd;(G^16oPNKLxZ2^0f^p zWa}lso&a5H@Z!loSdx_ncg4?iJAjHN(9UB1)`Z{x|3k(J!Ao*_QP!z|sy2leGY^1@ z%1%R2dj(Vmpq7ywVAGzw+{gqf_MX5Cx^>8WIsTS;$b4`?_XJ$B{o!wEhDd?Azxi8A zK-ajS6m(Ei<@sB}Axg0obfBB&!O8H+3!gV&AH$0v&}QXs*Du`;9G0#;{H<%iqs_gh{YK@^8QkZvn9J-Jvf!odnQR0%qv}j(BM4flv*}DVVCk;*fHq+ZE(k za3NrT&GdysWw!}1ZqTVQkfKi#;TDLA4l!EP$$bJ!oai8}J-w+DmX?K$fa9@V86>n{%bx zfddjJ0xu5U2deo zu4iBjQ0uSL^#SPm4^Tur>2Cf2Y88e)IQR(KBz)0a`+}iD^Z0=Spynh)cjya{)FIHW zPbO5=;3d%iyIrBh8+yX=;6WD&6#*5y7{VS%85)x2APO;r10KaN7mSC1%>7-V!WVaKIBfPxBAP66l>?pdn~b zUMrAz9l*cMjj828sY|yTOY<9^fETHdCLOexFVO`T@!&&Hntzyqn$n;mzB>SPXnnT> zi{+tGZg3s<60~G%LU$QQ>$lQ1-K7Gc<)Cc*+YcbOn@b~`-|&RJV20TMIh574+w}ve z9lIS=z?hYqLAb~^D1-JcF=VlZy|@mmbzv7yNP;bYEi|FKjHmTm39EG}PiY%i47K0^ zg^kh1g|+!|EDx@n?|^ILKm09!!KDg>`U4e6 zT>FNBzhy7DI(`F+Oi(?(4#wqxc+7>rbv9fGtVn>rwG&AMs?LzVwHPca0*<;j-3}aJ z!~!~&9CQFLsJrwbi{Zt7esJ~zg*Lc{!1IFR16Tx_7cU*+3l)L@t6?3CK-BxL_!_k%yGU;WEe#Lbzb)3sB*N z)KrAaU^W|=7Q`W{{#M)O1#Lg2928t zfV<%@cY+&GcaU01A&BY;v_uu2AmvK~K!FC@3HpK&i<7|hcnTy$j~`-KY69-;wj3x8 zftHQBpv0s07o2!n50u)zmI2oi@b2R6doU@;AuV^n6%=@0jlcEEAJCO5h-CvS3>b8P%X`ULWg}~9-dgR}KP$kmYdf?xG7{vbn?`-7&t?vet2Olt@tkT(s zSf%p~d6mvH&1;>XEGb{5(+nOk0bAYKdgI^!|F6ZnA!1WOJW#cG0a6DxuLTJ(Htz*d z43#%ue6suhzxesl-F|58k>-VkAwXO8aQ}u)IAww3cUXB1sQbk zArs??ZU*Sk(V=dz@=m5^FwJ=Uz!`8`!4k}^*>}7d)RzZMy&rGA@(;8QiGksz9y@3x zrUQD?E~vUb!wMReu>>pO?^OaFw6PbI1{g{Vn)ibBm2mVncW3|j|C+70c}n(=|DZCZ zw|NdYr)&i&ec@CA&MYwX>@Vip{Qv)&ts9)GI$JON`~Uyt0yYMQZZH#4;whEdK)8_7 zx>T?m?A~V3oEpgCuVs;>f0yz@r9lUDgQP*-rL7=?Ur0f+VrMI85peTf5Xr#b!p;Wr zD8zH1z6{iDr3Kw!b=?lo0yVuv2u&oT)CVqtRAZXM1mU%`DpVwZ1IhpwB0&NFA@0hD ztO!4T0Okn(7Vv^CNTBk!MuN&;RL7X{w}S5Ufg1-2DKq|7U1YVO@Xum|+M*2`J}T9P zYQy22osctYL5=47pyCW_GYhEb`{B*s2O8OhngFU(Sek!$*AejHL`aR&JsFZkK_TDm z05T9dve|l|vK(q8lA|mSl_Ww%!4`G4z5tay&^!%dgYz_K&t`=rEUP04L)Bxo^iVh0 zuudk>>XFuv|NsBPVj~H%qoA|Z0d%d-UJ%K^-|+<0;%I#W%N<)mZ3!^9y9KPfv(*Kx z97HnkcNBq?A8j$tj zND)NZqO`cX70lh{z{J1p0(7E)X97eNlnhZMSSDB=tZ{%!g2EQ07q03+(EqIS7ods$GK_nbN(a+!40Tuxn1xY3K4&C6;X+9tV4IoP} zpT92=q!Jn>P`7{*!J%$&7=UbKdT9%8e?i;KQ^BSpcP2X&KxTl=0}a-Q8P3`2=FXiz%iYApIcsw1BMz#Xlk(S`Sp@Bf@41IPpNO0L>|I{0EyA z@WK~nObJp@VkqYcc+mqnq_y)HxS#_C){9DrkmWJ{UPiDJK%$_C0d*)Q@vwv3*V*a= zuBkyThe?&gqyoTFAO+T~Aa+R{*q0#Y|E(b57twZLQ$T0ac25O~96!*o)`SBzFY<%2 zR3EGyB>aCXNYe`)xbm{@sUQ(#Hi$RVtA1_`emD5g;M_ ze=Df`fR<{le4wpp2CWB5JzmR9cr7{Mwb+E$!V_K#OnA*Z;WZbch0_d9FO0_zB)I5s zbWa6k>u#0_&{WxD0BR4xw}n6o-V$zD^5A&Q31jj=DyinZpc;jNzcu*h|NqV4Dv=RV zaWL`s9sTkDe>1ddl>85___Cxxo3S>6YQh(FufTO6qSk#e!xYp40Gar54;Q}5?>GL+ z?+-@h2XQvG&Wa1@8tOM3z2F20EBn$wf=2{8TX{f5RqGFEao4;T#Ao2|;NxOoINo{( zDtx^40i5*(%6d726QqRUKcpGa-3pR`76F~D0^l+dL^AMqIDu3`i$jnQxHuF6Sqv2f zYXudY65!+rBH=|42PY_;K&s(FKR94Qp!5u?sh)v00K%pyrh*j1yWbM62lzXVae$T^ zas1y3lKQ_DWWkH8hVbmW3TzvtZh-BbzaYC|+171M!x9Wn$L7{_IqKP0$;4aZXJ_>j-TLDp`-3K@8AQcnH*ltjX z266koMm1nfhD1#2Oh`-C&3pcx50^{^*{;2 zAWN`X90tjNjwX4-0trHRQ_lf1&)M0k0ZwBelA#n~;wx5I9Ak0XSeoflthp?`o9&F^aB2G1?8>Y<};vT5mHXRP|N`pjta+H zS>PoIC`Ew!uC0GSy#vtYKiyy^B*`iAxBLdzaUfZUkQ{%@3p636QWc0MNFRc~9wiL-+kckj&FJd9)9zW0kZlr=Dq?=^|lBu9zfAQA?Z0bwULO@7> zz=k#;rDgLCuoqholvbiigHrp86u5L0L>d~LrE1Nspeh0}@PS%7%d{RSQ3uUofFl|n z`OSMl;mW|@`up$y|A;LQd%^V-e~TDshw>Ya|64%`9+Grl2)+k95Mn#3+mBxdOMy~&;)w`4|wPtG4?(cq!2ux62JqVY(kQP>p~hR zn+g}43J&N~$P-~mh9L&fdLcG+@Mwc|ps0r%hBR`AWCJL#f=1&IgLeoUK+``J$?yR# zgap#GHj>pKqmbu>5$Yk6-iY}wxD5KdH^N~a0+6wQUK7NuI9#?@#IQ2}F&_Xot{bZ^ zNZ?H1(frtX3Pl?@CSko3p4J1UrrqE?4JqjYUbwAh0X4T<50oN;dMc8p;|`!_X50Bd-u-fYEgc_#o8fZ*LmbClCV-Z3Gr$C75CR84 zyY6g3lZX&kfYpME^w;{`5J~M)RhT}oBxwEDYaytl4rpBY2xGJB0Y->O%K`qDU!Wy< z2LwRnJ%gp|k($ddL9;FV`&_p-zff)d5z5~VIu0DN%-kXey38DA2iR>O2Y}B*>UQ1H z>jB!}3JJ1KP!R3t4FHMsdWm$0?&uWhcnLZXhJPE#bb}7p?I3$BU3b(8f`s_D9q4vx zJ=1!igz0rU|32UC5NkSlCO{7hgYcUViFC6}XgyHjjNpq*fU580nebYhe_!bK;|CHx zgBMG79zto1@j=5JpuIzIqOf$` z!QTVE7rS;3LkVlQ>xtK_;G~9f3uT}M>QYY7#8$xz?|GmUZOspw*aB6-4Csr#zAi7!Aam! z>cu=Y(9AjuXyyns@qQI@zJBWg*aYZAu$iEv#Th^+T7hnnfh@V1^3njj>Te39;h@Oh zVu{R`<8RSK=7VSTrhr>?fB0MYAW~rNZ~m75;4wLP15W^aKnrMYP@cc#8feH3bYKeu z+8il=>rzmw0({lZ7V!GA1E8x`|Cdeyd8GU(IA%a&Jqtm~KyzwSK$Ajo2#F4e(cKQv z#Sh?>hEuv7K-2Kxrhlox3!C$Bb0WdYCBW4OWd3u?i)#IiClfv#NvU2_3CK+fzq zSam08QNtii{M!#$x-Kbof(U>b;I0Co6B|IQHz4^bt@(#xsS;S8 z#nM%v#1EVoz&Y{Ai|3FTgw_M4=AazM-?|#q?yr?$;BQ$7YMg^E3wQ#)gBfz-*@D`+?HUIDju@~ZAjg1W6fwLDUI%XJ zx`w~k3T)vLmr`-?%>;MA=7Al`*6n(t)Aa#3;MQa@ymg3Y(Md2G5NeHM`DX1l=-M!VWrY0h~6bfYS!}q!j+vW1v-kXoG;YGZ7Fn54%>^lir?ABbn#Ff8wBe($O0Cy*N0$x0x z2KF~t@sxlUr3R3Jbk{pzkri1CFQPwyRdk2)K;wb|6c-#X=2=7I0@?vUcoCxmfRI97 ze*+H^$aFZOIg3yZTZPkHyMckfr3vnI@PdOa3?-0tu3P?>Zg}woQqF)2beT@q58&wK z07nr=!2i-WFAO1G18rS8&Y%Rkr1ZE0s8{sA+m!>_kOdvK;R+fsbp@sJPFL_+QU?J` z*EgkaKn90?0ClH8ZfR8o6`7!liwhF0;3FB|uw*en&JV7-0}eFM>B*2KxzLLwn!zis zUx3Rn(Bczcm$`$=ObGKgXzMk&5%_XFsIo__0F~%=h3b??r~$R0 zAmZpHX9D=z4^VvrUh@8KA2_Vwm(rbip?e4{0$O(F0b09@C}q!|0L!!)7q=1X73y@+Ia=Zg*(Hm^W6dWZN z;KeF9N)TLdlpwg^C_!++QG(!tqXfaN=5GZxT_JJU9m)eL-k@2^+X9@WKtqQ|A@P(3 zNvdbyN%aggsbVQvFgn*r`3TW}^A+g!WPvQt2Cag|W)31JA}M}>+;c=S8PRV>QhWo{ z4R&1tYIA||4J`g7UhqSzxYh$Dq96&-qU;@@5eruiP`f)o23#gagR*-mJa2Qn;D8ja zpezm2u?4JS3h06+i4OsFgNz1L zk~U4fur;Ci^O%% zA`-IQ0Qp$%u;9iw7eMD)rcVI%@xmF=_H#n^#dWrV28@m$_%huD)cfiL5Bt5m1*%3M z15jXj@SZvF!hvqED0DI(+}dmYAqrGY6fdyYz8lD@UGhr9`*sv zg?jS$dxH!=2;Q1E6=WrJ6a%tp545Z9|5lL7fETwR3)CSC8X!*S^OgGGQ9QQ^$}!f#?>U0PorZ4Pb+2yTLp1K$SoxXnY2T z4w%zGnm|s1YjVM>3F0h}CXjRBnn1(z&<%oMw}IxuLBqyiMc`R;==?Qkvmn|cq*b7* z3cSz;(wY%1RfaD#=$;Ci?*k zXgV$_MFB|DP++YC_9u0!}yTw@$$}}|Np_GXx*h>QjJYP*9Mlb zzWAqxWt6bw#rGaietZ5`i2-S3u)A4fK4=b?C!n`^LN4e`hUV!IY9^R+oe=OsE(lzv zbx#HZ7WA_ z^Xgp4GPg~+KmK=52AP?q642Yc8)R$Hi)gSR0x-)sdP64!1-$6g2ge3nG$2d&#YPqp z&{*a10}U*ofa-Se0WFLQV1X+N3V0ESp^xiDB}5NciPROC@+R_OQpX1Fu^BEXYK#3B}I{1JIycm6^3iw2eBWqk#sF||A3vZ2U1`YQ zA_ZzyHgn7eoqEjQIvG^f?%5&4&LEg4mqwl!1%)f< zc(@Os%0j=y7fIF{DtiFptwYLSZ-LII0vq2u`8+r=^fq4vIs1QU&x@P>Aa@FMyY`^D zBcF(*0a}OG+k6dVR?rK3s7aF{E(Rr?<~JNc0WWgY!LESBd~fK4=0l7@St-4fZ-L$N zf*qodRO>GIK^zW_S8#{4A>ak0I$o>hK=iyY{qy%f#5s^yoD7OZj2x2(R;|$O+R)j| zG9Ps0vcP=M4W1yD$b1F{P`~>4fh*ATZ2}&a4|w6A3R<`$aQr|5nuIz;0$g5!jstrk z18P7VK|9IjrV@G~(fmf@h2f1a|5*?JRAOkZgL$Cbt_o(E@NaYAY<|$ta-dWMA^`PBIpkt0#1^R+ ztFM3g&uaTqiD5$Q;m`bXze78pzL*XY(?k&qZhQk;Tk%4!1C&4cexl}2q-+T~3XZ=; z44f@M0o;0^M7A3o)R3{gh8NnE;JgN^@7{wmZHgtVR0Ks?0G5o$;R{L^3V4$fQo8+L z+VY~+2c!kOR<5)GB(Muo9Q3+QXg5#6^e!bWSC5bMM8yt6%=J7JNsJOt6U=U=t(0gJZ2bzyOv{ zSb};dKZE4hP;YQ}bvLVks+1)kan5_NAtMg+Y$;{`V3IM{wrS&i-nkry*tK>^hH4dNZp-q{Z? zb;0B3A0Qcmzl9%(t5T{0-WOy5mXzdg{R$qo{?P3J8jI$zk>qcE3=!eq<{;brz@g;; zf9n;v2#1Y4f6Fm27c|aq>H48W2og-TcUT!1>R4ZZ<{FVJ1<;7XwdbWnA- zE5v0g{H-5AX&%g#ZGNBtn(Dd-5$Set0Obi#d;NIxpLvi{3G8r(ZU>&;0A`4#j29qL z1F6Vi@}QIv6!1cRA2{&9q7jgtPYeMsDxsHKfg=o*4YRCXJpF@E3F?r5&Y%i-;g6wG z=f!R$l?L4b@P-0X;*s!#7>2OG`b7&w8~9v9uzNIG50uzLSZJnvge1XB9uQMNTe>vB zUS>k|@@r*S!sQ6avU;Heu>qo{`2Z6nT#zGT8YE=-w>fY%KM-g+0J`fN6cJqDkT2zi zM@vaQQjjBjq5q=pAH+@IRue=y)F>G^Pod>N3HuI1(2zOL4kHl7x&wUREV!n$ftmnL z&u~{lG;`RflnQ}^1XQMTKvpuGMIlu=)#8~|&DthNC~89aM6fkGW>8%IEv&Wp-lV5MO1;YdN( z+#pJjwK*YalR!%{&{AtYhBoUL+)!=M02hZO3-}5gkSiEKd&+7*Fz~mY{Qdv`1e6j6 zG$|_Z!mJTg#Hf8zVmRjd$q`cjf{PFFQnq8RpY2~qLd3cqcpw1{u4Y*v^)4tuaPe<* z{nUJbvBUKfvXnr}ffA?`6IhC)+aaR$KnciDt=BBaTtDma?<@Vxzt8s*r2a>wHc)E- zl5nx6Hb{BU{Dvbe5OkJtZ!<&QkN*KdFKS#tA*%p(F1R4^V1uy*x)=jN@zTBK;j8) z(>M5Hv6vUj>p{^m{R6nfPwfWZqt)sA#PDQyfK6v8cuz8a%MZ|qg@Z}AgGQ(88PG6t z1yA!Emhj$YP+|$_b-fbsV!sR2btk})$x_16U3%i>R**)}rf5(LiW@XbRUq(k0aUO+ zw>Idg0*2$ROF%W#OVF(b-ENSqw&A!d=!O9XNI=4>hJ!!;|L-ha!oST8 zRk8{Z{RUEp#8;jYrsZV-p5 z)Aaz@O-Dd(f-MQL0lNvb8o~zZCZq);0-y<7n46A(ds(P%`d@k=;Kku@(10ox1-bVC z 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 %9cg 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�BDBeLpP|pywMq;@j4fr1i(gG!Hm3t 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%0DN>+&DoA6e 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%0ATXdV%o*Bj^;yBi62GN~Mn<@PJmk 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 z

    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%0DfDbj7& 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

    aJ1o>1OB+VC)ocJy6Qs4ax%s;B;DAsSxn-p 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

    +HDG2;$vCJQ6d4qP`F?hsC?qzDA?`o(OJmR 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

    ju-W&pf-`P7$^}nz5yM0 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

    ;+#2_Rx0G@e3nH;7JoYo6c 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�=H&%ltts9IUdz>vtO8r#Caki@9^ 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 z zW?-1eq49b#1H&W^jq`UH7$$RQ9LQi`n8Km4{5b=|R1S>^B@7JHI5es@F)&Q$&;VWe zG=oFq$ZZCOnH(D1CNnV1;?OuD$H*|7L!&l7 zjqj@%7?yKr+(~6%SizyuaD{!H#dfFHmHgRZ}9%f+J%%PEE%)qdPLnHGA z1H)Dh4YmRXhHV@gMnVhU+Z`hEp6G zpldKrb7(kTXJ9zPp&`u0$Z(cJqf?N9;T(s?raKG_=Q%Wlc^DZkaA;&(Gca7_(8%Xv zV7SDgv6r8b;W7t<>e3saedCf!ZepO)j-OSE8FXrzQUL=$yA&^IkF-)I13!lpKlm6U z9*(7~3=FEjH!v{p^GGp*4jfW{06K+{1-#$eMv4t|nwWg}Ck6%v`C0cs8>9=qfHp`! z`32gGtv+Qr0|WFl4i_o5ouJLs@}Oh&I4(pQj8A0*B>&@)#I2__uK|G6)<6 za}4;+L3bP-=VC5mV6fol1Kmb&QZcB2fx&@+hXZ7vA_u>VG;@3y1B0>-=rAoeX$4Tb zOF0m9w3xfJcs@wx7HCnYhqQDRh;yfnfq~ysTCNqu*%86O!0#n3H37u=x|@N4-&@^KJ{88mqqAgyo- z#F72Mz`!3Ut$Y{65sw3%u_LYU0>n`;WnkbBmR9-<;>-zVVBimtmVFQjI>72H0|S4k zwCrmTX9wuCs4!`TZy?TP&^@E!((;T^3=GN(Kt7F-mgfO+_@;x7=#f?s2XT1kFfi~( zNh>IUILzA_82F>5<#jIYDiCLu_*l$ck^z@H@z&J_%TEyAE5L2ucm!qGIY99!bvTZZK~Roe^!GB*(JHf3LB|TPi*qk$ zV2F^aU&Y8EsK73Eco73bf|O1OBZHtKyXdRwpkw@+oERAdl_0zwvMnH1ZW@Hdlg>Y9e${tPu9b^yT{$P|n63NIQs1D(JFv*?+Db|2+XE4d;=P)t| zYO;$7E(b0D)=V#85Y%D^pC$8wNp?yXBZHteJNVqHA55}rfs71-IuPz3CfSR@j0}Q? z>pk=_a^0|x*f+_60pra=um}OHz z7NtW>PGFYRn#;%_n9VMxv7CV+gIRVZ$lhFbLA~XmCAPAY!WbC@^Vr2*Kt}P%3WMBS z%r5e32?Ij{kLc{ zxD`CIVGynYs2s21k$scE$RJn?k!|3S^#$2m%dQNPZQ+qs2N_k%ZU*9Z@MwvGeALLU zczXc@0}Go}50BPDP_k-c*J2f5U|?Yp>*3KVbYo-?>|$58Uj|wqFWkeU^#K|I1Lc< z!F!OXF^HME1jMuhF}I%sF+D-dm5d-}2#9F~X2yek(vSGZGrFvq$U(I zF!1k?;Q<|BDk61n4kH8q9tclD>KEwHv;#66pi_Wlq=HRAhx0*rvQn*}W6_SufR81U zlS%>|+j$DYlb3q;ih+Uuyo|`|bkNz2C;Ax}_%Fza97tzi(2$DGXJFvJC?j$$9dt%b zBB-jkBqQ=V9dt&`Nl>YKSw@5*19V2seb9lTS7b!QG8h;Ie+OcFg%me8BLn|kh?xyi zhZPtY`0qi??2wWM`Sw1<%n4Ha*cci3A3#*jkjlNrz`*|yqH=*0lQ<&-|09UX6;kot z3=I4)WduPt6mO9F!pgwF|3*g8F@u5Of|LsA?4I`!-Ur!JQ$Xjh$_NH#Ffa%(%BmPM zF!29{a3vUJSAq`R`!6F{l>yp%FMA=2fq|banI zKv#r{$O^v60PTO56C28Ikq+2jfa27Y~6!R?t0 z3LRRohCTQQbY|wnrfvK{B4>LjAv1Olt4&Stb7}dcj+sgquDi9(&fl;{Q5w+3m9d8gDP!bSwX=p&<pxF;L55mffFA|nHT zqpaYsY|#Er*^WyL4E(LKg339dZJV+Mpk`Tzte|@i1A_;X?EPJ!BV}a;({ezYEM>jT zK&Qvb3W634M=;4csxdO~PmvYek^|ZjDZ8wQk%51{tl+sE28IkKS!pc>2L1)If7p!{8wcKrSljVb}-4NConMZ-+-j&15C1lpfeC}%L*FiF)*B9 zlKuA^lpAFQPvn6%waFd^9k2HsqWA`r>|anD@0G0Jqdd?SG}-0#3=I5lWraXl;{}s! zh#La~{|AWT4@|O?9U{xXEXxeC=$EXZI_NT1X4x`O zmi!AbS%6tK40Piwqnw~yJ_CaUvurLXLRsYmQ}aPvr(`dH{L3XL*pd%!On872znC02 zT^TUTzLQ~O;FpjCrz;C)*~_4!KuS(0lI+vD3=I5o5XBzMvf0}h82AA!hguceGBAiUsF%yZ-8f%{?P($d zgZ%D9kQ?``2K5!Iw84Eve_lq07Xqe?9HHq93^L$8nFXW#jUv!4bU6kYeh~%+0c+Sf zld=plJ)6Nd;DOtdEQ~S?GLND_7qr4uNHfR?FflL)xWfdb7-S+rw;g)H1SA<`j>|DH z2>8MTBp76(`WP7m0$~E;3^M7UJG??*0%8m@Mx_i40^u+LQ3jcxs~H#sqF@3d3^J;$ zj0^&?Faco(nVnx47z7d+m9FQ5{36I8GkY!rgFrH)3KM9Em5HB0#-@>hK_HD$TNfPWn+-J zE6&IuPy-WSWss>WWMB|zfC;cL$bc@G7J#1X$->CYAhTDHfkB`RrhZw1{U3KI}#k$DG74jW(s zVk|PCYYqgq!URNFWX={dFbM2`35c-Be7niOAg~)IAj~2IzOZsXOhAZ5=J9++27$vc z0YMg-51H_8v@tlSMl-sf0n`AxwaSMaC|RfkEI2 zOn{w5#&bCXgTQl`02_mLvvr_>J6(9UlNk4viZ68IK3wVV8)QxQQY`3o>H3C#zkVkw7s z1_l8UCO%N_MMA2emytn0oJr+XF{q6R8p#omVv+}q-DpVVDKRn#$T3NQPKz~=ny$>q zAfOE4Sx5=LU|+ zK}rd9{hbFBxC7cDmBGWvAm9VxO^`B7VPFslVgmQhW=Oqi0hJFB-W;iopi9zYAiM=q z%U?4v2qZ#yOQf!V+81dM-U_LEpnQ}K;jNKU0%egrCU8`203Wt3P{;)CN$-$aWXr%H zPy*o{kXit`Be)#GJ0TVC%E%y4&LjaEGXc~85u_i~pAZEphv{d_U|?X?$zWgrVepV4 zGXoEYQ3eBp2CSWdi7C2x)!^S)upz}+4IG$%RFzA3f6<`BI zL4u+nix_w~#IvB@4uu;98r={DbHOZ-e$TUzF4Wb5`>2|?nKEdq)$%ulvAm4$`P!|KGnJYOA3_74r96~=t6)12RcsTxn zOgbUTzyRvmLDYcGwFOOL8X^bYD7LKH#^o>?H7JGl%DAdHX^1s#1Z3Kj!d4@>BvIUgR5Eg(H0 zVNg#Jq6eHnKt_r}Q|Aki8c<6C)V&0&Vc_B5$zx#90re;$Cjf)ggRa5?iGt>Rz{*6y zED*uK!x5Cnz`%DMG~q4~&jIRt@^gdQ_(_t#L3v0Q-0?_ND+D#XIV2=>r-JI`OmIca z!YD4GI~jCeZ7!5ACZWsa4r-V~`JxiKhwg!DXDDApLa&rTU_1MvLI&{h?V#0G;M(L- z9xR1{e96GWaV`&QjW>)%18F_;A!TV~(^_lbBoUceNA&IN?{48&sK;Q(Fi!Nb9u z4>bhTmxaiK^uy{8U6?eeZwrwI1s6DU7Q<0`+yldLZR0$Or}=j%<)LC_RIE zw-DVR9yl6B5iDr>?SiQW^>!huk(2k1dM4*zpR~Eu5DXGDxZUZ;(=LDUi}>pnVGra>k8trTT23IX!u04bXwo zpgtC({DZfk&Zb=DL%1SKHc(v4H-NT6$RAE%U|?jBb3X)^c47nd!Q@*lK-SG|09nT| z57epN&j~syS`0K&F5kxl>QtK{GfY;1hxu+ zs%rrT9uAP-4I~80nST^AFc`}11@#VDKwdRUNljxAn8O0{l2Imuz)}{F!;O*|1h%n& zT*ROQnw|xx9R?l_kZwNEjnM)E-#I`{bbfFs`~)}G8TdiN=mNjM?Q_tz2b@I=401t_ z;Zg9PEvblsL0&5y6a@;LpeQg`21UWCXP_uBhD>D(a53`Lfz)ZP1*Mp8vp|VKbsDIr z!^NltGC|=d2LpqG052m4s4*-hQw6$-fsq%a33B_7fB@`14!CpS8Zj_b2sATs zJS}EmkebuXz#!1WBzU6)G!u9k)U%z$#PzoXG;6Tn2m^z_Y$h%x&`5>U7Eted2@{u3 zDd={l>(UGi0&AJL%1S}KFL1(+L48&xF6A=N2>)78ALlNF=OJ~efssMrDU)DW8R#OLAX7#Lfmcji8D*eZ$y1e# z3<7Tryr&ja=y54a9s7%d^S3v{3OYzWUnYU)J>27$TE3bQLf-VqG~ zT}=|=z% zARlA8_yR}|DCI%)fR&?~&cMUL0$M%@@(d^$LKK1x2NS5OMWG!R%`#Bev5bKM>?;!n z9*!88A)qt~F$AF%95f&s76q&(AG6RFDfPgYHJ7+lqWRZ-3CbJ;80+0e- zz9gW{%m->Uae(yeGP5g`GcZUOFbEhiD~6YY4rEaPU2Z8M;LOYc;!Cw|V_*<)W0nC$ zKj@|~fk0;V{&G;s0J_~pAc7e@jsPl}K_)2*2#7N?gXEQ63>g>%l$cpSK2h#ZU}O-` zVP*ljRvB!hF*6Iug$#-u0v^oFTgn+2l)?3iFS8&hXq3T4Z~(I~D1I0es`?oiBm`2K zIg~4)7Z(X+Fe`vK3{uxs7#RezpqWv|(2RjWAP17ESQzC6WLAL&`|@A{aso0PR~Z-t z3Sa`V0y0*hbF@pL0?bk%zkuAMunaWmCQ!l5Q2?@3p@xw`pc-cBNl?D7gq=0&>T-zs^OjXHFqpR( zGcwf6i&!u+FlZdL2K!YV#9`8?Fai6O6EwHaq4CNNbjhnmq$48(gMx;fE$Av%`F#$c zTcH!p85tNFEWR0mu9anEuuuo7VPFF7=&5305L)BN$RHZW%wEO7z<1P&kwHSVQFKog zX!6OPkwLUsv;QVie*j##KDNCK47?pA@e%z)SDiAD11R5LKh z$MS+&3v6pZ#SPHEUbhTt6-C>VPKG-(GBthXr7Bv{=jOGkL3 zu+a|uYbG-?h#duUJos0gVPFtD0p<%+1OohabF))bT69R>y9Ag$d#GkM| zsAXV~zbgO=@$R{x5SP{mCBP0TQ0rU2L+l%8Fld7J8z`;(0DF{y|GhXPgV;|nhlO9r zkbyz$KbXTIRb$V45h)o#1_m*12v0)FU6zqS zjE_-vYb^tVjFk6l1_m)9h@66yod5%am>7hoBK1m+fk8|X!qbq__`tv*Cd~-Wb2?I@ zIt&bAvJg1~DFKj|JXldRQfyy1~F|2&p`?_)h4C~ z;kig{*JWT3Gla~hcu2hqXJ8OBW(0?DfK-z;1A~|eBPZyl?FcE&W(Ec^Gsvt>g4FEC z3=CrCjNsebGNc~-U|Q#?;x-Tm^UK9BGKkxP-6#QZy&agN0CBxNn4`gYcS|5h`Td`+zZj|0nyF>H;|D*+!L%p z0;I;98RQR$8Xu?{uxEWCHZbUGi2E~x{0C7J096AHgg{90h*yUPcD-PJIwZgCA6Kh<93oI0pQn zMFQg8!XWos@K-)&U=Z(>pV$Jr%ie>7kwLr<%<*8bdNrScVTQyaMt+c_^6@xE28kt% za+}&27?gQ47#Sp%GRoZQWnfSaO=M({SjH#=I>tfycM>Cm#BxU2E8PqX%AW3w3=%6C z<=6K!Feq<$$G{-5l2I+Ri-AFzhmC+5{+xk9Vl$(xBZw2Uh=D<33!_}~1aRI11v=9NW=00_ zer8bQ@YO0ZFsu-t$YI>dz`zfVjmg5G^uoY@S)YMHd>XhEWZ};N<@mW^4hO#>KO=+q zVsM!x!2f}rfkAu)czc2b|HhRJ4C1RrK!vS>UP^umgZLV7bUN^#Q)6HdU(W-w#sgB? zZr}y=z5@79u`w`+Zx))~!oU#0z{3HGJRzw~3=HDiWEZzEF!23&$-tl>zEhwb<8N>zz-VX5I+QVE@;rowUvQ^Dfue{gZN=)5Sy#Fm4QL1 ze_%X3nt)LkTkO-67I|c^v6ViKH85sCf-+?BURXCo2tOX4XN~m$^f_km|pdO}# zx*$k`gMk%vpXirXXg7m_fo}$AhlYfffDC9~1!(X`LPrslvKaW+1u`;7=qiFFI2d?1 zK!Qxs2SG(MGspnGo6|uy8VH1ebb?A62_x{>C8R+uVXOv{0O{0gV_;xfD#*YfVZsbz z^KG_cV2F?~6JTv;VBiO}%OxzNW7-%PpgJuTKoSD{|3TNGT8V**dZBY3#pBYq(^06>7u*-LW&M}aG^bWN2s|S3ap-C0! zKEr_fp!*DG-UKcEGF%T@`n3hLqL6`ao*W~CfJCGKC|iU3Clb+MZ$L^`i5PM5c2M)3 zskDoMK_ZqJ#^nc>35nn$fk7{|qJTjn2^=~C3`|eV85ksznfJ9bFz{`; z!oVOQktzVn(hxoA5Iy`lpb9txoKOWAn5MmDV35dUeh1R?j*F2&LLyrLl=C5aa-n*_ z2_O%qCyIxGK_Z`7se^$*&Nv-bJWCX_HFhvC$h(V!g72>vsDzyj9^{W}12s_jwu7Ql zqE28NXrVJG??^Ogg4mF}Bhd&po&%g+B$~hx1{#t8naKp!+RO}M^OdQCipW+0ThJyT zaA>qcUCHx^fkC1}MyU<7UkYqNrvXTn0zc^5b%`!8M*}>{Ezu3O&43?#t$PnR_gnDa zm1Ja)=#_Eq0u{_RL7YA?$Aceqfv7}3pJx{XLjZr?LWZ?Upt9`L1GTLg;m2}HkFY)-f`;IobpNx&6;aSMvIMxYk+=aiRsoU_?|>7c2LFNO3=9(Y!A>#YzXvL`9)T^i zfH>tTSdRn5DKEe>9t=#0XBikIUNVPvGcfSI2d&GLc+CO2l2kY95Cen6JFqWV808ss zr=MY9koXAY%Q5JB>N7A%e1Y<18FXcn85tzLL-{fcy3(M8{0GXHX3zyK>XY~nG05;g1r2V( z1VkBRwnj5BNC?9OL>Oe!_cJg^h`|Je8Dx&BgXUjg0zwQjqN0op60$G>K?a$*Wef}w z3NQfy1}O(nNT@KXfr158Up)ZrW|zDJs-x5y1whRoDR3d832A0ANP#*z655anC;_SX zRSXOg`VgLkl-&;o1_?t($kd7yXi!GNm=QcGqX8b_lrU!mm*fUgk)Y<06@+IY1uk=K zAf`BgSE5PSF{*-`;=!O=Z@|DHVb93S)62kMDk0&>$O&p~L0shwa}}svF5$umP6YxC zsx`cf3=*!4%*%Qi7*vC-85krY7`31GGB7CITEW23Ad%0=F`ZvxHQ03L}F=2_twMNkQrI)eDjDT3_c1VdNc{j6ja7`2KK-C+EE!O+65R?Jts3TNX%qpmYTr8V5%T7n~@XLj)&-( z3)8a}RB+6L`I9q>fk9$EBpFFCsD@;M>M%xTzX=Qs3R8F)84M(LF>)|WgwAb9>|qoI zaTvh+xg_>NOyQ6M7uowDBQgR~2B4y9Kh#Vqa3y;H!jq9sEMbs1$jHw&5i~IiZWA7Y z@H7~BI3`R0B{WbERzVVUg^a`rMgeoU-KQ9(K^&;vr=fO(*2YX^U{L+Pf`LKe3?nlS z$Yg^=P)fSM$k7bfeTh*9#9@#EO_xYqW|Zul2%0PU?8LwzaRuT!P)hQe2y%igm<097 z6lA>_7!)MlFml|18}*J+3dCWM0*yCHyoWkOx+pb`LE;0X=n;Sf&_{?Is8ca@BIt@6 zQ2YH0qZB9%#kZC)Fi3o5R0KIod`-)Cj*1T zKSo*5k^ynPTMP^m|Dm>ZdNVLcFff4!zr;_1+9ixk5ZexeI80E^3{W-B!o&lbm=Mq1 z13IahNnr=rHc)8joSekKAPQQx#2{WE&&VLb&cuHWEW2+K0|Q?l=twY0J1&;V3=I4? z#TghR9UwdO!DAkhj=Z2T4-N*twonEJ2}xfrSCBeTLXz|s293iofE#O)0bmY`USbJ@ zWS|tNYr+9;gh>X0IRXq;%_l)A%bJm0X9@#@A=oBcaAj<`b^-%~q!as{Nem2zpv)%e z49;tYpr*5=3wUJDu(zI(LDCgm;T!%JXJn9c1CP`jPG?|XkaPzZy@sG3lcWc@a5V(2 zlaTZTFBvujtu&VO0@pQ$T&0W*lHTA3kRjK31_ntVa7kha+P*9q%nk|#!v(4g43Z(> zG;Mgzm4QJr6x`T06uZp8AQ`3rnv^sAc9DTWG8{agX!!3i1A}A)WTIac#MsZL$ zi3i+eV31B_6aaZy?%GROdtYWIU+omo1rdFqv78IXK<)h)(B+5n6GK4VrGG4p3@q~P zP7DmJ3{3y8Gcd?3V0N3rz#z1nkC8!UkuXTJ5NLQ&W{D_ho>s_kE(3$iQg9j-I$yxZ zAS(f$-xFe8!N4FZ2@z-9!@wXb1rg8K&cGlm4Nfsa0#*zRva)=j;Z~u^6`&j5A!=+C z85v|1z==<2iV6dRtRjT%e3XGfRtdsZwPj?GRfe!bwlFZrszA)NjbmhxRfX6a%*)6i zt0oItJS-Gh$G{+~4pCEim4QJ{0-|?|2m^zhq!?%&q|nhH3=DEoa-cPVLY~VQ804hE z=J0{rU2+NnyFeRAL0uF%C2n@B8^6p@c0{`(~Mh1BgA&_r0__zFEV379&a}4z!4+L`p7?}9u85!h*m_gp+iwFcw$cAy4fKF665z5FQ z9}c>Gj)8&y4~P>1=5X-O(`RImj|AsP0sbxFj12NoV2%X8E6C_*Fh_wu1muDkFh_&` z8ORHcE z85!i~fH?vTOgpL=8RX|Oe*+o770bxrA-`7OA;^GMP>iet$2J51Wl*@S2XmPC>oXV` z}Xd{9GU}>{ig62}*q0AWQd1fJzV0nIq;i7#R5Y z-9YpA2L(VX_-z6h8RQRv(*^_oe2{gA!5j|$Paw{5aCQ^mzZA*HAb$dED5x@hK7)aQ z>8l$fgZy4*u$hYfpu~4pVBbv8&P-66I0yC|1Aha^r{}>OCjK%|=v)B%hlBql$Uhgs z90C3|Py}BBb0qlpgABL^^{E9Yn_X9c`1ByiKQ|QAXE87s@Sgw$?@a~WSquyo41AZ| z7#R%Y?+Jk9_*+2<;Xc?n2L7dKj12M*z)s-cF9D^ohhPpDzc0vfkHE?V_}f7_@G+Pp z!9OK|kwN}B*j5F8E>H$~0k##?Oagh5hr@a%0|S#T$O*TYL2QMDWKi;FVdQX_4Q;N; zvolJAI1EzY{KyGupm9inGbA^JCm;pRcf61$s)W>UcSZ(zeh5!N3Y^&lAv_JKsa=c= z^1=|Ffz(}4V2VO`7BZ8a85!gyVBI=-2N}jxMh1Cln1Gyv%ra0M%E1I=9c0|27#ZXh zVFEG^GU~~U4D!k_0ci)BW1xsog$YPGNbLiep$-vnk;+)W$RMxD$m=#6l&g3+>}N4B zu!4q(!)7xufLs0y43j0_xtQS4J@GcXwXO=e^ej1d8CyfHjc&B!1a3!XbMd<8n~ zAx?ZINXSGitci6Mh3w{PB`6;coxc+NYOP*Wn>UM59N!e=-vdGe+kML zOVRxUIvnN-lrNg1%b3Z?Ab1_h7fI2*Q_a92cniuGPSK5xU}O-y2jvT;@Vmz|G6+5d z7hD;7r3`{^Smow{#uPon85snBvO3ITV5pETHDVBCW@OEn$H344S};7DfkEzb03!or z?UP^u8%U3Q5vUU_FBS}5z7h;t0rklVv@+I!L+~*($RI=A35*Pa&%mk5@Ig8wgWzjn zP#b{3fJ5*-Gw28xL-2VnU!=h7EKt<_Py($L1?|z92|Bq?@Hcb!JO&2Cm7w!W{)49y zmCbz_83dUawLlUKJRGZLgO=+Fx-zovn8&~%H3O7a{1~Mc&Ic_^?XF>D5cG%eI2aTT z)G#s_2s$xxfMlgh83el-S+^|!DO?HC)&t3|klwE#bW^Q}6gd0!LF6Q)VyYM!1p6U8 z8JQiGj0}PkAUqZh2?d!{kUK`R_dpy`5GS5d6ch+b#i_{*f(eW~pu&j38ss(}4v-d80l`2>;DEv@ zk&$ybC_rV_g6v6U6am$fEF2OXGN(X>WkCg)MLA@yfqat<6<`(Mka-Ep0(npYMt%;N z0+1O+FabUenFf&e%3uP#95SsSfohll4~L9BNJ~9TfSW^R3rIyXOn{3+W;RHm4JN?J z0STf`r~oGe2ZN%3pbH~2=p-Gbw3Ji^!2m|~iSrm3lt6wK>|$hp0`j1`OcFeuKW1dR zypVxGo-+WH#Ak+pl6bNwBLlPi`w&on#4wPNfmQykA87jKVFYOU=4LEt@n3uxBLkf7s)dRF*1nDw`YM`V0^K{`3dc86f}iaDX;U@o<2ec|71cKs_ZM9w=(eY)Xq58043MF65Mt zcLoJbeIzJodcr|L(;vggz`~%&A!xzOY_*7iLHVm5BZHtdGo%l#uoX0sA!x!ZP``+Q zL8=;5+L}R@c``_agUV`i2#*Dn>TH?WL3VLSDT9tsvSXI|u#ka4fI;C?BqM`@pd+)u zDv%+du8*KIvn+_iAhi=zK)W!DgX{*4(Sqzz1!)j;Wo8C(csM|G@fydsF)4k<2>nPm{(0jUKbUKN`dsN^^y^%%sfg~(lyx(3Rk4GydNJTLI@y5KoB@ZnyN1>S<^*}x4H4)7_6f*06$K&K#r%-XnwfkEMYI>;$k*f?C5 zGB8M`&Szi{yaw}30VtNQLwGDw1X^`o0PAo`96&a!}n2;Yl!n?T*`#kQ1dSK6gIw~2jrSfX&q&R|;Kd0iJ6qv01_t^0p`e-G`gBln(&z>%NW{ZH zrE6{)BLh2w!p&@uw}sdRRxN|&QxSG4P)25u&I9F4QFidU<^V|Cim}Uq6oQsrfJ|2f zX%`e{X9jT;IRwqvncpvCU{F>9os(w4E)M4W1(h+D>;j;b9Lnzk7#Reu*rmQM1FtRt zwZeHgKy7YT&>#rtfIn!XoreQdSnzOcSjNC0C>jnbL&cYa#x;#+fyfPu7#LVV$r5y| z99Rn@m~>-c4Oz~>0K#BCNZ%6hv1lK_Bq&*kdx6@5-CTm#1Q{6k=784DD@b$9Ud{j+ z;8BnR_c$5&-%Vp=P*C9jwaGac_?T-L84?tOPiiB*gY3Z`I=4F7Zx#|(UKgaSXP9i(6m?$~SSWilvO zfQv>0{#+hL1_ev7Yb^MkK{~8uqE|35IPf!oI5yxi(}VwLB_o4^9T%ts3g8b>W@J!s z0COT31kYE30s!P>9**MW3=B3i4Hy|1w=pqJaApE6O<@QElMD=ubAnbfFxb9Z2$mKH zb#<>DWMVjVkcq)o4m51IjY$zS?3;Cni6QO~6N6n^9>^SHkitKQm>51CVq&o03N`ff zY6gZ+Aa^o`ax#CAV*%UYz!<{(nK9IXF_8H)V~7J|5c6loKnDB6NO}ZUf=&Yq|91G1_lNv z?JPzH#^p?m0Z>VVJ<6+~_JlyC7#UzJxIHW3_IyRylL}Q2wTFpA0c6qnYDNae*-VTd zLLe~+8sY;vmvPR@Rj?SG%>-W5T6&m?q3|#$vT{p6dK5viwdpVu!@9#v3?}Z0Md=KT zbD6m7m>C$DCoZV7?+S$&d1Va)!)(xn^NfK^O z#K^!{&cvty)g}&dD+4GMfKm`7*_Sg(fx>6i5hjKuM_|dmoJkkdX8Ci3iQ(H3CI&Zi zr~x2t;Dq-NSHc5r4`j?{Vl)VXgwQj%l`(5zA(RaXp@5@I3?4_}QId;@5|8yz-GBEn zFxbC=azLJTTmwpcAxvcq4)9nqWbpU_RRU7)AqI6UBn)a}7#SGjnHUoSAr3kTcM!-t zNR-7hfwTVBqf89z5e`a3ILMv{Y5_>kF^C(W*%}`B9-2@!V0*n6RxvU#x-x!%rsfpT zP7ZL;TkT_D@JTCRU~~niR?cHg42;K^7<|Bq$5kE_8CA!a7&1U&i6CVeEaN$)}kZ z{H{!8WMK3Jm!GX?m>3GrFfsTQgEE#Exai$@mWd(uEE9v@>q$e$<3K$pzxK}bTFc_6FFhbV#8Ww^A zA&ecQ#}L$JV~poiUdO<|pfAA~#0p}8cQ-Qz^MJ-y8T3Gn6UGqmZZi(O{IoO%#!zrO zUw{F+NS85!J!~BVgTGT^3Il_`XI=>dqx_sIMg}JTfRZ8xX8*9=+ps6Iemv%{=i#O`wl1BSX|a1_n;%H_DKL)^kB71H;z63=Bb_MedAe!CTvcgS;Rq zMFg5szOG|n@B^(@X8Z!Kti-P{F^FDaVh911qES%Aj0`Xq4^$iDH|EeDP+VVOV(_}c z#1IN9MXRnbF;rXunICNK4WbwrqM+*cu4iBfODaucVEoGwzYkP4U8oB$U|{?QZp|*d z!o)E53KP^J|G^HqbA^fF))gj(h*|p>7~-MEF)|e7GB7YQGBPh(&%hA6eIEmZ;8i9D z{;Nz3p{qgJ=_(V0?NufQ$8@L$&i$Y)70Oi0;J_HdXb8$z94QWrL7dEbY>;4LU~rrW zRV;$6mp zd6kJ_I!GudHIIQ&kP)0lk6dM9*mD)?KX0ftj0^>N3=E8-jLc0Np#D?2#>Aj>4eGz3 zYfKCQ*O(X_gP|IT@m~}uDrZ79Ffzbc{7^43Dljr10oewM&+=7z=eZ!8fno9{28Kw`L@c8^BRI33 zxyHnB;u;e}uoyID*+3m}b|V8rq#`Io88Ct;joGdIzlx&LEQ*W3Sc+dYeA)a_cJi;*a-4g z2vZ%X@MSb+aP)*qM#1$lKwJ~=2T2o*3^0}w$SI)mPn(h5Y7^8oz1Nu-x?!%_eVvJ6 zC&)DwP|ctvR^ZB}7g5=O(4*2FflmxKsCa=4e}QxY8X5(WHT^iZ)RZd0+&fnkhLm?H<%c7Z!j@L9tSnAoFOY7 zvTrakq=N)O{a!{FNGz_r!Njoe1`~rFu90mr)Fh*9D z%?u2#pkxJZWI2{XL$nAQqQ#I*$-oc;(&X*~3swh^b}y*!^lmaS=-h-xYSc|8hOnDV z42}U%#Sq`Y{Kb&Rz|gjZ0qTWVh!L8wwj1{g~imhuu9S;2W=(Jdy11u#1<++t!lcMIe; z&jq;*3>&sGFnDD$FxD{2ffi|fzs1Dx`4%)_E<(#dMg|xQUevcRGXH>iLH{-rgYIpp z7b0&nF@)b{VsN|*)r=7^JkSthWPq_iyXZh}X6#^Owb}{|n7Z3c3^g!Q*W6}eSaq8T zmf4_QW@3nkvgAP8L7Av1y7PKBLP*>LN zXJBCPG{|OP@Yu${5X+*(z`)qg$Ol@v#60mpjaNwl1LFkfx~4l!3`%#H7$QI^_qZo0 zh(T+C3$hs)7-urFT5W^+tn>~OL-8GGcrCue#IW!V6NBSJs0M8AS_v%=7#KYA10d#h zf!r0G4%K7=_5YM@3=EON`xqD)7claeh%qpny2He93}pOls7g>T#ep%D37pS3nb*Tj z_AJO^U|7D3fgv^>)VSKf$Pa3wa56L0gD$sVV2Eu3mBbqv1whMpIGI1xL4{R8syD%e ze?WyH1;%DbZj-*t#K3=-i6IiSaFTHgq-a@vmx*C6ND$O3X50#yT#UNM#Ncy}i6L@A z0jPt@2p)W4ywAk&`yLZRENICj<90}S!#r_EP3%2Tvuy`V;6P2RHpq=TA;bF26Svev zN`M-ByBNVO#kl*RmLn5Gq8z5`cr?{Q)Qk)YIDlF^-ctgA3+7Q032H{}-wV`*)xYWw2+5=4X&1Q&dFgJT?2Gje4E&S{gN%?n0`0#F0Og^6_w%p~teObninpgFDb5fei>$fT`M z4QMWAfRyTopt6h%8$iaXFmVX%fd;_5M@$TJV8)$!#Kdq4WZYAz1~lWq75Phe0DztP z4yu%q;RDEQEhdgAnAsm6F)_S{nJxX8i9zx)6N4i&mKqjp5)V{@k--4eGcsf1SP3)9 z;V~0~-D9Yy^ByxXO?`L4B*$c{f;C>#s32i?WnkGU0lUZQN zP$mvlXdlIc1L}$spnSy-Iz`A5D1A`Z6q!P3cfP;axk&yx1 z#|MvsvoUaijk!b}l7NoEO*3?Qr$%#*}7pMe2{WwweWy)0m4 z0AYa-B55-;85uxW$eEEZsauYL0fd!0dD1{;f-q+f6MtG*1|tIq^UsqONaLzvWB_6Q zCDObMPgjC=PZzo~FmNy~f5E`OQ&7vu@GydbVFPr0^*nTZ>~1zA1Jg52Mh51K;-ENX z=3xK#je&ugg`N330|N^OGb6{Vi3|*^o}g=lnAlG@Gcd4*g4m2~ZzeJ@Ff*}Q9%W!) zV`0tAD`8;fU_H#hz`&Hp#>l`jQ4(Yx6W0s|29`;Z4j}OhnG6gplOgQVPzDB;DG)XL zejJt2LNoz-b)Kz`$w)=2&osf&$ML%yHmc209SGchnEaGw3kz`*Jza+HaIA%oKrB;x^gbpfYCHYkq3 zoD$BO^$ZNGUff3+7#J!zV;(Rtu=)yt;;ex)(T0J6)sG)^SwIu#tUd+?R)3DuObiUo zoNaXs46K3tpiWK)=W)=0UL-Fl!%pDz1$jGK{23Di!wgOp(3bib$&XA73=24CNis69 z#)6%*f-{Vjfq^xS)185VVFTw>W(Ee0+ApI9#DjV+{Ft@6Clw|ObiU%UZBGO zI39wSiZUS4H%tr+V72Vb3=Ckk!VK&jQjDPM#+exy`0N817}z`ct%^mVGGcW`*GcfQou!0W2=iA`Nz`!9b1rp+81F4e( ztK(Y_5|;;ya~!u}U=ZNs;#k7Wz`$Akgn@yRhvzP+HNlyd&%nSbAj$|zTnx+{>_0(S zjRSln6vxw9j0_XF^f;PX7#KMF1Q{8)40vn7x=!3-VBj+4UC6+|z`-eD&%nTC%fFKW zWXA-4Mg}fBzO@Vt3=*93K@1FB4!oTV3=A@yGd43Ya5?f$Wnf@X;7ns?VBm7*1bIk> zbLk`o1};~y(Hfj@RT&t#ym&!L#eg&ODFXwSpWsW-YHrT2D;OBK0tCJ?Ffcf9x=1iE za7ByOFf%ZCaAsU&VBm@Yb0Ro*&tPESiUo5rIBm}}FmPpwgM3iIzytE-WEN;#Ffp)m z%w%C;5CA!1EeivKAe>-e=h)1`z#t@iEDN+(nu-4)_)=U@4ir8C5>kW+@wsnjVBk^V z14-~DgVsnILBgKn0|Nt(IfU&K$iTp34Q4Z?+cGflCPIpjoFfbjyh-382Gqyn4Uyspr6C5fzT*rGyx~$ZRj~{V9Ad>{3=F){Qs5*m zAT~9Tfq^$hO1di+v@x;eJ_7@9f)xMuAO;2nu}f)So)n0uAqLt9#hW6<8^poDU?3Kx z#=yXvF2w;Vm@LFIQy6%&qy#`EpMyleCk6)ITq(IS4$w_tvMv(y?=dj&7Dy?c3IZ)x zly;E-?PKCCmg0#6sSsgzkyw6;fr0l1!~hmXHWvvoAw~w?yD$M(7m3dW3=F&vU;->I z5}m&o7yo}P|z+hpN^bk`}XJFuEmF8H-$-odG209pkmrEKPj1gjHVvG#Df)HMU*gjje)w;am(&Br#7#Jpq2_0l$;FW^#W{7R?W@O-%g;=scY>p8F1Fxbq zxNKS?b~u2MfmcOl1E5SzM~k%3nq!rLR} z%FD>WYa}h-EW*HWKrD=jfq~al8k|f{h;3nFWZ*TE1}BUQV!P!S8Fa0mO!{1jFOuGG<^}x}AZ6w-=lXnC7T3F!1(4 za>sQRMh4z~h7#J9(E6y-5FiG$E!N9;Qo%aOPKw-)SmDTsb zEe|HMlMD>Jk2G6285m^JUo$WS@V@2b0P)25d>I*dzjA_827}mDkoSK=cr0R|BQSXX zae||eL(D&qfq|Ea3#^hy>}?e&0detzvbKPj5h$;4LgYlma=$Y$@bYp=*?|t95c~On zfq_?;OM0;=DF1@y2Y4m8z*Vq@*r7!X47{2UQw+q+E-*0g8gqdYiG`Ta8wLhma|q8t zjJbw^f!7|Q(u09@KL_XvZC(~eW>5;2E66Wq;ALavbK_uOkOz%u^RhE?fn*riIb>KF z7!>l0au_6d85ucVb22c9fgQoj$OS458N^E&csUqZJ2^oGk*GTZ11~2d*vkS8vK+hu zjLZUD3=DF`mAMSOLW~l{T%eP0s~H)1g&BE4shL4$9XBI`0dKve07y>E?gs+{ZS{3=F(nQq0qW z7#K7d*f~IMkeU0HfkA+mmr-C5=oqmNdW;Ob{EXoE0DD4&krm`S4hBUBP&A4$GFEai zFevJEF);8-GRlIoEIY>`E(QiA(5@B_`T1x%rj_Y%GV^dXP^) zKzKZ2pp|C4pIN|e6c7U)_rUuN!jpjb<~Ix2HwqF$MGOqQhgrdGr6Q3v6I3EY1sEk&B({|^F!0`n z3NVYQNOa9-WZ-=Y6<`!qkq|h~z`*+oCLp3BAqf(A4HFPnkx&8&ynzV_sYqyp1m3~~ z1XUzVKmzYz0s<-$is1|lyzgNG{3_yQxrq$CKUu*ES3^7p#QO)~89*`-Gn=3u2LpqJ z7}qRD23}qW&q3@nsJ;+@@I1s890p|+Ht}u&P?=ovl!1X)j18O;Bg8;kka-o@z&0d^ zfi@lUDzky(Awvvw3^%Vj8#t^B#EPddFz{-#$=(oPV5kr)0`c_O<$VxVnM zysm6QPXs`vx12sB1Fr`g*DC=Ah8<#4*cljjy&-NnAZ8fH$iV9d;T;hZiC|#h4T8A( zgxF?~4Pg))E{J7jFfi~&LVSBe%+LbV9DvyOKrF?Vfq^%kO+s3bf#HSN7e7#IgAH7B zeGmh!@ZwEn69Z+vACk*K=^>3x98|9`FiL)90u|bezod9`@k@+ky1A~nIMg|5AUVlb` zLOuotNS+R41m|f6NO2m(2<{beK+2h5MsUUw5L*MP>O&X>LB+X**lAWq2HsGJN=Y#* zP)!=f$e96JaWA%ZBdBo%(Wk(mXaM3yFfudnF)+xSn$Ex=!JEv;u^nVPI7g;2N`W{G zVz=fpGVo?V^l^xRE-d2BhVBqzVCSd`DwH z18+5>Oc*G<#K3i5JtH{M1t7_|5mMSni0zAHWZ-Rv@MIv-+zR0-NE}pVVBl?s@IYCg zfgS8r0gw{|_!$@kK@34K3)~cB=KwV=*g4GkLF*2|2i<_uC+{gnwhn#<2I;LGpy+r4 zTJIr!QxR0bO>+Zv{JBem85m?1D=;!h@bWMV90B!)G0iPhV%&KBgr2?7<;S**C zXI@B1@`*xRB_UqQz-PkDUQhzMbb*}%WTVV(PDTa+-cmLWP(dJ;8^OrHTMo(jP%l+M z@(Bk6J4b>51B1*p69xta-s7ACpgb?;D#F0Pdx{g13B+pWFf#C-<%EQR80b`G-V2;i zmw?Vp;l0c$stu~A8Q3`{3V`}=AVb(WK#7!{160w-oM{9lnOH6XPzDqO%|Y?Tb8#Dj z*2jUp&6~gl&YKDh>>MA!Mu2joVr?j>h0Vqc%4R(3f(#5Uf}mCyXn=!3c=ZPc2HrVr zf+m6t49YIxBNjp7&fCS#wp5sbL3%rAU8b~!0wV*Xbo@0?+a}>LDC+NYGBB`6ODHok zuu5}UGcd48Uvy_+V3+=<2I@O9SurqhN>9Jcz`!M~qRz;`EuE0Wz`!G|VZy+`EB!5) zfq_r@1Ro;!$tZM8v}!=H18D9QJVW+ zGcbrtJBu(fNJz(~Ffd3;bKYTKkdhY5Wnhq&-q*swAS3-^0cekOf*K=(oV3JD1_pU) z(7s3o>9pev42seLcNiFyq!o8EFepo}R%KvNk>)jHU{IBwf0ltkO**H9fk9pRqBaAA zhV=X23=EpmE2S72w4{|e85y*t1$h}6bfkTy7#Vb>V+0u)^rQ<#7#Z}X_j@rg7)Y1K zGB6lQOO!A$7)fvDU|=woj^JcqFp=K+o`Jzs`e_COgPAnfYz78%X>m;k1`FwJk_-%% z(sy?-Fjz^~Zf0PxmOjbA$Y3L#x1WK*Ryv`Gfx%8%cP#^hy|l?a1_lS|<{}0LN9k=E z3=B@vH}n`7oTYv07#Lin_sn8oaFza<&cNU%{WFh&!Ce}3%7KS;%O?f~Pid})3=Ce< zB^-SDc=|vVx?=hGcd$S2MRDS#52e^@-i|6@TPDIWQi~^h`j(E50(aL$ufwY31Vd6 zO^5JU#I9>FFz{wTcpPFuCX5WcnVgb=f(#5iV#_NT7$YE#w5Zj&;P|E@5QgE#g$_6an>8L95w#OF0D> zi+~ygphFCJt2nt2i7+rYK(bRUC%C)g!N3a23Id?64+smw2?ll!kgwP|@6$UJ%Rz6)l1wj|t9&OMsj4>>QvHiJb#f(y()Y%vEN13b(3(i>)(= zfkFE76HsMx`zXjNlYI;fOwyKnKwcBt11eVPrn=p{q4skFta7h1g1(hq> zpi}3hZ>KRZa7&w?0hKGg+Mse}UM;9x;Z|c{;FtDo0F^75%Aj(Ei1_lM`770+f(zO^=u7DaL%F+VipmK#R4pgp$uLhMXuVfh+)TRF@fXbDM ziJ)=?bT*Tg^vcH!4BFDmIT;vqq`g@f7<8o-BN!O;q_3(nFz8E9Q~;GLpJPDf%7R`{ zxx$|ZDp$Ih7#U2Yt@eV-l^@$d<;uhvpmHTi4pgo*>4D0X!>2&y%C3A+x$=PzRIaE6 zfy$NWr=W7Bo}ZDyUV5o8BZGtV-6l}E@|%Z|!AaV`4OFh|+yW|BqIy8(%F79$a%FcW zs9ZTH&B)*(ZIcTsSKfMn%9ZtQ3=H1VX7Y>-KGHt&j10cg#fpp!e$s3Lj12zL%|f7Z zMRq!n713@Qu^@zO%g3=9d<%xw$|iPBj)3=B!qwK)t7$D&Db44Kj@xeN?h(yy`@7_y}w&SPN6k(O&> zV91r8yq$p|Pdbg0fgxY|r9A^ffpmi#14E&-6bl1Gk+hQ#BSW$DLmdW&5@`i?Mut-9 zzbOn1WzviJ7#PZ>jkQ3#Qde*>FjPvb2{JHLNw3RdV5pYSM*5i)14FI!4|fKJ zI%(^P3=H+s%M%zF8l=tL7#JF*ElL;|nxsQ47#NzRb9xyVTBINDWMF8O-mrjyp-ozJ zG6O@qbhax4Lx=R)A_j&|X`l5B3|-RU^$ZN%(tk=B7<#0C7&0*QN=r*IF!V_;)?{Gl zmrgQZV3;87E6%_$QTn(n1H&X~A4>*?$9O zLI#Ez(idzP7-mY#H83#DlKx=Bz%X0dP?&*XjFMnZ47;WO|6^d-BRzc)1H)cv(2}fu((XnK4Ev>zOl4p=Abo~`f#IO^ zu|Et9hoob}85j;ri!d`V9Fb0JW?(oft+RlE;h1#cItGU0(xEvF3@4;ROBfhVN_#3W zGMtj;ab#dPEv=xyz;H&okAacltaRQ-28MIeTAU0F=cU7LFfd$@4nD%ba8Wwv9|OZB zX?u1ChRf0m*%=tFNO#IJFkF?s=Fh-zP5Ph=Bg1v+FANL}H>9_3WMH@{y=yiD!!7C8 zo(v4PrQ16g816`$oMT|PD}6Maf#IHX)k+42`_iKS7#JQ%yRkAdJd{>0U|@J8U2uwl z;jwhh0tSXB($iQO7@kUdePdvFCVh^bk>R=Y6M0647t;5F85mwlpHOCCcqJ{a&A{+l z`d}~v!yD;`1`G^urPu#wV0b5eJAr}Wz4UK(28IvP3)C4IK1!GVW?=Xv&Hs&o;j?tx zF$RV&(teVR3}21km znG6g(j4H_+7#MgNRXTea82A`fyg;W4FskeW-QB^c;_;7xL6A`;h=Gwoh*3qFoq<7^ zQRR6x1A_>oN~{zkgD9iQ^F<5{VvH&qRxvP$Gpe`?GcZUns!SDRWRPT333p~-kYZGM zEX}|m&8T9m$iN`OsIpXyfkBp0MYxZFL5@*n z8I%}RKD=gNP-ax=SkJ(q!l=UWmw`c*QAPSM1A`i)%DvYN4C;(3OVk({G#FJjSu-$b zGODbyWnj=^R1sohWYA_*X}ZS1pu?yVUcm9I+~7)%&d@(wdFm@=x^$1pIMF{%hmWneI8RFR#} zz+l0sV%x*OV9BWR=Pm<-6{AX$C?kV4ql#$`1A`5t$~6W?23tmzxF!Y$J4O{IX$A&+ zMwRSZ(44=@Q~^c?M@E$os*DUyj4F3b85o=yRr>827+e@tjwmrQxH76(88a}rF{*Ug zGBCI^s<2csFnBPk%-_tw;K`^WwU2?pi&5o-2qS|xqskR_1_mESl@)&&7h>ks**#<&_vCLlC3N1`$SvU`7?&1q=)!j4D?-85lwt zRrISF7{VA;PA_L*2xnAzU(3J{!KlK-!oU#8sIpjqfgy@f#ZHESA(~NTzBU6x45P}d z$qWp!j4BsI85rUiRl;Q$7~&aKKzHONFsf9RGB6}Es>HT1FeEXmeC}spNM=+4ZJ$YD zRAIMcU`S35OGy$Y)gP=450jU{s0t%fL{`s1m@lGWh=HMpQANU)3=Gp4Rmy)dFidAu zd8*97FoRLWje&t-CZkHM03*XJMwN5C3=FdwRX#T{Fw9|8ahb!wFqctfYbgW6JVuq2 zDh7u6j4BKK85kBYsvMcez_5@}WzI4NhDD4jiDwuX7Bi}R|tVHSiz_woXEhil2N60G6TaZMwQUp3=FFoRh+pP8P+hW$*2;1l!0LvqsrRt3=F#& zRmzzd81^u#EYM|O*vqIgM}&c4AEOFW1p~u=Miq%-28IKSD&ZWA3? z^pAnzFr$i51p~toMwO{685oW-s$4zJz;KLFB~6l%;W(oTn>-`K2}YIbDh7s=j4I}j z85mA6s_YPCWH`;Jl6{kb;S8e+O9KPLSw@xVuNWB4F{*UrGccTIR4Ef=WVpbnBFoCa zaFJ1^rICT*5~IqTMh1qDocRn4cNkT==QA+eWmE}x#lUcnQRUfk28R2L zD%M^M3=bGpxWX719x|#_NH8)yVpKW#j)CDZqe@}`1H%(Wl|>&J7@jh!F>0k%8eYqssG- z3=HoWRqXN^7~V6gd^p0u@PSd~%4G(IkBlluwlgq%VpK7>!NBmDQRU-T28J(;DjNkD z8NM>An7m?O_{OLrqrk}Uol)g+IRnEFMwRkg3=BURRnp=a7=AIT2rpt__|2$Nah`$U z52MQaGYkxW8CBNEGBW&QRB>WrVEE6d;`bA@;6ue6bnG^hirRMu1|}vIi?^WFCMqx9 zfTluKW(6`ZurjH%JD}G44h0Vrc)RgxR_Lq>}Fu# zW>Wc~&A`CJq{68LnjcbGrpUm+$E0%9iGhKiNoDUf1_l8p6~VI%41!E5KSUTAgqT#^ zPckqFGpSrNVqg$qQaPZ>z#z(`^79htq7;>PX$%bFOe$yk7#Jj&RIFPW7$lig&a^Nv zNHMACJz`*xW>WcIz`!8Gr1C3~fkBo@#Yv8VL5@j9SdoE2o=L?RRR1xl>_}o@P-Iex z!6*YD_AiJ3rN#RBp{?V9;PvkpvCE zFsT?bFfwQ{sq7VHV9;h#xva*(pu?oXX3oH%%cOF5DFcHZlS=G61_pg5l}r%^1_LIQ zQz8ruhD<7ZzcDZvF{#}C#=v0Aq_TQC1A_^Z%DtHk45myf+OrrK%$QUnW-&0BGpVqy zV_>jgQjt<&V6bFTNju8GV8x^oGl_x0nn@+rjDf+1Nu}l}1A{G-%B=4U40cQ^3z--h z?3q;FUt?f!U{cYZ!@%Ikq;lpt1A`Nj$}Bqu24^M}FFOVX7bX=&eg+0tCKZQB1_n1K zmFL$P7~GjuB)AzFJeX7pBpDbynN(t87#O^mR0^6I7`&NO7V9uD_%Nxk#xpSZGN~|b zW?=ARQt|o9z~IlM!gZX1A%IDxP@aJykV)ktGXp~qlS+{|14A&A%5)Y6h7cwdu8#~1 zp-d|B@{9~&Oe)v-7#YHuRI+CzTWnp9}VN%)0!pKm{q;mZ<149{;%KOs{4CPEJ>}MDlDwtI4To@QCnN$p# z7#OOURD_o@FjOklw6Ok+~HD$l?$ zok>OVJp;oGCY2O+MuwS8D*3M%7-li4ByVA0n9ZaTp2xs2he^d!oPl93lM2UL28MY| zDmgt24D*>(w)ZeFEMQVOe1?HxA(P543kHToOe&>Y7#J2asYD)TU|7PW(tVPFVJVZ! z6)6UWWlSoiiy0V}GpQ6gF)*xPQqd`5U|7kd;#S1Ku!>3LZUFl(EXihIIK!keD~f^PER)JXc?O1aOe&Fc85qtpsqEBdV7S1fk`%|l zaFI!+z=nb05|heY8wQ5UOezoK85piGsVF2cFkEF)*}9*B;Tn^Qawr4CbtaX&2N)P` zFsU@`VPLq)q;hH}1H&yQl@A9P7;ZDESei31++kALdzpdZE|ZGcaR!EaOe(96Gcep| zQkiJZ!0>=c#pDG8!$T&OH_D6*kC;@haxgMHW>UFzih{}>ovGO6$;FfhDgQn|OAf#Efi%3EUwhBr(q7TgRBZ<$mK zIT#tK>!0>@d<=X-VhL21t6Brp7J~65Mif3T>%%pNdhLPb5lS=k! z28ORpDjzBs7``#7Brq^Ad}mV0lw)N0!K9)U%)s!IN#)5h28LfuDz2#v48NIFx*jty z{9#gQc*?-=mr14VIRnE#CY7}33=IF7RE|o5<{wlh%P=r7GOOH>V_;xnR;gEJWMF1i z`49_Q8>C`g%fP_OtTI)Lfq{)#<>*WX26kqZ$F2+v9Ly>$-Jm_UDhwMK7`T{KtY$JW za5Jj}f%<>UDq9;E7y^4WBj#=eW6$67jvr4fL1A_vyO1BULgCes^ zUJ(O>60?e=83Thdv&x))1_l*o6<&5m232O2+3E}oYRoEoQyCc4nN>a;F)(N_t86&K zz@W*jQo+f@*|1_o1R73DAn1~X=r9V;0a%$Zdh zmN76`Fsm3bGcs5*s~p?Pz+lC!5~|O@V9l(uU5bIhhFRqqHzR{Bvx;vA1A`s2N?8U2 zgFUl~2k1}(W)(wq1_noF6$d^B1}A0}Q&t8BXJ(aGmJAFo%qp)ZF)+9?tE6Z#Ft{Vt5zH#Ax(p1F%qok{F)&0it0?SeV2EZ`IWEu05W}oe zuE59;%dBGkhJhiDS;hVc14BHs%D=q~3<=CCB?lQ85}8&0&tYIlVpi!FU|>jQR@wiH zfgy!iMd>&LLn^aMxHIa73=BEUDgi1C47toI{Vy39@|acZUotS{GppQcWnd^^R$0i-$WX|va`h?$LlLve zdUXbdVrG?-Q49KRo>+@FqAQ?Ea7KhC}&ogCBeW@!K@OZ&d5;7tP+2T zfuV|7g;R=wp_*C6*PMZ&hFL{2o`Ip3S!G){14A9NO2z^PhI(d|9DYWI24)rGeg=j{ zW))#6MusM4m6h@g49(0cF83H1T9{SBCNeOzGOJwwz`)SPtit5Oz|hXDqOZ-s(7~+2 zZp^^Y$*hvr&%n^dtYQTkiey&V#>2?a!>l4Lz{t?ctfCsoz|hC6QoMtKp`TgB^&JDl z1ZI_f2}XvA%qqHE3=ET)RX%YrGE8Pxk$%g-FojvAR*8XODzggc(5`9BDy{(x4AYra z>@P4d%wSd#p2fg0lUYSlm62fn`7#LPDtJvr;Fsx=)QPE*wSi`JxRGg7v zEwjo_Q2ocOBK(?xVLh`-UJ3)l24|$2g(#XKDn^~n^ zn2})*vr4`c1H)csm4l`X4EvZ>ERz`+_A{$Q?_*#%z^w9xpMl{Zvr0%V1H&O^mAqUA zhQrJ%9k~n)N0?PUlrbbNoEzvHw+A? zm{qd<85mA8tK1Q0U^v69vM85<;ViSto?HfobIdB&av2!TGppE@Gca6WR$+Y0z;KaS zrMR4d;S#e-Z#e_QWo8xEO$-cIm{soHXJEL>tTMHTf#Djnioik!hU?5KGG7@OZZNBK z{a|3Y$*kfroq^#Nvr1(P1H)}*l?&bs40o7SiZ~b;?lP-1&t_n_$E5ta7BBf#Ef?in$2`!y9ImP$fo&x6CRj%NQ8m zF{=biGBCVnR&l6gVEDkS0@`--ky*ue9s|QCW|c%o28PefDs@vB7``y8Onl0~@ReC5 z?k>Mw^3TV&DFJ_gDLktYRnN{}jGcf#NRuSL8 z!0?w@WqKq7!#`$~_GSi#|I8}iHh@V_;xm zQTYp6@6MvK&I7dfKn1i)nw>?ZOO%0ugGJ>)Cj$c~i^~4{3=CW>Doy_x7`RzfHpMeA z@UW=Vt1>e1vZ%~fWn|!EQQ5A_$iUB{;&qmRL4ZZ2j+KEykVR#7A_IdEiwd6x1A{P& z%4Y!v1`!q&)x``9qAV&gyBQe7SX3VJGBSv>s4UqBy7@%qB`*VmB#TNZX#A5!#Xypg zL7GLyZUO^?42z0{00V<8i^}Ic3=DECD(k!%801-0&R=I>P+(C39pjUfkBBy z<=QF+24xnNrI#5PR9I9@Vi_1zSyWD}U|>*VQE6Juz@W~eVz`}wL4!p_;yD9@CX31* z2L=W$78Ry93=G;VDrck^8FW}w!etp5bXimqnHU)KSXACHGcf40s4P0oz+k|lvM!Q= z!H`9TDVKr4h()F8I|G9;i%OIe1A_^R%7h#S22&Q5uj&j8W-KaMsSFI}EGiRI85k^B zRA$U%V6bFSnQpHN0^bpnngvbpMk-KMWyEm1A{G#ilYw$gB^=XJSQWAJ&Vej zQU(SG7L|%(1_nnKm4spj1}7GkPnrx2&MYdYW-&0hu&BtNVPJ4&QDL3Lz~IKBl02D# z!JS3r!DI#o4;B@#DGUsrEGk{!7#O@*RKnIUFnF`5OghTI;KQP#e2js?mqjIv8dd0XJ80tQL){^z!1TrvND)~A(BO9#Zm@_C>E9bDvS)#EGj&W3=A$(4vR|Y9|ne87L}Kbj0|}!Dmxc4FyynS*n;NUSX9p6V_+y`QE}j8U?^fyao)+m zP|TvTYCZ!)35!at0s})Si;CGd28J>gm3h334CO2;MtqD66)Y-xI~f=%SyaT77#XTq zRCJXX8LC-S5<(dmYFJd9q!}1$SyWWn7#ZqVRBUH3Fx0cCtUJlT(7>W1=gYv*$f9!O zAOk}ai^?1}28L!9mGdRk*BT`Ve(LKqmjSya*m7#Mn3R1P0vVCZF0IVi-y(8r?kZ$AS=Ka0wvE(V4P zEGme3=Hd8R7}_z88)z}{OD$2*vO*7-^0MLiACl9eg=lkEGmxf3=CUX zRN^BU7`C#glteNxY-3URHkE;4JB!MkI0l9tEGkCQj0`(jRMP)5FzjMc*}05?VKPre`a7f&Z1&GkAdL?i;D0`28NR?Dv6sI z7*4UM_((7?oMus3%*4QOhDGIfI0M6378U#N3=HR3R1PdO3w@RCJk>NN(2S1c-3p#C3=iur#AhBquKa#tA`-m<889$;X2 z$D*?41Ovl+7L{sQ28ItTDiX697(TM7?3>TP@QFo5UtBM}z$`n?WG|*YytSTS*7#M_DRUSTK zU=U_i$?jud5Mfo}h-P3AWmVbZ2f7+srXJC+JRhh-Zz#zw}vg;TFgFLIs+ieUC3aly-QVa}=tSVB= z85opURTe}uFetOCGiDzI?WmQ?`#lWD(s1A{uNO8r{~1`Sq~t7{k- zG+9-a9cEzAVpTcwmVrT=Rb?431A`8$%H&@R47#i;h4UB~^jK9khA}Ycv#MPB#lT>| zsd-BUTlz4h9BeRuzR!3=Af$Duu!f45q9qQ@I!z%ve>LA{ZFVSyfg@ zGBQ}Os=VrBV6bFW3G!!Puwqql_{G3r&8l)lkAcC4Rprfk1_oPJmDlSS80=V8%m;21izvC(?`zPOK_({xdK*v#K;lF)+BWs+^2tU~pws@ju7F;Kr(Q z`Vs?!JFCjVSOx|URu!LE1_n=762&>AMPYev9 ztSWM`3=CncDkTmK4B@OQ`?(kxB3M-ngc%tkSyjUBF)&22s<<3vV2EZ_*}0j4A%<0D z8yf>dEUSu+Cj&zqtIDNC3=HwCDz7#%FeI?5L|;^{guU#TghHSXJWv7#JE^ zRZ8wMFf_5MQih-e(Ri)%T14A3DO4oY^hIUpJ=@15n4ptTG zLI#FTRuw}(28J$HmGci67`jcj~N)I zv#MO%#=tOxRVC1cfng@A3THY4!z@;n4ZaKvvsqQ*6c`!iu&RjbF)++!Rhi+(z%Y+h zWrq#}!+chi^`P}BtSaVT85kC_sx1G-z_5r_tSZ+xGcc@SRavu} zfnhDH%GM$VhIOne`D_df>seJg3>g?Uu&T`5!N9PQRV8a01H&d(mFS%e44YY1Hmfr- zY++S7(!{{9l~rXf2P4BaR+R#AMuzRIDu-trf#DFV z3ZpLr!(mnx5f282BdjXxzcVl#WmO53W@I?Vs`9Fhf#Eo-$`&OCh7+tRrYZ~!Cs|eI ztYBa`#i|m*#=vlzRmGl%f#D3R%DD*)3};zY?usxnoMTmSi(+6n&#LmvfPvuxtIC7z z3=9`pRRTpA7%s7@FwA6NxXh};p25Iyg;k~e9RtHvR+XLt28L^_D)!eH7_PIbe06IPWnb_Ry0tSXyX85y3j zs?>m%xv;9VJYryY!K$Ll%fRrGRb|^m28LIxDyKvl8D6uhXxK6^ykS)_Rb^y&%c_#L zo`K;Vt4hf?28Q>nDw9s>CTW zGJIuKxpj?!;Tx;Uji(F@-&s}Ee=#upU{y)@&A{-JRi)q=1H&&?l|$(a48K`bCSPD+ z_`|C5n2mwqFRRM)l?)93SXHd%Gcf#TRe20r@WZCEpPhk$kxhmDD+2=)n~MGe1_ov} zmBq@83@mIaO(F~otZXXEqKph|Y$|Fl3=HgSDzTRt7&zEeRBkdbaI&eiNHQ>Rv8mj5 zVqoBAQ?W^5VBld>*%HFQz{{rcf|Zehk4+`gkb!}pO@%?3fkA*xWw9XxgCLvA$0!B{ zAvTrC`V0)hY$|rA85l&^REo_Q7)04rrY~V&5MxvM9>BmL&Ze?bnSnuqP381{1_nts z71I?A3{q?=8{aZ8NVBO-FlJzoVN+3&WnhqHQ;7{>V31=|v5;k8kY`f~<7Z@0U{m3h zXJAldQ}O)3z@WsY@}HZLL77eEyE6lW3Y&@{4^cFxaxGob_U0 zuwzpR@Md7JXHz+`g@M6=O~vvj1A`-*O8k2U1}8R^1@9RcoY_?Nd}Ls7VN5n&%oftrc$(zfx(+i<^OyJ1|K#R zBThyJUpAG;Jd6x}Y$^e77#RH7RIXStFa)rvWL#lj2xL=fyUD;1#HMmhf`K8JO=a>e z28Iwel@r1Y454f)@nQ@NVQea?5)2ICY$}Ia85kniRPKIeV2ET>Dd=Eeh+=l^uH+7|PjHig_6rD%e!! z&thPxWK-!gVPL3YQ>mT9z);Pm!vBGRp@vOmpD_bNEt^WYC<8+sn@Vgt14BKV%H-V) z3=M25E5jKW8rf79Ok-eZVpDNsVq|D$Q~9UJ$k4*365qwZ(8{J#V8Ou9#-{QugMp!) zO+~YkfuVyV3^IOq9DP@Fo#Wr=L-YF zTs9SlU%i`Y~w0~r_=v#Fe2%fPUN zO@&9Dfnh0|ipORKhGlFjiHr;k%h^=cTQM-KU{jehk%3_)o66NX28LB^Dxtd=7*?~X zl%+E;tYK3z5nyCk%ck;=m62f`o64tR28Q))D(24_7&fq}oDyJU*vO``|1kr@CN>py zAx4JHY$|4I3=CV?R1y^#7`C#hSgm1T*v6(Z?G6LOb~cq{ZbpV3Y$`8I7#Mc4smLE> zVA#c`qWF=4VKlL!%;RBwH^kBV{9r*`WP6Fv#Bil#=vlb zO=Znd28NStD%WHg8BVdOJi5rhaGFhpXFmhO88($Krx+N{vZ*jzFfg2BQ#tL)z;K>T zg>M1_!v!`KOEU(Bi)<~bj)CDVn~KOM28MTRDw)a*4DZ=gR?0Ind|*>)PiA2F$fh#)5d*^~HkD0}7#KdY zsXSTD!0?4lCGsT$!&f$yhK&pi-`G@C_A)ShXHz+Qmx192n~KQ?28N$(D*u=m7=E#- zNb@r?{AN>Gb&G-F51UGw0t3TeHkD|+b``zZ3=I72D&?U5AG?Yr zBO`+#yGp=C1_mK^m9pau48rUxD-;C&F*;Qh%Gcbs;t31EQz#z`9QhS|& zL4sYS&4+gFetFAv{y1PD6*?CoMT{6Vpo}%&cL9|uCn?)gs7#O_RRf_5v7`)k4 ztky9w_^_*(-eF+yWmjq9U}W%PS7GC4VDM*GxueU#5Wuc-S%rZikX>b6AOk}XyUNTu z28LjE73;MO3?b|)Iky=YLfKW6Y8V*8*j1)TF*1a+tNfVFz!1T%vR8?#q#3=A>sD)+(|7-HE~{LV8l#IdWa?_ywxXID|3z`&5euCnq814AOa zO85*0h9q{C&$bK<$?PgzO$-bv>?&+23=FC4DvzBR7}D5P?oMG~NM~2+zskUn!LG7B zje#MPT_yM<149?-DY3=DbfDmnKU81mUwG?++)7#OPARW`h0V5nhNiLGQ{sAX4??PXx7V^>jR zV_>LfSK)lZz|g?1vgaoQLnFJ&RTl<^CU%vCtqcs!>?)U485vsGRr1;x7+Tp?=Kp43 zXk%A#e#pSk&aPsR!NAbLt|Il5fuWOKMSc$hLl?VBog^beH@nLFlMD?%vIGBEVA zt4K~{VCZ94DbZzM=x0~?w1t6T0=r6;3j@PMc9l3`Muti3Dj91T7$&o;NLes2Okr2C z*~q{!m0iV7l7V3wyGm#(1H*K7m7Tl{3^UkOJTw^?X0og3+c7ZAVpowhU|^WduJSmA zfng52id7H;!(4Wi-g*XxdF(1GYK#o?*;NEn85kC@t4zPdz_5^AMLU&&VG+AZnJ)vw zVs@4I4-5=T*j1ipGB7M+cO4+73?a_X$%Z2*;UqaF*2-T zS1D*`U|7wrk`l(iu!dblU5?%tc7#P;Gt9UCjFl=B~X*tKhu#sIw zUW|cZ6T1q(8w0~;c9qLA3=CV?RX*f0Fl=R4$u?nN*v78%eHjD8c6JpzQAUOx>?(%V z3=BKjRoYz{7?$?U3=DhNRWg_u8TPWP{B>er*vGE2K#7rIKf6k}HUq-} zc9ota28M&|Dg`kN42RfNj(uWaILxkc?;r!i5q1^DItGTL>?)N33=GHERsOGJU^vdM za*Bn4;RL&ijwu7fNp=;F9SjVo*j3goVPH7TuEMmKf#D3hO63X$hO_J{{4$IT=h#&a zx-l@EXIHrlTK~zelJS6n;Uc@ri-imfm)KP-6BrmSv#SUSGBR9YSJBg8V7SVzvRi_Y z;TpTjhaU_K*V$DbNiZ_pU{`Si&Hu5ha7r>V++tT*XU4#An_Z>DjDg_}yNaYV1H)Z* zmAQWz81AvFFh65pxX-S_tIELefL-ONG9$x7b`|c!3=EIhRnAp1Fg#{gnY@RA;R(A6 z&vpier|c?URTvqbv8$X@XJB~FuCl_Df#C(aij5Eh!%KFR(k2FmSL`Zj=NK4Xv#Y!~ z%E0i3U1dTS1H)T(6?b7qhIi~Lx|EdzObtpEM#E#%C3^-#lY~5T}9EJf#Ey5iuG0oh9B%Iyr&o#ezL3llVxD| z#jYZHiGkrayULYm3=DtRRdo6o82+-WbY?Ly{9{+i%41;o&#rQ)0Cduk%7$hJ21X7Q zaXv-{CJvQJtc(oI94bo+K&O(atf^#RVC7Ir^I%|L<4{Qk9~h*vWdZ{O2Zu^63j+fu zhf1dmBLf$QN}C!Z12>0CwhZWs5|yW*^`9In#vTj|d>ks#R~Z=iIaJPo_QP?gw47#O z5adwtEn{F1;!v6ShJittLq)%gfkA{rMS+)*L6k$~aXkZr7>CL{7X}7#4wW(GEO9RZ^9)`5XRjzeXVB?E&zhYCYC z1A_vG$`gGC21O2)R}BmdN*pSjd<+cA94aXd3=Aq9D);Od7*sh__=6c3)Hqar+c7Yx zbEwR7XJF9aQ2ANKz@W*YB2vx3pv9r`H6jACFg;ZP|B)qfl+E7meF zm~p7cxHB-AbEs@u%)ns5p)x~=k-?Hf#dR?QgB6ELqcj79HHS)790P+5hsvY~1_oOW zm4#aw80^W3KK^Hb~sGRp>U~uG6;bUNAaNFnDpOoaJF)@a9lyxWT~S z!=X~j!@%Inp`s0%|Km`Roy5T4&!J*8iGd-2L&bd(14AH(O2aw^h9C|V$s`7bU=Ec7 zwhRm*94en(7#Ko1RQ$FxFobca+yrf_<4}?N!@v;1p~8NIfgzGZrR^gFLllQfuQ&rk zG>6LVhYSoc94Znv3=FXxDi!7o3~?MPT2B}l;yF|j_!t=yI8@YH7#I>cRJ@fK7?LvnFvf&5=Lpq1bsUr*w85}AfE;BG>a;Usl zVPMGOP~p46z>v+MQpw23ki(&(bA^E+mqTSbX#S5w#p?tl&^-xWd4&l0&7rhk;=ghYEKk1H)<# z6%H;2hBX{2|3w%W)^ezPDP&++$D!g9$H1_jL&brYfnfuO%1bi_hK(F5J#7pOn>bWV z4>K@q=1|EoW?Hr@ zVA#c>!t27ou$x1rMvQ@B4~NRWPzHv*94aBT3=I1?RMrVIFzn}0QAlQBIKZKD)q{cI zAcx8cI|hbB94bfh7#I$7sF?dQFdX4fS-FOR;V6fS+*1aIV;m}yISdTPIaKt{GBBLr zP}#)G$Z(QF#q|~g!zm7x`y~tvr#Vy{uQM>5;ZPCgVq`eWq0%YHz;KR3Wz!u7hVvXM z!aR%&7dTY1tr-|Da;W5UF)&=>P}$4R$Z(m1L2>B~1_s_zNu`ydppuZ6Rf-vODwmtP_6U@LMEziuzz#zRo6r`3*0CZ4_ z%y(VT5k=lo9PYsk(9rG!Ce-!O=Q59jcc;`0e+VBlb21sTDU#lgS;I)@8Ff#BR1#=8I&C?kf_>OalkUVmw2Ef9y9osoezKw7~R#E}IZC>1EJ>;U43$1yPQ21zS;gE$JH7XNcq!ng>IJ|Qh7LzCjA6>fnz5-p%Z`=sTcf;c8u85npIr4>JbI7#x1ptA#2euFqW zMHv}*lckl|!WkIkb00G>@TN#B34%Cpg%}ukQ>E2pKpcM18AEB(O6nj^dItjoZ@RRy z5r`uu%fP^!A+2Ex;z&MZVBpP^R`v*IV3149t7PEKk_P7r2JRMN(Afl_$mWg*A6RlW zl!1X;F%Bep1H`=D24X%2F#{PH8Q3}Aftku6=1&l_CLg4LC5(ZAI{>VJAH+0U4HA_C zF(-WjF;zj#v#&u+0}yki7{~-`5Hmp!BZR~y*SW0I`ct!WTTAmr8v;p95Xu zWZ>Nc;Yo=70v#E3Kn8p$lZ;p}=rEYW5T2}9E9g+DV=~}FndHQhK!+Bdg7DG9s5#7#K9fqVpLTcrVI`yi5U|>5&M^NS93WMh4zT5S1&$;=36bcwfp0>ZgJZ`TD}j zz`*-PMld9mf#HIf3h1np_YmF($x~Ap7hDF=#eQ3u06PqvTRhA*v%QxFL;!A%jsexq^X#S6^1}R2lv)XazB`mXa@vKqWfF-V= zEh~6Eoq^#2qvT3ZWJW=p@q$s(dj$gnZ=S5+n{?22LrED>l;z6`vSomF5la3GWMJSe zlogZ)oj%4Sc^Fhc7s(1*XMpznNveZRA1jj;jL86P<&$jTV_@K|k`-*s0PWC|^aaIW zovh&O3O(=x87x7;BAl0|RfXte{yYXj7YH0jSdIkQI!|WMJ@MlDxkQbfBiJU}Yv~3!0?283P0F1X;nw znV_9zl8$PO47^ih1&?QfHjGIwD`I5eoi8i+Fq45HgGo|ai-Cc6fvg~R7HE5yq^%_b z1MebPLG3Kit}V&BJVplIrLuyqS)k2Wl6jzJ)N)zD_$<&KE6JIlGk?~}3f5&YFic>Q zynBp+fp>$f;PNccjwngNP6h_v6S9H_vlti_FiCoWlJ`kj!LM1M{Y#Rwq!}4_&&vu* zW`njRNxoUbz`%P|R!}b+wA)BBJppunAtXH?V3HIBod9=RR?sDzf#C#`;WuPqi7hdVmtYm>f7=88Az}lVN1w zm5>9cD+^}H%f<{0yi#(4M{^h$9GE4a&ShZWm4hhuV3y3@#=yXWlCd)w8F)41_(4Y*ConUx`hl9N9H1(KdtxF318YMps0L{Tlc2VyvYP?u z=3H=Fwpp4FRAERT*9NsupKE~*5lhfzWMGn>ufxc|EWOB(k%2|JQWtcH*jEik1~%#G z+KdeB(#8g$!+thvGBR*V3urSka7oMSfesOyq{qm>BfT7S(4q82Ek*`D=@nX_L&Usv z7#Rel`wT&c{k+#7SkYJFA>SJW!3xo-XGf1SbU|`@2 zfeDB)NEnqeFz|)L1VkAmey(O<;ERF@h%iW~f|e-6!UTjFBzAsbVBkw&RC<*I@{1sY z#O%2Y41CFqDx$d{0e%Jvn??o(zBEQ{2e1GygTx~a1_r(?M&sjP0d59~`S}bCe1(jP zUf}THWRPglVPN1Zg$b}TNR%crFz{8ttYu@6xGT=cz*hqkU}cb~D`a5cYk&!`Fi5mS zF*5Kq!vvTaB=&+XJZ^&tFfmBXl4M}u>w*d}F)&E*C@?Va^+E+0n*bA# zW04R)z`(#a873ghA|Y^}fq`!tOhAT3BG7?>fp0cUK$=A&N1c&@Zy`)TibcW*B(M}F zAju*zvx$L$ZzW7Xf<>ZvD+2@H8km4Mi^Mxna@YV95Mz-5ANsx(CLqcpakiL&fo}&) zK!io&+f4=rzTGeZVHSy-fs71%`(Xk?EE13BGcxcUh6xC=NPGbG0FT221Xv`5K_PY; zCcw`k(V)!0z;_NNz{esny_$i6?;=cqmqjAPkAZ>j3QT~9MIs*L^cye%ZWf9E{EQ5I zw_yTYEE4LE7#R5O!2~#2R5O!G82BE-1UOhE?6Mdb_@2N7*jXezmoqT%J%Sew+RmJyq{zf1qy#>Q*dd;Qflq{q4|IOKgjhi@BLkl} zlgi%$P^%Zz^X8Lck_Yv*HN^6i7#aBFn500bcN&OI2Q76~hVU%JgkLZ)@To(14q~ao z3=DkQ5T1wF6VMT9dQ2RkbKC;N%AYeZ@EJmQ5n_??j0}9H5MF}VqQwjhd}d6X%!LdL z8Dfit7#R3$nRr2Gy%mVzE(hFGN!0|Q?zlfv;r28IU=GOH>X z86^0`7&+FbFffQM{K>$;C&38r;4p}ZXfQJHNkVumVzQvrC&eiBG#}JW`cw(33K;o8 z2mT2#2net;Fo1e6;9CJ0*uka=fGQkNM+PQ%B!z)N4b+zr1Stm}u*bm8aWjR1K>*}Z zP`?JI^gT!rlyE@Z8<-$VDg%QWsD~p6QV!EEnaaSxW1q^v0K(uQ9%cr14$wAT0noYs zpxy-dXg>xXQ0D=J;fg@}WCTDys7z&GfG7fULH!6YS8zQS1E>iAk_XFxx)cZ*uoDE` zI2ahfrynw~b4&*HPe3N#hnWaALJ-VFR(OgZWbPiAa!_XkVlF84GO%;JhRH~RcJ+b; z1wkwZb`DU@$g+Y=A8wt|Fz|P?ZQ!@c>87hl` zonvnh$iYQ0m7qQj#5B-d1`O;Rb6_%{?hZr-lxY~)IktghK$kv%dOlzo26m1MAVE-B z0P6q11fPNgL7^v+4vh~%(6NhxV6I#`I4VHHeC!;c9LUb`D~*9c4b;s68z2Z01f69H za;R21G<-7PMuBpXAeakgfh=cW=h(stQtk>;4stK3TLd>Q4uUKS{{s!3?c(c zE)47(3qdlk1Q-}VeKCj($aV&Hj@=*`kZJ6hFn58xC{7?Pbq@hb=>z)C;_13L#O zs@OTM!gParaS(ICxYV_@f)E(&td^GpT?HBh$_p&z0O6gUj*9D-R43<99@l|g+? zh#Js2qzvpFhA_KE76_>@X;6<8A`NyN*lWn;SPMuY zD7}OFst|?Hf@dvA=6x0e0|+Bz1VM*a3xdT!*25AyXpEkn<2XnUNEp<&h3Ek%5Rj3A z(A4=Gqz2Sd0Cjl5Y8co#lAr_38PvfYk5si5P{W%;LPC8is9w$lSHvug;u7kUI~f@G za-n=N33V=aP{SO`7nM*ybPrTJL-`^S8l?<;+u5(?K@Q;d%7!LVP(K^uG>|VD*f}1; zWJGcp7{CR-AeaSenlP|~`$X&Xn~zWAqQ$asCNx99;6>^ z94JS@q(QxHh%_j;z@fvy&Jhoi1_ctR_YKwqDOW*8fX;UZNrTcesJ{)-4dQ{LQ4qm` zrr)_R)u8@2L^X2qKApqBAhqEOtY63{#RlpNNk1x&W#Hbcqe$ zA~1)8QzM3ffp3WbsQdtHSk8VPZo^8j8U~F52ENVeAYl$p83RTJzO6!_>Kb$uKFIG{ z5`5*%-1!U)+H!kAy+am|S9MZS(-`>Xuz@Sn`3r31A_qHcMeb!9pd1h;O065r$YcE1K%%j`O-4S)jzAI1SX(;bPPRnIQ9% zgMmSTkC%}H)EE|%sbXZ{<7earX@cCw!Y2T`AHfgQxfX=Blf}THD+FmnOE9o=%*$tB zQ2zZL?m%TmHgVAUlM~D!7rv?kxiG^LtPanUC6+|Aa)tlvz^4mB~S!vpf5NA>RvN(nHGVX*IPin?whNgXSFgVnKaYCN8sL z(450sP#@2EJEJT-C)43=v|dDj6C0-a>c@Vrt$D z416CTybLkTXhsIUuS|kViWwLR7+68xX9xR^9o&(V$xvco(BNCa%mM1Yh{^afGVp;; zttbWgSTT~3fp0al(&bV}!OB_4z#tRJ#>h~>H-VW0)Wd;<_+(~qcLy3bQ<)(NL@X2J zx#`T{Qd&T4i#8(z-%Mr|n^I5^?cxRnAB1NiHuWL{1K(U`g>|JM?}!F5F!0TX=t~g$ zv;{P5!3^&BrHFx@v>4)~3`j!eEe(FnAHBdSQ`$~_2og*J+2q;ZL z3_)lG2Ms8=Ky&)V3=GQ4XTY;B12fy5Vg?531`$xfv3V~j`zFSMvhQjOP&M&-2k6o) zeGWcJX7;be3=H7=nD`W#!9_9ygT4TtGBdkO33O2dpC+>)xB>uQhQp`L%m->UaWLp} z@aZzM8<#LJh!-&M88Itnm4FV=khu@KMUc;#nFGWZYu(1cz~{y+1B!mo%}soP%LGFhVqo(cA?8Ui z$h2MrRWohO9H3keaeF7E2w)KNP-kG^>xL97pqd6`lK{wDXG<9v1i=J|2ToE9>>Qvn zg`HzdDFXvf3TPXGf016LVB!7q>kPi;m9 z{ybTbINt_cMh5hKe| zqAIptkRmIvBG5zwqx2;)u%h1Ia7B%5n?Q;VxqwXi!~!x2G`_~fpxGeM!TG#`fq^q_ zF9U->H+W=>f%C9F1A{<6n8U*PEt-KrU=or)F)#?+69R>y6k`@V z#GkNfRWdM0-xUCbc=udTh)e5(5@3fEsL`g`A@GfJZWRLq=QmJV`2qGQ1Lu2jMh1bO zU=9nXkRbzuz<)4@L#)OgG{p>Qk@1K*b1^UoutInOVmzRdp98`Z5t9*QU=ZMj@Fc|C zWf>U+_!wpXS1>Thh()R0Z9l?LrmiXXrhb}oac1J zM0FS#1Y{v{24VsrFUv!CCSubzFfa%xLwFWqb3nu9>JXldSo%B$1_5md&p`|{LnELE z;kk%y2d#%Qgbc!ah`j@~j*S_?AsisqWX-@JV8X~L#|&z@Xf`u22$(^}_7lWrKW1PM zFlPjhU1o?q_`$#+Uc8m60E0o$yOg9Jn!xfND!k1wlzp{%TM(g)uS+N`Vb#&?qh` zVi1%DyOjgn&k>XXkHZUaW{EQ}2+D%vOoD-_=Pm<-pd9nXDh39riAu0ZSV0B0tZD`Z z>7F`J+PJs}lr|nO0i_LZ@LXqqKd5lZ%Lf%sQOck>*g2k{xy~hFpt(+wrwk0744M*x zx|}OO4&z)38pj2<;}|&Q^cfih^}$U;7EaKuvVsQS!is~_pp}6^&`?~unt?%pf$7FY z1_nVRW{@*9H3ZF=pMp#RjUEV^^Mg!f(8$RsW)QTHhzDK5qEQ6mSb{kU42B2qGB6kj zn(%|gZu|k6982M4unAP-I)@QL>9yi8iG~;X$WBk1p-7v zC{zQe4I>x^?qf@U`^JLdVBKI1k<5E)85kfMqM#bUE{%q`l+(AFfk7|^>?8#Srb-D0 z2EjORQZRsYDFu@lzt%D^NFP=NB~*#cpoHq+2}-D8?VwuJG91(}WP0Sqz#y2%e4>_t zK`ON!RssqZvDwvuX3N1wLW~F5y%@+(nn!j%arScXTP%4)%0#(6M?4Z#HaAhyp zz?KZsET{--lFqmd(%cmcs?{_D1lu^@*D)|~cJ5=p*O--5I9F$05Oul((L1_lRC4-Q5K!9Fm@gTd(4dyrL6Y*v;}{u)mN3fw zX<}fI=gnYb5L(J8qteO1ARn5@$RM}Li=4o9sb1H%fzi5#^Ju-KR^3`#EyoR{?(7zC$*OFShcp$ZjfkAMa?Av+<296&u85k44<{)`MlI*Oo_#lX2PkdZ-1R}mxuYAAvPnW7Ie zFbL@}gACxfIUQu9fxrTgPEbiBWCR}af;6awjMYFAAe|MB3=B+51sNEGOqfAzj?H!q z3=u+R0{%@544j~LxsZkQvPK35s7^}-kc0r|e^CYoAuBOZkuSjsx)WQ-8XR5>G+E|0L{0#$xkS$o50q2vsj0{3{U}YAZETH6U56(CaoS->jAqVh$tp}%s0|SGQ zBbejE>C()=AmjuN{Q%JH6Ue#yZZI$iIWuo+WMGh*0>6e$$d&C%69a>^D-WoMXaSwt zFMYHGRKB?U29+<0^`P?Qfi|dona>QWMfq4jE19}JgKE)7??5YtdcfC~nN)$UEep60 zy0&a4=r%lQ!}XwP;w_d84Ezin^W;FW5-9-6*5Lk$P&C*Zkdjp>Mm(_z)O=?u?P6dM zie&~lN>f58o)eUDIl*N@BDhFk&`7N)U=T_IhmHUP(-U(B2BBnTj%Ef1jxARh7$k&J z1wdIEq9+}qhf}AKfk7w(oKOWAn5MmDU=Ye=wgBmQ$HmAXA(Slu%J~pIxllde1ds>Q z6UD>8Ae7IX)6BpiWtvsDzyj9vhBp12s@Nw!Z;6sZM~Q z1(p^XG(l`g-Vtg98_xmGE<#P<2m|$GL1r?6vYyUBRiM3m8^|SvO7=%_r`BD?q=ig^w5Lyl8OHN>5 z=MZWE6-=Q`Ao3TukYa0LU|=d(1FAWgL9&_xLhCp|RRbhaHb5eUf$3Bv1B1{;=GCnX z44MK$n>j%h21LnLn3Bj=1_q&R%;!K#G=z3=f~paSl3frbknrCP4u1hi0k{VoND`cv zxEUCP_JSi&fq|)LKI7eWgi2g?{RFkM>5z#w#j*}9E^K{G(;3@51Ch1hWpY6ob5Na!MX z$Vq_HYBeK+&=ttNui(l?=mywW1xP}?15St$W9;ncI1h&uu;*_Ug zJq{43ya3C1Ffb*aWnd6`$vnS}fq~<_8>qy7%@NSSz@Q#=h=D=q9oUyFjPeZX)6Xz4 z2z`X|yN5)2X>+87vwxM2d~3=*rRFfs`7!34w@B>0~)FbE021VkAm zwnj5B2noXkL>MH}_cJgEiNOSf86=LWGcX8A!32aDBt%6S8H8kE0)h+@b3waa6<`7a z3}OzTkWgV%0|g7HzS3%EV33i#1FECc83jPiA2D!|stIXkF^GXWIYQcyc?$ut_*D!H zLi!M%1o*yrAwxzE&@iZi7-&#N$e0m4Dx(1&7!xvQ1efFnVv(TckrjkzAqFmUZ6KyN zfEO?c*)ghuoZ`WtSZ~0cZmnQoXb{S0cLk83=tY(y2*2Tb3012)dNN`m!C|(DZIZ=!P&pSb7 z%G*u`1~tJh1_nVe0UFH$kE257eZ@f%pv49Z>>Qx>FFOY);uNjr85o4(7zMPtKt>pJ zF)*lkfmDKx0P6t-0(fBvgUpf+Q1z3+DA3#m9dQ=Qf`li7SomEA2BB<58ITl**kor0 z2B91X4^#z#%v2PWU|0%ctFkrc?!OQsAa4$Odq#YJ>&- z#bQPVp(a?+*Un*N5Nc)w=XMFP&!7f#3!^wln*swn$KwVD21RXIMh2l)M&>nL3=H}P zLhX#4p!PH*LOWrmf(xcD$anCUqNUpBPXbV4l#W?%ye+H&wxa`0E43EWCjMInT*US5IwUQIYI4sh@QDH zJ!?S)$2^!nIYDQT&4(l-2?oWGOi&%h$P5~Pl$pZI$Y3C}i;=^t2RbA!w1-g?#DUCD z3GIcL!U4YLU1%R3mM%J5w zK|$yZBZpcqED+u?N`W{GVxaLxq4!XSh!>@%F$jHt6g>jqom)a5A#$Kj#r+-z24QAU z`~3@}6etXZx0Wz42z_N#1UXB1P5>i=&^JaA&}4+L!9xZHq3?`3H$i&xSQr_EelRM6 z8co7gp!oU8s0AvRgqKS&G6?;Gj9Lk|f%*==8I`8=f;<3L{7s#aLFf-uUbT~fLFgZ& ztV})wgD~GM1_q)3P}@4a85o2Zn81Ty!Y4uP5=JJ7ZHGY|CMahHs2XQs;sGt85zgHM zI=YoffvFE<8z?l?g!>p61VO7^7=#Pt85xAwnfMjJvK)O341ATKCHE3wJNUMUFfa&9 zidix+Fz_Ay!N4FaB?ns3!{@mSv@9PS1RS91PeNEhpt}#+6ctty2eBbdQDGHuoy@^G zFM^RlSPkA34eMiIV7j@9fk9ZE8N}v`wq;-t)|6TacF07KL(Ug4GKfg&rfnP}gNQ1`-e6uv1`#z`&{|2p$T|iF z5p}Q{jy}*)NuqXK_5BPCoHxZ87(^W)JD0(OM52zoARllraI}RoFi42{avcDv1LZtX ze__xtCIh&2D;faiuxKQfFo*_9f%5SSytVAOmPlohQR*_TgXV9*BJWD9P+ zXs?~Xz#!_x9^TKupbaXWM4iEflQyWYA?gAi3f1ndXJim{1;>W=e{n_zQ8)0^hBjyd zMARKzS80Q~n4%uw+DIF;9zoO-yfjxEw4ztk3tTyCbCohOhE*Ei46mT zWIvdbzyxi?H^VA#NUIGm9|az9vR2j@MIrN_8VO=e&?zI)eFK~g*{l36p%+3J{W;IZd3W72UXxZ;1&|Z8-1_n@I2!cv6@RD5y zb`DTyPXMIq+9U=BK@b6&S_dysJr2?Y%1*yQQlP?F5L5~Yg1DfXrvp^{Jpw5LmDM2c zL)t`Ol^{D9*g4oILudLyVSr+>+GGX>wUo&W3?JBP*CuJH8HSrRKo;8!3cBX1dt`5pcDj^VGQgXOF^nYZUcoPICNl2K?hra=Y~N+ zDhSF$p!Lrn{h(llEOY>`z=N9fbTR`2Q_2Je2Fc6J8WR~9c*LhLFn};W13L!;XfuYt z03(CsZ3Uhw3=GTyEIyiy415m_85yKDf(udMND#Y@Q3fkwHchQv9+wGBU`>g4rf&eGCkYn!KFM9QB~{?-&?Nyg(vayqwGog-{VA zkcc)vC-aRqsE8d%L`R&H`2tL2E=WXIn3MSdRK&E)m63tb6zn&SRke%^0*sad4pX6% z$c)zDJOvqLW3&+mNr3u05>pu%nBLbiGBDaQgV<)Sb&L#*_R^q33LzyL@?q}z4o65joCJZveQF;Mb?gLyONUb^lE(Qk1UM5C?WG2uO3SlpV+2$EI>rQ6j{m>6b1VPdcl0om2d7~G#RF<64C zA;t6lWBxnW-gGwe*kf%AGGcm9{XJWA01U0p61p~uwg!63oL&cjR&SP|7 zU@(7O$jHE0z{EHKD#r(RiQIGs1`DvI1x)%NmpDIXVz7VC#9%WIs@7^c*qb1qSu=(( z8Zt20+43_oFlI0@GJ@pn!MZb;)Iqu#9DG4;^=D#atewul0Fm=&(gexbhk}CMpUE0j z^f=~%IDt&ynNdgCWJU(YASQ5=hr#I@$OuU$Mo@-i6rKSyMiOEL#26_iA&@clV4c!T z!l2d3j*CGWWtl`liOLZ)4$mkDwZPJhk%3Vj60FV|AY}?nG9YD~%mUE#=Hi$Ha*_@c zxDn#wXb)1Q&m;~?u?!3hPESG6^_h_oRHiZ-&tPD1P01``VEhW1>Sb_K1L?lc$Ov-Q zhEPb1cfiBhYbFDOJ6OYgMmdlX4bPbvYMwJOcqEmkF)%)an6m#l6T{BuObnjI42+K$ z`9XUYm?s{n^C(I!W?*~_Y0&e%U}E5S!NlOzv4nx)4b&n=gM0=C#%GM2KV~p6crRbV zz!3d{i6Q(26NC4xB@7HxUobIDe8I$E`w^;s0yJ?LS~G?)l`&W|1~Qd1Ffdr%gUZic z!N8z06FK5JnLjJTl6fFg4FiLfP#DCMD_1Zu*g({R@`sNFRD9bC1_lPVv!Gx+!3d5_ z2dK;gc(9zD1xtP>7{x(}mM}0RK}}{%0ENSOMxoeQ3=H1kOBfhhUokN>zG7nV1RQ&V` z1_phocr62i)k3H^C@9p(BvUmGu{sH?G?bJ1Ce*_Wwnfn52qX>m>TZ}6gOv7RInU<&%|)>J*fVIss!cb+jBs163A%4U}Xdq208mDSU8la22^)}Qn;-rR2Gzy zK@}e8Y*l}SLI#FcAbY?yY9=GNgk=7}#PAzrk52+5L_qd<&IQ>M0yZ!RWLp$e5@cIC zSTdBU4rZHG7E~5wTRmKs!D=>CoMR;e1L*c3kV|U8x{ASNRT%?=)di>;khP#Yg+L`4 z$RB|$6L-|JSu;j3fpkPN)iW^IK7gtPxdLPs+yxA_f+$kpbi)wD04mFCz(sjL6vTJ6 ztf0^a#dq6c28Q5zunHwmbZ38HVu=61#1IV5Ots3O*#7Z>iQ&TsCWepQ8! zF@z>~F)}dj5CDm>ePLqw_L+$xEU_q^fpI5zZNpFfoKC=P)ub?gY1ii@!24 zWPfF12-PwNiAjLc$L+674Cg^&?I17gln06Beq&-t{KmwzRUmq5kq z7#OUsBZ=>Uiq|qQ_`HCMgWTlv6^UcT4lTPtHoSxCsApiX;ztr^TL|_lQyl|?j{;O2 zY*ILs1NKD{lmqgG1ww~aF;pC6LjY79WJ4>Gcm_h;XA)E#Z0KAl2V`h3LXp)b zrAXr2ki_>Q#BEO?iGz}4J*YnAf+n-9l?)6o!HPo|jTo#nkc8P5LA(wsV?YgEA4jNU zIVe5&K{+ie85p#oDnaE?aSSBUOjyal;0zTnW?=By3Ka(@rpr*y+?5Or>0m{mJYuB+ zO?{v=)&mv}Y`AZ03p6%W+;pukfDD*}a&l?+sP`$`4|JFqaghh$|2 z6$hCa3lZmJ_JW$p;PVtJ4GLCUW~lE#9s<|91yJuZFhs05$iTpu#HavmMQw$YzzmFY zKux}2aK9r7T;nQyXJU}}&cqN58aic6vH-Qgd%rU=)PHAU2t5KSf>Xe?sPPXb2JIhA z3|4MXBSD>{?+_Ojr!EIb` zNLMK4=`2PDrlX9EphBN{>kwlZoNmPbP-A{OJq~%oDfNdx1J{ zED;bhm?wbR)FDjbh07TjyjMWjX`HgM0=C zrsWI_eqX0EFjV|yVkr8{#NZ`7gMr}!)ESHdpejg*N$Th_1_oac$4_+z1H+ZSObmzq zGBH@af~q^bl7Zp=QgGaHG8;k@9k|8$0m@;pVvK}%4b+YM4ps|ExF?|Eppu4v8ORKX z_#>z|$ZTt{cnBx61T>+dnf(>27G!oXSS`d1R%k{8nVpR!E)5k2nLQmW9>U4ow1FL* z*uiGQI1E;LP_-bl*Mrr9&9=3Jii6CCCQHzfSu+?IIH9i51RDps_Id^b!^D3~4E_I@ z7;LqnvY;jnNFTUe1nS~5ScOA_6O^h|mxF>LgsC3f_yX1N;I>^VR0*hW>kL*B3T|_S zfGQ8G0;nv=P0?^!2HQ}mogiJH>;hW$$lwJ^yNjVR%nqQK_Ge;z2TE|D)Vl2-6T_B& zOptVZ?;jJxoqtRWz940Zp!AyvO1D-kpxV!`WMDWAv5?V_!FDH97+%0Qz~e0hR01+E zSWSXD_0CEL1|D!%4HT>($ARj2e`w%t1NCQPL9L<&XkURF8mNqOKx0JUb`k4;CI-g; zObj;NP&FWrSu=*hhEEI_7?QTtGBSWLZ!@QKGH9zF2+K}}z`?lu1p@<*c|9Y;!w3e32IwGP zBtImM>nj);n4W1eGO%0}2hH&@bFlyW2D(z2o%uWHNOe}wG67~rj#m>I7})$67#NtD z*g@;Ym>JpLOa$>*Esug`WLPuvN*I_qSPwHWFfiq@F*2}DlmwZ_#5IF~fpwB3c%b+~ zCIbWOWC*)7l!1YD3PjC5c}51-X;NS{vKtu~Sf@*a^+wHMU|^jgSq3sQ{sjXA>r81d zTk9eN1M31QFdMYgj&+?Zn7u}hfq`|i4454u#K^#UL=nX10G~0$%*gf`3wiR-`d9uo;7EDF&_^nG6hUX5i|JgNrGcfq~5&%n{%^)6T%aW&!3% za2Z@C?jw<3~Z3mV*@VZXa)v08?cN8S71Dh?F;`L@=U~>d>0=PuBGBB_?fjJRenx_~T*j&W+GchnEaGm|jz`*7va+HaI zA%n{jB;x^gbpe+{HUk5jCzw;hRkNOffz6BiC<6mS1y{@i1_m}?p(q9hh6b)g8&E8Q zcl|VR&FW)dVDslV&BVaa%+*%Mz`z#Bf18Pcp@ZvqH6sICB=1EA28Ib-z94T$i$7yx zV3@(BBE!JI79;tQiGg7O*DOg!2DVtRb5?MLu`)2Q#eq*W+Q2oHnSp^V9=xV@2Ul@8 zBLiCk*lh>6>@^t}*pfKDGchn6VPNu+W@KPzmy~B@VBpRN1-v#N&%$KTas9iPKqN?l z7ZhP2ckzMJ1W0rf69WT}S38LL5X4lJ0Wse&F))DDf?5z@wZaS>98!#+t8kb>*WxfU zF!0+4Ffed*@+mWebbunC6~yE>Kh40v(FGRfKX1aoz|jq1vmaw%;FJQ-@$&LAGcd$5 zgLY@Ifi7p}-{1#Yp(+Iu;%5V?lLM>cUk?(O2a9taw*k#2adE6;W?psvFBdBpSfm@HGmxY0Wt51-Tf!lx=Ji^9x z;tm4?w<+&J&`Hu<67~!X+_wBX89;VS;Adpuw&Pn1+N{YXAH=}G?ZDf~z`!8GHDfaa z1GgjZR0akH1+Fw^1_o|taQ|C{Yw08g25wid(HdNDRT&t#y?8;1#(*pHDFXwypWsUd z1_leRuPYcBxB~>fGB7YWaJfh@FmOkUwlOm>cyMK0WMJTq0dpd_cF$m7;En}zGPrEd zGca&xiGzGl!N3dhR9bOI!# z2od6U-_F3ms{)>-;ZJsAWZ*S|1T)761_oYp2-^pA2&grf&6Ey0z$y_^X5@f2t0#fW z65*t@6b8OB5m{CS1`!Zjf{`y!isL^!1A{1N9T#7S6nI{oLA38U=!`8XndVpq1`g3; zF$M;{Xen^I77(2ZI(sZeN_uiEXdb@>wEI0livK_m1A~I-r8EWxz62>L5KluCv~Y(n zMT*y*gMq<7G)RqsfiGQ(15_GWh-IcQ@MTGXSN}PP2Ydn@`5`5j&B4IH!Yu0|J|A?( zM}d^$VL53 zq&&ny3k>-frNM#0!YJt>ssP#o%PP&Wn3I7aK-5Nzk%5m(8XSxfqGlkTAcU77dJwed zRzzBI6CVRZhG@nD(9v(w;v2ab7$%4c9b{nOlY;POh;Hv@WZ;v9Sh7HLju8U`pQ1Fl zKw2Vt7<9ISsx&t@2LrRvG|-3~fc5u6K{=BO|*@by7*$8{D) z2EKlXc#A3MphXB<0d(Nq5r`Uj5c{YSIN$2aFfj0)g-rQ&fy_K74r&lc`hboL2k#2v zyTmt#gMmRRZzTf*gOt$>1_nl{iZcuhOj3J(FfcGnsvuedPqF3+bRYIK2|P%P}UX@H3H=oPKca{Xzq6g20mUcDR)s&{{8uYfq_q$OL~nc zDF1@`uzV6+;Cfd>^w1&(20l%QDF&iupbg!|T;N1vA!_u7fq~B)!gCO1t^pkt3Q_67 zz_x{hfkB3YkA;yLl!9do@{1Yx*ckb&IT#q^z^AFOGjf4s7&tftSs57Q^NVsAB={H^ zIUaC=mJNYYBQqlxs5E2{D`nv0U}UZ11QkT0?hFikoQz;E3xI48U}R?HVqlOhuFPfN z6JnIe;9_8qJ5kNZz$eVe3rful((AYx84UR9B?UloqIN$($8Ac2Qze5a*t>m_;6jf> z6tuC8Z?YthK4^ESD7eJ=D+w-fBt$`LW%-z-z&T4nlw~#p10R2WDO7+_ zR7G6iJm|zsn1G0ixFks6HB3NQMO+Ca@CGIzq#~{j5_k&}5L6L20SUZ=2?(f&D~2;L z@V$o#@T-WG6?=?z-j#pl7s#VW|a zutRhTI|BosH^eOmL=EE@8TkAlyd$C_5uighA+A0lx*23c7{rDPqL~>C41AFg-`)^4 zv;Z{+Aoe{FP4Q)5;EQLIFcV~8cp>@)bo6Qx8wV(Ne-M2)jgf&bl}!wk^?pb!2c?HJ zHgQnB!oVo;6?AxTJ{#+QeozNZLU$^tY-i&KaRnF|*g#o9>Bv=3zX}u}d~S?EhnWK;11>=M`I)6a97tl}7i5-^E(TRS zph|^bm>HbKA>qw03UQT$SSbU)2{Ze{Vg?2U1`ZC8jncb8XGZXqvT=Zl3(?#N(4n!A z@&W3lDoAePVBp}W7GPkIzGebC_UbsN0H|aTbp@TpeToy3RYXBc`}xjtLc%~4e8$WL zPN+*jTY>m4bBdaPYI9Iz3V^y0AVWAfKuMW{15_PJpJ@aotXM7qP&O46-UrIFT-;Wo z3=9llZ}TN^fpaj(1KffjBS3jpp*EC(fv^3=Dj8 z*aZCr85opY;3o(0b+NM@5N2SI+7231ld@0%MR)u)PzxyGF(`rD>11GFk&;kmWMGxz zv}Rynle*~6z`!o`PmO_rLyE}?)ZLtZnSp^zN=2QKfm1_3EI70{Unhd|rkr0hO{)@D!31}%)f#KyoND#bg6fk8}a-)ja2aVcjJ zMg|F~*c1i^Nh!`d3=C3IVxUvwr1rHiFvv)~Siry_E0v(e$RH;rF_VEoUP^N&1A~H8 z+HnR3MX7*03=B$AiaQw?l%-ayGBBt}@tQF(s7lR0%fO%}l~cmNpe}V$n}Iius9 z22H7zQj82*Qp%i+4BAql*;*YbUnxcgU8xvBMg~2pLJ>v=eX0Fk3=9TRpd;}Or6fui z7>uMgb1*O%OGR)pFqlYfeb2yPD)lsjfx%3QYc>Oexs z49-$MbqowHQhR1GFt|$nOlM$lllqy*z~C;`KaqjKL#pKy1B0g&*Fy#dFR2m^Mh0)G zcoPN&AE|#u3=Faz?3Lzq;H8UsVPlv_FjLxhyOHUmSX)EWr}hA63NVhjw?QrqPi7-FPS zzA-SwO4V*>V2G0n6kuS8XOMQ}Wn>88OW_n~6=7fyeQ^_Xnlq%m%OH9th>?LW9l~P~ zy{^H)z?T8xafpJ}Yw%@qO6CYMFz|>j2OX!J#VH7CzYB;?1GS8^Il+a#gy_XIMh3nd z2v0%uA*kxig|x3VM6ZJml`rH3x1n`J-!5Tf;49)(S|S4K%ew6W9goB*xKD(E!9oL7uz3Y=iz-~joGgQH7?fk7G6P6wFH8VBp|5BErC+qz2z=%(sk_PhFIOL2B72P*(eX43yOhE`qXJ zb|C`;s}vV#bW7^&4p3H$0@Wc>T(O{2IustO~I2qRn zFfb@3Yr-qxo1ARLAUiIBMl+<=PXSfJ4=q6U$=m{M$W;cpV1XzDg9@ktpaN!r3KA8N zH&m9vCBRL44h~TH!@&V6S2#F8<|;8fg+bU}WHs`r`^JMYKU%r=@PEF)(mTnV$ibBE8xS47^hF zKs`DsZZ!r5ektDuP$`nB3@SxfKxZ3BMM{H8k#lE3rAXo}P$}YU3o1ocUjUUNJ3xnx zNHNMWGDu4C`GZOkj~5IK(o%L`K&8k^entjask1r^402N5jo?y*2ULo*NPtR_uEn5I z1awfavXnqLs1#v~1C=7-t3jp6D_KScb*VoJpi-n_BB&H$>t$fjl3Mwgfk9hpIVS^y zj+8eG1B0%VVgv(&p43%U1_phpi3*@nP`o!6p8i(l_JqTpi*SULQpAE)Cnp@Lfk>6$X*FhDZ-$_ zzz{Db)Xcz;AjRCqz>p}FmBYZ0BvqTkz>qBUIg)`PMd}q1WlFPu5CG{$cfgxM!;XDS094Wab28LXz$=ewi@}$x@85r`VUfMG- z6i79=F)$QLNwF|66iGP=F)|cOJ=9@fD3MZNXJjaq`kTVQP$spQkAb0F%2L>u zQOcr(fuTt%#DamLSt_TOfuTj};Z6pIR;djO7#P~5L?<&av`b~XGB9*Voh@Qu=#=tV z&%n?n6<*K4&@J_+l!2i~>W3i%L$8#y6azz_)M8BrhJL9e0|tf(QoiC03=^e}%Q7%b zlJc=+V3;g*(SdQOfX z!(u79bqowkq+}Tx8J0@r*D)|GlUj3|fnmASt!M^@6;f)-j0`KKQe7ArR!JHBV_;Y< zHR&M(!y2h)J`4Ox!F)(bBG8SiK*evxc zjDcZ`)N*46hOJWT<}fg9lM4F9z_4BF(j*3k9a5Xr7#Ma+d4w@A?2?+^&cLu+>i<6m zhCNc#7cnsGmAb{mz_3rs-H3r3uVgj8q=1H(xvPX$JXQ&K#R3=F5G6ciX3&Peq! zFfyE#%KON`a862#lY!y9RM-s$h6_@`M;I6`O6B}xV7Me@&(6SbS!y9W1H%=mPI(4~ zt5Vne85pif9h6~YxGwdDfq~(M)b@=G3^%2A&1PV@CH2~qf#J4Pdj|u<9VwG@3=DUr zj)pTZ+>@#TO_ocE{$pTxAmzr&$na1~xqyM;kyODc28PE{H47LRo=8n&Wng$J<@Jq$ z;hEGqc1DKhQcvU=8D2=;3ua(=DRn}bf#H>uxHbdBYpH|53=D6i9vUz(yp>x2pMl|> z)a?WYhWApx*%=r5<6%QG@CGpgRzWME)nRGkHy3S(4dC}m(^V^rOJ zn1O+vQB^n!)U8xKy_bQ3lTp<%k%57WQMDd)c^#wb-yJdCQzpu02~RXahqaxkiT z&1PWWXH?yH0W^B3>hX_(L6A{3h=Gwoh*4FVoq<7^QT2H>1A_>oYOE9^gD9iw^F<5{ zVvMRARxvP$Gpf1^GcZUns!kPTWRPT34R>Z>kYZGQEDh?^sTwOXFvu{fE)`>7kY!W_ z?K_lXR9*RxfkB>8l`|7`v6||qw+sx5jH;acj0{SQsvll6Feo#scB}_2>Q&|V%fO(@ zs4D%JfkBN?_1! zuVG-&WmNUlV_?u@RDJrKfkB^9)k=nu!GKX!n~9OZkWtk*iGjh0QT2i}BZD!c>er;p>-RY)k+rz+M$*B70E(3!VqiT{UBZD=g zs%Z`bgAJqVH3mioTSnEmCI$vOMpY(h1_paZ)$Cf(*Q2Tr5G6k8C742 zF){=(s%{WrWC&(dwOzo#5W=W>m6L%Xlu=c`nt>sVQ5CeDAe>S4eJuk+1fwbw3j;$W zqv~P-28Jj`RXZ65hG<6B`PvK&F^sCSCNnU^GOAt>WnhS7R1KG5V2Ec_Rm^8#NMKa0 zEM;IwWK@l9VPHsNRQ=q~z>v(S`f(ovLkgoRyBz~VDx>P>ItGR`M%9)x3=HXvs$OS6 zH`%HFe$K#<$*8*1k%1wLQI*+-fgzhw^=}IULk^=VZy*ChE~DxtCPs!lM%B((28Mh_ z)oxBkh5|;_h`$UBg^a2J+zbpwjH(>@3=GALs?X;zFqAN=&b`aPP|B!UqsqWg#;B?& z#K2I_sH(gLbT^)=X&VDWC8O#IYX*iYM%CBe3=Gwbs)myp7-|?*AD&}isAW`Txxm0s z$Ef;CfRUk|QT3}T=n_3usdEerjf|=hjH)x885o)wRReD_FtjkL8oXm*Xk}Dg zvWbDAjZt;gJO+k#M%5`!3=AENs%!=f44sUsZ8i)HU5u(V(-|1L8C9npVqoZDRF$x1 zVCZF34dr5B=wnosie_NwXH;dn&cHB%QPpoL1H(i{Rre$YhDnU7lUo=VCNrwWKV)E- z!l+uL&%iL1QC0B>1H&{%)$*SV4AU7^pDHsj%wSY?V_;yI$*3ADz{oI*QS}@z1H)`a z)z3`~409M&UFI+_%w<&FTFSsMk5M(Hih*H1qv`^G28IQUsz>HAFf3$LowJOAVG*Nh z;u!{p#f++7xfvLiFskkmU|?9vsJgF>fngb=>NF(=hUJW^dze5s0;&opGBB)URIQ!N zz_5x@HS{(E!)iuVXD&vDHH@k`_Zb-0GOB)j%)qdYQPtuu1H*bo)h`c0R|l#t-@?GK zkx}&z8w0~8Mpa`Y28PXys>Yib7`8B~HuNztY-LoHYGYv7#;9t+!oaYdQFYG;&>e%S zq3akJb~364A7xss9WNhZt2K{bOJ_%&2Nq!N72YQFZD{28N@Is#lLQFdSo4O_O9~ zIL@fbCeO%lf>E`)ihghAWJ!islRqR~c1T zKV)FI#;AJuAp^s8M%AUMpnDKi)!P{uZZfL!cQG*BVpJ7uWnj3?sG2jMf#D9LYWI8w zhP#Za0k0Ss?lG!9Th736pHbD?i-F+*qbgSz1H(f`)d~qlhDVI5C*LtJJZ4l)3}9e* z!l=6FBLl-zM%7$3MuumMs^6p;8J;t$HcB%xykJxfo5sNKl2O%kDFeeRMpa%O28P#+ zs%lIO3~v}!cQGVI zRReAAWm2_x3tD!f`r-{}dQ^2*AOiy{lj@sR1_m}J)yWeW7}%LqIUj>=e^fpGh=GBV zN!4@;0|OV6>XF?H4BSkrKeQPbc$icJJe{1|cR@_md0^!c3~yj2IY1m{bpFGBAiTss6mgz#zt?`Yw%uL7YkTOdsez zNmc7s1_ntc)iW&&3{p(0dXE?wq?uIz7cel$Fsc4ZWMGhGQgxDJV31={6;@b;o^45mz~+OrrK z%$QUoW-&0BGpVw!1KoM4Dy71}V9BJKc9em^ib*wQ5(9%ZlWMFP1A`5dYRypw23sc8 zS>G8L?3h#+GBGmPGpWA62D%(mReKHtgCmpbndb})PE4w^>=+oFnN+>(7#LibR2BId z7+jfD9U>VR+?Z6KUuR%&XHu2mW@PYSQZ0~VVDMy8jfr7k@M2OeXl7vWW>Q_O!@%If zq{dDI&ZL?>19UH^YThpfhDat=$5RXpQB10Gml+tM znN&~lGBU(4siwLyFvK#cny4}`#4)J`$S^X*GpYKhf>tA{rl>M7Br>To>oYJUF{yGM zWnf5VQdK<4z>vbEdb^N;A(ct>sRjc>8k6cj4F-mECRJxKMurR~)o3wBhD;{aVlhUB zEGE@IS_}-?OscC{85nYyRC|{)Fyu0+zGYx!$YWAvWn^T?XHs2J2D%bd^*|W|Lm`vu zjWPy?A|}-y7Dk3*Ce@`Zj0`1As{2?N8A_Q{ub*aMC}UE6f0}`zoJp1a4CwAqRXZ03 zhDs(?gC+)sDkfFor3?(!Osc_w3=B0)s!ZyP47E(ErI#5P>X=l;vKScZnN*uK7#JFu zR81Wi7#f*W=j1UkG%=~};bUNEW>QVv$iUFTq=1&F{#$>XJBY&Qr&n8 zbQ`Ivv>gLOCzI+f6$XYbCe`#b28M1X)zdc_7F)++wQneIkV3^CK%CVM# zVIGreP7edad?wZHJq!#Bm{bp+VPIIur25N(fngDoYUvgRhQ&;(k%t)=mN2PypJZTI z%A|Tlih*GnlWOT=28QKKszpu=3@eyab&41mRx+u&6)`ZZVp6?Zz`(GYNj15Yfng1k z>W_8?hP6zp-R=ww>zGtkOBfi|GpXK-1zoMG+Bu1VVI!03mjnieO-!m0&lngsGpU|e zVqn<9q$*Iuz_67`6*OYEjY)O#8U}{#OsY$-gYIBeox6&GVJDNSg#;tRE+*CYk_-&H znN)MK85s63sq%3%FzjVgt^UKnu#ZVK=`91pekN6ZSw@BfOscYm3=9XERNLhk84fY2 z>T@$P9A;9@<7Z$v!ldf?h=JiKlWL4ABf~K!RflK>hT}}C-KRjex~iseGccTFQhj!n zf#DRBYQ+f#hSN-{OR^al&M>LYieg|m%cOcxo`K;UlWOE#28Q!Ysynqo*T1SJ#W65k zWKu1#VPLq#q&nAzf#EWf>ce;jhAT{}3JDAhSD93|?q^`Q#-yqo%D`})N%igl28J6< zsttP>7;ZADp4!R4aEnRx!vO|{+f1sK<_rvXm{j*(W?;C>q-u7Yf#DvL>Z;=m4ELE- zCz^vUlvOo(!NBm4N%f5~Bf}#m)vFwg43C*qZ=GUbc*3N5d=3M{Qzq4w_ZS$SF{yfd zW?*>Eq^h-&f#C&{YVSV=hL=pLya@~pub5Qt?Pg$j&7}I)n1SI9ld1(b1H)S;RYML& zhIdS=j2w&%@0nB;w=yt%U{d|IfPvv7lj;OU28K^es=wkH7(O$p-jHEr_`;-`eVT#c zE0gMn3I>L6OsWYC3=H3yR5Rrm8GbOSY6UYe{A5ynvW$V@7n3UJD!JcGs$Gv682&J+ zHaulu_{*f)_MCy?ACqd@a|VY0OsYpEL9-32lVunf7@1XX$T2W5F{{=qGcqtUtA2SI?11`cM`mTm?HPG(hx4Gaui%&Jy185p>k zRf9nNKW5df4Gavt%&M#G85sDORS(%SFz_?0YJ$%3VOCuZx~`2`Ro0JzL5NxPsVF0Z zFtcjNF$M+^W>pCeMg~!4Rdp6d1~F#Uh&~1eab{H&MMee*X4PI(1_nuH)#auP3{uRh zuN)Z|q?uK(g)%V6FsptDWnhqHR^493z#zx0dZ~(mL7rK)SO|16uWGjt1A`*7YF-fo zgA%isExMg~=8)!FI{3~J1(ds7)0)R|R38-Z@{Ro!rgfkBg5 zwStp@L5o>+K@|goHnVE&as~z+X4M6y3=F!=s=Zqo81$G`jW04V=rgM(FJfRYU{+l- zlYzmIS+!e}fx(DbRqiwcgE6yeY$5}L3A5_YR}2iM%&N*^3=C$>sykLPFqku|HY{Uc zuwYg-VrFEpWL7=4m4U&ESv6Fjfx((tb-NS;gAKFlGj2u(TV_??4h9B0X4SF`1_pa( zRgYB+3=YhyhUyFqj?AhKd<+au%&MlW3=Gc9s;?{=7+jcDUr%CSaAj6a(PCh5V^;m$ z$H3sutop>7fx&}W^;RAOgD10UO)CR~7qe<}JOhI_v+7I_1_mEy)w&G~48F{&yN`mF zzN_A9XJGJWR{cEzbRDtkv04U(KxWmdRSXP4%&O&n3=F}{suFUH3?a;_#tjS%q0Fi_ z>WmCw%&Hum3=HASsv8b5Fhnq`vg$H0L^7)`I>*2e#jL8ZpMfEoS@pO)BSQ?cYPkX< zLoBnZ^&19;IA&G*BMc1j%&PzPGB6}CtCk#OU`S+E{Xd6+A&FVFUx0xjnOSxJF9wDb zW>ux*3=FBvs^RJk3~9`&xzY>_>CCE)%nS?}%&I@-7#K2{RhK(3Fk~^SCQC3fWHYN) zmM}2nFslZrFfimYtM2MutLW)vH$-7>bxx*Q+xy z6f>)yjACFYVOBjL#=ua@tokmWfuW39bqPNMLpihREC~jN3TD+1bw-9tX4Uvh3=CDw zs+>{`4Aso4zUB-JHO#7#@eB;L%&ObE85ruARWlYaFw`@v=I}EzG%%|g_cJgwGOG$p zF)}nUtFDx1U}$Dmb-BmD(88=5Hj#m$m09)r2L^^VW>qF128MQKRefy+h7M*`c4G#H zPG;4#eg=jvW>qWDP$aYJHXcTX9%fZ(0Y-*iW>wWd28KRn)#4ot4E@ZiuJ0HaCNQh^ zOE5A_WLDMXVqloWton(Akzq2ks`Oh1hAGUdwMq;OQ<+u07#SF*F{`=;FfdGKR<*yt zz%YYZRd^Ny!%SvXNmWLMSi#bb4D*;(nN1lO z<}<5)yT!n;fLWDu83V&YX4UVE3=E5yRiBD6Ff3+PofE{su!LE)HHd*>DYI%`5Cg+9 zX4UW@28QL#s!J;v7*;T==IAgmtYlUV(P3a%#jI+h!@#hbSye@cfng1^>QQk%nLzxgvTY-CnF>C3>diCJ}zKLf*NX4SVj3=CVCRlC_3 z8MZR3p6q5|*v72Nzk`8cJF}|oF$RVm%&N0^7#Vglt3El)z_5#1bxR`y!)|8PdSOO} zJjwkF zO=eZlo~B#Os+BDa47Zt8FL*OB++kKN;$UF7%dFZwn}OjTv+8L<28R30s-WFk513UW z7BVnAWLB+M$iVQ3S#_Qi1H)rx)hr=Kh9}Ibpoy)g%&Ib?3=GehRj18iV0g}~dVCiH z!wY8Bwc-p6FPT;UH8U{0Vpcs;&cN`RS=HQxf#D6aYN!$;!&_$6lw}MI@0eACB^emr zGpjmOGBA8#R=vN6f#D;ws_#4ohEL3@iH-~mpP5zbrZ6ykVOE{^l!4(ZvufT;28M6U zsvEvCFnniLUBJo6@Pk?PfGi`!PiEEUdl?vhF{@@AVqo~qth$e%f#DCcs`v&5hQG|J z(<2!e{xPezH#0E&XIA|#&%nUIqT21iz`)3&`usct0~3p?S21XNf@+-|0|N_->fdYz z238i;bsh{1Y%HpvrPb^#s$HTC3>++~2Ra!TI9XKp-)CUpVo`1S&%nUVqPi)bfq{ob zwO*BxftN*fwkjh7AB*aCRYnGW7FDma3=9G+s&%Xk41z4GvlAH@gjiJhG#D6!SyVp@ zFffR)sH!ezU=U?djoHn>AjYElke87`oJDoXJ_ZH}7S)%$3=EPis->XuPZm`JNk#@~ z7FD|m3=A?XsuG~(7c8ou_b@QXv8b-|W?+zKQ9Xa1fkA;qmForrgCdLSxfBKlB^K3d zs~8xRSyY!^W?)cZQ8kHWU{GaIJ+Xp;L5)SVX*C0bI*Y2|b_NCw7FCJo3=Enqs(Tz5 z7_?YancgrkXtSuEkz!=fVNng2Wn|E0Q3dUK*JDwA!_2^-&!W2MGy{VHi|V>a1_nbG zRi<191|t^Lrtb_4#w@B)P7DktEUFW77#K`hRKKb-FqpBZf^M=kXHlJ)%D`a3qB>(H z1A`@t>U0YR1}hfTKf;U*)-0-0{R|8?EUG<67#M6>R2_X780=V7<2e}_>{(RLlrk_l zu&7oPGcY)^s3sIMFgUTOe$r%MaAr|GHH(44g+*2V3mDw28IY0)s?{v43R9VE0!`aM6syeS7Bs`W>Mv7WMGJ4QN6&;$Pmk- z+IydYA&y0r|26|dJd5g`XABGpEUE`87#I>+R5`9PFeI_4c8f7GB(tdg4PjtNVNw0h z%gB(*qB_Z!fgz1W)mD&!A)Q5a%}xe}3>MWp$qWpcEUG5X3=CN;s-R5;*(|D0^cWa& zSX4v*Ffin@sJ>)mWXNMt-MNr~A)iIn7Bt_+qI&)w14AK;sskqjLlKLr^G*haViwg^ z^BEXQSX65j7#K=fRL#CIFqE;V&f{fdC}&YM;$vi}U{TfE$-q#_qAI4u$WXWq$WX_kYCD60p`Jx`-AM+91{PI0Uj~Lo7S$sM85o*a zROhfUFf_BMp08nGXkk(Pu$F?HL%Ru&CbK%D^y{MO9mZfngep>YXPH4AWUuxxE+| zX0WKbYcVj)WKq>-W?-1bqN?o0z%ZLd_2EkfhB+*%f8H@L%w)pchX81}HJ zma#E1>}63E_|Cwvk3}`RjDcZ4i|WDS3=9WYRCE6_FdSr2eILibaEL|qFe?MYVHVW{ zb_RwcEUNP23=BtER4o)37>=>1F8<8GaGXWecpd}82^Ll1lMD7#QxbsP2eiV7SYos=J$k;U0^s^aTcn`z)$g_!t--u&B24 zGcY`4QC)nDf#DI0s{eBahQ}dF;l0|juH3o)PEUHzY{vV5~`F{q6H!P}hR~Z=IvZ#6P~h>27XpmJf~Px47#kUh4UB~^jK9lhA}Ycv#MVD#lT>|s=Bd>fx(bf zb#f~MgAuDLR|f-wF{`S=CI$u*R@Fjb1_o1B)u~(z3}&pVO%V(X=B%nKBpDejSXE#3 zF)&!Nss{NpFj%pwI{ac_ux3>~qQ}5s!>ambJp+R+tLp1@3=DRxs`8-zAFHZ?J_CaT ztExB?BZDKW>Jw>31}9e4IsX|LoLNL)fv25(l?PDMrrA68WbX9fmeR@GJ47#RFmRbTru zF!-~o8f{}>2w+uhdc(jF$f~N~%D@oBs=8m1ks+8>)uV}lA%s=+%O?hgP*zpBSO$hL zR@D**28M7})%{!y3=yoV2EvRCk*um=_ZS$WSXEsPGB8B5s_xv(z!1Z#x{Zy2A(mBD z$CH5}j#c&2A_j(dR@GOV7#I>*RiiI3FeI|7)?8pnN>CW4g*69tLg_% z28L8t)fu4-3~8*Y`cVuF>8z@gk25f2u&OTMV`Ru=Rdp(5V8~)s^*h19kj<)^Ys$co z!>Y<+%fOJ!s=8Q|fgz7o_4qjkhJ04ll?n_D1+1$71Q{6$Syfr285xRLRc9J7Fch<@ z+FCF$l(4FvS;oLn%Brdx$G}j=sv3~Sz);SrdXR&Gp@LOayo`aNl2!F73nN1ntLiB( zMuuuuRbE~Oh8kAYDo#d*T2@sf6-I_SR#lHn3=H+Gs{6$m7#dhr?#9dj^JfR#oW`28Iq+RqH|qhE7&h zLq7(FE>_j^4;UD_Syd~P7#Vt4RrUTdF!Zvj@@!*Z=wnr7{KUY}&#KzN#=tOvRW;Cy zfng%6YWXY%hDofdpBot%CbO#UO^(m~X=3f~Y7P6`?|HZ(th*kAeA_K!>R@Ioh3=B(HRX+_hz;K0Cwfr3e!&O$*o&pAjYpkmF*BBVCv#Nf4&%khlRWSAdI zh6k*w=N2$9JY-c}*2=)}h*dS&j)CDZt7^9*1H%(m)iQPlhNrBmn^_qdp0TRdfR?$i zs;j2@RC(^+e8M2SFEb1L>U=gv#M&?GBCVhRW(&*WO&P}nzo*S;T@}L z$u|au_pGXuRTvpQu&SzjVPN>ksyfArf#DOYs_Y8}hR>|34-FX@zObssDKavAWmUa( zje+4CtLlxX3=H2{Rn>nnF#KRuP58~g@RL=w;28tMFILq<=?o0NSyd-rU|{&es`{9X zf#EN!>hqNh4F6bFt>!Z@{AX2t3|jERrn;Yd9E zVPN24Q{586z`)C<`U14qflW2ikb!}pO_f2JfkA*xb+I7>gCLvg$0!B{AvV>?`V0)h zY^rvr85l&^REy0R7)04rr!Qe(5MxvQ9>BmL&ZfFjnSnuqP4)DC1_ntsRnrv=3{q^W z8{aZ8NVBOO?Ma=)Y()8A22Xzu&K7)V_?u^ zQ*~I$z@WvZ`t$(u40>#;%8wZs^x0G|eq>-UU{f`5 zWneI5Q{5KJz+l9tTAswfV9chPkj21Y!loKh$iQIArrKA?z+lFvdYX-q!JJL??_UN6 z3pQ2ZB@7IfY^p!+GcZ`OscvLoWUyva^%7-Zuwhf3=*7Tb%cgqPi-Ez8O*O!qfx(_l z^~4qi1_w4(%byGkj%=#&?->}J*i;w1XJBw(LM$SZ#LEc^BEX?*i?-;85w-pR3Gy& zGWfBn2E1Wl@MlxKV#UA^z^0mUg@GZEO||VN149s->NN=lhF~_;$+s97LfBMK2s1E* zvZ=<4F))O&sisOWFod(I9&Tk|h+tE_`mtbT_VpH|(W?)EWQ*Btp zz>vbG`guA7Ln@o<@dFGDX>6*;H!v`yv#DNK$iR@nruuLL14Aa8>S-QEhAcK!=8X&t z*=(v(3=9l8Y^wVP8hthGI5V)({4U5;j%2Dh7s9Hq{5|3=Cy#syp^DFqE^Y7V|PNRIsVepT)pX$)?(8 z!oX0)rdm6PfuWjBmHz_+Lk*kiK4S)kS~k^kQ3i%OHr3d428Mbz)ycaV7#i4ASB5h% zG_t8Kn8v`+#HQ-V#K_Rhrut8jk)ef6HNK01p_NUwz=DCHjZO7i1_MJoo2q6d149R! z>egZghE6us6Jm@EU2LlRnHU+m*;F^xGBEV8sa7*EGW4>k9%5!>=wnlr(q&-iXH&h( z%*Zf-O;ul)fng$>>I-H@hDmIy`?DDsCbOyjW@coV!lpV6bQlkt>ffIX4AaF>k%3`3o9cQi28I=Es&ghXFsx)#y;{e>u!>DJbQc4|YBtrfbOwesY^o*# zj0|hpRR6IuGOS}${Z!1ru%1oT{5b=|1~%1G0*nkB*;MyGW?dX5k%3_ko9YZT28O+Cs^Rhs4ExwruUaxN>}OLwuFJr1fK9b*F9X9tHr41;3=D_Z zR7*7(7!I?ka=J1w9AQ&s@?&5)%BHH;!@zKiO?62h1H*AP)kWVJ7*4RMt~tuUaFR{+ znk*y3DK^zd7a15%v#IjzXJ9zPruyX+1H)N1Rb~qYhI4GHr#%@M&aKtzdhRbZK?`|_NTwzn)vV(!)Dx2!=Y6gaDY^pQ1F)&Y>QUaF0#(&_4!- z`)sQI5ey6u*i^d@GB7-3Q{7;|!0?DowS5Z%!(%qprG*R(PuNs2O;wtok>NL+>Z)4| z41d^E(-asO{<5hq>ttZ~$EM0&&%p4XO;r+fnl!sAw;Ce@BfIKteg+06cGV?pj10`| zs#B&iFtD(z)^mf7wopA`0XpVFb%j0y13SAa_h$wM4tCWbV+ICJc2&jI3=CZCs?oX( z4BYIhd!-o|c-U3$v#YlGFfd56t1j?i zV31;0y?=>;L7H8)TY-^5hF#TPj*&r@U3HHU1A`p9>Q`X~26=YXe0K&01$Nc;N(Kf+ zc2$OR3=B%_suR;07?jynH{WDnP+?cya*2UKm0eY)f`LJeUA6ry1A{uds%0kwg9f{* z?KB1kO?K7)N{kFz?5alh85p$LRYgh}7GZ`4n z*;TD~F)&!Lt6E4gFj%sy9(&KgV8yOl@PmQDnqBo;1p|W(yK3`a1_oPpRkcV420M1u zL|Fy~dv?`S6$S>!LGVXm4U&NU3GI11A`a4YEeA{gEzaX)j9?SA9hvKI}8lI z?5a&1j0}G4s%-oW4F2q@cXSyT0@zhAt1vJGva7BOWMBwlSDjhMz!1!?YQ2_$A%tBu z=QaaFD7&gs4Ff|MyXq7vMuu>9)gQAN7$VqJ_X;sGM6#FlcgR~Z;G*j2ZuF)(DZs|J5$V8~)u z)fZu8$Yxi4l*qu4!>%fEje#MTUDZ5~fgz7wHRm1!Lq5Bz#tsIC0(Mo7(+muS?5eVb z3=Bo=s_hjF48`oK*BBWXO4wD!l^GaH*;VJnFff#{t1>w;FqE^a-V|bFs9;z9EyT!B z$*$VAmVu#)UA6lO14A{t>V{Vg3^nYkv6T!Awd|_0y$lR>?5c`v3=H+`s+><47#i4B z_xxmFXk=Ht>cYU##IBmKm4Ts|UG=gmBSQuz28Idjs#Puw3=`Q^0tSZV?5b_g7#LQtt2U=GFsx)(UC+hHu!>!^pq+tXHM?p`7z4u^ zc2#vb28OllsyhrB7}l|?E@fa~SkJENt<1o%fnBxb90S8fc2#*X28K=Ss{C#Y44c_i zFUv46Y++aZkjucZm0dO4gn?ljyXyC43=G@ZRqaF>8FsL%8d@_j>||GMcV%GM#jeT+ z>i@B;)|s~UU}9w0%dYy@iGg7syXpcZMuz?Ds^QuU3=^5Rt7LI9Aj7gzmkFBIJ@d876yhB?5aAZ3=AjP zRXuhvFq~pnUAKgR;WWD{(_#jOGwiCBD;OBgva9mTFfyEDS3T&)z;K>j^)hJvC%bCK z0|thR?5ZyoGB8|XSG7!FV7Sb#Dk#XvaD`n}PlJKsD!b}#2}Xu%?5ZDrFfd$aSA8VG z$Z&&Q)eSWN$F9mL$;fbvU3Hxq1H)~0)ebWThCA%4lF|$eciC0v{$*ge$F9o!jDg`k zyDG0L1H%J$)uYOc3=i2=xeqfiJYrWpSINNem|b=99tMUd?5aH585o|jtA15sWO&A| zdQP2z;W@kN3Qq=x7woDwLJSNq*;PxM7#Lo$tEQb}V0g{0`r;@9!y9(h30({fZ`oDd zg&7&%v8(ECW?*>FuIj4D!0>@xRYjA5;Ul~1!$1axPwcAqg&7$>v#V}sXJGiku4=H5 zf#EB=YL*uR!#8$SMSBK@@9e79TNxOBu&eT(Vqo~muKG`wf#Dass^}#KhTrU}SEeyA z{9#ws>0@B{%dXm)#lY~7T{SC@f#E;9>Y)PAK}V_^ni&`vIaI~@7#Wy2R41`AGB9(f zE-3&VPo}!2l7WGhLp2RF|Hq-4%mTWkKy}Lm&~84}S{4QdP7c*h8Ab*!4%Id_Mh0#U z)od9?1|AO8r=azp9ID113=Di6s?k>&82C9<&w%#Baj3SOW?&HHQ1vYX-NC0i^9=)o zFo&vs83Tg|hpGZEBZDZ1>f?F_1~CrRc`ghL;vA}FJd6wy9ID+17#JiuRCfzAGDvZ# zW)v_mNOP!e+Qz^j!=V}*&A=ebq59T=fkBQ#b&@3mgFJ^SLpKA10*C4oeFg?a4%Jr; z3=B#fs+@cb49Xm;DGdw^Djcf!>=+nSIaK+B85qnFa4;|!ai~5OWMDAnP)&?tU@+lOEd|wo9I7kUGBB8NsLHrAFqm_wZd%O1 zV8Nj}Lx_>Vl0(&XF$04YhiaoV1A{e(YE>KqgAIr3qzDEETMpHQTNxPaI8;^r85rz2 zR7KY?FgS3ip7aO6bik}!IeYRR*ZqcjYHLQ z8v}zohid#I1_lof)n8%^44xdS*KRN{cyXwng|UN3^5$45;hDB zu^g%u<_rvR9I9GR7#QL?R1^3Z84@^D)mj)B5;;`8l^7V3I8l! z4%PI}3=Ab4s#!}J7)m)*Z~bIoDC1D&7iVNB=TO!0W?-n`P_+zUV5sC!wJ=~{sNzuF z@|1z0nnU%WI0Hishidg%28LP=)q84;40Rl;zi%)w)N`nc1u!r)aHu|!WMpXMP~``W ze{!f^`OCo2%%R$r$-vOUq1q(M$k586I%_opLmP+chKmdg?HsDlxEL5ZI8=|HWMJsz zP-RPFVCdpd4N+la=;lyWJix%v!=ZX1fPtZxL$%J4fuWB>Rrmx0LqCV=n-dHS6F5|L zZ!<7V4s{cJ07?yCTN{BEpEagyL^nih3 z8HeikRSXQvIaKeYGBB**P;I!vz_5}-wYi6ZVHJlecO?VEY7SKnE(V4*9IF3C7#P-a zsD1%mIl!Un634)>o&N48Z;85Mf%gAt&L)G;b1H&l} z)%zt345v9%9j`MmoZ(Ov=3-s3>P?5v#l8zE^?^m zb1^Vn;!xeo&&Y6@gF#{G4bZ-ENu^DqpaPMPRf-vOQkrZ510TB-FKCanY$gLAhZH~f z=pqgd&?X9n-y0Yh_;{okL5B<}JqTxDfZTh}XCuW1Izdb-{1a${^sIZJ4blZ)KpUi= z`~vO8R+_RLuGU40O*NQ-K}wz(bOOivP>@d8eH2r7#aAFf;k3U z=IM+K{KvW4^FZhC@%b_`@Sjw?mczi{z`(%)vQLJC&qbQ~bSMLZoDS#!EjMX}3m{G) z=r}QVY4O`2&MnZ|P7i76XCTg z&W>~j2EH(9g$5Akaw_P!8EN@$5N83%rxDWf(?A@)>7ZkIq!ku|IJ|Qh82F;371n?_ z%%G#mqNU}xgE$5;3=DiR(h7$_oJ-~m41BTD%4b0wuZ0W@d~wq9H$a?B&_PP^(h843 z9ElbN2EGJo`F9|W$yEjhzC>xopCC?>JR<{NlC%m-I0J*+PEke%zGP`7eh?@3F#`i% zinNjxi1Sv6fq^eoT1^$i;Rl^NlqRiY0OF)~fX)GwR<;Il#AF#5_%ft5+&~=3hYSpS znbOLE;S3D2iFuU_d|A@qT*1K8A`EKHfFheG9(=+HXh|)PVjM{HVJHIw&u!3s#T;)y z%s@s)1`dwzV5TyN$rQ%Gz*CbCQp*cs27nbvfS6{hL873Qt~`@IftY$A(X+2XOiK`R zr5MNr7Z5W+4;rAm$YXkXq1g zYM!OtAkjG>(QYFUb2*6V4tCBa5c9!%kmz0zGj$1wc>=`Teh$RE3}UWi1TjHC3}Tvr znBMFlZH^#j$W)N1PdEdE;{Io#m8*QqWd!PCVds;rk^!F?#~}I=baKQx8Ik$mlOyMY z^2kORVdpr|NgOjkye$x(faru`1_r(zGCZIo9YsX%&0%EV+XLZAi2ec{BXvLqd}ghT zXs`+BxH1S&RTab}~?>aBhUg*CnIyL%wik$Y zTQe~5-GSI%AzY_i|pfe|B z1$U-`_VP*;$uctVDai`nO$BYyl?VonyQ#?vvZsM|-bxgQFfj0GL5xaZlvoNXM0I2Z z71J0PG8iS2D;OB~^koID(-;^E7$x+UgHA`26$DLgS1?Kh%?BMzBrBMj2HLDD@dR`n zp%uia4n~Py&_R&a5ZMWg60O;w!d@2a{TYlBS3vRW1K}=Ul=uxQ(tKqFr>24ScS>vq zrJ(>>!3}8)3>z3F(s@BeyR6{-G|+BLi6BtS1B z3zZe*OJ`uXz$kGAFYI1p@ym?YFU zGBEI!$qJrL2W{n(XyIdE;H#1q{FDybp(o)BiorTrL7of-1_dUGHOUMNeD$(|Y8jyY zbP`+dGBEHp$O<}SFfbS}NnBQBWZ-L*6|Bo(V6b44=(xndz}G4(xI6>2sZF8)RB3g{ z3ZBkjVDMm)xW5Z@$fm5|s|?T>0B$gF1 zGVslp6%5K`V8~#Skk(>g;9DRoSd$6b-X&pc$-uz3NLFx8CTQ1|L|q;u1K(0v!EKqK z%~%q7pk~x^S-}gLpgmR+GeIZ(tdkXdpUJ>5fl1=-F$M;{4YGm~S)d(J5`v(^Mo-8J z8f7ssEMSuG0wwR0vVv(@p#4h{v!odr_|D4;c4dLKB}u$l!@$6IRaS6*7HGGTM0x_~ zOhZU|KENa)2%0IqEi1S+i-F+;lf=K@pxh`c=#vfF@*{B=bokhFh~gVe5`RH8;44|d zv~17@9f{@j3=Dj4WraXl;{}sMh#La~-v@}|4@?r1S>l}xBLkm=95`KBFiTtp6$Mgqf@Yw07PG|D zxeN?^auCHH%o5q#7#R2z z@NiI#0jeT+CMGg4uyulJ1dcv132JL9o%DdWPn%@eKvjfP(i~7*cDf#@ecE>()Rtvo z1s(RowFPw8&!#8_23DzihZq>xq;hK*7}%u@Kvl9-?+egjKf0hTK2j59K}Uu?5@2ND zk=hgoI_#&P6Le(Q)vut#eooahFbGI_S1>RLN>xu_U=WgWxe7Y$XGT2eu%Dchpu>Ky z?gJh6Q*6t?AkLsvE(dqxd>OXPI0go(-H9MK?pY0TW0f|z4eig%$nb*Sl#%0RG6RD+ zxUFizC?As#+MO%MAkHtsz`$<}J9AH#LA+-(=ooI8fDD89qbLRjerK3~G=sPR69WUk zJ4`@|K|Iopfq~x(CLqZmeq4@$f!`McGl=i}!oa|vz^D|R1M-U?gZS*Z3=I6q zj4Ewl0e%K?n??o({xnAIjbH&@2JuH63=I5PjK&tZAT8Vs;`8$v82Aer6?f->1UMPQ zTXYy0_)B2|>W>&0`0v34I9b#(lS&x)AHoDUSj6qJ7#R4Uzy#P?#66cYFz`Qz39zw<9}8n( z;C}@ZU}X{i*TKNR{}v{|!Xh5j%fP_@0VcrABAPOVfr0-sC8&qXFU2Ge>eFh7<|#2U@XIktx$=Wrm(!IQ8TgeUJPT3b7Yq#i>JXlTXsR#+ z1HU$e=OOx}mVtp^j|qHWYJh0@a|Q-}LkKTIG%}u%f!`FuOAuYOn1O-cjES?PfPo=H zbg>Wv1HUa3FX&9Q0?~c-3=I5^Op;skK*!3i?O|ZxcVPmb4cZ{8^pJsp--8K!;$4Sm z1`i_xzYl~rLDVpXfq_4W34Dz04AECDpz;C2n=U8gvi41iu&~ zhe8SigXqGa3=I4djNpz0gQ$oGBLlxAgvTN(3rc-bj8b8s-k<2FN(KggX-4poegX{2 ztgH+Spq_#XsLEpC0Gp=#lZAl+)M0=Lnx-%?sDt_pDj?G2^ElXnEtL51_s^@pq6?HsO1XU;>y6mu?=JZ=*)dkt6c?j zgdPJgsF4oB;PDn_1`dwfAVr{q0AHm*&)I{V9|&r%gY~E^;Q~z=aDe2&Ckuj_?g$yM z6I4LQ3WLuSWZ>XnNo9Z-5s(Ts5p0ACn2W6NDd^Zh4qcdXP@^AWF4(CY95FDNF1SG; z76S(dsOIG0D1*s^Is_1%Ah#m1pvtGg6oR@6NYWsCz;0vU;MfmS!+NlAQ@gp1_n?M11!V9!QluJ1eFD# zeg;f13?vAOk50HdK*t-ZfVur?;HUr%r*UwA&UNJA$WCKmPzQAW}1^g!~UdmBK#5wK1M4h}zhnNkK(;e*aOi+!K&Dk>z`_#bMHSHD!I10>ieD8l0agMc7&tgUQN_XG2Gb4d zEkVo$>joK)(8IvN(E?Kl>PJBof{g?dP$SoZ)PNie>Rdt8fMQ++bgC%>2ggN_G$@An zGGQ(SxmyLyg&F};&%yBlq!MHhs2>I~2&@uR2C9I>K^MkkGB7BEOapb!AZkGQl!1f8 z4kl9uw+AGn0_K8z$H2j{0JQUvBO;T5K^@e6L+FR70tF5O2S*dgBok2v22h_4q6T!{ zCj$q^BA5)Qdk2w$#^D~249K;ho*qO7bjB+z5U#?r z0jaqe%)kKZSc26saBxh>Vqj1Q^(7%Eqk_~kaBwUIiGoI5z{*s>ED*uK!Er5%fr0Zn zXd;q7o&(hD0VEA#gL=7OJ&Ex`zmQ*w4b&HsdR`3b7IwS>bqnVzGBPkpy_E+|!$^Le z23M-W2I?hAok|8NHUAA#sx1XlIt{d*n?cgJ5w2994K&vwrK|y(umSb47^NP(1$8zh zD<8rYS+arRTB-rGL|p1{0s{jhgQWW*xU>@+s1GL93c5~OYHkC_I*xguPW66HP^VgK z0jN{m#{}wBn;C*S)lxAG4D1Y&H#y)&_^~DDGB8Lv?FP9RbR8d~6uS_}h>a{D&v9PL zVPFv8598?0Wnkdqp2onyA0Y(J;9Q^^Gx#IhYNH?2mfpyP)kYxq+uSrU>*Yl7ue7R zPz|69WcU|>IUHOXF$@g+O9VjW2Ux>$b_ckIm0&dtngtB}o7F+W99*C~Rrt3GfvRf( z1`ZC8-?b(9%b9EP7#MWq_JVqcEFiDyrlh7Z@XuiZc}X{ufqy9r$l~K&>edho*(IF2032v@4aDi?i;r|70pM#Er@6BUikPLbZkAnYf z&+-@;q_o08QJ}yHibZo}P!ybc28sebcJQ?`{9KHDO!*89QkrW)DdyWOP-0M+2I}c> zF=~NKkp2le*_of0kpt8i7L}=DWZ>s#+N%`3ww7zrVvBsLaR)I{QuP1nACpsaJI%7iL(3T)0Aok%5^(dZiHqLj`{`6GvtN z1B2+CW(EfS9wxz zTL>>fRLvXI!G!QKL^Y!s8Th|435pgoFcdI=z0U#m9S680C!L|hz@Wjuf|&!q5VcHt6G z$pE_bfg7S4O?%BLn|KLq-OHjo^C-c|#c(7;;OYgBSl9*kVf=7=$803hEeTKoXJ} zj*JYfETCq#pg-@sQU(UY7Gp++dMObLMg|7eqt=WJ42-JkAP$pig$X0*loL+yOt$JP zJ4OZu0o6!HMg|52RXJNm&_x#e92gl`R1?h^85kOjz8NtxfND4+b&whcCI$w!deG?h z8b?M3!8m3RoAam@BZGusqo_$40|VCwdqxJqW>L@umJD25K&o04KyKpTI_JR1AlM3) z5ny2ZU&_G13)10I2EOLfvW$U&|C94vvFj0~KHwG0db!a)K%L3%-HPB;WyszX{Z!l9xd z2~f;TECa2_2UqOEk$exz7#O5tLEU62wl$#a$#@pj5@cGM&cGlXX}upwaU7#+IRk@~ z{cliX;p$q@)hiP3KzW&YGAJ)sy#_V;3`0OozN=ge3~UTctFACG2q!YX0r_**ItB*e zWFe3doL-!a3<|=j9QEZ4kS2<7I@GP2wG0fx84$N}MZaZW5YFTUX%XNO1#Oeh5(TyX zB^WrTGcYh{2Rx&Vf#qDKa5bg#K2{LdU2JLg~2Xk1szC|-I2u}iYIJh|S85xA9 zf;l`~uR0kRglB>|0$f~T3=G0^!5k4Tdp|}7;f3JKWhJkJISXTY2Y zu855c48j+{oCL0Gtc(o8SHKtUWpKR;W@He)0hTG?a_(hd5WWrOR4_2b^fNFB-(d!Y zDZkh;1_t4KLZC2|WXytx_!G7%l?)70cLhKp-aQu-;?nw{1lS=3YOQK@2!G>buV!H2 z`UXlXKfoSk;Ce64$RPX^%wgdYGGt&7{txDGh}PIMFbFe2nxZ_S&Rn2#7$7_WQJ!K3 z24M~ePefEkkbyy%8^V(ib(dvi5awf)&8%c#kP-EM&A=cm1d&q^wG&`q5Eg^*R779N zF)#>ALUc1$7(}JPVafsS zh>FU9CrSjkvcwq}L}kHgOM-!^=Pm<-s2ua-Y6b?$iSP@oL>1U-Y8V)#dO)|=OI_Rp zO2dzrfYPuxcrv=bA5@6u<%0^*C}lc=Wx z$H1Ti>UoO>vs%|NFz6Pg<}ipxu;zfox7IN*h{m$c1%(v{2gsdT2BOx?AhWo@cH2N4 z%q17Y$RKJ9cB2Hu^>$#60>t(9V2%cZmVu}vGst#`ZYPLt&6MI222p20P#TobEG|lB z5Oo1-P~iIG#K<7(DhNuo8Vp(rqVCKf_d;}gKy-8c4P;~x^#p5>0IBh22KfV`#s{hf z>{(xk4GdZuqW;Vv|3TCQK-GW)A&?i;)R%xHvLJ5I(7ggkLkKe{5Fi>tp&CGqOwlm# zAczEb@Io{ktQ)K$lKEU60|P`u6jTG)rO^M2OG(lU_d3kD#~-?xHNd5a7vmCF}_nhKKapy45KqeQfUtrVnLP!ZH; zm~k7V8MG#si9stsw2hOofq{Xma~}hPXuGg*Jp%&+*VT3g2GLG%_T=DFb_8(*LBS}% z1)BB~?UV;`Bs5d=QW!)#wLlyNF7aMQ2GLG^5J!UxRKkgNT7ozRT%gH+(QaXo`z^RC zA2TqB_R7C)U|?|I@&Fyp+6U%%FqpoY&%iK4Y!M?rNK)>293z9+5=J?`76t}6-V8EBkhk-$E!#f5B zv6YN!8`~Hd5Tw!vKt3}R~-<%&Qu=_eQ%#MUy( zEdy~jJ25hdtz(qd>|$V$`o>jOIjgXjwIa%>5% zjVl=#L|2P|3R?xul>8C~(KX=cbl^It#=s!Do(E)&2c)#!04{94J_;5L2lVp;+fV153K3}QNppp?bHwJwm6K}=T>Bmru^g9MqP4>B-_=`n*0;Ji5h$=$`_a4pz=kr z9#p6VS-!}6mXi1kL zXqlP*?IiVqg&Kkg028 zU=V!&&YH6`9Fh>JCdM(xsw#|SGbak~@4>ncoH~m~VnO zePE6U7wE!7v3|a#Z43+nTzL~27{n%kLp_4aw}yd1Y$BMGz}3Xc$RIWy%*o&q2xepu zo2j(Aje((nOYt@XgV=0vSG$61?IZ>Uu{q!tRt;C#R7M7|xnNEM*U3nF$(Miy0WimP7f{6Ex2L2h|f$zSIPb`S%$Z#8yN3k`ov>I8<6e1yedG zVRG<*3n__K1_q{rHK3Y<86>MEAhwPZR5d^%WdkHq7?@5)GBAj3WZv7xz@Q}{wwV)D zVL+5@g(-<_Wnd87#{2-JL_=%`C#V{MDA@&30tx@!;P4lK6o7lcfh56oiJO5zY%e$h z6&RSxnHd?x_AxWJGcagbh#lYr)sGO94na) z-HKg-Tz3nuY{YJWja7go#5>@GsKIq$IRk^(eXvsuxbA@ptw&%BEg(*L3fAKQamov@ zj0Xc#;#md;v6svn+Zh-*-@AcI?AIJgpko%I4lyu@y#xD_g;AbCWBM5e2CQF;_-r zrY;5sg&=DN2C)c6ZRaiq2I*TX7#JGF@)(KNAgM(}W&gQ%M?BZF8aqr84M zXzR%jP|;Y$D7m5=G(9B)Y8F;AO6}-oU?_kDR}Cb%Di{>5gUXyJMuDGQppxZ(7XyR3 zayJ8m3YY+mx^!NQy&rvNHpNSPp~- zs)9gfDu_xjFo@+cGJ`n0Am@QR1z+MeyPJVQTG@wzK|`#bQGm4v7W9pRB*x61sOMi-0>~e4H<8d5Cs>EJrEx%fN%U2>tzI&pc)Jc7uGW{i1jftOY|@> z7$}HMW#j}k&>^NzhnWtJ_8E|97hq8EoXo%=Hj|OL45DW?BPXaG579Fhre`gv;Ft&V zCubA`gV=mXGLm3W2+0K1VT{bHdKeg_r|>c|7>Mm+%AQOmUdm*N9 zh=PmkeUOnO0Z{``QMDgxrYN|QJpkd!h$WUVh#h3)PwEA=(!p)QLlB+@0|&>O9#BF9 z^S$ond4Kaik3rK`H41BgcKX z?n{g^AP$2lXc|Q9GNa_vUeFxSXD0>*u`3YQfl|^kkSNDYFbV3DNy~aOFer$DDD)t`g5V4}vGzPH`kfKLG6x<;D2$2JIDn9mtZv6nY-@h>r~nXeodY-z^3P zvHwupI=vYf#2A>sgJnV|LG2PoCWvi^K^!J1X9lPmXJG=5kqPDQ0i9FJq#)7{vJDg( z>Z<(=3@V`INDM*+@{9~(>`eSdU|G;f=A6#SoOwK*pALz|Y2dLke;19-s(qXD?U z<}d@TfnYR()?)Gk8Y_=5Fff`x`Emjpa-gY1Gbmpc6k!(q3=EtX>OdD)T63HRnGRaN z#Apjyzr>|j#mK;D53VXCxELB385kYG_9`&2O#|ut3D)Vx@fxnv1G0;l!Te|)BLicK z`~{FQ=7xIEvPK35^Inh{8Q{R;WX^zzs)9sw_(45BPUZxd=w^@!1qy2Xp!;GXV4@#D zqJ^TM8BI>+5SXYp$b=%OXaG!K%x>5ml?oBjX@@qDndjxV4~R|+sdFOC_qJ}iyAuqsYXW?*b((g01e zYBDf0h%+!VSh5!~f&`600ma0~%lZ?y^)(=3T-vM#) z5+-JbMNG^L)=i+`=!AIcDibrqNsyoz$Z=f|mGR8X46)424A!k6!ET7kNzBX)ZOqIJ zHhIZK42(TY;NnS!g_%K$g_*%R6l7*EM5Q|mGlM-y5F849kWkpb!pyJ&B={$fk%6(F zi37B1OoEk}L5P)^!Foy&BLm|ECSK4g$aGd_hD4B{B`8QILR9WyWoFpI%FJL>z`!^O zqE3a4nL&b$nZa66mH{Lv1k${LjhSHu8#99~XjOvpWCjMCLI%eDOah=Kl|t;y3_R@2 z40ghqkdWWAl!4*>B+wvrpTWV*Faab8&SaTP@}O$tKL<0zcMfI-CvZ~FW|9Iqih1IKdb`C?2eB_>U^p-Z z5(%KNxB(RxUdF)i8ZK_n7{bX6&xDMDOy!{C)>0vU0)@H2RIm}8%o$vWFfU_ZaOQ(5 zQdq{oz~C|&lshz-7(rfhNP}n>1kI|0Cf4UfOk-fM%3xsBVA2LL(>R$K;y9TZEQKl< zL4qcr%zKiPnc*lWGlNY=4g;eW6L_GIgNvDgiHn)R8eH0FLvmy=7c)a3NU#HBrw$~a zRd6vglz{}nfusv5iRN-KGtB0KWm7#!Ha*0}%y0lC2&%Oi^_jqx!gDTWhNoQ240icY zw`(qAU|^pH@_Hbnfjwgoh=^b`WU#vjRRBuk@?Zra;3UWiO~w3E7#M6I;*5s&j1f$r z8;kv+lAr*!XAI?J4uEDRP#p@YjV#WC{PLTTQ2-jMy6~`DGo69KGAfagf$=w^5vbwJ z$IZ;Z#m&rM4K5`ALYf`k+{_H_Ai+pbkp5!?m%ZKG%nXg(%nY^*KnJ@`XJD`?uFPd% z6mBDO0%nS@X%nYue)l!gxke>-WkQmIv%;3)hE6MnoWI?HTA`de|CrA(+!U9aP zpk(-whne9$4=jWQnPfoiG%;Rg1`%Fn2D{r(&w#?pdpamELqOTm;R{q86jt_(p-kW` z2@2sLrdkG2n1NUG*qK9>fl_i8SbHcqG%cV}01r*%q*=?rz~GhxDnj2eGA<~Bq(n=2 z=9HMhz+iV0DhxWN^bf>fPIx^J&JnOAY|j|TXu#lp6RN>!8ORf%oXoIjVqoyt4~n@d zjEsy)GZ+{=(+U_Er!Y!@=0H6&Kui-*g7?Zv&0}Dk#t0r4@d73A>5Sk6?p4IVID-+K z1R2~siy0Xha~T;gOJU=so-`gb&3=YCjb^fprG=Lgo&lm#ACxMI}_KZQGnuh^w zE=)bM1IXM`M&?s6bN%_58GJz)WNsxtGebE)GlPQ;y7@3?!p%2>nePvBw-Z!7Ba9&l zOCmLl%x1HoewfG4%rFOL*BO3hhEpKBqM>@>ehEPLiz&=5A5ePx3{}ri0P;&8BP;0A zC|{!)3=CiSnHk=L%vYPiz~Cgn%wQ+L%-{-A767_1rcZ#Gp+bO}A;4<}14FeSGefB$ zGebbw3MXjO>45ei0R7W)K!)X7B}to3juz zgQE~LgM$ZDZz3dKm})>3FE~OtnKf7;G0gz6WRgast~nrgghE0Ftk(f53(~6r zl||@{fXagOxQ6BaQqg_s$hgCeFIsu!M?!_d>RH7qUL*+SDX z$lnTcA)x~Iw{tC27Ssl_n+xTDO4tO5QnV8GLoy^a*)s+*Pux(?V0RX(W&Sb-hAxN} zaK#YFXkpJ7#L2t>+Aw3VOM|)@6l@zHD$#zGa$DL6Nf# zO_-UXPZ-pmFUVkE^kkF;Y5FV7%UW->5d26w=3i7_*r6JutuO(%cu#r_9|OZ@ab||s;>--8$qbD5 zWk6vRD8bC&FTupW6GpI;G-Q+FB%-{*)fJ~^6VrD3lVrFnS4%G{BQy>$lA>~{T6$Ir>hv`tx z5pY5Q_3NO$eQ-s|z+hWY%)rpJh=IWx9H)Ye;7FY-#mq2UikZP09I1kg;8;B-#msO( zikTt2H3#D2IB2Z=TgU+JoT@Q`qeWDjnL$vRnZYKRfl-|i9524o%naTjp&|xG4MuRp z6iG8P6i7oOW(L$m#s#1t)M4bINWpeBaMFf#;zI3N@IWSALxWIz$)4~m!! zn06S073yC`MMn0>MNkKBmSJYt2r>Z_&o^Y48LojiAmjeZFf;s?VPAT5Y$g)h+@fSWMG`f_yAfg2EscGj7u08g2DaIdE%gk zyMZh-gMutGG@s80Z;<*d%gpc)BnFzhU|axReScDpnPIyeGeaSfm^d^T?9M@TfNDa}0S4f%)CXvN$zb;q zDh*27$FLa4=)qto11$nUMm&Y7*#R@cK_5vPY`QSCI%Hsojs%rw)r_D*3+6D;;Vqyv zz&Hn#K7yq|<8am5AQe%H%nU(_%nZSx^9dPiWI-o698+Xw*aH%~HJ6cru@*E0!{DIA z%wVAeD(q5A7#QopLA*+dnPGtvGlShssQ+1(Gca^70RZ%t_#C zk(qrd14Ha>c}522Bxy}%28P%Rt{_PpA<&JN3~@*1GBCiZVpEXc!POk7hv$23E@+B~ znL$RGnZftbTn2_dWoCvpWoCwecXJsSeke0Dd;oEN&1GOnQekF@QekHB2N|~onuHl( z3=x>Q(Tt4imNGyLJE6kNa72Zf0c;JcDl-G4Dlv689|^`EiU4AS~X<$e+jn ziX>eI1`aMJo`mz&j0_+wA;X&xAH>K2!V!E`I^K19k!$iRA0+zNCsg(m0%S`PMq-xwH}#A+BB*fgYlL3i?n)-W=JF)%QI&bDO$opZnr zQqI7@;p584Ai>VC7->^4J&|I3`Mh*<3Ri7&sYz-bBQDDZE~V_@L4 z0&_I@{lgg;IIY1P1AgOZ1_n+WFvo&Fw3&f{(-zEe;9nNPz`*GM=6LY)dNVL^I)XU? z{32T!7&x84oCto+Qw$88E@Jk~3=9eUXa6!VaJq@Of-W@Yw*<*}fL&d{?~u*F!08F* zl}gaK=a$GBYqN z;GZSQ$iNv3cFqd^FjfWz&Nxm`GTOjDm6?HoGoA~So_FvUhchy8CV<^`fZtw|fq^rL zqnw$6;Rpkhk2E6#7rW$q&?cmOP{3>R2`)@#VBqDjVg`{Q2{urKf!qa6^t>EK%nS^I zUhNffmW} zfYJ;bsLSx3nSnu=f%y$H1B1{8KL!RKX(^D95F1FH99W&udXTt0Se);;4FiJ!FBgXg z3j+gx^%DjLULGEBGlf4bpMil_K(rB*02x>~*nfTl9X-#wkAZ=K@98W?h6#Ln9O|qL z4E%kdLof|^KZ29(i8~Aoe5SmjAYJ?tptE>w`9b5P0{jy|XMx)Bfz}U8@XH4=Fz`9> z{$*fbkl~-PnSp`Nk(U#+_lqACzkJS|AP=eVFP+4|z~>4!T7&n9^+-7=#ib#Zk@?1_q%da4{v8l$OFER3`Ef zv`^syD+7Z#NI-&7C{T*yG6w^L1Zc^MP>2*iDCsds^c`nl5DJ%)$w*{i;E*U5V_*=9 zmICJ$0g0)gi@#%}q$@zP^Aauh85o2Tr1%#EGcYJfTuKA;q(D3k3D6n^p%f`zX-?3B zn;oD z7*v!?yGVi77zhQ2B8Nq z0Tvgj&R+}+LQh}<%q~*90~i>Dp2Gx~T%^oDGcX9fh6ymbNO4FqFbKVa2{5=w={#d# z5c&uckoS<9@RNZ-=qpS>&O_?b5(WmLA20z~52>lw85o3q!vthJq-HEy!A-ow9+q)SVgk&L>ERdLE#K0h= zC=D*;mPi~9U}O+dmFB+B!N9OW!Uhy@n$i+7LJSNWB=SMq6?Gu`c1TQJ4BE*E;q8%d zLDiQRIH3_|7*-VKSsP6h@c z3kdIlME70>1|drb?}Y^DkOm<~X;#+|28It3At}YRDcr62y5eEZgkV~_oq<897n~KC=BO|* z2=zg-$aNM*2BCh4c#A0mgU|#BTcMVLLFfoXjXa2bR0-Tt(3fFg5IQRcO14a0AT!U2 zgBl+)KA%9lCqTkNm-q@e85m^qRx&U!$btrj8D%TZFfcI5?)kyMz$}~h1k}=E$^{j? z_rc95CbN?a3__1IeYqGIUbIBtR>2guZfuQwD>?Rgm|8LU=3^pgq+> z|2V->$RXjM$G{-O#06H#Bk{Hhlz_PSL0MZs!U&XCI3aQ(61m?Q7=(Daq}0V27$hWq zK44%F66TWb5d-C4P)}1xf(u-iYe*bg#K0h=2{FY$!t4SAgOD*7IFVRL7`5-ND9A5n5MpEGR~b zrannM9FOmgHgPWMB}G0GBv_CBY?*gaoK-EyN@R&RGf)EVCIHgt(-b>w_5> zG#Gd}KyHwm`;~z~K!}%7Ae)BRD?5o)BSV1^JGHLD>Nmjbe<9PTUL( z%6eT43__BOvY;%>%hAovz@P$JDlNe%^o&JdA|EU`Ua^23$p9`l-?D&><&anp^63W% zk4FNu>|f|J3)qbU5}>8nLf;@f35aigvw(f0ASG19z#w#(6>JI%qr8fgvJ(S?&@q^R zoQl+TQ1Uzl6OdJrdMN=)_%Hz(6{$v0HE;ncz$B$21)3}px&aknlvI)0R?fg6bQ>zb zET$sWHJ_0|=qXfyQB*}r;5-9^&?}gLh>DaXNZ>V0Kv+de2_*0aCLp9Dr415z3lk7j zkum`Zyn_h{s7NV>GcX9fhY9ejNS5U$G6?--1t(k$$s7>xAB1NB$wbU-g5Nn97%U{X zW-&4d@j`eG5}!f!g#d)-A+g{vD5J26w+VvE}5d)h6;%y5Ko^??xr9ELxV(jH3Nf? z5gQMv6zP!IZv!eL*?2&iW`e}}Oa=xaYY1qo+f(#5hB&M)4FbH`=+;Ttyw5CYN55hYlArisBAQS{~^$Cg1 zAREFUHe8U%%mD4+hxqn}grNnfIRLTmfkcWg1A|aJn}nDU1H%i6FMgmV2OGHN`XKRc z8Y6>HDw`N6>-~@hE#?$TV-p9}D-4X%UqRJHJ{#+O(5d~5(z;VYWjh-`h%3OzzzoU? zszE*+3=%@gj2sOh+rc?9jZq53VUPfg z6bWTO^l?al4ha>?W)uWfD*_C>9Pa!K404S3L5?qAYy?MgHSt!2g>>k zykMuQft)BQz`&pmVyJ^z;HDri2dHVm%fTSPz@VxG-h={5pF*b?*#ZR^7-YA0fU3DC zQyCc;Wp65iD!6HG3=FIcsuu$o8Q59CYP*@(nn7y+$1pN5$WDs}sWow9WMGoLmB`4z zB0C|4k%5Cjur!!~L2j`E=nw@SW`X?z3=9&WnH3>^X0R_AAifk}24_|d$xH?zab^XO zGEne=EKpvez{nsZ$;{Xxz`!6{0II4rSVTcikmnG}VPj?zWMELtiUqYb**e6+%*#h1_hzxoC2UyLc&#qfkEgLCnVcQfL1gMo#ljtfduI66QK*7P?vyqKnPvt z6cqv0>2Zn#8~$By0Bxv_XGbHfZ7oO3}UkTUNbO=%Q}lNGDyhArZ6x_ z%5vUeV33j(%Vl7YmfhFFz#tOUnxcgUD+5xMg~3ELJ>v=ecAn93=9UcrLhbQhO!bR3=BrHn>iR5 zjAbJ@85m4tx4vg!FqM6p!N6c9%Qc&U!CY2clYzlPcAF#vgQe`<9SjUsvbCET7_4Pa zGB7gO$mZ>5V6c@1P3YOl>aJyAu$MKt$H3qq+g!xJ;3&IIgMq5kZt+Iz~Cv%^^k$VOSXiAk-=Lw-h_d{NA_P4 z1B0)u%p3*=KUp_F1_poGUyO_l0kV3M3=Dy?>faa`f@GU!FfatmvPv*8gvfSpV_*oC z{Vc=45GLEA#=sCR>z2;I5FzWX&A<>TyGDY6Axd_d7z0DJ>~=W@h8WqDZ=gZ#+U*Ps zak7B|3=HuMa*n)=3;{wZoC2w$3=9%4ZZa?kr9s-h3=(I87#W1pAv_j|>lzFULKzSq zheVJGBZE*Tr=*V%0|Sr5@=68z{D&z#Wr*$OWE@5O4D&kaX5e4;Y-S#jr2$gaQ&JzVSAwV10gsM2X_lhzw zIDktLp;}IG2g!qh8I%>&K%FHJR)-S|yc{53@p5E|GBBut+Uy{+Ao9>cxC*@X-Ytg>8n zpsaRw2PmsWfsXE#<%$IzPN4kY7O3CD$#hs0RCLsEGB79$feMIgoQ$B-L^W9xZpTed zwqTGQml#2%`uZuL3i+W0$Ud1{pnZsHAQv=Qs7N{Um2YExi4K4w0=JRrZ z${$`1P`Sd(0Ww#W;VImz1}?UuU{aWFD)$o_E!l_J`p9iy_h(-;`IWzElkN|9b|P$@F6mVtp!mRpU1fnV0Q z0aS`)DuYT9mUp01BvKkwikv$ODn$}+fli2Uwgr_Ut1o~`ksUP*3=*=8a*Pa;vV8ua zQpDp0s1&jL0xCsT@-s5X%AVC>V33pbZUmPiJfKpfMFLccbS(yzB88yq3}pqvL8S;= z9H?U)&o?EtaoEz@Rl``XJqh^ z^^s>}@RcoAWMuG@WfNdz@Rw~C0+k}N(?O+(e-)?{ne+ivicA#-l_IxnL8ZuI(A~VU z`Jk%_W$$!=N|9(!P$?4a11d#kECiJzMV+8hB*Yz5itLpDl_Cr(3=HwILd^^e39`&> z3=D~~Svd?0NwT#$3=GM#pCcI$_N6@oLxF6A8v{e3tP~3a zLy@eL5F_Z&}h7wr?c1DI$*}o|a3}v#5`4||=WsS8M7%F5}a4|4c%Bl%6FjUE| z%VJ=tmi@nufuTnBnG^#xm2u^|H$o7#JF4&D|In8f8I8gEh&9STHa& z%jWblFto@%+{wVuD!X9;14Emv=wt?lcG+xK28IsVvqcOHow7db85p``!|NFsx@G^A zGBEVW{xD=<=#`b0VqoZ#U98E#&@Y>0z`!s;)>oW?VWRADSq6qlvObm!43lLqIxsLy zk*y13V3;Zkx}$2EtNSkbAEGxH;fnkZPEF&Ys zQrY}E28Ly_Yi=_zESJ3%&A_liR!y0aVWn)U3j@O{S%ZHJ469`)J!D{5Bm2yUfnlvI zODzM#I$8D~3=HdKAI)N5*dY5#k&$7e?3E-2hE1}@;*1QNWq*Y+Fl>=sZp^^2Rd(GR z28M02LBALnw##0c#K5pac9R+d!%kU`Fb0NQveVlc7%F)-|xJu;Pn;ehNJ1_p+Mvd8`~FdUMN4QF6DEGq(<9gqd>w?8VYvw(r&m~7!X z28QFZpkrcB$cC0MFr1Y2RA6K{CClT;z;IetL4kqcjBFnRBg0wQypIeF=VY}w85qvX zhTULbxF8#Rgn{9rY|cLhhD);c>#|=M z7#MEIZr{kja8q{IYzBr~vadZE7;ek9cQ7#Aku^ETz;IXgXgCAIJ=v<23=H>WMgK7{ zJdkx`Wn_3Lt6adq@JP1c6a&L!*_s6m3{PaIu`)0`mG%0@!0=4=96KY!bJ-{Ij0`Vi z?*%h3yp%nm%)szUR$QBb;kE3+U`WXg>@3LvL85n-Z8oy^? z_$ll8o`K<)tf379!*5wn8wQ3yvP%OP82-w>?PXy2Cp&L81H*rfm!hBvYK?VT3=E8n z8c(zs7?>C}{)48s88z-|f+qhoW?f`pU}e-`C}m(^W7ODvn1O+vQA0S2fq{cjjvT##mDFlN;Fx|D&zgi#~!Fav`rqlSG9 z1A`f(2519;IirT`e9)a<8n!(Q43>-} z#UBO+Uq+2@yBHY!7&R7XFfjNtYP?8dURlVM

    H}mAESm; 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�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

    BPasko(8RlgO3k^ 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%0DLgUUR> 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�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

    ?&qR%PcA`0r@nQA+b0wH8mwQ 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 literal 0 HcmV?d00001 diff --git a/tools/rasm2armips.py b/tools/rasm2armips.py index ae92d586..168b02a6 100755 --- a/tools/rasm2armips.py +++ b/tools/rasm2armips.py @@ -1,5 +1,25 @@ #!/usr/bin/env python +# Copyright (c) 2020 queueRAM +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + import argparse import re import sys diff --git a/tools/sdk-tools/adpcm/vadpcm_enc.c b/tools/sdk-tools/adpcm/vadpcm_enc.c index 0fd3a11f..a203d21d 100644 --- a/tools/sdk-tools/adpcm/vadpcm_enc.c +++ b/tools/sdk-tools/adpcm/vadpcm_enc.c @@ -56,7 +56,11 @@ int main(int argc, char **argv) ALADPCMloop *aloops; Marker *markers; CodeChunk cChunk; +#ifdef __sgi char filename[1024]; +#else + const char *filename; +#endif FILE *fhandle; FILE *ifile; FILE *ofile; @@ -72,7 +76,12 @@ int main(int argc, char **argv) switch (c) { case 'c': +#ifdef __sgi if (sscanf(optarg, "%s", filename) == 1) +#else + // Allow filenames with spaces + filename = optarg; +#endif { if ((fhandle = fopen(filename, "r")) == NULL) { diff --git a/tools/seq_decoder.py b/tools/seq_decoder.py index 9329e702..d4546cd3 100755 --- a/tools/seq_decoder.py +++ b/tools/seq_decoder.py @@ -267,7 +267,7 @@ if sys.argv[1] == "--emit-asm-macros": emit_cmd(key, 0xc0, ['delay_long', 'var_long']) emit_cmd(key, 0x40, ['note1_long', 'bits:4', 'var_long', 'u8']) if eu_sh or us_jp or sh or non_sh: - print("#ifdef VERSION_SH\n") + print("#if defined(VERSION_SH) || defined(VERSION_CN)\n") for (op, cmd) in eu_sh: emit_cmd(key, op, cmd) for (op, cmd) in sh: diff --git a/tools/skyconv.c b/tools/skyconv.c index 79d6f041..6152b0fb 100644 --- a/tools/skyconv.c +++ b/tools/skyconv.c @@ -10,8 +10,8 @@ #include #include -#include "n64graphics.h" -#include "utils.h" +#include "sm64tools/n64graphics.h" +#include "sm64tools/utils.h" #define SKYCONV_ENCODING ENCODING_U8 @@ -26,6 +26,7 @@ typedef enum { Skybox, Cake, CakeEU, + CakeCN, ImageType_MAX } ImageType; @@ -56,6 +57,10 @@ static const ImageProps IMAGE_PROPERTIES[ImageType_MAX][2] = { {320, 224, 64, 32, 5, 7, false, false}, {320, 224, 64, 32, 5, 7, false, false}, }, + [CakeCN] = { + {316, 228, 79, 19, 4, 12, false, false}, + {320, 240, 80, 20, 4, 12, false, false}, + }, }; typedef struct { @@ -66,6 +71,7 @@ static const TableDimension TABLE_DIMENSIONS[ImageType_MAX] = { [Skybox] = {8, 10}, [Cake] = {4, 12}, [CakeEU] = {5, 7}, + [CakeCN] = {4, 12}, }; TextureTile *tiles; @@ -242,6 +248,9 @@ void write_tiles() { case CakeEU: strcat(buffer, "cake_eu"); break; + case CakeCN: + strcat(buffer, "cake_cn"); + break; default: exit(EXIT_FAILURE); break; @@ -324,7 +333,10 @@ static void write_cake_c() { exit(EXIT_FAILURE); } - if (type == CakeEU) { + if (type == CakeCN) { + strcat(buffer, "/cake_cn.inc.c"); + } + else if (type == CakeEU) { strcat(buffer, "/cake_eu.inc.c"); } else { @@ -408,9 +420,9 @@ fail: exit(1); } -void combine_cakeimg(const char *input, const char *output, bool eu) { +void combine_cakeimg(const char *input, const char *output) { int W, H, SMALLH, SMALLW; - if (eu) { + if (type == CakeEU) { W = 5; H = 7; SMALLH = 32; @@ -426,7 +438,7 @@ void combine_cakeimg(const char *input, const char *output, bool eu) { if (!file) goto fail; rgba *combined; - if (!eu) { + if (type == Cake) { combined = malloc((SMALLH-1)*H * (SMALLW-1)*W * sizeof(rgba)); for (int i = 0; i < H; i++) { for (int j = 0; j < W; j++) { @@ -476,7 +488,7 @@ fail: // Modified from n64split static void usage() { fprintf(stderr, - "Usage: %s --type sky|cake|cake_eu {--combine INPUT OUTPUT | --split INPUT OUTPUT}\n" + "Usage: %s --type sky|cake|cake-eu|cake-cn {--combine INPUT OUTPUT | --split INPUT OUTPUT}\n" "\n" "Optional arguments:\n" " --write-tiles OUTDIR Also create the individual tiles' PNG files\n", programName); @@ -513,7 +525,7 @@ static int parse_arguments(int argc, char *argv[]) { output = argv[i]; } - + if (strcmp(argv[i], "--type") == 0) { if (++i >= argc || type != InvalidType) { goto invalid; @@ -521,6 +533,8 @@ static int parse_arguments(int argc, char *argv[]) { if (strcmp(argv[i], "sky") == 0) { type = Skybox; + } else if(strcmp(argv[i], "cake-cn") == 0) { + type = CakeCN; } else if(strcmp(argv[i], "cake-eu") == 0) { type = CakeEU; } else if(strcmp(argv[i], "cake") == 0) { @@ -597,10 +611,9 @@ int main(int argc, char *argv[]) { combine_skybox(input, output); break; case Cake: - combine_cakeimg(input, output, 0); - break; case CakeEU: - combine_cakeimg(input, output, 1); + case CakeCN: + combine_cakeimg(input, output); break; default: usage(); @@ -631,6 +644,7 @@ int main(int argc, char *argv[]) { break; case Cake: case CakeEU: + case CakeCN: assign_tile_positions(); write_cake_c(); break; diff --git a/tools/sm64tools/.gitignore b/tools/sm64tools/.gitignore new file mode 100644 index 00000000..0192cfcf --- /dev/null +++ b/tools/sm64tools/.gitignore @@ -0,0 +1,4 @@ +/mio0 +/n64cksum +/n64graphics +/n64graphics_ci diff --git a/tools/sm64tools/Makefile b/tools/sm64tools/Makefile new file mode 100644 index 00000000..3ab2eeb5 --- /dev/null +++ b/tools/sm64tools/Makefile @@ -0,0 +1,39 @@ +include ../../util.mk + +HOST_ENV := $(shell uname 2>/dev/null || echo Unknown) +HOST_ENV := $(patsubst MINGW%,MinGW,$(HOST_ENV)) + +CC := gcc +CXX := g++ +CFLAGS := -I . -Wall -Wextra -Wno-unused-parameter -pedantic -O2 -s +LDFLAGS := -lm +ALL_PROGRAMS := n64graphics n64graphics_ci mio0 n64cksum + +BUILD_PROGRAMS := $(ALL_PROGRAMS) + +default: all + +n64graphics_SOURCES := n64graphics.c utils.c +n64graphics_CFLAGS := -DN64GRAPHICS_STANDALONE + +n64graphics_ci_SOURCES := n64graphics_ci_dir/n64graphics_ci.c n64graphics_ci_dir/exoquant/exoquant.c n64graphics_ci_dir/utils.c + +mio0_SOURCES := libmio0.c +mio0_CFLAGS := -DMIO0_STANDALONE + +n64cksum_SOURCES := n64cksum.c utils.c +n64cksum_CFLAGS := -DN64CKSUM_STANDALONE + +all: $(BUILD_PROGRAMS) + +clean: + $(RM) $(ALL_PROGRAMS) + +define COMPILE +$(1): $($1_SOURCES) + $$(CC) $(CFLAGS) $($1_CFLAGS) $$^ -o $$@ $($1_LDFLAGS) $(LDFLAGS) +endef + +$(foreach p,$(BUILD_PROGRAMS),$(eval $(call COMPILE,$(p)))) + +.PHONY: all clean default diff --git a/tools/libmio0.c b/tools/sm64tools/libmio0.c similarity index 100% rename from tools/libmio0.c rename to tools/sm64tools/libmio0.c diff --git a/tools/libmio0.h b/tools/sm64tools/libmio0.h similarity index 100% rename from tools/libmio0.h rename to tools/sm64tools/libmio0.h diff --git a/tools/n64cksum.c b/tools/sm64tools/n64cksum.c similarity index 100% rename from tools/n64cksum.c rename to tools/sm64tools/n64cksum.c diff --git a/tools/n64cksum.h b/tools/sm64tools/n64cksum.h similarity index 100% rename from tools/n64cksum.h rename to tools/sm64tools/n64cksum.h diff --git a/tools/n64graphics.c b/tools/sm64tools/n64graphics.c similarity index 100% rename from tools/n64graphics.c rename to tools/sm64tools/n64graphics.c diff --git a/tools/n64graphics.h b/tools/sm64tools/n64graphics.h similarity index 100% rename from tools/n64graphics.h rename to tools/sm64tools/n64graphics.h diff --git a/tools/n64graphics_ci_dir/LICENSE b/tools/sm64tools/n64graphics_ci_dir/LICENSE similarity index 100% rename from tools/n64graphics_ci_dir/LICENSE rename to tools/sm64tools/n64graphics_ci_dir/LICENSE diff --git a/tools/n64graphics_ci_dir/README.md b/tools/sm64tools/n64graphics_ci_dir/README.md similarity index 100% rename from tools/n64graphics_ci_dir/README.md rename to tools/sm64tools/n64graphics_ci_dir/README.md diff --git a/tools/n64graphics_ci_dir/exoquant/exoquant.c b/tools/sm64tools/n64graphics_ci_dir/exoquant/exoquant.c similarity index 100% rename from tools/n64graphics_ci_dir/exoquant/exoquant.c rename to tools/sm64tools/n64graphics_ci_dir/exoquant/exoquant.c diff --git a/tools/n64graphics_ci_dir/exoquant/exoquant.h b/tools/sm64tools/n64graphics_ci_dir/exoquant/exoquant.h similarity index 100% rename from tools/n64graphics_ci_dir/exoquant/exoquant.h rename to tools/sm64tools/n64graphics_ci_dir/exoquant/exoquant.h diff --git a/tools/n64graphics_ci_dir/n64graphics_ci.c b/tools/sm64tools/n64graphics_ci_dir/n64graphics_ci.c similarity index 100% rename from tools/n64graphics_ci_dir/n64graphics_ci.c rename to tools/sm64tools/n64graphics_ci_dir/n64graphics_ci.c diff --git a/tools/n64graphics_ci_dir/n64graphics_ci.h b/tools/sm64tools/n64graphics_ci_dir/n64graphics_ci.h similarity index 100% rename from tools/n64graphics_ci_dir/n64graphics_ci.h rename to tools/sm64tools/n64graphics_ci_dir/n64graphics_ci.h diff --git a/tools/n64graphics_ci_dir/utils.c b/tools/sm64tools/n64graphics_ci_dir/utils.c similarity index 100% rename from tools/n64graphics_ci_dir/utils.c rename to tools/sm64tools/n64graphics_ci_dir/utils.c diff --git a/tools/n64graphics_ci_dir/utils.h b/tools/sm64tools/n64graphics_ci_dir/utils.h similarity index 100% rename from tools/n64graphics_ci_dir/utils.h rename to tools/sm64tools/n64graphics_ci_dir/utils.h diff --git a/tools/sm64tools.LICENSE b/tools/sm64tools/sm64tools.LICENSE similarity index 100% rename from tools/sm64tools.LICENSE rename to tools/sm64tools/sm64tools.LICENSE diff --git a/tools/stb/stb_image.h b/tools/sm64tools/stb/stb_image.h similarity index 100% rename from tools/stb/stb_image.h rename to tools/sm64tools/stb/stb_image.h diff --git a/tools/stb/stb_image_write.h b/tools/sm64tools/stb/stb_image_write.h similarity index 100% rename from tools/stb/stb_image_write.h rename to tools/sm64tools/stb/stb_image_write.h diff --git a/tools/utils.c b/tools/sm64tools/utils.c similarity index 100% rename from tools/utils.c rename to tools/sm64tools/utils.c diff --git a/tools/utils.h b/tools/sm64tools/utils.h similarity index 100% rename from tools/utils.h rename to tools/sm64tools/utils.h diff --git a/tools/textconv.c b/tools/textconv.c index 867a944a..c1fd72fb 100644 --- a/tools/textconv.c +++ b/tools/textconv.c @@ -11,12 +11,14 @@ #define ARRAY_COUNT(arr) (sizeof(arr) / sizeof(arr[0])) +#define INVALID_CHAR 0xFFFFFFFF + struct CharmapEntry { uint32_t unicode[3]; int length; // length of the unicode array. TODO: use dynamic memory allocation int bytesCount; - uint8_t bytes[2]; // bytes to convert unicode array to, (e.g. 'A' = 0x0A) + uint8_t bytes[4]; // bytes to convert unicode array to, (e.g. 'A' = 0x0A) }; static struct HashTable *charmap; @@ -156,10 +158,11 @@ static int is_identifier_char(char c) return isalnum(c) || c == '_'; } -static int get_escape_char(int c) +static uint32_t get_escape_char(int c) { const uint8_t escapeTable[] = { + ['0'] = '\0', ['a'] = '\a', ['b'] = '\b', ['f'] = '\f', @@ -172,10 +175,10 @@ static int get_escape_char(int c) ['"'] = '"', }; - if ((unsigned int)c < ARRAY_COUNT(escapeTable) && escapeTable[c] != 0) + if ((unsigned int)c < ARRAY_COUNT(escapeTable) && (escapeTable[c] != 0 || c == '0')) return escapeTable[c]; else - return 0; + return INVALID_CHAR; } static void read_charmap(const char *filename) @@ -189,9 +192,10 @@ static void read_charmap(const char *filename) char *nextLine = line_split(line); struct CharmapEntry entry; + struct CharmapEntry *existing; line = skip_whitespace(line); - if (line[0] != 0 && line[0] != '#') // ignore empty lines and comments + if (line[0] != 0 && !(line[0] == '/' && line[1] == '/')) // ignore empty lines and comments { int len = 0; /* Read Character */ @@ -225,7 +229,7 @@ static void read_charmap(const char *filename) continue; } entry.unicode[len] = get_escape_char(*line); - if (entry.unicode[len] == 0) + if (entry.unicode[len] == INVALID_CHAR) parse_error(filename, lineNum, "unknown escape sequence \\%c", *line); line++; // increment again to get past the escape sequence. } @@ -252,8 +256,8 @@ static void read_charmap(const char *filename) { uint32_t value; - if (entry.bytesCount >= 2) - parse_error(filename, lineNum, "more than 2 values specified"); + if (entry.bytesCount >= 4) + parse_error(filename, lineNum, "more than 4 values specified"); line = skip_whitespace(line); @@ -274,9 +278,25 @@ static void read_charmap(const char *filename) line++; } - if (hashtable_query(charmap, &entry) != NULL) - parse_error(filename, lineNum, "entry for character already exists"); - hashtable_insert(charmap, &entry); + existing = hashtable_query(charmap, &entry); + + if (existing != NULL) { + const char *fmt = "0x%02X, "; + int fmtlen = 6; + + char str[32]; + int i; + + for (i = 0; i < existing->bytesCount; i++) { + sprintf(&str[fmtlen * i], fmt, existing->bytes[i]); + } + + str[fmtlen * i - 2] = '\0'; + + parse_error(filename, lineNum, "entry for character already exists (%s)", str); + } else { + hashtable_insert(charmap, &entry); + } } line = nextLine; @@ -299,9 +319,12 @@ static int count_line_num(const char *start, const char *pos) return lineNum; } -static char *convert_string(char *pos, FILE *fout, const char *inputFileName, char *start, int uncompressed) +static char *convert_string(char *pos, FILE *fout, const char *inputFileName, char *start, int uncompressed, int cnOneByte) { + const struct CharmapEntry terminatorInput = {.unicode = {'\0'}, .length = 1}; + struct CharmapEntry *terminator; int hasString = 0; + int i; while (1) { @@ -325,10 +348,9 @@ static char *convert_string(char *pos, FILE *fout, const char *inputFileName, ch struct CharmapEntry input; struct CharmapEntry *last_valid_entry = NULL; struct CharmapEntry *entry; - int i, c; + uint32_t c; int length = 0; char* last_valid_pos = NULL; - // safely erase the unicode area before use memset(input.unicode, 0, sizeof (input.unicode)); input.length = 0; @@ -350,7 +372,7 @@ static char *convert_string(char *pos, FILE *fout, const char *inputFileName, ch { pos++; c = get_escape_char(*pos); - if (c == 0) + if (c == INVALID_CHAR) parse_error(inputFileName, count_line_num(start, pos), "unknown escape sequence \\%c", *pos); input.unicode[length] = c; pos++; @@ -376,13 +398,26 @@ static char *convert_string(char *pos, FILE *fout, const char *inputFileName, ch pos = last_valid_pos; if (entry == NULL) parse_error(inputFileName, count_line_num(start, pos), "no charmap entry for U+%X", input.unicode[0]); - for (i = 0; i < entry->bytesCount; i++) + + for (i = 0; i < entry->bytesCount; i++) { + if (entry->bytesCount > 1 && cnOneByte && i % 2 == 0) { + continue; + } fprintf(fout, "0x%02X,", entry->bytes[i]); + } } pos++; // skip over closing '"' } pos++; // skip over closing ')' - fputs("0xFF", fout); + // use terminator \0 from charmap if provided, otherwise default 0xFF + terminator = hashtable_query(charmap, &terminatorInput); + if (terminator == NULL) + fputs("0xFF", fout); + else + { + for (i = 0; i < (cnOneByte ? 1 : terminator->bytesCount); i++) + fprintf(fout, "0x%02X,", terminator->bytes[i]); + } return pos; } @@ -451,6 +486,7 @@ static void convert_file(const char *infilename, const char *outfilename) else if ((*pos == '_') && (pos == in || !is_identifier_char(pos[-1]))) { int uncompressed = 0; + int cnOneByte = 0; end = pos; pos++; if (*pos == '_') // an extra _ signifies uncompressed strings. Enable uncompressed flag @@ -458,11 +494,16 @@ static void convert_file(const char *infilename, const char *outfilename) pos++; uncompressed = 1; } + if (*pos == '%') // an extra % signifies a one-byte long characters on iQue instead of two-byte + { + pos++; + cnOneByte = 1; + } if (*pos == '(') { pos++; fwrite(start, end - start, 1, fout); - pos = convert_string(pos, fout, infilename, in, uncompressed); + pos = convert_string(pos, fout, infilename, in, uncompressed, cnOneByte); start = pos; } } diff --git a/undefined_syms.txt b/undefined_syms.txt index 057abcec..938137ac 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -1,7 +1,6 @@ /* libultra OS symbols */ /* boot and osException symbols */ -/* most of these should be in hardware.h */ /* exceptions */ @@ -16,6 +15,9 @@ SP_IMEM = 0xA4001000; SP_STATUS_REG = 0xA4040010; SP_PC = 0xA4080000; +D_CN_0400049C = 0x0400049C; +D_CN_0400074C = 0x0400074C; + /* MI */ MI_MODE_REG = 0xA4300000; @@ -52,10 +54,21 @@ RI_REFRESH_REG = 0xA4700010; SI_STATUS_REG = 0xA4800018; /* Unknown */ - D_B0000008 = 0xB0000008; D_B0000010 = 0xB0000010; D_B0000014 = 0xB0000014; D_C0000000 = 0xC0000000; D_C0000008 = 0xC0000008; D_C000000C = 0xC000000C; + +/* iQue symbols */ +__osBbEepromAddress = 0x8000035C; +__osBbEepromSize = 0x80000360; +__osBbFlashAddress = 0x80000364; +__osBbFlashSize = 0x80000368; +__osBbSramAddress = 0x8000036C; +__osBbSramSize = 0x80000370; +__osBbPakAddress = 0x80000374; +__osBbPakSize = 0x80000384; +__osBbIsBb = 0x80000388; +__osBbHackFlags = 0x8000038C;

    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ȄuqG){hoPfqWNOm{R#} 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%0AP*KC-~aSCL) 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

    ;LB>=M|8eiIDMNkeUmU3=I0g*Z+g=R)NP0D7{RD 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 literal 0 HcmV?d00001 diff --git a/tools/ique_egcs/cpp b/tools/ique_egcs/cpp new file mode 100755 index 0000000000000000000000000000000000000000..18d304c6466f148b5dae170a7595d9d7b9ed70de GIT binary patch literal 1015916 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